393 files
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
"templates_from": "Ze šablony",
|
||||
"templates_title": "Začít ze šablony",
|
||||
"templates_task_count": "{n} úkolů",
|
||||
"templates_task_count_one": "1 úkol",
|
||||
"template_created": "Vytvořeno ze šablony",
|
||||
"onboard_hint": "Přidejte první objekt a začněte sledovat údržbu.",
|
||||
"edit": "Upravit",
|
||||
@@ -44,6 +45,7 @@
|
||||
"bulk_delete_objects_confirm": "Smazat {n} objektů včetně všech jejich úkolů? Archivace místo toho zachová historii.",
|
||||
"bulk_objects_deleted": "Smazáno objektů: {n}",
|
||||
"bulk_objects_archived": "Archivováno objektů: {n}",
|
||||
"bulk_failed": "Nezdařilo se: {n} — {reason}",
|
||||
"completing": "Dokončování…",
|
||||
"interval": "Interval",
|
||||
"warning": "Upozornění",
|
||||
@@ -198,8 +200,6 @@
|
||||
"show_all": "Zobrazit vše",
|
||||
"cost_duration_chart": "Náklady a doba trvání",
|
||||
"installed": "Nainstalováno",
|
||||
"confirm_delete_object": "Smazat tento objekt a všechny jeho úkoly?",
|
||||
"confirm_delete_task": "Smazat tento úkol?",
|
||||
"min": "Min",
|
||||
"max": "Max",
|
||||
"save": "Uložit",
|
||||
@@ -241,7 +241,6 @@
|
||||
"sort_task_name": "Název úkolu",
|
||||
"all_objects": "Všechny objekty",
|
||||
"all_parts": "Všechny díly",
|
||||
"tasks_lower": "úkolů",
|
||||
"no_tasks_yet": "Zatím žádné úkoly",
|
||||
"add_first_task": "Přidat první úkol",
|
||||
"trigger_configuration": "Konfigurace spouštěče",
|
||||
@@ -298,6 +297,7 @@
|
||||
"tab_calendar": "Kalendář",
|
||||
"cal_no_events": "Bez údržby",
|
||||
"cal_every_n_days": "každých {n} dní",
|
||||
"cal_every_day": "každý den",
|
||||
"cal_source_time": "Čas",
|
||||
"cal_source_time_adaptive": "Čas (adaptivní)",
|
||||
"cal_source_sensor": "Senzor",
|
||||
@@ -713,7 +713,6 @@
|
||||
"budget_open_panel": "Otevřít v panelu",
|
||||
"groups_empty": "Zatím žádné skupiny.",
|
||||
"group_new_placeholder": "Přidat skupinu…",
|
||||
"group_delete_confirm": "Smazat skupinu „{name}\"?",
|
||||
"groups_manage_tasks": "Spravovat přiřazení úkolů…",
|
||||
"groups_open_panel": "Otevřít v panelu",
|
||||
"on_complete_action_target_hint": "Poznámka: doména entity musí odpovídat službě — např. 'button.press' funguje jen na button.*, 'counter.increment' jen na counter.*, 'input_button.press' jen na input_button.* atd. Při neshodě akce tiše selže (HA zaznamená 'Referenced entities ... missing or not currently available').",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "Smazat „{name}“?",
|
||||
"doc_too_large": "Soubor je příliš velký (max. 25 MB).",
|
||||
"doc_upload_failed": "Nahrání selhalo.",
|
||||
"docs_archive_too_large": "Archiv je příliš velký (max. {max}).",
|
||||
"completion_photos_optional": "Fotky z dokončení (volitelné)",
|
||||
"completion_photos": "Fotky z dokončení",
|
||||
"choose_photos": "Vybrat fotky",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "Vyfotit",
|
||||
"camera_capture_shoot": "Vyfotit",
|
||||
"camera_switch_lens": "Přepnout kameru",
|
||||
"camera_switch_failed": "Žádná jiná kamera neodpověděla – tento telefon uvolňuje jen jednu. Pro druhý objektiv použijte výběr souboru.",
|
||||
"camera_switching": "Přepínám kameru…",
|
||||
"camera_not_answered": "Tato kamera neodpověděla. Klepnutím na přepnutí zkuste další, nebo použijte výběr souboru.",
|
||||
"camera_diagnostics": "Podrobnosti pro hlášení chyby",
|
||||
"camera_copy": "Kopírovat",
|
||||
"camera_copied": "Zkopírováno",
|
||||
"doc_drop_hint": "Přetáhněte soubory sem",
|
||||
"doc_task_none": "Žádné dokumenty spojené s tímto úkolem.",
|
||||
"doc_link_existing": "Připojit dokument…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "Nižší než poslední odečet ({value})",
|
||||
"settings_templates_label": "Galerie šablon",
|
||||
"settings_templates_hint": "Odškrtněte šablony, které nikdy nevyužijete — zmizí z výběru „Ze šablony\" (panel i config flow). Nic jiného se nemění; kdykoli je lze znovu zapnout.",
|
||||
"home_profile_title": "Profil bydlení",
|
||||
"home_profile_hint": "Doporučuje šablony a nastavuje sezónní okna podle vašeho klimatu a polokoule. Vše se určuje lokálně z vašich podlaží, oblastí a polohy domova.",
|
||||
"home_type_label": "Typ bydlení",
|
||||
"home_type_auto": "Automaticky ({detected})",
|
||||
"home_region_label": "Stát, provincie nebo region",
|
||||
"home_region_none": "nenalezeno",
|
||||
"home_region_hint": "Některá pravidla se v rámci země liší – v jednom státě každoroční technická kontrola vozidel, v sousedním žádná. Určeno z polohy domova.",
|
||||
"home_dwelling_house": "Dům",
|
||||
"home_dwelling_apartment": "Byt",
|
||||
"home_dwelling_unknown": "nerozpoznáno",
|
||||
"home_detected_from": "Rozpoznáno podle: {reasons}",
|
||||
"home_reason_floors": "více podlaží",
|
||||
"home_reason_basement": "sklep",
|
||||
"home_reason_garden": "zahrada",
|
||||
"home_reason_shed": "kůlna",
|
||||
"home_reason_driveway": "příjezdová cesta",
|
||||
"home_reason_garage": "garáž",
|
||||
"home_reason_attic": "půda",
|
||||
"home_reason_lawn_mower": "sekačka",
|
||||
"home_reason_gate": "brána",
|
||||
"home_reason_balcony": "balkon",
|
||||
"home_reason_small_home": "málo místností v jednom podlaží",
|
||||
"home_reason_ups": "záložní zdroj",
|
||||
"home_climate_label": "Klima",
|
||||
"home_climate_value": "Köppen {koppen} · nejchladnější měsíc {cold} °C · nejteplejší měsíc {warm} °C",
|
||||
"home_climate_unknown": "V Home Assistant není nastavena poloha domova",
|
||||
"home_hemisphere_south": "Jižní polokoule — sezónní okna jsou obrácena",
|
||||
"home_trait_freeze": "Mráz v zimě",
|
||||
"home_trait_snow": "Zasněžené zimy",
|
||||
"home_trait_severe_winter": "Tuhé zimy",
|
||||
"home_trait_damp": "Vlhké klima",
|
||||
"home_trait_mediterranean": "Středomořské klima",
|
||||
"home_trait_earthquake": "Seismická oblast",
|
||||
"home_trait_hot_summer": "Horká léta",
|
||||
"home_trait_hot_humid": "Horko a vlhko",
|
||||
"home_trait_hot_dry": "Horko a sucho",
|
||||
"home_trait_termites": "Oblast s termity",
|
||||
"home_trait_wildfire": "Riziko lesních požárů",
|
||||
"home_trait_cyclone": "Oblast hurikánů / tajfunů",
|
||||
"home_trait_tropical": "Tropické klima",
|
||||
"home_trait_radon": "Doporučeno měření radonu",
|
||||
"home_reason_starter": "Základ pro váš domov",
|
||||
"home_reason_country": "Běžné v zemi: {country}",
|
||||
"home_reason_feature": "Nalezeno ve vašem domově: {feature}",
|
||||
"templates_recommended_title": "Doporučeno pro váš domov",
|
||||
"templates_recommended_hint": "Podle profilu bydlení — upravíte v Nastavení.",
|
||||
"templates_legal_hint": "Poznámky k zákonným povinnostem a lhůtám slouží pro orientaci a nejsou právním poradenstvím. Pravidla se liší podle regionu a mění se — rozhodující jsou místní předpisy a pokyny výrobce.",
|
||||
"templates_not_typical": "Pro váš typ bydlení netypické",
|
||||
"templates_set_up": "Již nastaveno",
|
||||
"worksheet": "Pracovní list",
|
||||
"worksheet_scan_view": "Naskenujte pro otevření úkolu",
|
||||
"worksheet_scan_complete": "Naskenujte pro dokončení",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(nový)",
|
||||
"adopt_object_hint": "Dejte několika senzorům stejný název objektu a stanou se jedním objektem; zadejte název existujícího objektu a přidají se tam.",
|
||||
"adopt_summary_title": "Co převzetí změní",
|
||||
"adopt_summary_existing": "„{name}“: úkoly {before} → {after}",
|
||||
"adopt_problem_adopt": "Převzít vybrané",
|
||||
"adopt_problem_done": "Převzato {tasks} senzorů problémů",
|
||||
"views_label": "Zobrazení",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Vzdaluje se od prahu",
|
||||
"split_select_hint": "Vyberte úkol a zde se zobrazí podrobnosti",
|
||||
"setups_target_new": "Vytvořit nový: {name}",
|
||||
"setups_target_match": "{name} — shoda: {reasons}",
|
||||
"setups_reason_model": "číslo modelu",
|
||||
"setups_reason_name": "název",
|
||||
"setups_reason_area": "oblast",
|
||||
"setups_reason_sibling": "stejný model na jiném zařízení",
|
||||
"setups_maybe_covered": "Pravděpodobně už existuje jako „{name}“",
|
||||
"setups_already": "Už existuje: {names}",
|
||||
"setups_before_after": "Úkoly u objektu: {before} → {after}",
|
||||
"setups_new_object_count": "Nový objekt „{name}“ · úkoly: {count}",
|
||||
"schedule_preview_title": "Nejbližší termíny",
|
||||
"schedule_preview_ontime": "Za předpokladu včasného dokončení.",
|
||||
"schedule_preview_ends": "(série končí)",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"templates_from": "Fra skabelon",
|
||||
"templates_title": "Start fra en skabelon",
|
||||
"templates_task_count": "{n} opgaver",
|
||||
"templates_task_count_one": "1 opgave",
|
||||
"template_created": "Oprettet fra skabelon",
|
||||
"onboard_hint": "Tilføj dit første objekt for at spore vedligeholdelse.",
|
||||
"edit": "Rediger",
|
||||
@@ -46,6 +47,7 @@
|
||||
"bulk_delete_objects_confirm": "Slet {n} objekter og alle deres opgaver? Arkivering bevarer i stedet historikken.",
|
||||
"bulk_objects_deleted": "{n} objekter slettet",
|
||||
"bulk_objects_archived": "{n} objekter arkiveret",
|
||||
"bulk_failed": "{n} mislykkedes: {reason}",
|
||||
"completing": "Fuldfører…",
|
||||
"interval": "Interval",
|
||||
"warning": "Advarsel",
|
||||
@@ -200,8 +202,6 @@
|
||||
"show_all": "Vis alle",
|
||||
"cost_duration_chart": "Omkostning og varighed",
|
||||
"installed": "Installeret",
|
||||
"confirm_delete_object": "Slet dette objekt og alle dets opgaver?",
|
||||
"confirm_delete_task": "Slet denne opgave?",
|
||||
"min": "Min",
|
||||
"max": "Maks",
|
||||
"save": "Gem",
|
||||
@@ -243,7 +243,6 @@
|
||||
"sort_task_name": "Opgavenavn",
|
||||
"all_objects": "Alle objekter",
|
||||
"all_parts": "Alle dele",
|
||||
"tasks_lower": "opgaver",
|
||||
"no_tasks_yet": "Ingen opgaver endnu",
|
||||
"add_first_task": "Tilføj første opgave",
|
||||
"trigger_configuration": "Udløserkonfiguration",
|
||||
@@ -300,6 +299,7 @@
|
||||
"tab_calendar": "Kalender",
|
||||
"cal_no_events": "Ingen vedligeholdelse",
|
||||
"cal_every_n_days": "hver {n}. dag",
|
||||
"cal_every_day": "hver dag",
|
||||
"cal_source_time": "Tidsbaseret",
|
||||
"cal_source_time_adaptive": "Tidsbaseret (adaptiv)",
|
||||
"cal_source_sensor": "Sensorbaseret",
|
||||
@@ -685,7 +685,6 @@
|
||||
"budget_open_panel": "Åbn i panel",
|
||||
"groups_empty": "Ingen grupper endnu.",
|
||||
"group_new_placeholder": "Tilføj gruppe…",
|
||||
"group_delete_confirm": "Slet gruppen \"{name}\"?",
|
||||
"groups_manage_tasks": "Administrer opgavetildelinger…",
|
||||
"groups_open_panel": "Åbn i panel",
|
||||
"unassigned": "Ikke tildelt",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "Slet \"{name}\"?",
|
||||
"doc_too_large": "Filen er for stor (maks. 25 MB).",
|
||||
"doc_upload_failed": "Upload mislykkedes.",
|
||||
"docs_archive_too_large": "Arkivet er for stort (maks. {max}).",
|
||||
"completion_photos_optional": "Fotos ved fuldførelse (valgfrit)",
|
||||
"completion_photos": "Fotos ved fuldførelse",
|
||||
"choose_photos": "Vælg fotos",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "Tag billede",
|
||||
"camera_capture_shoot": "Tag billede",
|
||||
"camera_switch_lens": "Skift kamera",
|
||||
"camera_switch_failed": "Intet andet kamera svarede — denne telefon frigiver kun ét. Brug filvælgeren til det andet objektiv.",
|
||||
"camera_switching": "Skifter kamera…",
|
||||
"camera_not_answered": "Dette kamera svarede ikke. Tryk på skift igen for at prøve det næste, eller brug filvælgeren.",
|
||||
"camera_diagnostics": "Detaljer til en fejlrapport",
|
||||
"camera_copy": "Kopiér",
|
||||
"camera_copied": "Kopieret",
|
||||
"doc_drop_hint": "Slip filer her",
|
||||
"doc_task_none": "Ingen dokumenter knyttet til denne opgave.",
|
||||
"doc_link_existing": "Knyt et dokument…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "Lavere end sidste aflæsning ({value})",
|
||||
"settings_templates_label": "Skabelongalleri",
|
||||
"settings_templates_hint": "Fravælg skabeloner, du aldrig får brug for — de forsvinder fra \"Fra skabelon\"-vælgerne (panel og config flow). Intet andet ændres; kan genaktiveres når som helst.",
|
||||
"home_profile_title": "Boligprofil",
|
||||
"home_profile_hint": "Anbefaler skabeloner og indstiller sæsonvinduer efter dit klima og din halvkugle. Alt udregnes lokalt ud fra dine etager, områder og boligens placering.",
|
||||
"home_type_label": "Boligtype",
|
||||
"home_type_auto": "Automatisk ({detected})",
|
||||
"home_region_label": "Delstat, provins eller region",
|
||||
"home_region_none": "ikke fundet",
|
||||
"home_region_hint": "Nogle regler varierer inden for et land – årligt køretøjssyn i én delstat, intet i den næste. Fundet ud fra hjemmets placering.",
|
||||
"home_dwelling_house": "Hus",
|
||||
"home_dwelling_apartment": "Lejlighed",
|
||||
"home_dwelling_unknown": "ikke genkendt",
|
||||
"home_detected_from": "Genkendt ud fra: {reasons}",
|
||||
"home_reason_floors": "flere etager",
|
||||
"home_reason_basement": "en kælder",
|
||||
"home_reason_garden": "en have",
|
||||
"home_reason_shed": "et skur",
|
||||
"home_reason_driveway": "en indkørsel",
|
||||
"home_reason_garage": "en garage",
|
||||
"home_reason_attic": "et loft",
|
||||
"home_reason_lawn_mower": "en plæneklipper",
|
||||
"home_reason_gate": "en låge",
|
||||
"home_reason_balcony": "en altan",
|
||||
"home_reason_small_home": "få rum på én etage",
|
||||
"home_reason_ups": "en UPS-enhed",
|
||||
"home_climate_label": "Klima",
|
||||
"home_climate_value": "Köppen {koppen} · koldeste måned {cold} °C · varmeste måned {warm} °C",
|
||||
"home_climate_unknown": "Ingen hjemmeplacering angivet i Home Assistant",
|
||||
"home_hemisphere_south": "Den sydlige halvkugle — sæsonvinduer spejlvendes",
|
||||
"home_trait_freeze": "Frost om vinteren",
|
||||
"home_trait_snow": "Snerige vintre",
|
||||
"home_trait_severe_winter": "Strenge vintre",
|
||||
"home_trait_damp": "Fugtigt klima",
|
||||
"home_trait_mediterranean": "Middelhavsklima",
|
||||
"home_trait_earthquake": "Jordskælvsområde",
|
||||
"home_trait_hot_summer": "Varme somre",
|
||||
"home_trait_hot_humid": "Varmt og fugtigt",
|
||||
"home_trait_hot_dry": "Varmt og tørt",
|
||||
"home_trait_termites": "Termitområde",
|
||||
"home_trait_wildfire": "Risiko for naturbrande",
|
||||
"home_trait_cyclone": "Orkan-/tyfonområde",
|
||||
"home_trait_tropical": "Tropisk klima",
|
||||
"home_trait_radon": "Radonmåling anbefales",
|
||||
"home_reason_starter": "Det basale til dit hjem",
|
||||
"home_reason_country": "Almindeligt i {country}",
|
||||
"home_reason_feature": "Fundet i dit hjem: {feature}",
|
||||
"templates_recommended_title": "Anbefalet til dit hjem",
|
||||
"templates_recommended_hint": "Baseret på din boligprofil — kan ændres under Indstillinger.",
|
||||
"templates_legal_hint": "Bemærkninger om lovkrav og intervaller er vejledende og ikke juridisk rådgivning. Reglerne varierer fra region til region og ændrer sig — lokale forskrifter og producentens anvisninger har forrang.",
|
||||
"templates_not_typical": "Usædvanligt for din boligtype",
|
||||
"templates_set_up": "Allerede oprettet",
|
||||
"worksheet": "Arbejdsark",
|
||||
"worksheet_scan_view": "Scan for at åbne opgaven",
|
||||
"worksheet_scan_complete": "Scan for at fuldføre",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(ny)",
|
||||
"adopt_object_hint": "Giv flere sensorer samme objektnavn, så bliver de ét objekt; skriv et eksisterende objekts navn for at tilføje dem der.",
|
||||
"adopt_summary_title": "Hvad overtagelsen ændrer",
|
||||
"adopt_summary_existing": "\"{name}\": opgaver {before} → {after}",
|
||||
"adopt_problem_adopt": "Adopter valgte",
|
||||
"adopt_problem_done": "Adopterede {tasks} problemsensor(er)",
|
||||
"views_label": "Visninger",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Bevæger sig væk fra tærsklen",
|
||||
"split_select_hint": "Vælg en opgave for at se detaljerne her",
|
||||
"setups_target_new": "Opret ny: {name}",
|
||||
"setups_target_match": "{name} — passer: {reasons}",
|
||||
"setups_reason_model": "modelnummer",
|
||||
"setups_reason_name": "navn",
|
||||
"setups_reason_area": "område",
|
||||
"setups_reason_sibling": "samme model på en anden enhed",
|
||||
"setups_maybe_covered": "Findes sandsynligvis allerede som \"{name}\"",
|
||||
"setups_already": "Findes allerede: {names}",
|
||||
"setups_before_after": "Opgaver på objektet: {before} → {after}",
|
||||
"setups_new_object_count": "Nyt objekt \"{name}\" · opgaver: {count}",
|
||||
"schedule_preview_title": "Kommende datoer",
|
||||
"schedule_preview_ontime": "Forudsat rettidig fuldførelse.",
|
||||
"schedule_preview_ends": "(serien slutter)",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"templates_from": "Aus Vorlage",
|
||||
"templates_title": "Mit einer Vorlage starten",
|
||||
"templates_task_count": "{n} Aufgaben",
|
||||
"templates_task_count_one": "1 Aufgabe",
|
||||
"template_created": "Aus Vorlage erstellt",
|
||||
"onboard_hint": "Füge dein erstes Objekt hinzu, um mit der Wartung zu starten.",
|
||||
"edit": "Bearbeiten",
|
||||
@@ -46,6 +47,7 @@
|
||||
"bulk_delete_objects_confirm": "{n} Objekte mit allen ihren Aufgaben löschen? Archivieren behält stattdessen die Historie.",
|
||||
"bulk_objects_deleted": "{n} Objekte gelöscht",
|
||||
"bulk_objects_archived": "{n} Objekte archiviert",
|
||||
"bulk_failed": "{n} fehlgeschlagen: {reason}",
|
||||
"completing": "Wird erledigt…",
|
||||
"interval": "Intervall",
|
||||
"warning": "Vorwarnung",
|
||||
@@ -200,8 +202,6 @@
|
||||
"show_all": "Alle anzeigen",
|
||||
"cost_duration_chart": "Kosten & Dauer",
|
||||
"installed": "Installiert",
|
||||
"confirm_delete_object": "Dieses Objekt und alle zugehörigen Aufgaben löschen?",
|
||||
"confirm_delete_task": "Diese Aufgabe wirklich löschen?",
|
||||
"min": "Min",
|
||||
"max": "Max",
|
||||
"save": "Speichern",
|
||||
@@ -243,7 +243,6 @@
|
||||
"sort_task_name": "Aufgaben-Name",
|
||||
"all_objects": "Alle Objekte",
|
||||
"all_parts": "Alle Teile",
|
||||
"tasks_lower": "Aufgaben",
|
||||
"no_tasks_yet": "Noch keine Aufgaben",
|
||||
"add_first_task": "Erste Aufgabe hinzufügen",
|
||||
"trigger_configuration": "Trigger-Konfiguration",
|
||||
@@ -300,6 +299,7 @@
|
||||
"tab_calendar": "Kalender",
|
||||
"cal_no_events": "Keine Wartung",
|
||||
"cal_every_n_days": "alle {n} Tage",
|
||||
"cal_every_day": "täglich",
|
||||
"cal_source_time": "Zeit-basiert",
|
||||
"cal_source_time_adaptive": "Zeit-basiert (adaptiv)",
|
||||
"cal_source_sensor": "Sensor-basiert",
|
||||
@@ -685,7 +685,6 @@
|
||||
"budget_open_panel": "Im Panel öffnen",
|
||||
"groups_empty": "Keine Gruppen vorhanden.",
|
||||
"group_new_placeholder": "Gruppe hinzufügen…",
|
||||
"group_delete_confirm": "Gruppe \"{name}\" löschen?",
|
||||
"groups_manage_tasks": "Aufgaben-Zuordnungen verwalten…",
|
||||
"groups_open_panel": "Im Panel öffnen",
|
||||
"unassigned": "Nicht zugewiesen",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "„{name}“ löschen?",
|
||||
"doc_too_large": "Datei ist zu groß (max. 25 MB).",
|
||||
"doc_upload_failed": "Upload fehlgeschlagen.",
|
||||
"docs_archive_too_large": "Das Archiv ist zu groß (max. {max}).",
|
||||
"completion_photos_optional": "Abschlussfotos (optional)",
|
||||
"completion_photos": "Abschlussfotos",
|
||||
"choose_photos": "Fotos auswählen",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "Foto aufnehmen",
|
||||
"camera_capture_shoot": "Aufnehmen",
|
||||
"camera_switch_lens": "Kamera wechseln",
|
||||
"camera_switch_failed": "Keine andere Kamera hat geantwortet – dieses Telefon gibt nur eine frei. Für das andere Objektiv die Dateiauswahl nutzen.",
|
||||
"camera_switching": "Kamera wird gewechselt …",
|
||||
"camera_not_answered": "Diese Kamera hat nicht geantwortet. Erneut auf Wechseln tippen, um die nächste zu versuchen, oder die Dateiauswahl nutzen.",
|
||||
"camera_diagnostics": "Details für einen Fehlerbericht",
|
||||
"camera_copy": "Kopieren",
|
||||
"camera_copied": "Kopiert",
|
||||
"doc_drop_hint": "Dateien hier ablegen",
|
||||
"doc_task_none": "Keine Dokumente mit dieser Aufgabe verknüpft.",
|
||||
"doc_link_existing": "Dokument verknüpfen…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "Kleiner als der letzte Wert ({value})",
|
||||
"settings_templates_label": "Vorlagen-Galerie",
|
||||
"settings_templates_hint": "Vorlagen abwählen, die du nie brauchst — sie verschwinden aus den \"Aus Vorlage\"-Auswahlen (Panel und Config-Flow). Sonst ändert sich nichts; jederzeit wieder aktivierbar.",
|
||||
"home_profile_title": "Wohnprofil",
|
||||
"home_profile_hint": "Empfiehlt Vorlagen und setzt Saisonfenster passend zu Klima und Hemisphäre. Alles wird lokal aus deinen Etagen, Bereichen und dem Standort ermittelt.",
|
||||
"home_type_label": "Wohnform",
|
||||
"home_type_auto": "Automatisch ({detected})",
|
||||
"home_region_label": "Bundesland, Provinz oder Region",
|
||||
"home_region_none": "nicht gefunden",
|
||||
"home_region_hint": "Manche Regeln unterscheiden sich innerhalb eines Landes – jährliche Fahrzeugprüfung im einen Bundesstaat, keine im nächsten. Aus dem Standort deines Zuhauses ermittelt.",
|
||||
"home_dwelling_house": "Haus",
|
||||
"home_dwelling_apartment": "Wohnung",
|
||||
"home_dwelling_unknown": "nicht erkannt",
|
||||
"home_detected_from": "Erkannt an: {reasons}",
|
||||
"home_reason_floors": "mehrere Etagen",
|
||||
"home_reason_basement": "ein Keller",
|
||||
"home_reason_garden": "ein Garten",
|
||||
"home_reason_shed": "ein Schuppen",
|
||||
"home_reason_driveway": "eine Einfahrt",
|
||||
"home_reason_garage": "eine Garage",
|
||||
"home_reason_attic": "ein Dachboden",
|
||||
"home_reason_lawn_mower": "ein Rasenmäher",
|
||||
"home_reason_gate": "ein Tor",
|
||||
"home_reason_balcony": "ein Balkon",
|
||||
"home_reason_small_home": "wenige Räume auf einer Etage",
|
||||
"home_reason_ups": "eine USV",
|
||||
"home_climate_label": "Klima",
|
||||
"home_climate_value": "Köppen {koppen} · kältester Monat {cold} °C · wärmster Monat {warm} °C",
|
||||
"home_climate_unknown": "Kein Standort in Home Assistant hinterlegt",
|
||||
"home_hemisphere_south": "Südhalbkugel — Saisonfenster werden gespiegelt",
|
||||
"home_trait_freeze": "Frost im Winter",
|
||||
"home_trait_snow": "Schneereiche Winter",
|
||||
"home_trait_severe_winter": "Strenge Winter",
|
||||
"home_trait_damp": "Feuchtes Klima",
|
||||
"home_trait_mediterranean": "Mittelmeerklima",
|
||||
"home_trait_earthquake": "Erdbebengebiet",
|
||||
"home_trait_hot_summer": "Heiße Sommer",
|
||||
"home_trait_hot_humid": "Heiß und feucht",
|
||||
"home_trait_hot_dry": "Heiß und trocken",
|
||||
"home_trait_termites": "Termitengebiet",
|
||||
"home_trait_wildfire": "Waldbrandgefahr",
|
||||
"home_trait_cyclone": "Hurrikan-/Taifungebiet",
|
||||
"home_trait_tropical": "Tropisches Klima",
|
||||
"home_trait_radon": "Radontest empfohlen",
|
||||
"home_reason_starter": "Grundausstattung für dein Zuhause",
|
||||
"home_reason_country": "Üblich in {country}",
|
||||
"home_reason_feature": "In deinem Zuhause gefunden: {feature}",
|
||||
"templates_recommended_title": "Empfohlen für dein Zuhause",
|
||||
"templates_recommended_hint": "Auf Basis deines Wohnprofils — anpassbar in den Einstellungen.",
|
||||
"templates_legal_hint": "Hinweise zu Pflichten und Fristen sind Orientierung, keine Rechtsberatung. Regeln unterscheiden sich je nach Region und ändern sich — maßgeblich sind die örtlichen Vorschriften und die Angaben des Herstellers.",
|
||||
"templates_not_typical": "Für deine Wohnform eher untypisch",
|
||||
"templates_set_up": "Bereits eingerichtet",
|
||||
"worksheet": "Arbeitsblatt",
|
||||
"worksheet_scan_view": "Scannen, um die Aufgabe zu öffnen",
|
||||
"worksheet_scan_complete": "Scannen zum Erledigen",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(neu)",
|
||||
"adopt_object_hint": "Gib mehreren Sensoren denselben Objektnamen, dann werden sie ein Objekt; der Name eines vorhandenen Objekts ordnet sie dort zu.",
|
||||
"adopt_summary_title": "Was die Übernahme ändert",
|
||||
"adopt_summary_existing": "„{name}“: Aufgaben {before} → {after}",
|
||||
"adopt_problem_adopt": "Auswahl übernehmen",
|
||||
"adopt_problem_done": "{tasks} Problem-Sensor(en) übernommen",
|
||||
"views_label": "Ansichten",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Entfernt sich von der Schwelle",
|
||||
"split_select_hint": "Wähle eine Aufgabe, um hier die Details zu sehen",
|
||||
"setups_target_new": "Neu anlegen: {name}",
|
||||
"setups_target_match": "{name} — passt: {reasons}",
|
||||
"setups_reason_model": "Modellnummer",
|
||||
"setups_reason_name": "Name",
|
||||
"setups_reason_area": "Bereich",
|
||||
"setups_reason_sibling": "gleiches Modell an einem anderen Gerät",
|
||||
"setups_maybe_covered": "Wahrscheinlich schon vorhanden als „{name}“",
|
||||
"setups_already": "Schon vorhanden: {names}",
|
||||
"setups_before_after": "Aufgaben am Objekt: {before} → {after}",
|
||||
"setups_new_object_count": "Neues Objekt „{name}“ · Aufgaben: {count}",
|
||||
"schedule_preview_title": "Nächste Termine",
|
||||
"schedule_preview_ontime": "Bei pünktlichem Abschluss.",
|
||||
"schedule_preview_ends": "(Serie endet)",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"templates_from": "From template",
|
||||
"templates_title": "Start from a template",
|
||||
"templates_task_count": "{n} tasks",
|
||||
"templates_task_count_one": "1 task",
|
||||
"template_created": "Created from template",
|
||||
"onboard_hint": "Add your first object to start tracking maintenance.",
|
||||
"edit": "Edit",
|
||||
@@ -46,6 +47,7 @@
|
||||
"bulk_delete_objects_confirm": "Delete {n} objects and all their tasks? Archiving keeps their history instead.",
|
||||
"bulk_objects_deleted": "{n} objects deleted",
|
||||
"bulk_objects_archived": "{n} objects archived",
|
||||
"bulk_failed": "{n} failed: {reason}",
|
||||
"completing": "Completing…",
|
||||
"interval": "Interval",
|
||||
"warning": "Warning",
|
||||
@@ -200,8 +202,6 @@
|
||||
"show_all": "Show all",
|
||||
"cost_duration_chart": "Cost & Duration",
|
||||
"installed": "Installed",
|
||||
"confirm_delete_object": "Delete this object and all its tasks?",
|
||||
"confirm_delete_task": "Delete this task?",
|
||||
"min": "Min",
|
||||
"max": "Max",
|
||||
"save": "Save",
|
||||
@@ -243,7 +243,6 @@
|
||||
"sort_task_name": "Task name",
|
||||
"all_objects": "All objects",
|
||||
"all_parts": "All parts",
|
||||
"tasks_lower": "tasks",
|
||||
"no_tasks_yet": "No tasks yet",
|
||||
"add_first_task": "Add first task",
|
||||
"trigger_configuration": "Trigger Configuration",
|
||||
@@ -300,6 +299,7 @@
|
||||
"tab_calendar": "Calendar",
|
||||
"cal_no_events": "No maintenance",
|
||||
"cal_every_n_days": "every {n} days",
|
||||
"cal_every_day": "every day",
|
||||
"cal_source_time": "Time-based",
|
||||
"cal_source_time_adaptive": "Time-based (adaptive)",
|
||||
"cal_source_sensor": "Sensor-based",
|
||||
@@ -691,7 +691,6 @@
|
||||
"budget_open_panel": "Open in panel",
|
||||
"groups_empty": "No groups yet.",
|
||||
"group_new_placeholder": "Add group…",
|
||||
"group_delete_confirm": "Delete group \"{name}\"?",
|
||||
"groups_manage_tasks": "Manage task assignments…",
|
||||
"groups_open_panel": "Open in panel",
|
||||
"unassigned": "Unassigned",
|
||||
@@ -770,6 +769,7 @@
|
||||
"doc_delete_confirm": "Delete \"{name}\"?",
|
||||
"doc_too_large": "File is too large (max 25 MB).",
|
||||
"doc_upload_failed": "Upload failed.",
|
||||
"docs_archive_too_large": "The archive is too large (max {max}).",
|
||||
"completion_photos_optional": "Completion photos (optional)",
|
||||
"completion_photos": "Completion photos",
|
||||
"choose_photos": "Choose photos",
|
||||
@@ -797,7 +797,11 @@
|
||||
"doc_camera": "Take photo",
|
||||
"camera_capture_shoot": "Capture",
|
||||
"camera_switch_lens": "Switch camera",
|
||||
"camera_switch_failed": "No other camera answered — this phone hands out only one. Use the file picker for the other lens.",
|
||||
"camera_switching": "Switching camera…",
|
||||
"camera_not_answered": "This camera did not answer. Tap the switch again to try the next one, or use the file picker.",
|
||||
"camera_diagnostics": "Details for a bug report",
|
||||
"camera_copy": "Copy",
|
||||
"camera_copied": "Copied",
|
||||
"doc_drop_hint": "Drop files here",
|
||||
"doc_task_none": "No documents linked to this task.",
|
||||
"doc_link_existing": "Link a document…",
|
||||
@@ -850,6 +854,55 @@
|
||||
"reading_below_last": "Lower than the last reading ({value})",
|
||||
"settings_templates_label": "Template gallery",
|
||||
"settings_templates_hint": "Untick templates you'll never need — they disappear from the \"From template\" pickers (panel and config flow). Nothing else changes; you can re-enable them any time.",
|
||||
"home_profile_title": "Home profile",
|
||||
"home_profile_hint": "Recommends templates and sets seasonal windows for your climate and hemisphere. Everything is worked out locally from your floors, areas and home location.",
|
||||
"home_type_label": "Home type",
|
||||
"home_type_auto": "Automatic ({detected})",
|
||||
"home_region_label": "State, province or region",
|
||||
"home_region_none": "not found",
|
||||
"home_region_hint": "Some rules differ within a country — a yearly vehicle inspection in one state, none in the next. Found from your home location.",
|
||||
"home_dwelling_house": "House",
|
||||
"home_dwelling_apartment": "Apartment",
|
||||
"home_dwelling_unknown": "not recognised",
|
||||
"home_detected_from": "Detected from: {reasons}",
|
||||
"home_reason_floors": "several floors",
|
||||
"home_reason_basement": "a basement",
|
||||
"home_reason_garden": "a garden",
|
||||
"home_reason_shed": "a shed",
|
||||
"home_reason_driveway": "a driveway",
|
||||
"home_reason_garage": "a garage",
|
||||
"home_reason_attic": "an attic",
|
||||
"home_reason_lawn_mower": "a lawn mower",
|
||||
"home_reason_gate": "a gate",
|
||||
"home_reason_balcony": "a balcony",
|
||||
"home_reason_small_home": "few rooms on one floor",
|
||||
"home_reason_ups": "a UPS",
|
||||
"home_climate_label": "Climate",
|
||||
"home_climate_value": "Köppen {koppen} · coldest month {cold} °C · warmest month {warm} °C",
|
||||
"home_climate_unknown": "No home location set in Home Assistant",
|
||||
"home_hemisphere_south": "Southern hemisphere — seasonal windows are mirrored",
|
||||
"home_trait_freeze": "Frost in winter",
|
||||
"home_trait_snow": "Snowy winters",
|
||||
"home_trait_severe_winter": "Severe winters",
|
||||
"home_trait_damp": "Damp climate",
|
||||
"home_trait_mediterranean": "Mediterranean climate",
|
||||
"home_trait_earthquake": "Earthquake region",
|
||||
"home_trait_hot_summer": "Hot summers",
|
||||
"home_trait_hot_humid": "Hot and humid",
|
||||
"home_trait_hot_dry": "Hot and dry",
|
||||
"home_trait_termites": "Termite region",
|
||||
"home_trait_wildfire": "Wildfire risk",
|
||||
"home_trait_cyclone": "Hurricane / typhoon region",
|
||||
"home_trait_tropical": "Tropical climate",
|
||||
"home_trait_radon": "Radon test recommended",
|
||||
"home_reason_starter": "Basics for your home",
|
||||
"home_reason_country": "Common in {country}",
|
||||
"home_reason_feature": "Found in your home: {feature}",
|
||||
"templates_recommended_title": "Recommended for your home",
|
||||
"templates_recommended_hint": "Based on your home profile — adjust it in Settings.",
|
||||
"templates_legal_hint": "Notes on legal duties and intervals are guidance, not legal advice. Rules vary by region and change over time — local regulations and the manufacturer's instructions take precedence.",
|
||||
"templates_not_typical": "Not typical for your home type",
|
||||
"templates_set_up": "Already set up",
|
||||
"worksheet": "Work sheet",
|
||||
"worksheet_scan_view": "Scan to open the task",
|
||||
"worksheet_scan_complete": "Scan to complete",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(new)",
|
||||
"adopt_object_hint": "Give several sensors the same object name and they become one object; type an existing object's name to add them there.",
|
||||
"adopt_summary_title": "What adopting changes",
|
||||
"adopt_summary_existing": "\"{name}\": tasks {before} → {after}",
|
||||
"adopt_problem_adopt": "Adopt selected",
|
||||
"adopt_problem_done": "Adopted {tasks} problem sensor(s)",
|
||||
"views_label": "Views",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Easing away from the threshold",
|
||||
"split_select_hint": "Select a task to see its details here",
|
||||
"setups_target_new": "Create new: {name}",
|
||||
"setups_target_match": "{name} — matches: {reasons}",
|
||||
"setups_reason_model": "model number",
|
||||
"setups_reason_name": "name",
|
||||
"setups_reason_area": "area",
|
||||
"setups_reason_sibling": "same model on another device",
|
||||
"setups_maybe_covered": "Probably there already as \"{name}\"",
|
||||
"setups_already": "Already there: {names}",
|
||||
"setups_before_after": "Tasks on the object: {before} → {after}",
|
||||
"setups_new_object_count": "New object \"{name}\" · tasks: {count}",
|
||||
"schedule_preview_title": "Next dates",
|
||||
"schedule_preview_ontime": "Assuming on-time completion.",
|
||||
"schedule_preview_ends": "(series ends)",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"templates_from": "Desde plantilla",
|
||||
"templates_title": "Empezar desde una plantilla",
|
||||
"templates_task_count": "{n} tareas",
|
||||
"templates_task_count_one": "1 tarea",
|
||||
"template_created": "Creado desde plantilla",
|
||||
"onboard_hint": "Añade tu primer objeto para empezar a seguir el mantenimiento.",
|
||||
"edit": "Editar",
|
||||
@@ -44,6 +45,7 @@
|
||||
"bulk_delete_objects_confirm": "¿Eliminar {n} objetos y todas sus tareas? Archivar conserva su historial.",
|
||||
"bulk_objects_deleted": "{n} objetos eliminados",
|
||||
"bulk_objects_archived": "{n} objetos archivados",
|
||||
"bulk_failed": "{n} fallidos: {reason}",
|
||||
"completing": "Completando…",
|
||||
"interval": "Intervalo",
|
||||
"warning": "Aviso",
|
||||
@@ -198,8 +200,6 @@
|
||||
"show_all": "Mostrar todo",
|
||||
"cost_duration_chart": "Costes & Duración",
|
||||
"installed": "Instalado",
|
||||
"confirm_delete_object": "¿Eliminar este objeto y todas sus tareas?",
|
||||
"confirm_delete_task": "¿Eliminar esta tarea?",
|
||||
"min": "Mín",
|
||||
"max": "Máx",
|
||||
"save": "Guardar",
|
||||
@@ -241,7 +241,6 @@
|
||||
"sort_task_name": "Nombre de la tarea",
|
||||
"all_objects": "Todos los objetos",
|
||||
"all_parts": "Todas las piezas",
|
||||
"tasks_lower": "tareas",
|
||||
"no_tasks_yet": "Aún no hay tareas",
|
||||
"add_first_task": "Agregar primera tarea",
|
||||
"trigger_configuration": "Configuración del disparador",
|
||||
@@ -298,6 +297,7 @@
|
||||
"tab_calendar": "Calendario",
|
||||
"cal_no_events": "Sin mantenimiento",
|
||||
"cal_every_n_days": "cada {n} días",
|
||||
"cal_every_day": "cada día",
|
||||
"cal_source_time": "Basado en tiempo",
|
||||
"cal_source_time_adaptive": "Basado en tiempo (adaptativo)",
|
||||
"cal_source_sensor": "Basado en sensor",
|
||||
@@ -713,7 +713,6 @@
|
||||
"budget_open_panel": "Abrir en el panel",
|
||||
"groups_empty": "Aún no hay grupos.",
|
||||
"group_new_placeholder": "Añadir grupo…",
|
||||
"group_delete_confirm": "¿Eliminar el grupo \"{name}\"?",
|
||||
"groups_manage_tasks": "Gestionar asignaciones de tareas…",
|
||||
"groups_open_panel": "Abrir en el panel",
|
||||
"on_complete_action_target_hint": "Nota: el dominio de la entidad debe coincidir con el servicio — p. ej. 'button.press' solo funciona en button.*, 'counter.increment' solo en counter.*, 'input_button.press' solo en input_button.* etc. Si no coinciden, la acción falla silenciosamente (HA registra 'Referenced entities ... missing or not currently available').",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "¿Eliminar «{name}»?",
|
||||
"doc_too_large": "El archivo es demasiado grande (máx. 25 MB).",
|
||||
"doc_upload_failed": "Error al subir.",
|
||||
"docs_archive_too_large": "El archivo comprimido es demasiado grande (máx. {max}).",
|
||||
"completion_photos_optional": "Fotos de finalización (opcional)",
|
||||
"completion_photos": "Fotos de finalización",
|
||||
"choose_photos": "Elegir fotos",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "Tomar foto",
|
||||
"camera_capture_shoot": "Capturar",
|
||||
"camera_switch_lens": "Cambiar de cámara",
|
||||
"camera_switch_failed": "Ninguna otra cámara respondió: este teléfono solo expone una. Usa el selector de archivos para el otro objetivo.",
|
||||
"camera_switching": "Cambiando de cámara…",
|
||||
"camera_not_answered": "Esta cámara no respondió. Toca de nuevo el cambio para probar la siguiente o usa el selector de archivos.",
|
||||
"camera_diagnostics": "Detalles para un informe de error",
|
||||
"camera_copy": "Copiar",
|
||||
"camera_copied": "Copiado",
|
||||
"doc_drop_hint": "Suelta los archivos aquí",
|
||||
"doc_task_none": "Ningún documento vinculado a esta tarea.",
|
||||
"doc_link_existing": "Vincular un documento…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "Menor que la última lectura ({value})",
|
||||
"settings_templates_label": "Galería de plantillas",
|
||||
"settings_templates_hint": "Desmarca las plantillas que nunca necesitarás: desaparecen de los selectores \"Desde plantilla\" (panel y flujo de configuración). Nada más cambia; puedes reactivarlas cuando quieras.",
|
||||
"home_profile_title": "Perfil de la vivienda",
|
||||
"home_profile_hint": "Recomienda plantillas y ajusta las ventanas estacionales a tu clima y hemisferio. Todo se calcula localmente a partir de tus plantas, áreas y la ubicación de tu casa.",
|
||||
"home_type_label": "Tipo de vivienda",
|
||||
"home_type_auto": "Automático ({detected})",
|
||||
"home_region_label": "Estado, provincia o región",
|
||||
"home_region_none": "no encontrada",
|
||||
"home_region_hint": "Algunas normas varían dentro de un país: inspección anual del vehículo en un estado, ninguna en el siguiente. Se determina a partir de la ubicación de tu casa.",
|
||||
"home_dwelling_house": "Casa",
|
||||
"home_dwelling_apartment": "Piso",
|
||||
"home_dwelling_unknown": "no reconocido",
|
||||
"home_detected_from": "Detectado por: {reasons}",
|
||||
"home_reason_floors": "varias plantas",
|
||||
"home_reason_basement": "un sótano",
|
||||
"home_reason_garden": "un jardín",
|
||||
"home_reason_shed": "un cobertizo",
|
||||
"home_reason_driveway": "una entrada de coches",
|
||||
"home_reason_garage": "un garaje",
|
||||
"home_reason_attic": "un desván",
|
||||
"home_reason_lawn_mower": "un cortacésped",
|
||||
"home_reason_gate": "una verja",
|
||||
"home_reason_balcony": "un balcón",
|
||||
"home_reason_small_home": "pocas habitaciones en una sola planta",
|
||||
"home_reason_ups": "un SAI",
|
||||
"home_climate_label": "Clima",
|
||||
"home_climate_value": "Köppen {koppen} · mes más frío {cold} °C · mes más cálido {warm} °C",
|
||||
"home_climate_unknown": "No hay ubicación de casa configurada en Home Assistant",
|
||||
"home_hemisphere_south": "Hemisferio sur: las ventanas estacionales se invierten",
|
||||
"home_trait_freeze": "Heladas en invierno",
|
||||
"home_trait_snow": "Inviernos con nieve",
|
||||
"home_trait_severe_winter": "Inviernos rigurosos",
|
||||
"home_trait_damp": "Clima húmedo",
|
||||
"home_trait_mediterranean": "Clima mediterráneo",
|
||||
"home_trait_earthquake": "Zona sísmica",
|
||||
"home_trait_hot_summer": "Veranos calurosos",
|
||||
"home_trait_hot_humid": "Cálido y húmedo",
|
||||
"home_trait_hot_dry": "Cálido y seco",
|
||||
"home_trait_termites": "Zona de termitas",
|
||||
"home_trait_wildfire": "Riesgo de incendios forestales",
|
||||
"home_trait_cyclone": "Zona de huracanes / tifones",
|
||||
"home_trait_tropical": "Clima tropical",
|
||||
"home_trait_radon": "Prueba de radón recomendada",
|
||||
"home_reason_starter": "Lo básico para tu hogar",
|
||||
"home_reason_country": "Habitual en {country}",
|
||||
"home_reason_feature": "Encontrado en tu hogar: {feature}",
|
||||
"templates_recommended_title": "Recomendado para tu hogar",
|
||||
"templates_recommended_hint": "Según tu perfil de vivienda; ajústalo en Ajustes.",
|
||||
"templates_legal_hint": "Las notas sobre obligaciones legales y plazos son orientativas, no asesoramiento jurídico. Las normas varían según la región y cambian con el tiempo; prevalecen la normativa local y las instrucciones del fabricante.",
|
||||
"templates_not_typical": "Poco habitual en tu tipo de vivienda",
|
||||
"templates_set_up": "Ya configurado",
|
||||
"worksheet": "Hoja de trabajo",
|
||||
"worksheet_scan_view": "Escanea para abrir la tarea",
|
||||
"worksheet_scan_complete": "Escanea para completar",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(nuevo)",
|
||||
"adopt_object_hint": "Da a varios sensores el mismo nombre de objeto y se convierten en un solo objeto; escribe el nombre de un objeto existente para añadirlos allí.",
|
||||
"adopt_summary_title": "Qué cambia al adoptar",
|
||||
"adopt_summary_existing": "«{name}»: tareas {before} → {after}",
|
||||
"adopt_problem_adopt": "Adoptar seleccionados",
|
||||
"adopt_problem_done": "{tasks} sensor(es) de problema adoptado(s)",
|
||||
"views_label": "Vistas",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Se aleja del umbral",
|
||||
"split_select_hint": "Selecciona una tarea para ver sus detalles aquí",
|
||||
"setups_target_new": "Crear nuevo: {name}",
|
||||
"setups_target_match": "{name} — coincide: {reasons}",
|
||||
"setups_reason_model": "número de modelo",
|
||||
"setups_reason_name": "nombre",
|
||||
"setups_reason_area": "zona",
|
||||
"setups_reason_sibling": "mismo modelo en otro dispositivo",
|
||||
"setups_maybe_covered": "Probablemente ya existe como «{name}»",
|
||||
"setups_already": "Ya existe: {names}",
|
||||
"setups_before_after": "Tareas del objeto: {before} → {after}",
|
||||
"setups_new_object_count": "Objeto nuevo «{name}» · tareas: {count}",
|
||||
"schedule_preview_title": "Próximas fechas",
|
||||
"schedule_preview_ontime": "Suponiendo finalización puntual.",
|
||||
"schedule_preview_ends": "(la serie termina)",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"templates_from": "Mallista",
|
||||
"templates_title": "Aloita mallista",
|
||||
"templates_task_count": "{n} tehtävää",
|
||||
"templates_task_count_one": "1 tehtävä",
|
||||
"template_created": "Luotu mallista",
|
||||
"onboard_hint": "Lisää ensimmäinen kohde ja aloita huollon seuranta.",
|
||||
"edit": "Muokkaa",
|
||||
@@ -46,6 +47,7 @@
|
||||
"bulk_delete_objects_confirm": "Poistetaanko {n} kohdetta kaikkine tehtävineen? Arkistointi säilyttää historian.",
|
||||
"bulk_objects_deleted": "{n} kohdetta poistettu",
|
||||
"bulk_objects_archived": "{n} kohdetta arkistoitu",
|
||||
"bulk_failed": "{n} epäonnistui: {reason}",
|
||||
"completing": "Suoritetaan…",
|
||||
"interval": "Väli",
|
||||
"warning": "Varoitus",
|
||||
@@ -200,8 +202,6 @@
|
||||
"show_all": "Näytä kaikki",
|
||||
"cost_duration_chart": "Kustannus ja kesto",
|
||||
"installed": "Asennettu",
|
||||
"confirm_delete_object": "Poistetaanko tämä kohde ja kaikki sen tehtävät?",
|
||||
"confirm_delete_task": "Poistetaanko tämä tehtävä?",
|
||||
"min": "Min",
|
||||
"max": "Maks",
|
||||
"save": "Tallenna",
|
||||
@@ -243,7 +243,6 @@
|
||||
"sort_task_name": "Tehtävän nimi",
|
||||
"all_objects": "Kaikki kohteet",
|
||||
"all_parts": "Kaikki osat",
|
||||
"tasks_lower": "tehtävää",
|
||||
"no_tasks_yet": "Ei vielä tehtäviä",
|
||||
"add_first_task": "Lisää ensimmäinen tehtävä",
|
||||
"trigger_configuration": "Laukaisimen asetukset",
|
||||
@@ -300,6 +299,7 @@
|
||||
"tab_calendar": "Kalenteri",
|
||||
"cal_no_events": "Ei huoltoja",
|
||||
"cal_every_n_days": "{n} päivän välein",
|
||||
"cal_every_day": "päivittäin",
|
||||
"cal_source_time": "Aikaperusteinen",
|
||||
"cal_source_time_adaptive": "Aikaperusteinen (mukautuva)",
|
||||
"cal_source_sensor": "Anturiperusteinen",
|
||||
@@ -685,7 +685,6 @@
|
||||
"budget_open_panel": "Avaa paneelissa",
|
||||
"groups_empty": "Ei vielä ryhmiä.",
|
||||
"group_new_placeholder": "Lisää ryhmä…",
|
||||
"group_delete_confirm": "Poistetaanko ryhmä \"{name}\"?",
|
||||
"groups_manage_tasks": "Hallinnoi tehtävien määrityksiä…",
|
||||
"groups_open_panel": "Avaa paneelissa",
|
||||
"unassigned": "Ei määritetty",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "Poistetaanko \"{name}\"?",
|
||||
"doc_too_large": "Tiedosto on liian suuri (enint. 25 Mt).",
|
||||
"doc_upload_failed": "Lataus epäonnistui.",
|
||||
"docs_archive_too_large": "Arkisto on liian suuri (enintään {max}).",
|
||||
"completion_photos_optional": "Valokuvat suorituksesta (valinnainen)",
|
||||
"completion_photos": "Valokuvat suorituksesta",
|
||||
"choose_photos": "Valitse kuvat",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "Ota kuva",
|
||||
"camera_capture_shoot": "Ota kuva",
|
||||
"camera_switch_lens": "Vaihda kameraa",
|
||||
"camera_switch_failed": "Muu kamera ei vastannut – tämä puhelin antaa käyttöön vain yhden. Käytä toiselle objektiiville tiedostovalitsinta.",
|
||||
"camera_switching": "Vaihdetaan kameraa…",
|
||||
"camera_not_answered": "Tämä kamera ei vastannut. Napauta vaihtoa uudelleen kokeillaksesi seuraavaa tai käytä tiedostovalitsinta.",
|
||||
"camera_diagnostics": "Tiedot virheraporttia varten",
|
||||
"camera_copy": "Kopioi",
|
||||
"camera_copied": "Kopioitu",
|
||||
"doc_drop_hint": "Pudota tiedostot tähän",
|
||||
"doc_task_none": "Tähän tehtävään ei ole liitetty asiakirjoja.",
|
||||
"doc_link_existing": "Liitä asiakirja…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "Pienempi kuin edellinen lukema ({value})",
|
||||
"settings_templates_label": "Mallipohjagalleria",
|
||||
"settings_templates_hint": "Poista valinta mallipohjista, joita et koskaan tarvitse — ne katoavat \"Mallipohjasta\"-valitsimista (paneeli ja config flow). Mikään muu ei muutu; voi ottaa käyttöön uudelleen milloin tahansa.",
|
||||
"home_profile_title": "Kodin profiili",
|
||||
"home_profile_hint": "Suosittelee mallipohjia ja asettaa kausi-ikkunat ilmastosi ja pallonpuoliskosi mukaan. Kaikki päätellään paikallisesti kerroksistasi, alueistasi ja kodin sijainnista.",
|
||||
"home_type_label": "Asumismuoto",
|
||||
"home_type_auto": "Automaattinen ({detected})",
|
||||
"home_region_label": "Osavaltio, provinssi tai alue",
|
||||
"home_region_none": "ei löytynyt",
|
||||
"home_region_hint": "Jotkin säännöt vaihtelevat maan sisällä – yhdessä osavaltiossa ajoneuvon vuosikatsastus, naapurissa ei mitään. Päätelty kodin sijainnista.",
|
||||
"home_dwelling_house": "Talo",
|
||||
"home_dwelling_apartment": "Kerrostaloasunto",
|
||||
"home_dwelling_unknown": "ei tunnistettu",
|
||||
"home_detected_from": "Tunnistettu näistä: {reasons}",
|
||||
"home_reason_floors": "useita kerroksia",
|
||||
"home_reason_basement": "kellari",
|
||||
"home_reason_garden": "puutarha",
|
||||
"home_reason_shed": "vaja",
|
||||
"home_reason_driveway": "ajotie",
|
||||
"home_reason_garage": "autotalli",
|
||||
"home_reason_attic": "ullakko",
|
||||
"home_reason_lawn_mower": "ruohonleikkuri",
|
||||
"home_reason_gate": "portti",
|
||||
"home_reason_balcony": "parveke",
|
||||
"home_reason_small_home": "vähän huoneita yhdessä kerroksessa",
|
||||
"home_reason_ups": "UPS-laite",
|
||||
"home_climate_label": "Ilmasto",
|
||||
"home_climate_value": "Köppen {koppen} · kylmin kuukausi {cold} °C · lämpimin kuukausi {warm} °C",
|
||||
"home_climate_unknown": "Kodin sijaintia ei ole asetettu Home Assistantissa",
|
||||
"home_hemisphere_south": "Eteläinen pallonpuolisko — kausi-ikkunat käännetään",
|
||||
"home_trait_freeze": "Pakkasta talvella",
|
||||
"home_trait_snow": "Lumiset talvet",
|
||||
"home_trait_severe_winter": "Ankarat talvet",
|
||||
"home_trait_damp": "Kostea ilmasto",
|
||||
"home_trait_mediterranean": "Välimerellinen ilmasto",
|
||||
"home_trait_earthquake": "Maanjäristysalue",
|
||||
"home_trait_hot_summer": "Kuumat kesät",
|
||||
"home_trait_hot_humid": "Kuuma ja kostea",
|
||||
"home_trait_hot_dry": "Kuuma ja kuiva",
|
||||
"home_trait_termites": "Termiittialue",
|
||||
"home_trait_wildfire": "Maastopaloriski",
|
||||
"home_trait_cyclone": "Hurrikaani-/taifuunialue",
|
||||
"home_trait_tropical": "Trooppinen ilmasto",
|
||||
"home_trait_radon": "Radonmittaus suositeltava",
|
||||
"home_reason_starter": "Kodin perusasiat",
|
||||
"home_reason_country": "Yleinen maassa {country}",
|
||||
"home_reason_feature": "Löytyi kodistasi: {feature}",
|
||||
"templates_recommended_title": "Suositellaan kotiisi",
|
||||
"templates_recommended_hint": "Perustuu kodin profiiliin — muuta sitä asetuksissa.",
|
||||
"templates_legal_hint": "Lakisääteisiä velvollisuuksia ja määräaikoja koskevat huomautukset ovat suuntaa-antavia eivätkä ole oikeudellista neuvontaa. Säännöt vaihtelevat alueittain ja muuttuvat — paikalliset määräykset ja valmistajan ohjeet ovat ensisijaisia.",
|
||||
"templates_not_typical": "Harvinainen asumismuodollesi",
|
||||
"templates_set_up": "Jo käytössä",
|
||||
"worksheet": "Työlomake",
|
||||
"worksheet_scan_view": "Skannaa avataksesi tehtävän",
|
||||
"worksheet_scan_complete": "Skannaa suorittaaksesi",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(uusi)",
|
||||
"adopt_object_hint": "Anna useille antureille sama kohteen nimi, niin niistä tulee yksi kohde; kirjoita olemassa olevan kohteen nimi lisätäksesi ne sinne.",
|
||||
"adopt_summary_title": "Mitä käyttöönotto muuttaa",
|
||||
"adopt_summary_existing": "\"{name}\": tehtävät {before} → {after}",
|
||||
"adopt_problem_adopt": "Ota valitut käyttöön",
|
||||
"adopt_problem_done": "Otettiin käyttöön {tasks} ongelma-anturia",
|
||||
"views_label": "Näkymät",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Loittonee raja-arvosta",
|
||||
"split_select_hint": "Valitse tehtävä nähdäksesi sen tiedot tässä",
|
||||
"setups_target_new": "Luo uusi: {name}",
|
||||
"setups_target_match": "{name} — vastaa: {reasons}",
|
||||
"setups_reason_model": "mallinumero",
|
||||
"setups_reason_name": "nimi",
|
||||
"setups_reason_area": "alue",
|
||||
"setups_reason_sibling": "sama malli toisessa laitteessa",
|
||||
"setups_maybe_covered": "Todennäköisesti jo olemassa nimellä \"{name}\"",
|
||||
"setups_already": "Jo olemassa: {names}",
|
||||
"setups_before_after": "Kohteen tehtävät: {before} → {after}",
|
||||
"setups_new_object_count": "Uusi kohde \"{name}\" · tehtäviä: {count}",
|
||||
"schedule_preview_title": "Seuraavat päivämäärät",
|
||||
"schedule_preview_ontime": "Olettaen, että valmistuminen on ajallaan.",
|
||||
"schedule_preview_ends": "(sarja päättyy)",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"templates_from": "Depuis un modèle",
|
||||
"templates_title": "Partir d'un modèle",
|
||||
"templates_task_count": "{n} tâches",
|
||||
"templates_task_count_one": "1 tâche",
|
||||
"template_created": "Créé depuis un modèle",
|
||||
"onboard_hint": "Ajoutez votre premier objet pour suivre l'entretien.",
|
||||
"edit": "Modifier",
|
||||
@@ -44,6 +45,7 @@
|
||||
"bulk_delete_objects_confirm": "Supprimer {n} objets et toutes leurs tâches ? L'archivage conserve leur historique.",
|
||||
"bulk_objects_deleted": "{n} objets supprimés",
|
||||
"bulk_objects_archived": "{n} objets archivés",
|
||||
"bulk_failed": "{n} en échec : {reason}",
|
||||
"completing": "En cours…",
|
||||
"interval": "Intervalle",
|
||||
"warning": "Avertissement",
|
||||
@@ -198,8 +200,6 @@
|
||||
"show_all": "Tout afficher",
|
||||
"cost_duration_chart": "Coûts & Durée",
|
||||
"installed": "Installé",
|
||||
"confirm_delete_object": "Supprimer cet objet et toutes ses tâches ?",
|
||||
"confirm_delete_task": "Supprimer cette tâche ?",
|
||||
"min": "Min",
|
||||
"max": "Max",
|
||||
"save": "Enregistrer",
|
||||
@@ -241,7 +241,6 @@
|
||||
"sort_task_name": "Nom de la tâche",
|
||||
"all_objects": "Tous les objets",
|
||||
"all_parts": "Toutes les pièces",
|
||||
"tasks_lower": "tâches",
|
||||
"no_tasks_yet": "Pas encore de tâches",
|
||||
"add_first_task": "Ajouter la première tâche",
|
||||
"trigger_configuration": "Configuration du déclencheur",
|
||||
@@ -298,6 +297,7 @@
|
||||
"tab_calendar": "Calendrier",
|
||||
"cal_no_events": "Aucun entretien",
|
||||
"cal_every_n_days": "tous les {n} jours",
|
||||
"cal_every_day": "tous les jours",
|
||||
"cal_source_time": "Basé sur le temps",
|
||||
"cal_source_time_adaptive": "Basé sur le temps (adaptatif)",
|
||||
"cal_source_sensor": "Basé sur capteur",
|
||||
@@ -713,7 +713,6 @@
|
||||
"budget_open_panel": "Ouvrir dans le panneau",
|
||||
"groups_empty": "Aucun groupe pour le moment.",
|
||||
"group_new_placeholder": "Ajouter un groupe…",
|
||||
"group_delete_confirm": "Supprimer le groupe « {name} » ?",
|
||||
"groups_manage_tasks": "Gérer les affectations de tâches…",
|
||||
"groups_open_panel": "Ouvrir dans le panneau",
|
||||
"on_complete_action_target_hint": "Note : le domaine de l'entité doit correspondre au service — p. ex. 'button.press' ne fonctionne que sur button.*, 'counter.increment' seulement sur counter.*, 'input_button.press' seulement sur input_button.* etc. En cas de non-correspondance, l'action échoue silencieusement (HA journalise 'Referenced entities ... missing or not currently available').",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "Supprimer « {name} » ?",
|
||||
"doc_too_large": "Fichier trop volumineux (max. 25 Mo).",
|
||||
"doc_upload_failed": "Échec du téléversement.",
|
||||
"docs_archive_too_large": "Archive trop volumineuse (max. {max}).",
|
||||
"completion_photos_optional": "Photos de fin de tâche (facultatif)",
|
||||
"completion_photos": "Photos de fin de tâche",
|
||||
"choose_photos": "Choisir des photos",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "Prendre une photo",
|
||||
"camera_capture_shoot": "Prendre la photo",
|
||||
"camera_switch_lens": "Changer de caméra",
|
||||
"camera_switch_failed": "Aucune autre caméra n'a répondu — ce téléphone n'en expose qu'une. Utilisez le sélecteur de fichiers pour l'autre objectif.",
|
||||
"camera_switching": "Changement de caméra…",
|
||||
"camera_not_answered": "Cette caméra n'a pas répondu. Touchez à nouveau le bouton de changement pour essayer la suivante, ou utilisez le sélecteur de fichiers.",
|
||||
"camera_diagnostics": "Détails pour un rapport de bug",
|
||||
"camera_copy": "Copier",
|
||||
"camera_copied": "Copié",
|
||||
"doc_drop_hint": "Déposez les fichiers ici",
|
||||
"doc_task_none": "Aucun document lié à cette tâche.",
|
||||
"doc_link_existing": "Lier un document…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "Inférieur au dernier relevé ({value})",
|
||||
"settings_templates_label": "Galerie de modèles",
|
||||
"settings_templates_hint": "Décochez les modèles dont vous n'aurez jamais besoin — ils disparaissent des sélecteurs « Depuis un modèle » (panneau et config flow). Rien d'autre ne change ; réactivables à tout moment.",
|
||||
"home_profile_title": "Profil du logement",
|
||||
"home_profile_hint": "Recommande des modèles et règle les périodes saisonnières selon votre climat et votre hémisphère. Tout est déterminé localement à partir de vos étages, pièces et de l'emplacement du domicile.",
|
||||
"home_type_label": "Type de logement",
|
||||
"home_type_auto": "Automatique ({detected})",
|
||||
"home_region_label": "État, province ou région",
|
||||
"home_region_none": "introuvable",
|
||||
"home_region_hint": "Certaines règles varient au sein d'un pays : contrôle annuel des véhicules dans un État, aucun dans le suivant. Déterminé à partir de l'emplacement de votre domicile.",
|
||||
"home_dwelling_house": "Maison",
|
||||
"home_dwelling_apartment": "Appartement",
|
||||
"home_dwelling_unknown": "non reconnu",
|
||||
"home_detected_from": "Détecté grâce à : {reasons}",
|
||||
"home_reason_floors": "plusieurs étages",
|
||||
"home_reason_basement": "un sous-sol",
|
||||
"home_reason_garden": "un jardin",
|
||||
"home_reason_shed": "un abri de jardin",
|
||||
"home_reason_driveway": "une allée",
|
||||
"home_reason_garage": "un garage",
|
||||
"home_reason_attic": "un grenier",
|
||||
"home_reason_lawn_mower": "une tondeuse",
|
||||
"home_reason_gate": "un portail",
|
||||
"home_reason_balcony": "un balcon",
|
||||
"home_reason_small_home": "peu de pièces sur un seul étage",
|
||||
"home_reason_ups": "un onduleur",
|
||||
"home_climate_label": "Climat",
|
||||
"home_climate_value": "Köppen {koppen} · mois le plus froid {cold} °C · mois le plus chaud {warm} °C",
|
||||
"home_climate_unknown": "Aucun emplacement du domicile défini dans Home Assistant",
|
||||
"home_hemisphere_south": "Hémisphère sud — les périodes saisonnières sont inversées",
|
||||
"home_trait_freeze": "Gel en hiver",
|
||||
"home_trait_snow": "Hivers enneigés",
|
||||
"home_trait_severe_winter": "Hivers rigoureux",
|
||||
"home_trait_damp": "Climat humide",
|
||||
"home_trait_mediterranean": "Climat méditerranéen",
|
||||
"home_trait_earthquake": "Zone sismique",
|
||||
"home_trait_hot_summer": "Étés chauds",
|
||||
"home_trait_hot_humid": "Chaud et humide",
|
||||
"home_trait_hot_dry": "Chaud et sec",
|
||||
"home_trait_termites": "Zone à termites",
|
||||
"home_trait_wildfire": "Risque de feux de forêt",
|
||||
"home_trait_cyclone": "Zone d'ouragans / de typhons",
|
||||
"home_trait_tropical": "Climat tropical",
|
||||
"home_trait_radon": "Test du radon recommandé",
|
||||
"home_reason_starter": "Les bases pour votre logement",
|
||||
"home_reason_country": "Courant en/au {country}",
|
||||
"home_reason_feature": "Présent dans votre logement : {feature}",
|
||||
"templates_recommended_title": "Recommandé pour votre logement",
|
||||
"templates_recommended_hint": "D'après votre profil de logement — modifiable dans les Paramètres.",
|
||||
"templates_legal_hint": "Les indications sur les obligations légales et les échéances sont données à titre indicatif et ne constituent pas un conseil juridique. Les règles varient selon les régions et évoluent — la réglementation locale et les instructions du fabricant prévalent.",
|
||||
"templates_not_typical": "Peu courant pour votre type de logement",
|
||||
"templates_set_up": "Déjà configuré",
|
||||
"worksheet": "Fiche de travail",
|
||||
"worksheet_scan_view": "Scanner pour ouvrir la tâche",
|
||||
"worksheet_scan_complete": "Scanner pour terminer",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(nouveau)",
|
||||
"adopt_object_hint": "Donnez le même nom d'objet à plusieurs capteurs et ils forment un seul objet ; saisissez le nom d'un objet existant pour les y ajouter.",
|
||||
"adopt_summary_title": "Ce que l'adoption modifie",
|
||||
"adopt_summary_existing": "« {name} » : tâches {before} → {after}",
|
||||
"adopt_problem_adopt": "Adopter la sélection",
|
||||
"adopt_problem_done": "{tasks} capteur(s) de problème adopté(s)",
|
||||
"views_label": "Vues",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "S'éloigne du seuil",
|
||||
"split_select_hint": "Sélectionnez une tâche pour voir ses détails ici",
|
||||
"setups_target_new": "Créer : {name}",
|
||||
"setups_target_match": "{name} — correspond : {reasons}",
|
||||
"setups_reason_model": "numéro de modèle",
|
||||
"setups_reason_name": "nom",
|
||||
"setups_reason_area": "pièce",
|
||||
"setups_reason_sibling": "même modèle sur un autre appareil",
|
||||
"setups_maybe_covered": "Existe probablement déjà sous « {name} »",
|
||||
"setups_already": "Déjà présent : {names}",
|
||||
"setups_before_after": "Tâches de l'objet : {before} → {after}",
|
||||
"setups_new_object_count": "Nouvel objet « {name} » · tâches : {count}",
|
||||
"schedule_preview_title": "Prochaines échéances",
|
||||
"schedule_preview_ontime": "En supposant un achèvement ponctuel.",
|
||||
"schedule_preview_ends": "(fin de la série)",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"templates_from": "टेम्पलेट से",
|
||||
"templates_title": "टेम्पलेट से शुरू करें",
|
||||
"templates_task_count": "{n} कार्य",
|
||||
"templates_task_count_one": "1 कार्य",
|
||||
"template_created": "टेम्पलेट से बनाया गया",
|
||||
"onboard_hint": "रखरखाव ट्रैक करने के लिए अपना पहला ऑब्जेक्ट जोड़ें।",
|
||||
"edit": "संपादित करें",
|
||||
@@ -46,6 +47,7 @@
|
||||
"bulk_delete_objects_confirm": "{n} ऑब्जेक्ट और उनके सभी कार्य हटाएँ? संग्रहित करने से उनका इतिहास बना रहता है।",
|
||||
"bulk_objects_deleted": "{n} ऑब्जेक्ट हटाए गए",
|
||||
"bulk_objects_archived": "{n} ऑब्जेक्ट संग्रहित किए गए",
|
||||
"bulk_failed": "{n} विफल: {reason}",
|
||||
"completing": "पूर्ण किया जा रहा है…",
|
||||
"interval": "अंतराल",
|
||||
"warning": "चेतावनी",
|
||||
@@ -200,8 +202,6 @@
|
||||
"show_all": "सभी दिखाएँ",
|
||||
"cost_duration_chart": "लागत और अवधि",
|
||||
"installed": "स्थापित",
|
||||
"confirm_delete_object": "इस वस्तु और इसके सभी कार्यों को हटाएँ?",
|
||||
"confirm_delete_task": "इस कार्य को हटाएँ?",
|
||||
"min": "न्यूनतम",
|
||||
"max": "अधिकतम",
|
||||
"save": "सहेजें",
|
||||
@@ -243,7 +243,6 @@
|
||||
"sort_task_name": "कार्य का नाम",
|
||||
"all_objects": "सभी वस्तुएँ",
|
||||
"all_parts": "सभी पुर्ज़े",
|
||||
"tasks_lower": "कार्य",
|
||||
"no_tasks_yet": "अभी कोई कार्य नहीं",
|
||||
"add_first_task": "पहला कार्य जोड़ें",
|
||||
"trigger_configuration": "ट्रिगर कॉन्फ़िगरेशन",
|
||||
@@ -300,6 +299,7 @@
|
||||
"tab_calendar": "कैलेंडर",
|
||||
"cal_no_events": "कोई रखरखाव नहीं",
|
||||
"cal_every_n_days": "हर {n} दिन",
|
||||
"cal_every_day": "हर दिन",
|
||||
"cal_source_time": "समय-आधारित",
|
||||
"cal_source_time_adaptive": "समय-आधारित (अनुकूली)",
|
||||
"cal_source_sensor": "सेंसर-आधारित",
|
||||
@@ -685,7 +685,6 @@
|
||||
"budget_open_panel": "पैनल में खोलें",
|
||||
"groups_empty": "अभी कोई समूह नहीं।",
|
||||
"group_new_placeholder": "समूह जोड़ें…",
|
||||
"group_delete_confirm": "समूह \"{name}\" हटाएँ?",
|
||||
"groups_manage_tasks": "कार्य असाइनमेंट प्रबंधित करें…",
|
||||
"groups_open_panel": "पैनल में खोलें",
|
||||
"unassigned": "असाइन नहीं",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "\"{name}\" हटाएँ?",
|
||||
"doc_too_large": "फ़ाइल बहुत बड़ी है (अधिकतम 25 MB)।",
|
||||
"doc_upload_failed": "अपलोड विफल रहा।",
|
||||
"docs_archive_too_large": "आर्काइव बहुत बड़ा है (अधिकतम {max})।",
|
||||
"completion_photos_optional": "पूर्णता की तस्वीरें (वैकल्पिक)",
|
||||
"completion_photos": "पूर्णता की तस्वीरें",
|
||||
"choose_photos": "तस्वीरें चुनें",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "फ़ोटो लें",
|
||||
"camera_capture_shoot": "कैप्चर करें",
|
||||
"camera_switch_lens": "कैमरा बदलें",
|
||||
"camera_switch_failed": "किसी अन्य कैमरे ने जवाब नहीं दिया — यह फ़ोन केवल एक ही देता है। दूसरे लेंस के लिए फ़ाइल चयनकर्ता का उपयोग करें।",
|
||||
"camera_switching": "कैमरा बदला जा रहा है…",
|
||||
"camera_not_answered": "इस कैमरे ने जवाब नहीं दिया। अगला आज़माने के लिए फिर से बदलें पर टैप करें, या फ़ाइल पिकर का उपयोग करें।",
|
||||
"camera_diagnostics": "बग रिपोर्ट के लिए विवरण",
|
||||
"camera_copy": "कॉपी करें",
|
||||
"camera_copied": "कॉपी हो गया",
|
||||
"doc_drop_hint": "फ़ाइलें यहाँ छोड़ें",
|
||||
"doc_task_none": "इस कार्य से कोई दस्तावेज़ संबद्ध नहीं है।",
|
||||
"doc_link_existing": "दस्तावेज़ जोड़ें…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "पिछली रीडिंग ({value}) से कम",
|
||||
"settings_templates_label": "टेम्पलेट गैलरी",
|
||||
"settings_templates_hint": "जिन टेम्पलेट की कभी ज़रूरत नहीं होगी उन्हें अनचेक करें — वे \"टेम्पलेट से\" चयनकर्ताओं (पैनल और कॉन्फ़िग फ़्लो) से गायब हो जाएंगे। और कुछ नहीं बदलता; कभी भी फिर से सक्षम कर सकते हैं।",
|
||||
"home_profile_title": "घर की प्रोफ़ाइल",
|
||||
"home_profile_hint": "आपकी जलवायु और गोलार्ध के अनुसार टेम्पलेट सुझाता है और मौसमी विंडो सेट करता है। सब कुछ आपकी मंज़िलों, क्षेत्रों और घर के स्थान से स्थानीय रूप से तय होता है।",
|
||||
"home_type_label": "घर का प्रकार",
|
||||
"home_type_auto": "स्वचालित ({detected})",
|
||||
"home_region_label": "राज्य, प्रांत या क्षेत्र",
|
||||
"home_region_none": "नहीं मिला",
|
||||
"home_region_hint": "कुछ नियम एक ही देश में अलग-अलग होते हैं — एक राज्य में वाहन की वार्षिक जाँच, अगले में कोई नहीं। आपके घर के स्थान से पता लगाया गया।",
|
||||
"home_dwelling_house": "मकान",
|
||||
"home_dwelling_apartment": "अपार्टमेंट",
|
||||
"home_dwelling_unknown": "पहचाना नहीं गया",
|
||||
"home_detected_from": "इनसे पहचाना गया: {reasons}",
|
||||
"home_reason_floors": "कई मंज़िलें",
|
||||
"home_reason_basement": "तहखाना",
|
||||
"home_reason_garden": "बगीचा",
|
||||
"home_reason_shed": "शेड",
|
||||
"home_reason_driveway": "ड्राइववे",
|
||||
"home_reason_garage": "गैराज",
|
||||
"home_reason_attic": "अटारी",
|
||||
"home_reason_lawn_mower": "लॉन मोवर",
|
||||
"home_reason_gate": "गेट",
|
||||
"home_reason_balcony": "बालकनी",
|
||||
"home_reason_small_home": "एक मंज़िल पर कम कमरे",
|
||||
"home_reason_ups": "यूपीएस (अबाधित बिजली आपूर्ति)",
|
||||
"home_climate_label": "जलवायु",
|
||||
"home_climate_value": "कोपेन {koppen} · सबसे ठंडा महीना {cold} °C · सबसे गर्म महीना {warm} °C",
|
||||
"home_climate_unknown": "Home Assistant में घर का स्थान सेट नहीं है",
|
||||
"home_hemisphere_south": "दक्षिणी गोलार्ध — मौसमी विंडो उलट दी जाती हैं",
|
||||
"home_trait_freeze": "सर्दियों में पाला",
|
||||
"home_trait_snow": "बर्फ़ीली सर्दियाँ",
|
||||
"home_trait_severe_winter": "कड़ाके की सर्दियाँ",
|
||||
"home_trait_damp": "नम जलवायु",
|
||||
"home_trait_mediterranean": "भूमध्यसागरीय जलवायु",
|
||||
"home_trait_earthquake": "भूकंप संभावित क्षेत्र",
|
||||
"home_trait_hot_summer": "गर्म गर्मियाँ",
|
||||
"home_trait_hot_humid": "गर्म और आर्द्र",
|
||||
"home_trait_hot_dry": "गर्म और शुष्क",
|
||||
"home_trait_termites": "दीमक प्रभावित क्षेत्र",
|
||||
"home_trait_wildfire": "जंगल की आग का खतरा",
|
||||
"home_trait_cyclone": "तूफ़ान / टाइफ़ून क्षेत्र",
|
||||
"home_trait_tropical": "उष्णकटिबंधीय जलवायु",
|
||||
"home_trait_radon": "रेडॉन जाँच की सलाह",
|
||||
"home_reason_starter": "आपके घर की बुनियादी ज़रूरतें",
|
||||
"home_reason_country": "{country} में आम",
|
||||
"home_reason_feature": "आपके घर में मिला: {feature}",
|
||||
"templates_recommended_title": "आपके घर के लिए सुझाए गए",
|
||||
"templates_recommended_hint": "आपकी घर की प्रोफ़ाइल पर आधारित — सेटिंग्स में बदलें।",
|
||||
"templates_legal_hint": "कानूनी दायित्वों और समय-सीमाओं से जुड़े नोट केवल मार्गदर्शन हैं, कानूनी सलाह नहीं। नियम क्षेत्र के अनुसार अलग होते हैं और बदलते रहते हैं — स्थानीय नियम और निर्माता के निर्देश ही मान्य हैं।",
|
||||
"templates_not_typical": "आपके घर के प्रकार के लिए असामान्य",
|
||||
"templates_set_up": "पहले से सेट है",
|
||||
"worksheet": "कार्य पत्रक",
|
||||
"worksheet_scan_view": "कार्य खोलने के लिए स्कैन करें",
|
||||
"worksheet_scan_complete": "पूरा करने के लिए स्कैन करें",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ठीक",
|
||||
"adopt_problem_new_object": "(नया)",
|
||||
"adopt_object_hint": "कई सेंसरों को एक ही ऑब्जेक्ट नाम दें तो वे एक ऑब्जेक्ट बन जाते हैं; मौजूदा ऑब्जेक्ट का नाम लिखें तो वे वहीं जुड़ जाते हैं।",
|
||||
"adopt_summary_title": "अपनाने से क्या बदलेगा",
|
||||
"adopt_summary_existing": "\"{name}\": कार्य {before} → {after}",
|
||||
"adopt_problem_adopt": "चयनित अपनाएँ",
|
||||
"adopt_problem_done": "{tasks} समस्या सेंसर अपनाए गए",
|
||||
"views_label": "व्यू",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "सीमा से दूर जा रहा है",
|
||||
"split_select_hint": "विवरण यहाँ देखने के लिए कोई कार्य चुनें",
|
||||
"setups_target_new": "नया बनाएँ: {name}",
|
||||
"setups_target_match": "{name} — मेल: {reasons}",
|
||||
"setups_reason_model": "मॉडल नंबर",
|
||||
"setups_reason_name": "नाम",
|
||||
"setups_reason_area": "क्षेत्र",
|
||||
"setups_reason_sibling": "दूसरे डिवाइस पर वही मॉडल",
|
||||
"setups_maybe_covered": "शायद पहले से \"{name}\" के रूप में मौजूद है",
|
||||
"setups_already": "पहले से मौजूद: {names}",
|
||||
"setups_before_after": "ऑब्जेक्ट के कार्य: {before} → {after}",
|
||||
"setups_new_object_count": "नया ऑब्जेक्ट \"{name}\" · कार्य: {count}",
|
||||
"schedule_preview_title": "अगली तिथियाँ",
|
||||
"schedule_preview_ontime": "समय पर पूर्णता मानते हुए।",
|
||||
"schedule_preview_ends": "(श्रृंखला समाप्त)",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"templates_from": "Sablonból",
|
||||
"templates_title": "Kezdés sablonból",
|
||||
"templates_task_count": "{n} feladat",
|
||||
"templates_task_count_one": "1 feladat",
|
||||
"template_created": "Létrehozva sablonból",
|
||||
"onboard_hint": "Adja hozzá az első objektumot a karbantartások nyomon követéséhez.",
|
||||
"edit": "Szerkesztés",
|
||||
@@ -46,6 +47,7 @@
|
||||
"bulk_delete_objects_confirm": "Törli a(z) {n} objektumot az összes feladatával együtt? Az archiválás ehelyett megőrzi az előzményeket.",
|
||||
"bulk_objects_deleted": "{n} objektum törölve",
|
||||
"bulk_objects_archived": "{n} objektum archiválva",
|
||||
"bulk_failed": "{n} sikertelen: {reason}",
|
||||
"completing": "Elvégzés…",
|
||||
"interval": "Intervallum",
|
||||
"warning": "Figyelmeztetés",
|
||||
@@ -200,8 +202,6 @@
|
||||
"show_all": "Összes megjelenítése",
|
||||
"cost_duration_chart": "Költség és időtartam",
|
||||
"installed": "Telepítve",
|
||||
"confirm_delete_object": "Törli az objektumot az összes feladatával együtt?",
|
||||
"confirm_delete_task": "Törli ezt a feladatot?",
|
||||
"min": "Min",
|
||||
"max": "Max",
|
||||
"save": "Mentés",
|
||||
@@ -243,7 +243,6 @@
|
||||
"sort_task_name": "Feladat neve",
|
||||
"all_objects": "Minden objektum",
|
||||
"all_parts": "Összes alkatrész",
|
||||
"tasks_lower": "feladat",
|
||||
"no_tasks_yet": "Még nincs feladat",
|
||||
"add_first_task": "Első feladat hozzáadása",
|
||||
"trigger_configuration": "Kiváltó beállítása",
|
||||
@@ -300,6 +299,7 @@
|
||||
"tab_calendar": "Naptár",
|
||||
"cal_no_events": "Nincs karbantartás",
|
||||
"cal_every_n_days": "{n} naponta",
|
||||
"cal_every_day": "naponta",
|
||||
"cal_source_time": "Időalapú",
|
||||
"cal_source_time_adaptive": "Időalapú (adaptív)",
|
||||
"cal_source_sensor": "Érzékelőalapú",
|
||||
@@ -691,7 +691,6 @@
|
||||
"budget_open_panel": "Megnyitás a panelen",
|
||||
"groups_empty": "Még nincsenek csoportok.",
|
||||
"group_new_placeholder": "Csoport hozzáadása…",
|
||||
"group_delete_confirm": "Törli a(z) „{name}” csoportot?",
|
||||
"groups_manage_tasks": "Feladat-hozzárendelések kezelése…",
|
||||
"groups_open_panel": "Megnyitás a panelen",
|
||||
"unassigned": "Nincs hozzárendelve",
|
||||
@@ -770,6 +769,7 @@
|
||||
"doc_delete_confirm": "Törli a(z) „{name}” elemet?",
|
||||
"doc_too_large": "A fájl túl nagy (max. 25 MB).",
|
||||
"doc_upload_failed": "A feltöltés nem sikerült.",
|
||||
"docs_archive_too_large": "Az archívum túl nagy (max. {max}).",
|
||||
"completion_photos_optional": "Fotók az elvégzésről (nem kötelező)",
|
||||
"completion_photos": "Fotók az elvégzésről",
|
||||
"choose_photos": "Fotók kiválasztása",
|
||||
@@ -797,7 +797,11 @@
|
||||
"doc_camera": "Fotó készítése",
|
||||
"camera_capture_shoot": "Felvétel",
|
||||
"camera_switch_lens": "Kamera váltása",
|
||||
"camera_switch_failed": "Nem válaszolt másik kamera – ez a telefon csak egyet ad ki. A másik objektívhez használja a fájlválasztót.",
|
||||
"camera_switching": "Kamera váltása…",
|
||||
"camera_not_answered": "Ez a kamera nem válaszolt. Koppintson újra a váltásra a következő kipróbálásához, vagy használja a fájlválasztót.",
|
||||
"camera_diagnostics": "Részletek hibajelentéshez",
|
||||
"camera_copy": "Másolás",
|
||||
"camera_copied": "Másolva",
|
||||
"doc_drop_hint": "Húzza ide a fájlokat",
|
||||
"doc_task_none": "Ehhez a feladathoz nincs dokumentum csatolva.",
|
||||
"doc_link_existing": "Dokumentum hozzárendelése…",
|
||||
@@ -850,6 +854,55 @@
|
||||
"reading_below_last": "Kisebb az előző leolvasásnál ({value})",
|
||||
"settings_templates_label": "Sablongaléria",
|
||||
"settings_templates_hint": "Vegye ki a pipát a sosem használt sablonoknál — így eltűnnek a „Sablonból” választókból (panel és konfigurációs folyamat). Semmi más nem változik; bármikor újra engedélyezheti őket.",
|
||||
"home_profile_title": "Otthon profilja",
|
||||
"home_profile_hint": "Sablonokat javasol, és az éghajlathoz és a féltekéhez igazítja a szezonális időablakokat. Minden helyben, az Ön szintjeiből, területeiből és az otthon helyéből adódik.",
|
||||
"home_type_label": "Lakóhely típusa",
|
||||
"home_type_auto": "Automatikus ({detected})",
|
||||
"home_region_label": "Állam, tartomány vagy régió",
|
||||
"home_region_none": "nem található",
|
||||
"home_region_hint": "Egyes szabályok országon belül is eltérnek – az egyik államban évente kötelező a járművizsga, a szomszédosban egyáltalán nem. Az otthon helyéből megállapítva.",
|
||||
"home_dwelling_house": "Ház",
|
||||
"home_dwelling_apartment": "Lakás",
|
||||
"home_dwelling_unknown": "nem felismerhető",
|
||||
"home_detected_from": "Felismerés alapja: {reasons}",
|
||||
"home_reason_floors": "több szint",
|
||||
"home_reason_basement": "pince",
|
||||
"home_reason_garden": "kert",
|
||||
"home_reason_shed": "fészer",
|
||||
"home_reason_driveway": "felhajtó",
|
||||
"home_reason_garage": "garázs",
|
||||
"home_reason_attic": "padlás",
|
||||
"home_reason_lawn_mower": "fűnyíró",
|
||||
"home_reason_gate": "kapu",
|
||||
"home_reason_balcony": "erkély",
|
||||
"home_reason_small_home": "kevés helyiség egy szinten",
|
||||
"home_reason_ups": "szünetmentes táp",
|
||||
"home_climate_label": "Éghajlat",
|
||||
"home_climate_value": "Köppen {koppen} · leghidegebb hónap {cold} °C · legmelegebb hónap {warm} °C",
|
||||
"home_climate_unknown": "Nincs otthoni hely beállítva a Home Assistantban",
|
||||
"home_hemisphere_south": "Déli félteke — a szezonális időablakok tükröződnek",
|
||||
"home_trait_freeze": "Téli fagy",
|
||||
"home_trait_snow": "Havas telek",
|
||||
"home_trait_severe_winter": "Kemény telek",
|
||||
"home_trait_damp": "Nedves éghajlat",
|
||||
"home_trait_mediterranean": "Mediterrán éghajlat",
|
||||
"home_trait_earthquake": "Földrengésveszélyes terület",
|
||||
"home_trait_hot_summer": "Forró nyarak",
|
||||
"home_trait_hot_humid": "Forró és párás",
|
||||
"home_trait_hot_dry": "Forró és száraz",
|
||||
"home_trait_termites": "Termeszveszélyes terület",
|
||||
"home_trait_wildfire": "Erdőtűzveszély",
|
||||
"home_trait_cyclone": "Hurrikán-/tájfunövezet",
|
||||
"home_trait_tropical": "Trópusi éghajlat",
|
||||
"home_trait_radon": "Radonmérés ajánlott",
|
||||
"home_reason_starter": "Az otthon alapjai",
|
||||
"home_reason_country": "Gyakori itt: {country}",
|
||||
"home_reason_feature": "Az otthonában található: {feature}",
|
||||
"templates_recommended_title": "Ajánlott az otthonához",
|
||||
"templates_recommended_hint": "Az otthon profilja alapján — a Beállításokban módosíthatja.",
|
||||
"templates_legal_hint": "A jogi kötelezettségekre és határidőkre vonatkozó megjegyzések tájékoztató jellegűek, nem minősülnek jogi tanácsnak. A szabályok régiónként eltérnek és változnak — a helyi előírások és a gyártó utasításai az irányadók.",
|
||||
"templates_not_typical": "Az Ön lakóhelytípusánál nem jellemző",
|
||||
"templates_set_up": "Már beállítva",
|
||||
"worksheet": "Munkalap",
|
||||
"worksheet_scan_view": "Olvassa be a feladat megnyitásához",
|
||||
"worksheet_scan_complete": "Olvassa be az elvégzéshez",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(új)",
|
||||
"adopt_object_hint": "Adja több érzékelőnek ugyanazt az objektumnevet, és egy objektummá válnak; meglévő objektum nevét beírva oda kerülnek.",
|
||||
"adopt_summary_title": "Mit változtat az átvétel",
|
||||
"adopt_summary_existing": "„{name}”: feladatok {before} → {after}",
|
||||
"adopt_problem_adopt": "Kijelöltek átvétele",
|
||||
"adopt_problem_done": "{tasks} problémaérzékelő átvéve",
|
||||
"views_label": "Nézetek",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Távolodik a küszöbtől",
|
||||
"split_select_hint": "Válassz egy feladatot, és itt jelennek meg a részletei",
|
||||
"setups_target_new": "Új létrehozása: {name}",
|
||||
"setups_target_match": "{name} — egyezik: {reasons}",
|
||||
"setups_reason_model": "típusszám",
|
||||
"setups_reason_name": "név",
|
||||
"setups_reason_area": "terület",
|
||||
"setups_reason_sibling": "ugyanaz a típus egy másik eszközön",
|
||||
"setups_maybe_covered": "Valószínűleg már megvan „{name}” néven",
|
||||
"setups_already": "Már megvan: {names}",
|
||||
"setups_before_after": "Az objektum feladatai: {before} → {after}",
|
||||
"setups_new_object_count": "Új objektum „{name}” · feladatok: {count}",
|
||||
"schedule_preview_title": "Következő dátumok",
|
||||
"schedule_preview_ontime": "Időben történő elvégzést feltételezve.",
|
||||
"schedule_preview_ends": "(a sorozat véget ér)",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"templates_from": "Da modello",
|
||||
"templates_title": "Inizia da un modello",
|
||||
"templates_task_count": "{n} attività",
|
||||
"templates_task_count_one": "1 attività",
|
||||
"template_created": "Creato da modello",
|
||||
"onboard_hint": "Aggiungi il primo oggetto per iniziare a tracciare la manutenzione.",
|
||||
"edit": "Modifica",
|
||||
@@ -44,6 +45,7 @@
|
||||
"bulk_delete_objects_confirm": "Eliminare {n} oggetti con tutte le loro attività? L'archiviazione conserva invece la cronologia.",
|
||||
"bulk_objects_deleted": "{n} oggetti eliminati",
|
||||
"bulk_objects_archived": "{n} oggetti archiviati",
|
||||
"bulk_failed": "{n} non riusciti: {reason}",
|
||||
"completing": "Completamento…",
|
||||
"interval": "Intervallo",
|
||||
"warning": "Avviso",
|
||||
@@ -198,8 +200,6 @@
|
||||
"show_all": "Mostra tutto",
|
||||
"cost_duration_chart": "Costi & Durata",
|
||||
"installed": "Installato",
|
||||
"confirm_delete_object": "Eliminare questo oggetto e tutte le sue attività?",
|
||||
"confirm_delete_task": "Eliminare questa attività?",
|
||||
"min": "Min",
|
||||
"max": "Max",
|
||||
"save": "Salva",
|
||||
@@ -241,7 +241,6 @@
|
||||
"sort_task_name": "Nome attività",
|
||||
"all_objects": "Tutti gli oggetti",
|
||||
"all_parts": "Tutti i ricambi",
|
||||
"tasks_lower": "attività",
|
||||
"no_tasks_yet": "Nessuna attività",
|
||||
"add_first_task": "Aggiungi prima attività",
|
||||
"trigger_configuration": "Configurazione trigger",
|
||||
@@ -298,6 +297,7 @@
|
||||
"tab_calendar": "Calendario",
|
||||
"cal_no_events": "Nessuna manutenzione",
|
||||
"cal_every_n_days": "ogni {n} giorni",
|
||||
"cal_every_day": "ogni giorno",
|
||||
"cal_source_time": "Basato sul tempo",
|
||||
"cal_source_time_adaptive": "Basato sul tempo (adattivo)",
|
||||
"cal_source_sensor": "Basato su sensore",
|
||||
@@ -713,7 +713,6 @@
|
||||
"budget_open_panel": "Apri nel pannello",
|
||||
"groups_empty": "Nessun gruppo ancora.",
|
||||
"group_new_placeholder": "Aggiungi gruppo…",
|
||||
"group_delete_confirm": "Eliminare il gruppo \"{name}\"?",
|
||||
"groups_manage_tasks": "Gestisci assegnazioni attività…",
|
||||
"groups_open_panel": "Apri nel pannello",
|
||||
"on_complete_action_target_hint": "Nota: il dominio dell'entità deve corrispondere al servizio — es. 'button.press' funziona solo su button.*, 'counter.increment' solo su counter.*, 'input_button.press' solo su input_button.* ecc. In caso di mancata corrispondenza l'azione fallisce silenziosamente (HA registra 'Referenced entities ... missing or not currently available').",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "Eliminare «{name}»?",
|
||||
"doc_too_large": "File troppo grande (max 25 MB).",
|
||||
"doc_upload_failed": "Caricamento non riuscito.",
|
||||
"docs_archive_too_large": "L'archivio è troppo grande (max {max}).",
|
||||
"completion_photos_optional": "Foto di completamento (facoltativo)",
|
||||
"completion_photos": "Foto di completamento",
|
||||
"choose_photos": "Scegli foto",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "Scatta foto",
|
||||
"camera_capture_shoot": "Scatta",
|
||||
"camera_switch_lens": "Cambia fotocamera",
|
||||
"camera_switch_failed": "Nessun'altra fotocamera ha risposto: questo telefono ne espone una sola. Per l'altro obiettivo usa la selezione file.",
|
||||
"camera_switching": "Cambio fotocamera…",
|
||||
"camera_not_answered": "Questa fotocamera non ha risposto. Tocca di nuovo il cambio per provare la successiva o usa la selezione file.",
|
||||
"camera_diagnostics": "Dettagli per una segnalazione di errore",
|
||||
"camera_copy": "Copia",
|
||||
"camera_copied": "Copiato",
|
||||
"doc_drop_hint": "Trascina qui i file",
|
||||
"doc_task_none": "Nessun documento collegato a questa attività.",
|
||||
"doc_link_existing": "Collega un documento…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "Inferiore all'ultima lettura ({value})",
|
||||
"settings_templates_label": "Galleria modelli",
|
||||
"settings_templates_hint": "Deseleziona i modelli che non ti serviranno mai: spariscono dai selettori \"Da modello\" (pannello e config flow). Nient'altro cambia; riattivabili in qualsiasi momento.",
|
||||
"home_profile_title": "Profilo dell'abitazione",
|
||||
"home_profile_hint": "Consiglia modelli e imposta le finestre stagionali in base al tuo clima e al tuo emisfero. Tutto viene ricavato localmente da piani, aree e posizione di casa.",
|
||||
"home_type_label": "Tipo di abitazione",
|
||||
"home_type_auto": "Automatico ({detected})",
|
||||
"home_region_label": "Stato, provincia o regione",
|
||||
"home_region_none": "non trovata",
|
||||
"home_region_hint": "Alcune regole cambiano all'interno di un paese: revisione annuale del veicolo in uno stato, nessuna in quello accanto. Ricavato dalla posizione della casa.",
|
||||
"home_dwelling_house": "Casa indipendente",
|
||||
"home_dwelling_apartment": "Appartamento",
|
||||
"home_dwelling_unknown": "non riconosciuto",
|
||||
"home_detected_from": "Riconosciuto da: {reasons}",
|
||||
"home_reason_floors": "più piani",
|
||||
"home_reason_basement": "una cantina",
|
||||
"home_reason_garden": "un giardino",
|
||||
"home_reason_shed": "un capanno",
|
||||
"home_reason_driveway": "un vialetto d'accesso",
|
||||
"home_reason_garage": "un garage",
|
||||
"home_reason_attic": "una soffitta",
|
||||
"home_reason_lawn_mower": "un tosaerba",
|
||||
"home_reason_gate": "un cancello",
|
||||
"home_reason_balcony": "un balcone",
|
||||
"home_reason_small_home": "poche stanze su un solo piano",
|
||||
"home_reason_ups": "un gruppo di continuità",
|
||||
"home_climate_label": "Clima",
|
||||
"home_climate_value": "Köppen {koppen} · mese più freddo {cold} °C · mese più caldo {warm} °C",
|
||||
"home_climate_unknown": "Nessuna posizione di casa impostata in Home Assistant",
|
||||
"home_hemisphere_south": "Emisfero australe — le finestre stagionali sono invertite",
|
||||
"home_trait_freeze": "Gelo in inverno",
|
||||
"home_trait_snow": "Inverni nevosi",
|
||||
"home_trait_severe_winter": "Inverni rigidi",
|
||||
"home_trait_damp": "Clima umido",
|
||||
"home_trait_mediterranean": "Clima mediterraneo",
|
||||
"home_trait_earthquake": "Zona sismica",
|
||||
"home_trait_hot_summer": "Estati calde",
|
||||
"home_trait_hot_humid": "Caldo e umido",
|
||||
"home_trait_hot_dry": "Caldo e secco",
|
||||
"home_trait_termites": "Zona a rischio termiti",
|
||||
"home_trait_wildfire": "Rischio di incendi boschivi",
|
||||
"home_trait_cyclone": "Zona di uragani / tifoni",
|
||||
"home_trait_tropical": "Clima tropicale",
|
||||
"home_trait_radon": "Test del radon consigliato",
|
||||
"home_reason_starter": "Le basi per la tua casa",
|
||||
"home_reason_country": "Comune in {country}",
|
||||
"home_reason_feature": "Presente nella tua casa: {feature}",
|
||||
"templates_recommended_title": "Consigliati per la tua casa",
|
||||
"templates_recommended_hint": "In base al profilo dell'abitazione — modificabile nelle Impostazioni.",
|
||||
"templates_legal_hint": "Le note su obblighi di legge e scadenze sono indicative e non costituiscono consulenza legale. Le regole variano da regione a regione e cambiano nel tempo: prevalgono le norme locali e le istruzioni del produttore.",
|
||||
"templates_not_typical": "Poco comune per il tuo tipo di abitazione",
|
||||
"templates_set_up": "Già configurato",
|
||||
"worksheet": "Scheda di lavoro",
|
||||
"worksheet_scan_view": "Scansiona per aprire l'attività",
|
||||
"worksheet_scan_complete": "Scansiona per completare",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(nuovo)",
|
||||
"adopt_object_hint": "Assegna lo stesso nome oggetto a più sensori e diventano un unico oggetto; digita il nome di un oggetto esistente per aggiungerli lì.",
|
||||
"adopt_summary_title": "Cosa cambia l'adozione",
|
||||
"adopt_summary_existing": "«{name}»: attività {before} → {after}",
|
||||
"adopt_problem_adopt": "Adotta selezionati",
|
||||
"adopt_problem_done": "{tasks} sensore/i di problema adottato/i",
|
||||
"views_label": "Viste",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Si allontana dalla soglia",
|
||||
"split_select_hint": "Seleziona un'attività per vederne i dettagli qui",
|
||||
"setups_target_new": "Crea nuovo: {name}",
|
||||
"setups_target_match": "{name} — corrisponde: {reasons}",
|
||||
"setups_reason_model": "numero di modello",
|
||||
"setups_reason_name": "nome",
|
||||
"setups_reason_area": "zona",
|
||||
"setups_reason_sibling": "stesso modello su un altro dispositivo",
|
||||
"setups_maybe_covered": "Probabilmente esiste già come «{name}»",
|
||||
"setups_already": "Già presente: {names}",
|
||||
"setups_before_after": "Attività dell'oggetto: {before} → {after}",
|
||||
"setups_new_object_count": "Nuovo oggetto «{name}» · attività: {count}",
|
||||
"schedule_preview_title": "Prossime date",
|
||||
"schedule_preview_ontime": "Presumendo un completamento puntuale.",
|
||||
"schedule_preview_ends": "(la serie termina)",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"templates_from": "テンプレートから",
|
||||
"templates_title": "テンプレートから始める",
|
||||
"templates_task_count": "{n} 件のタスク",
|
||||
"templates_task_count_one": "1 件のタスク",
|
||||
"template_created": "テンプレートから作成しました",
|
||||
"onboard_hint": "最初のオブジェクトを追加してメンテナンスの記録を始めましょう。",
|
||||
"edit": "編集",
|
||||
@@ -46,6 +47,7 @@
|
||||
"bulk_delete_objects_confirm": "{n} 件のオブジェクトとそのすべてのタスクを削除しますか?アーカイブなら履歴が残ります。",
|
||||
"bulk_objects_deleted": "{n} 件のオブジェクトを削除しました",
|
||||
"bulk_objects_archived": "{n} 件のオブジェクトをアーカイブしました",
|
||||
"bulk_failed": "{n} 件失敗:{reason}",
|
||||
"completing": "完了処理中…",
|
||||
"interval": "間隔",
|
||||
"warning": "警告",
|
||||
@@ -200,8 +202,6 @@
|
||||
"show_all": "すべて表示",
|
||||
"cost_duration_chart": "費用と所要時間",
|
||||
"installed": "設置済み",
|
||||
"confirm_delete_object": "この対象とすべてのタスクを削除しますか?",
|
||||
"confirm_delete_task": "このタスクを削除しますか?",
|
||||
"min": "最小",
|
||||
"max": "最大",
|
||||
"save": "保存",
|
||||
@@ -243,7 +243,6 @@
|
||||
"sort_task_name": "タスク名",
|
||||
"all_objects": "すべての対象",
|
||||
"all_parts": "すべての部品",
|
||||
"tasks_lower": "タスク",
|
||||
"no_tasks_yet": "タスクがまだありません",
|
||||
"add_first_task": "最初のタスクを追加",
|
||||
"trigger_configuration": "トリガー設定",
|
||||
@@ -300,6 +299,7 @@
|
||||
"tab_calendar": "カレンダー",
|
||||
"cal_no_events": "メンテナンスなし",
|
||||
"cal_every_n_days": "{n}日ごと",
|
||||
"cal_every_day": "毎日",
|
||||
"cal_source_time": "時間ベース",
|
||||
"cal_source_time_adaptive": "時間ベース(適応)",
|
||||
"cal_source_sensor": "センサーベース",
|
||||
@@ -685,7 +685,6 @@
|
||||
"budget_open_panel": "パネルで開く",
|
||||
"groups_empty": "グループがまだありません。",
|
||||
"group_new_placeholder": "グループを追加…",
|
||||
"group_delete_confirm": "グループ「{name}」を削除しますか?",
|
||||
"groups_manage_tasks": "タスクの割り当てを管理…",
|
||||
"groups_open_panel": "パネルで開く",
|
||||
"unassigned": "未割り当て",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "「{name}」を削除しますか?",
|
||||
"doc_too_large": "ファイルが大きすぎます(最大 25 MB)。",
|
||||
"doc_upload_failed": "アップロードに失敗しました。",
|
||||
"docs_archive_too_large": "アーカイブが大きすぎます(最大 {max})。",
|
||||
"completion_photos_optional": "完了写真(任意)",
|
||||
"completion_photos": "完了写真",
|
||||
"choose_photos": "写真を選択",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "写真を撮る",
|
||||
"camera_capture_shoot": "撮影",
|
||||
"camera_switch_lens": "カメラを切り替え",
|
||||
"camera_switch_failed": "他のカメラが応答しませんでした。この端末は1台しか公開していません。別のレンズにはファイル選択を使ってください。",
|
||||
"camera_switching": "カメラを切り替えています…",
|
||||
"camera_not_answered": "このカメラが応答しませんでした。もう一度切り替えをタップして次のカメラを試すか、ファイル選択を使用してください。",
|
||||
"camera_diagnostics": "不具合報告用の詳細",
|
||||
"camera_copy": "コピー",
|
||||
"camera_copied": "コピーしました",
|
||||
"doc_drop_hint": "ここにファイルをドロップ",
|
||||
"doc_task_none": "このタスクに紐付いたドキュメントはありません。",
|
||||
"doc_link_existing": "ドキュメントを紐付け…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "前回の値({value})より小さい",
|
||||
"settings_templates_label": "テンプレートギャラリー",
|
||||
"settings_templates_hint": "不要なテンプレートのチェックを外すと、「テンプレートから」の選択肢(パネルと設定フロー)から消えます。それ以外は何も変わらず、いつでも再有効化できます。",
|
||||
"home_profile_title": "住まいのプロフィール",
|
||||
"home_profile_hint": "気候と半球に合わせてテンプレートをおすすめし、季節の期間を設定します。すべてフロア・エリア・自宅の位置からローカルで判定されます。",
|
||||
"home_type_label": "住まいの種類",
|
||||
"home_type_auto": "自動({detected})",
|
||||
"home_region_label": "州・県・地域",
|
||||
"home_region_none": "見つかりません",
|
||||
"home_region_hint": "国内でも地域によって規則が異なることがあります(ある州では毎年の車両検査、隣の州では不要など)。自宅の位置から判定しています。",
|
||||
"home_dwelling_house": "一戸建て",
|
||||
"home_dwelling_apartment": "マンション・アパート",
|
||||
"home_dwelling_unknown": "判定できません",
|
||||
"home_detected_from": "判定の根拠:{reasons}",
|
||||
"home_reason_floors": "複数のフロア",
|
||||
"home_reason_basement": "地下室",
|
||||
"home_reason_garden": "庭",
|
||||
"home_reason_shed": "物置",
|
||||
"home_reason_driveway": "私道",
|
||||
"home_reason_garage": "ガレージ",
|
||||
"home_reason_attic": "屋根裏",
|
||||
"home_reason_lawn_mower": "芝刈り機",
|
||||
"home_reason_gate": "門扉",
|
||||
"home_reason_balcony": "バルコニー",
|
||||
"home_reason_small_home": "1フロアで部屋が少ない",
|
||||
"home_reason_ups": "無停電電源装置(UPS)",
|
||||
"home_climate_label": "気候",
|
||||
"home_climate_value": "ケッペン {koppen} · 最寒月 {cold} °C · 最暖月 {warm} °C",
|
||||
"home_climate_unknown": "Home Assistant に自宅の位置が設定されていません",
|
||||
"home_hemisphere_south": "南半球 — 季節の期間は反転されます",
|
||||
"home_trait_freeze": "冬の凍結",
|
||||
"home_trait_snow": "雪の多い冬",
|
||||
"home_trait_severe_winter": "厳しい冬",
|
||||
"home_trait_damp": "湿潤な気候",
|
||||
"home_trait_mediterranean": "地中海性気候",
|
||||
"home_trait_earthquake": "地震多発地域",
|
||||
"home_trait_hot_summer": "暑い夏",
|
||||
"home_trait_hot_humid": "高温多湿",
|
||||
"home_trait_hot_dry": "高温乾燥",
|
||||
"home_trait_termites": "シロアリ地域",
|
||||
"home_trait_wildfire": "山火事のリスク",
|
||||
"home_trait_cyclone": "ハリケーン・台風地域",
|
||||
"home_trait_tropical": "熱帯気候",
|
||||
"home_trait_radon": "ラドン測定を推奨",
|
||||
"home_reason_starter": "住まいの基本",
|
||||
"home_reason_country": "{country}で一般的",
|
||||
"home_reason_feature": "住まいで検出: {feature}",
|
||||
"templates_recommended_title": "あなたの住まいにおすすめ",
|
||||
"templates_recommended_hint": "住まいのプロフィールに基づきます。設定で変更できます。",
|
||||
"templates_legal_hint": "法的義務や期限に関する注記は目安であり、法的助言ではありません。規則は地域によって異なり、変更されることがあります。地域の法令とメーカーの指示を優先してください。",
|
||||
"templates_not_typical": "この住まいの種類では一般的ではありません",
|
||||
"templates_set_up": "設定済み",
|
||||
"worksheet": "作業シート",
|
||||
"worksheet_scan_view": "スキャンしてタスクを開く",
|
||||
"worksheet_scan_complete": "スキャンして完了",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "正常",
|
||||
"adopt_problem_new_object": "(新規)",
|
||||
"adopt_object_hint": "複数のセンサーに同じオブジェクト名を付けると1つのオブジェクトになります。既存のオブジェクト名を入力すればそこに追加されます。",
|
||||
"adopt_summary_title": "取り込みで変わること",
|
||||
"adopt_summary_existing": "「{name}」: タスク {before} → {after}",
|
||||
"adopt_problem_adopt": "選択を取り込む",
|
||||
"adopt_problem_done": "{tasks} 件の問題センサーを取り込みました",
|
||||
"views_label": "ビュー",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "しきい値から遠ざかっています",
|
||||
"split_select_hint": "タスクを選択すると、ここに詳細が表示されます",
|
||||
"setups_target_new": "新規作成:{name}",
|
||||
"setups_target_match": "{name} — 一致: {reasons}",
|
||||
"setups_reason_model": "型番",
|
||||
"setups_reason_name": "名前",
|
||||
"setups_reason_area": "エリア",
|
||||
"setups_reason_sibling": "別のデバイスで同じ機種",
|
||||
"setups_maybe_covered": "「{name}」としてすでにある可能性",
|
||||
"setups_already": "すでにあり: {names}",
|
||||
"setups_before_after": "オブジェクトのタスク: {before} → {after}",
|
||||
"setups_new_object_count": "新しいオブジェクト「{name}」· タスク: {count}",
|
||||
"schedule_preview_title": "次回の予定日",
|
||||
"schedule_preview_ontime": "期日どおりに完了した場合。",
|
||||
"schedule_preview_ends": "(シリーズ終了)",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"templates_from": "템플릿에서",
|
||||
"templates_title": "템플릿으로 시작하기",
|
||||
"templates_task_count": "작업 {n}개",
|
||||
"templates_task_count_one": "작업 1개",
|
||||
"template_created": "템플릿에서 생성됨",
|
||||
"onboard_hint": "첫 객체를 추가하여 유지보수 추적을 시작하세요.",
|
||||
"edit": "편집",
|
||||
@@ -46,6 +47,7 @@
|
||||
"bulk_delete_objects_confirm": "개체 {n}개와 모든 작업을 삭제할까요? 보관하면 기록이 유지됩니다.",
|
||||
"bulk_objects_deleted": "개체 {n}개 삭제됨",
|
||||
"bulk_objects_archived": "개체 {n}개 보관됨",
|
||||
"bulk_failed": "{n}개 실패: {reason}",
|
||||
"completing": "완료 처리 중…",
|
||||
"interval": "주기",
|
||||
"warning": "경고",
|
||||
@@ -200,8 +202,6 @@
|
||||
"show_all": "모두 보기",
|
||||
"cost_duration_chart": "비용 및 소요 시간",
|
||||
"installed": "설치일",
|
||||
"confirm_delete_object": "이 객체와 모든 작업을 삭제할까요?",
|
||||
"confirm_delete_task": "이 작업을 삭제할까요?",
|
||||
"min": "최소",
|
||||
"max": "최대",
|
||||
"save": "저장",
|
||||
@@ -243,7 +243,6 @@
|
||||
"sort_task_name": "작업 이름",
|
||||
"all_objects": "모든 객체",
|
||||
"all_parts": "모든 부품",
|
||||
"tasks_lower": "작업",
|
||||
"no_tasks_yet": "아직 작업 없음",
|
||||
"add_first_task": "첫 작업 추가",
|
||||
"trigger_configuration": "트리거 설정",
|
||||
@@ -300,6 +299,7 @@
|
||||
"tab_calendar": "캘린더",
|
||||
"cal_no_events": "유지보수 없음",
|
||||
"cal_every_n_days": "{n}일마다",
|
||||
"cal_every_day": "매일",
|
||||
"cal_source_time": "시간 기반",
|
||||
"cal_source_time_adaptive": "시간 기반 (적응형)",
|
||||
"cal_source_sensor": "센서 기반",
|
||||
@@ -691,7 +691,6 @@
|
||||
"budget_open_panel": "패널에서 열기",
|
||||
"groups_empty": "아직 그룹이 없습니다.",
|
||||
"group_new_placeholder": "그룹 추가…",
|
||||
"group_delete_confirm": "\"{name}\" 그룹을 삭제할까요?",
|
||||
"groups_manage_tasks": "작업 배정 관리…",
|
||||
"groups_open_panel": "패널에서 열기",
|
||||
"unassigned": "미배정",
|
||||
@@ -770,6 +769,7 @@
|
||||
"doc_delete_confirm": "\"{name}\"을(를) 삭제할까요?",
|
||||
"doc_too_large": "파일이 너무 큽니다 (최대 25 MB).",
|
||||
"doc_upload_failed": "업로드에 실패했습니다.",
|
||||
"docs_archive_too_large": "아카이브가 너무 큽니다(최대 {max}).",
|
||||
"completion_photos_optional": "완료 사진 (선택)",
|
||||
"completion_photos": "완료 사진",
|
||||
"choose_photos": "사진 선택",
|
||||
@@ -797,7 +797,11 @@
|
||||
"doc_camera": "사진 촬영",
|
||||
"camera_capture_shoot": "촬영",
|
||||
"camera_switch_lens": "카메라 전환",
|
||||
"camera_switch_failed": "다른 카메라가 응답하지 않았습니다. 이 휴대폰은 하나만 제공합니다. 다른 렌즈는 파일 선택기를 사용하세요.",
|
||||
"camera_switching": "카메라 전환 중…",
|
||||
"camera_not_answered": "이 카메라가 응답하지 않았습니다. 전환을 다시 눌러 다음 카메라를 시도하거나 파일 선택을 사용하세요.",
|
||||
"camera_diagnostics": "버그 신고용 세부 정보",
|
||||
"camera_copy": "복사",
|
||||
"camera_copied": "복사됨",
|
||||
"doc_drop_hint": "파일을 여기에 놓으세요",
|
||||
"doc_task_none": "이 작업에 연결된 문서가 없습니다.",
|
||||
"doc_link_existing": "문서 연결…",
|
||||
@@ -850,6 +854,55 @@
|
||||
"reading_below_last": "지난 검침값({value})보다 작습니다",
|
||||
"settings_templates_label": "템플릿 갤러리",
|
||||
"settings_templates_hint": "필요 없는 템플릿의 체크를 해제하세요 — \"템플릿에서\" 선택 목록(패널 및 설정 흐름)에서 사라집니다. 다른 변화는 없으며 언제든 다시 활성화할 수 있습니다.",
|
||||
"home_profile_title": "주거 프로필",
|
||||
"home_profile_hint": "기후와 반구에 맞춰 템플릿을 추천하고 계절 기간을 설정합니다. 모든 정보는 층, 영역, 집 위치를 바탕으로 로컬에서 판단됩니다.",
|
||||
"home_type_label": "주거 유형",
|
||||
"home_type_auto": "자동({detected})",
|
||||
"home_region_label": "주, 도 또는 지역",
|
||||
"home_region_none": "찾을 수 없음",
|
||||
"home_region_hint": "일부 규정은 같은 나라 안에서도 다릅니다. 어떤 주는 매년 차량 검사를 하고, 이웃 주는 하지 않습니다. 집 위치로 판단했습니다.",
|
||||
"home_dwelling_house": "주택",
|
||||
"home_dwelling_apartment": "아파트",
|
||||
"home_dwelling_unknown": "인식되지 않음",
|
||||
"home_detected_from": "판단 근거: {reasons}",
|
||||
"home_reason_floors": "여러 층",
|
||||
"home_reason_basement": "지하실",
|
||||
"home_reason_garden": "정원",
|
||||
"home_reason_shed": "창고",
|
||||
"home_reason_driveway": "진입로",
|
||||
"home_reason_garage": "차고",
|
||||
"home_reason_attic": "다락방",
|
||||
"home_reason_lawn_mower": "잔디깎이",
|
||||
"home_reason_gate": "대문",
|
||||
"home_reason_balcony": "발코니",
|
||||
"home_reason_small_home": "한 층에 방이 적음",
|
||||
"home_reason_ups": "무정전 전원 장치(UPS)",
|
||||
"home_climate_label": "기후",
|
||||
"home_climate_value": "쾨펜 {koppen} · 가장 추운 달 {cold} °C · 가장 더운 달 {warm} °C",
|
||||
"home_climate_unknown": "Home Assistant에 집 위치가 설정되지 않았습니다",
|
||||
"home_hemisphere_south": "남반구 — 계절 기간이 반대로 적용됩니다",
|
||||
"home_trait_freeze": "겨울철 서리",
|
||||
"home_trait_snow": "눈이 많은 겨울",
|
||||
"home_trait_severe_winter": "혹독한 겨울",
|
||||
"home_trait_damp": "습한 기후",
|
||||
"home_trait_mediterranean": "지중해성 기후",
|
||||
"home_trait_earthquake": "지진 위험 지역",
|
||||
"home_trait_hot_summer": "무더운 여름",
|
||||
"home_trait_hot_humid": "덥고 습함",
|
||||
"home_trait_hot_dry": "덥고 건조함",
|
||||
"home_trait_termites": "흰개미 서식 지역",
|
||||
"home_trait_wildfire": "산불 위험",
|
||||
"home_trait_cyclone": "허리케인·태풍 지역",
|
||||
"home_trait_tropical": "열대 기후",
|
||||
"home_trait_radon": "라돈 측정 권장",
|
||||
"home_reason_starter": "집의 기본 항목",
|
||||
"home_reason_country": "{country}에서 일반적",
|
||||
"home_reason_feature": "집에서 발견됨: {feature}",
|
||||
"templates_recommended_title": "우리 집 추천",
|
||||
"templates_recommended_hint": "주거 프로필 기준 — 설정에서 조정하세요.",
|
||||
"templates_legal_hint": "법적 의무와 주기에 관한 안내는 참고용이며 법률 자문이 아닙니다. 규정은 지역마다 다르고 바뀔 수 있으니 현지 규정과 제조사 지침을 우선하세요.",
|
||||
"templates_not_typical": "이 주거 유형에는 일반적이지 않음",
|
||||
"templates_set_up": "이미 설정됨",
|
||||
"worksheet": "작업 시트",
|
||||
"worksheet_scan_view": "스캔하여 작업 열기",
|
||||
"worksheet_scan_complete": "스캔하여 완료",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "정상",
|
||||
"adopt_problem_new_object": "(신규)",
|
||||
"adopt_object_hint": "여러 센서에 같은 개체 이름을 주면 하나의 개체가 됩니다. 기존 개체 이름을 입력하면 거기에 추가됩니다.",
|
||||
"adopt_summary_title": "가져오기로 바뀌는 점",
|
||||
"adopt_summary_existing": "\"{name}\": 작업 {before} → {after}",
|
||||
"adopt_problem_adopt": "선택 항목 가져오기",
|
||||
"adopt_problem_done": "문제 센서 {tasks}개를 가져왔습니다",
|
||||
"views_label": "보기",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "임계값에서 멀어지는 중",
|
||||
"split_select_hint": "작업을 선택하면 여기에 세부 정보가 표시됩니다",
|
||||
"setups_target_new": "새로 만들기: {name}",
|
||||
"setups_target_match": "{name} — 일치: {reasons}",
|
||||
"setups_reason_model": "모델 번호",
|
||||
"setups_reason_name": "이름",
|
||||
"setups_reason_area": "공간",
|
||||
"setups_reason_sibling": "다른 기기의 같은 모델",
|
||||
"setups_maybe_covered": "이미 \"{name}\"(으)로 있을 수 있음",
|
||||
"setups_already": "이미 있음: {names}",
|
||||
"setups_before_after": "객체의 작업: {before} → {after}",
|
||||
"setups_new_object_count": "새 객체 \"{name}\" · 작업: {count}",
|
||||
"schedule_preview_title": "다음 예정일",
|
||||
"schedule_preview_ontime": "제때 완료한다고 가정한 일정입니다.",
|
||||
"schedule_preview_ends": "(시리즈 종료)",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"templates_from": "Fra mal",
|
||||
"templates_title": "Start fra en mal",
|
||||
"templates_task_count": "{n} oppgaver",
|
||||
"templates_task_count_one": "1 oppgave",
|
||||
"template_created": "Opprettet fra mal",
|
||||
"onboard_hint": "Legg til ditt første objekt for å spore vedlikehold.",
|
||||
"edit": "Rediger",
|
||||
@@ -46,6 +47,7 @@
|
||||
"bulk_delete_objects_confirm": "Slette {n} objekter og alle oppgavene deres? Arkivering beholder historikken i stedet.",
|
||||
"bulk_objects_deleted": "{n} objekter slettet",
|
||||
"bulk_objects_archived": "{n} objekter arkivert",
|
||||
"bulk_failed": "{n} mislyktes: {reason}",
|
||||
"completing": "Fullfører…",
|
||||
"interval": "Intervall",
|
||||
"warning": "Advarsel",
|
||||
@@ -200,8 +202,6 @@
|
||||
"show_all": "Vis alle",
|
||||
"cost_duration_chart": "Kostnad og varighet",
|
||||
"installed": "Installert",
|
||||
"confirm_delete_object": "Slette dette objektet og alle dets oppgaver?",
|
||||
"confirm_delete_task": "Slette denne oppgaven?",
|
||||
"min": "Min",
|
||||
"max": "Maks",
|
||||
"save": "Lagre",
|
||||
@@ -243,7 +243,6 @@
|
||||
"sort_task_name": "Oppgavenavn",
|
||||
"all_objects": "Alle objekter",
|
||||
"all_parts": "Alle deler",
|
||||
"tasks_lower": "oppgaver",
|
||||
"no_tasks_yet": "Ingen oppgaver ennå",
|
||||
"add_first_task": "Legg til første oppgave",
|
||||
"trigger_configuration": "Utløserkonfigurasjon",
|
||||
@@ -300,6 +299,7 @@
|
||||
"tab_calendar": "Kalender",
|
||||
"cal_no_events": "Ingen vedlikehold",
|
||||
"cal_every_n_days": "hver {n}. dag",
|
||||
"cal_every_day": "hver dag",
|
||||
"cal_source_time": "Tidsbasert",
|
||||
"cal_source_time_adaptive": "Tidsbasert (adaptiv)",
|
||||
"cal_source_sensor": "Sensorbasert",
|
||||
@@ -685,7 +685,6 @@
|
||||
"budget_open_panel": "Åpne i panel",
|
||||
"groups_empty": "Ingen grupper ennå.",
|
||||
"group_new_placeholder": "Legg til gruppe…",
|
||||
"group_delete_confirm": "Slette gruppen \"{name}\"?",
|
||||
"groups_manage_tasks": "Administrer oppgavetildelinger…",
|
||||
"groups_open_panel": "Åpne i panel",
|
||||
"unassigned": "Ikke tildelt",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "Slette \"{name}\"?",
|
||||
"doc_too_large": "Filen er for stor (maks. 25 MB).",
|
||||
"doc_upload_failed": "Opplasting mislyktes.",
|
||||
"docs_archive_too_large": "Arkivet er for stort (maks. {max}).",
|
||||
"completion_photos_optional": "Bilder ved fullføring (valgfritt)",
|
||||
"completion_photos": "Bilder ved fullføring",
|
||||
"choose_photos": "Velg bilder",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "Ta bilde",
|
||||
"camera_capture_shoot": "Ta bilde",
|
||||
"camera_switch_lens": "Bytt kamera",
|
||||
"camera_switch_failed": "Ingen andre kameraer svarte – denne telefonen gir bare fra seg ett. Bruk filvelgeren for det andre objektivet.",
|
||||
"camera_switching": "Bytter kamera…",
|
||||
"camera_not_answered": "Dette kameraet svarte ikke. Trykk på bytt igjen for å prøve det neste, eller bruk filvelgeren.",
|
||||
"camera_diagnostics": "Detaljer for en feilrapport",
|
||||
"camera_copy": "Kopier",
|
||||
"camera_copied": "Kopiert",
|
||||
"doc_drop_hint": "Slipp filer her",
|
||||
"doc_task_none": "Ingen dokumenter knyttet til denne oppgaven.",
|
||||
"doc_link_existing": "Knytt et dokument…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "Lavere enn forrige avlesning ({value})",
|
||||
"settings_templates_label": "Malgalleri",
|
||||
"settings_templates_hint": "Fjern haken for maler du aldri trenger — de forsvinner fra \"Fra mal\"-velgerne (panel og config flow). Ellers endres ingenting; kan aktiveres igjen når som helst.",
|
||||
"home_profile_title": "Boligprofil",
|
||||
"home_profile_hint": "Anbefaler maler og setter sesongvinduer etter ditt klima og din halvkule. Alt beregnes lokalt ut fra etasjene, områdene og boligens plassering.",
|
||||
"home_type_label": "Boligtype",
|
||||
"home_type_auto": "Automatisk ({detected})",
|
||||
"home_region_label": "Delstat, provins eller region",
|
||||
"home_region_none": "ikke funnet",
|
||||
"home_region_hint": "Noen regler varierer innenfor et land – årlig kjøretøykontroll i én delstat, ingen i den neste. Funnet ut fra hjemmets plassering.",
|
||||
"home_dwelling_house": "Hus",
|
||||
"home_dwelling_apartment": "Leilighet",
|
||||
"home_dwelling_unknown": "ikke gjenkjent",
|
||||
"home_detected_from": "Gjenkjent ut fra: {reasons}",
|
||||
"home_reason_floors": "flere etasjer",
|
||||
"home_reason_basement": "en kjeller",
|
||||
"home_reason_garden": "en hage",
|
||||
"home_reason_shed": "et uthus",
|
||||
"home_reason_driveway": "en innkjørsel",
|
||||
"home_reason_garage": "en garasje",
|
||||
"home_reason_attic": "et loft",
|
||||
"home_reason_lawn_mower": "en gressklipper",
|
||||
"home_reason_gate": "en port",
|
||||
"home_reason_balcony": "en balkong",
|
||||
"home_reason_small_home": "få rom på ett plan",
|
||||
"home_reason_ups": "en UPS-enhet",
|
||||
"home_climate_label": "Klima",
|
||||
"home_climate_value": "Köppen {koppen} · kaldeste måned {cold} °C · varmeste måned {warm} °C",
|
||||
"home_climate_unknown": "Ingen hjemplassering er angitt i Home Assistant",
|
||||
"home_hemisphere_south": "Den sørlige halvkule — sesongvinduer speilvendes",
|
||||
"home_trait_freeze": "Frost om vinteren",
|
||||
"home_trait_snow": "Snørike vintre",
|
||||
"home_trait_severe_winter": "Harde vintre",
|
||||
"home_trait_damp": "Fuktig klima",
|
||||
"home_trait_mediterranean": "Middelhavsklima",
|
||||
"home_trait_earthquake": "Jordskjelvområde",
|
||||
"home_trait_hot_summer": "Varme somre",
|
||||
"home_trait_hot_humid": "Varmt og fuktig",
|
||||
"home_trait_hot_dry": "Varmt og tørt",
|
||||
"home_trait_termites": "Termittområde",
|
||||
"home_trait_wildfire": "Fare for skogbrann",
|
||||
"home_trait_cyclone": "Orkan-/tyfonområde",
|
||||
"home_trait_tropical": "Tropisk klima",
|
||||
"home_trait_radon": "Radonmåling anbefales",
|
||||
"home_reason_starter": "Det grunnleggende for hjemmet ditt",
|
||||
"home_reason_country": "Vanlig i {country}",
|
||||
"home_reason_feature": "Funnet i hjemmet ditt: {feature}",
|
||||
"templates_recommended_title": "Anbefalt for hjemmet ditt",
|
||||
"templates_recommended_hint": "Basert på boligprofilen din — kan endres under Innstillinger.",
|
||||
"templates_legal_hint": "Merknader om lovpålagte plikter og frister er veiledende og ikke juridisk rådgivning. Reglene varierer fra region til region og endres over tid — lokale forskrifter og produsentens anvisninger går foran.",
|
||||
"templates_not_typical": "Uvanlig for din boligtype",
|
||||
"templates_set_up": "Allerede satt opp",
|
||||
"worksheet": "Arbeidsark",
|
||||
"worksheet_scan_view": "Skann for å åpne oppgaven",
|
||||
"worksheet_scan_complete": "Skann for å fullføre",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(ny)",
|
||||
"adopt_object_hint": "Gi flere sensorer samme objektnavn, så blir de ett objekt; skriv navnet på et eksisterende objekt for å legge dem der.",
|
||||
"adopt_summary_title": "Hva overtakelsen endrer",
|
||||
"adopt_summary_existing": "«{name}»: oppgaver {before} → {after}",
|
||||
"adopt_problem_adopt": "Ta i bruk valgte",
|
||||
"adopt_problem_done": "Tok i bruk {tasks} problemsensor(er)",
|
||||
"views_label": "Visninger",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Beveger seg bort fra terskelen",
|
||||
"split_select_hint": "Velg en oppgave for å se detaljene her",
|
||||
"setups_target_new": "Opprett ny: {name}",
|
||||
"setups_target_match": "{name} — passer: {reasons}",
|
||||
"setups_reason_model": "modellnummer",
|
||||
"setups_reason_name": "navn",
|
||||
"setups_reason_area": "område",
|
||||
"setups_reason_sibling": "samme modell på en annen enhet",
|
||||
"setups_maybe_covered": "Finnes sannsynligvis allerede som «{name}»",
|
||||
"setups_already": "Finnes allerede: {names}",
|
||||
"setups_before_after": "Oppgaver på objektet: {before} → {after}",
|
||||
"setups_new_object_count": "Nytt objekt «{name}» · oppgaver: {count}",
|
||||
"schedule_preview_title": "Kommende datoer",
|
||||
"schedule_preview_ontime": "Forutsatt fullføring i tide.",
|
||||
"schedule_preview_ends": "(serien avsluttes)",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"templates_from": "Uit sjabloon",
|
||||
"templates_title": "Begin met een sjabloon",
|
||||
"templates_task_count": "{n} taken",
|
||||
"templates_task_count_one": "1 taak",
|
||||
"template_created": "Aangemaakt uit sjabloon",
|
||||
"onboard_hint": "Voeg je eerste object toe om onderhoud te volgen.",
|
||||
"edit": "Bewerken",
|
||||
@@ -44,6 +45,7 @@
|
||||
"bulk_delete_objects_confirm": "{n} objecten met al hun taken verwijderen? Archiveren bewaart in plaats daarvan de geschiedenis.",
|
||||
"bulk_objects_deleted": "{n} objecten verwijderd",
|
||||
"bulk_objects_archived": "{n} objecten gearchiveerd",
|
||||
"bulk_failed": "{n} mislukt: {reason}",
|
||||
"completing": "Wordt voltooid…",
|
||||
"interval": "Interval",
|
||||
"warning": "Waarschuwing",
|
||||
@@ -198,8 +200,6 @@
|
||||
"show_all": "Alles tonen",
|
||||
"cost_duration_chart": "Kosten & Duur",
|
||||
"installed": "Geïnstalleerd",
|
||||
"confirm_delete_object": "Dit object en alle bijbehorende taken verwijderen?",
|
||||
"confirm_delete_task": "Deze taak verwijderen?",
|
||||
"min": "Min",
|
||||
"max": "Max",
|
||||
"save": "Opslaan",
|
||||
@@ -241,7 +241,6 @@
|
||||
"sort_task_name": "Taaknaam",
|
||||
"all_objects": "Alle objecten",
|
||||
"all_parts": "Alle onderdelen",
|
||||
"tasks_lower": "taken",
|
||||
"no_tasks_yet": "Nog geen taken",
|
||||
"add_first_task": "Eerste taak toevoegen",
|
||||
"trigger_configuration": "Triggerconfiguratie",
|
||||
@@ -298,6 +297,7 @@
|
||||
"tab_calendar": "Kalender",
|
||||
"cal_no_events": "Geen onderhoud",
|
||||
"cal_every_n_days": "elke {n} dagen",
|
||||
"cal_every_day": "elke dag",
|
||||
"cal_source_time": "Tijd-gebaseerd",
|
||||
"cal_source_time_adaptive": "Tijd-gebaseerd (adaptief)",
|
||||
"cal_source_sensor": "Sensor-gebaseerd",
|
||||
@@ -713,7 +713,6 @@
|
||||
"budget_open_panel": "Openen in paneel",
|
||||
"groups_empty": "Nog geen groepen.",
|
||||
"group_new_placeholder": "Groep toevoegen…",
|
||||
"group_delete_confirm": "Groep \"{name}\" verwijderen?",
|
||||
"groups_manage_tasks": "Taaktoewijzingen beheren…",
|
||||
"groups_open_panel": "Openen in paneel",
|
||||
"on_complete_action_target_hint": "Let op: het domein van de entiteit moet bij de service passen — bijv. 'button.press' werkt alleen op button.*, 'counter.increment' alleen op counter.*, 'input_button.press' alleen op input_button.* enz. Bij een mismatch mislukt de actie stil (HA logt 'Referenced entities ... missing or not currently available').",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "\"{name}\" verwijderen?",
|
||||
"doc_too_large": "Bestand is te groot (max. 25 MB).",
|
||||
"doc_upload_failed": "Uploaden mislukt.",
|
||||
"docs_archive_too_large": "Het archief is te groot (max. {max}).",
|
||||
"completion_photos_optional": "Foto's bij afronding (optioneel)",
|
||||
"completion_photos": "Foto's bij afronding",
|
||||
"choose_photos": "Foto's kiezen",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "Foto maken",
|
||||
"camera_capture_shoot": "Vastleggen",
|
||||
"camera_switch_lens": "Camera wisselen",
|
||||
"camera_switch_failed": "Geen andere camera reageerde — deze telefoon geeft er maar één vrij. Gebruik de bestandskiezer voor de andere lens.",
|
||||
"camera_switching": "Camera wisselen…",
|
||||
"camera_not_answered": "Deze camera reageerde niet. Tik opnieuw op wisselen om de volgende te proberen, of gebruik de bestandskiezer.",
|
||||
"camera_diagnostics": "Details voor een foutmelding",
|
||||
"camera_copy": "Kopiëren",
|
||||
"camera_copied": "Gekopieerd",
|
||||
"doc_drop_hint": "Sleep bestanden hierheen",
|
||||
"doc_task_none": "Geen documenten aan deze taak gekoppeld.",
|
||||
"doc_link_existing": "Document koppelen…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "Lager dan de vorige meterstand ({value})",
|
||||
"settings_templates_label": "Sjabloongalerij",
|
||||
"settings_templates_hint": "Vink sjablonen uit die je nooit nodig hebt — ze verdwijnen uit de \"Vanuit sjabloon\"-keuzes (paneel en config flow). Verder verandert er niets; altijd weer in te schakelen.",
|
||||
"home_profile_title": "Woningprofiel",
|
||||
"home_profile_hint": "Beveelt sjablonen aan en stelt seizoensvensters in voor je klimaat en halfrond. Alles wordt lokaal bepaald uit je verdiepingen, ruimtes en locatie.",
|
||||
"home_type_label": "Woningtype",
|
||||
"home_type_auto": "Automatisch ({detected})",
|
||||
"home_region_label": "Staat, provincie of regio",
|
||||
"home_region_none": "niet gevonden",
|
||||
"home_region_hint": "Sommige regels verschillen binnen een land: een jaarlijkse voertuigkeuring in de ene staat, geen in de volgende. Bepaald op basis van de locatie van je woning.",
|
||||
"home_dwelling_house": "Huis",
|
||||
"home_dwelling_apartment": "Appartement",
|
||||
"home_dwelling_unknown": "niet herkend",
|
||||
"home_detected_from": "Herkend aan: {reasons}",
|
||||
"home_reason_floors": "meerdere verdiepingen",
|
||||
"home_reason_basement": "een kelder",
|
||||
"home_reason_garden": "een tuin",
|
||||
"home_reason_shed": "een schuur",
|
||||
"home_reason_driveway": "een oprit",
|
||||
"home_reason_garage": "een garage",
|
||||
"home_reason_attic": "een zolder",
|
||||
"home_reason_lawn_mower": "een grasmaaier",
|
||||
"home_reason_gate": "een poort",
|
||||
"home_reason_balcony": "een balkon",
|
||||
"home_reason_small_home": "weinig ruimtes op één verdieping",
|
||||
"home_reason_ups": "een noodstroomvoeding (UPS)",
|
||||
"home_climate_label": "Klimaat",
|
||||
"home_climate_value": "Köppen {koppen} · koudste maand {cold} °C · warmste maand {warm} °C",
|
||||
"home_climate_unknown": "Geen thuislocatie ingesteld in Home Assistant",
|
||||
"home_hemisphere_south": "Zuidelijk halfrond — seizoensvensters worden gespiegeld",
|
||||
"home_trait_freeze": "Vorst in de winter",
|
||||
"home_trait_snow": "Sneeuwrijke winters",
|
||||
"home_trait_severe_winter": "Strenge winters",
|
||||
"home_trait_damp": "Vochtig klimaat",
|
||||
"home_trait_mediterranean": "Mediterraan klimaat",
|
||||
"home_trait_earthquake": "Aardbevingsgebied",
|
||||
"home_trait_hot_summer": "Hete zomers",
|
||||
"home_trait_hot_humid": "Heet en vochtig",
|
||||
"home_trait_hot_dry": "Heet en droog",
|
||||
"home_trait_termites": "Termietengebied",
|
||||
"home_trait_wildfire": "Risico op natuurbranden",
|
||||
"home_trait_cyclone": "Orkaan-/tyfoongebied",
|
||||
"home_trait_tropical": "Tropisch klimaat",
|
||||
"home_trait_radon": "Radontest aanbevolen",
|
||||
"home_reason_starter": "Basis voor je woning",
|
||||
"home_reason_country": "Gebruikelijk in {country}",
|
||||
"home_reason_feature": "Gevonden in je woning: {feature}",
|
||||
"templates_recommended_title": "Aanbevolen voor je woning",
|
||||
"templates_recommended_hint": "Op basis van je woningprofiel — aan te passen in Instellingen.",
|
||||
"templates_legal_hint": "Opmerkingen over wettelijke verplichtingen en termijnen zijn een richtlijn, geen juridisch advies. Regels verschillen per regio en veranderen — lokale voorschriften en de instructies van de fabrikant gaan voor.",
|
||||
"templates_not_typical": "Niet gebruikelijk voor je woningtype",
|
||||
"templates_set_up": "Al ingesteld",
|
||||
"worksheet": "Werkblad",
|
||||
"worksheet_scan_view": "Scan om de taak te openen",
|
||||
"worksheet_scan_complete": "Scan om af te ronden",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(nieuw)",
|
||||
"adopt_object_hint": "Geef meerdere sensoren dezelfde objectnaam en ze worden één object; typ de naam van een bestaand object om ze daar toe te voegen.",
|
||||
"adopt_summary_title": "Wat overnemen verandert",
|
||||
"adopt_summary_existing": "\"{name}\": taken {before} → {after}",
|
||||
"adopt_problem_adopt": "Selectie overnemen",
|
||||
"adopt_problem_done": "{tasks} probleemsensor(en) overgenomen",
|
||||
"views_label": "Weergaven",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Beweegt weg van de drempel",
|
||||
"split_select_hint": "Selecteer een taak om hier de details te zien",
|
||||
"setups_target_new": "Nieuw aanmaken: {name}",
|
||||
"setups_target_match": "{name} — komt overeen: {reasons}",
|
||||
"setups_reason_model": "modelnummer",
|
||||
"setups_reason_name": "naam",
|
||||
"setups_reason_area": "ruimte",
|
||||
"setups_reason_sibling": "zelfde model op een ander apparaat",
|
||||
"setups_maybe_covered": "Waarschijnlijk al aanwezig als \"{name}\"",
|
||||
"setups_already": "Al aanwezig: {names}",
|
||||
"setups_before_after": "Taken van het object: {before} → {after}",
|
||||
"setups_new_object_count": "Nieuw object \"{name}\" · taken: {count}",
|
||||
"schedule_preview_title": "Volgende data",
|
||||
"schedule_preview_ontime": "Uitgaande van tijdige afronding.",
|
||||
"schedule_preview_ends": "(reeks eindigt)",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"templates_from": "Z szablonu",
|
||||
"templates_title": "Zacznij od szablonu",
|
||||
"templates_task_count": "{n} zadań",
|
||||
"templates_task_count_one": "1 zadanie",
|
||||
"template_created": "Utworzono z szablonu",
|
||||
"onboard_hint": "Dodaj pierwszy obiekt, aby śledzić konserwację.",
|
||||
"edit": "Edytuj",
|
||||
@@ -44,6 +45,7 @@
|
||||
"bulk_delete_objects_confirm": "Usunąć {n} obiektów wraz ze wszystkimi zadaniami? Archiwizacja zachowa ich historię.",
|
||||
"bulk_objects_deleted": "Usunięto obiektów: {n}",
|
||||
"bulk_objects_archived": "Zarchiwizowano obiektów: {n}",
|
||||
"bulk_failed": "Nieudane: {n} — {reason}",
|
||||
"completing": "Wykonywanie…",
|
||||
"interval": "Interwał",
|
||||
"warning": "Ostrzeżenie",
|
||||
@@ -198,8 +200,6 @@
|
||||
"show_all": "Pokaż wszystko",
|
||||
"cost_duration_chart": "Koszt i czas trwania",
|
||||
"installed": "Zainstalowane",
|
||||
"confirm_delete_object": "Usunąć ten obiekt i wszystkie jego zadania?",
|
||||
"confirm_delete_task": "Usunąć to zadanie?",
|
||||
"min": "Min",
|
||||
"max": "Maks",
|
||||
"save": "Zapisz",
|
||||
@@ -241,7 +241,6 @@
|
||||
"sort_task_name": "Nazwa zadania",
|
||||
"all_objects": "Wszystkie obiekty",
|
||||
"all_parts": "Wszystkie części",
|
||||
"tasks_lower": "zadań",
|
||||
"no_tasks_yet": "Jeszcze brak zadań",
|
||||
"add_first_task": "Dodaj pierwsze zadanie",
|
||||
"trigger_configuration": "Konfiguracja wyzwalacza",
|
||||
@@ -298,6 +297,7 @@
|
||||
"tab_calendar": "Kalendarz",
|
||||
"cal_no_events": "Brak konserwacji",
|
||||
"cal_every_n_days": "co {n} dni",
|
||||
"cal_every_day": "codziennie",
|
||||
"cal_source_time": "Czas",
|
||||
"cal_source_time_adaptive": "Czas (adaptacyjny)",
|
||||
"cal_source_sensor": "Czujnik",
|
||||
@@ -713,7 +713,6 @@
|
||||
"budget_open_panel": "Otwórz w panelu",
|
||||
"groups_empty": "Brak grup.",
|
||||
"group_new_placeholder": "Dodaj grupę…",
|
||||
"group_delete_confirm": "Usunąć grupę „{name}”?",
|
||||
"groups_manage_tasks": "Zarządzaj przypisaniami zadań…",
|
||||
"groups_open_panel": "Otwórz w panelu",
|
||||
"on_complete_action_target_hint": "Uwaga: domena encji musi pasować do usługi — np. 'button.press' działa tylko na button.*, 'counter.increment' tylko na counter.*, 'input_button.press' tylko na input_button.* itd. W przypadku niezgodności akcja po cichu się nie wykona (HA zapisze w dzienniku 'Referenced entities ... missing or not currently available').",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "Usunąć „{name}”?",
|
||||
"doc_too_large": "Plik jest za duży (maks. 25 MB).",
|
||||
"doc_upload_failed": "Przesyłanie nie powiodło się.",
|
||||
"docs_archive_too_large": "Archiwum jest za duże (maks. {max}).",
|
||||
"completion_photos_optional": "Zdjęcia z wykonania (opcjonalnie)",
|
||||
"completion_photos": "Zdjęcia z wykonania",
|
||||
"choose_photos": "Wybierz zdjęcia",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "Zrób zdjęcie",
|
||||
"camera_capture_shoot": "Zrób zdjęcie",
|
||||
"camera_switch_lens": "Przełącz kamerę",
|
||||
"camera_switch_failed": "Żadna inna kamera nie odpowiedziała — ten telefon udostępnia tylko jedną. Dla drugiego obiektywu użyj wyboru pliku.",
|
||||
"camera_switching": "Przełączanie aparatu…",
|
||||
"camera_not_answered": "Ten aparat nie odpowiedział. Stuknij ponownie przełącznik, aby spróbować następnego, lub użyj wyboru pliku.",
|
||||
"camera_diagnostics": "Szczegóły do zgłoszenia błędu",
|
||||
"camera_copy": "Kopiuj",
|
||||
"camera_copied": "Skopiowano",
|
||||
"doc_drop_hint": "Upuść pliki tutaj",
|
||||
"doc_task_none": "Brak dokumentów powiązanych z tym zadaniem.",
|
||||
"doc_link_existing": "Powiąż dokument…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "Mniej niż ostatni odczyt ({value})",
|
||||
"settings_templates_label": "Galeria szablonów",
|
||||
"settings_templates_hint": "Odznacz szablony, których nigdy nie użyjesz — znikną z wyboru „Z szablonu\" (panel i config flow). Nic więcej się nie zmienia; można je włączyć ponownie w każdej chwili.",
|
||||
"home_profile_title": "Profil domu",
|
||||
"home_profile_hint": "Poleca szablony i ustawia okna sezonowe zgodnie z Twoim klimatem i półkulą. Wszystko jest ustalane lokalnie na podstawie pięter, obszarów i lokalizacji domu.",
|
||||
"home_type_label": "Rodzaj domu",
|
||||
"home_type_auto": "Automatycznie ({detected})",
|
||||
"home_region_label": "Stan, prowincja lub region",
|
||||
"home_region_none": "nie znaleziono",
|
||||
"home_region_hint": "Niektóre przepisy różnią się w obrębie kraju – w jednym stanie coroczny przegląd pojazdu, w sąsiednim żaden. Ustalono na podstawie lokalizacji domu.",
|
||||
"home_dwelling_house": "Dom",
|
||||
"home_dwelling_apartment": "Mieszkanie",
|
||||
"home_dwelling_unknown": "nie rozpoznano",
|
||||
"home_detected_from": "Rozpoznano po: {reasons}",
|
||||
"home_reason_floors": "kilka pięter",
|
||||
"home_reason_basement": "piwnica",
|
||||
"home_reason_garden": "ogród",
|
||||
"home_reason_shed": "szopa",
|
||||
"home_reason_driveway": "podjazd",
|
||||
"home_reason_garage": "garaż",
|
||||
"home_reason_attic": "strych",
|
||||
"home_reason_lawn_mower": "kosiarka",
|
||||
"home_reason_gate": "brama",
|
||||
"home_reason_balcony": "balkon",
|
||||
"home_reason_small_home": "mało pomieszczeń na jednym piętrze",
|
||||
"home_reason_ups": "zasilacz UPS",
|
||||
"home_climate_label": "Klimat",
|
||||
"home_climate_value": "Köppen {koppen} · najzimniejszy miesiąc {cold} °C · najcieplejszy miesiąc {warm} °C",
|
||||
"home_climate_unknown": "Nie ustawiono lokalizacji domu w Home Assistant",
|
||||
"home_hemisphere_south": "Półkula południowa — okna sezonowe są odwrócone",
|
||||
"home_trait_freeze": "Mrozy zimą",
|
||||
"home_trait_snow": "Śnieżne zimy",
|
||||
"home_trait_severe_winter": "Surowe zimy",
|
||||
"home_trait_damp": "Wilgotny klimat",
|
||||
"home_trait_mediterranean": "Klimat śródziemnomorski",
|
||||
"home_trait_earthquake": "Obszar sejsmiczny",
|
||||
"home_trait_hot_summer": "Upalne lata",
|
||||
"home_trait_hot_humid": "Gorąco i wilgotno",
|
||||
"home_trait_hot_dry": "Gorąco i sucho",
|
||||
"home_trait_termites": "Obszar występowania termitów",
|
||||
"home_trait_wildfire": "Ryzyko pożarów lasów",
|
||||
"home_trait_cyclone": "Obszar huraganów / tajfunów",
|
||||
"home_trait_tropical": "Klimat tropikalny",
|
||||
"home_trait_radon": "Zalecany pomiar radonu",
|
||||
"home_reason_starter": "Podstawy dla Twojego domu",
|
||||
"home_reason_country": "Popularne w kraju: {country}",
|
||||
"home_reason_feature": "Znaleziono w Twoim domu: {feature}",
|
||||
"templates_recommended_title": "Polecane dla Twojego domu",
|
||||
"templates_recommended_hint": "Na podstawie profilu domu — możesz go zmienić w Ustawieniach.",
|
||||
"templates_legal_hint": "Informacje o obowiązkach prawnych i terminach mają charakter orientacyjny i nie stanowią porady prawnej. Przepisy różnią się w zależności od regionu i zmieniają się — pierwszeństwo mają lokalne przepisy i instrukcje producenta.",
|
||||
"templates_not_typical": "Nietypowe dla Twojego rodzaju domu",
|
||||
"templates_set_up": "Już skonfigurowano",
|
||||
"worksheet": "Karta pracy",
|
||||
"worksheet_scan_view": "Zeskanuj, aby otworzyć zadanie",
|
||||
"worksheet_scan_complete": "Zeskanuj, aby ukończyć",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(nowy)",
|
||||
"adopt_object_hint": "Nadaj kilku czujnikom tę samą nazwę obiektu, a staną się jednym obiektem; wpisz nazwę istniejącego obiektu, aby je tam dodać.",
|
||||
"adopt_summary_title": "Co zmieni przejęcie",
|
||||
"adopt_summary_existing": "„{name}”: zadania {before} → {after}",
|
||||
"adopt_problem_adopt": "Przejmij zaznaczone",
|
||||
"adopt_problem_done": "Przejęto {tasks} czujnik(ów) problemów",
|
||||
"views_label": "Widoki",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Oddala się od progu",
|
||||
"split_select_hint": "Wybierz zadanie, aby zobaczyć tutaj szczegóły",
|
||||
"setups_target_new": "Utwórz nowy: {name}",
|
||||
"setups_target_match": "{name} — pasuje: {reasons}",
|
||||
"setups_reason_model": "numer modelu",
|
||||
"setups_reason_name": "nazwa",
|
||||
"setups_reason_area": "obszar",
|
||||
"setups_reason_sibling": "ten sam model na innym urządzeniu",
|
||||
"setups_maybe_covered": "Prawdopodobnie już istnieje jako „{name}”",
|
||||
"setups_already": "Już istnieje: {names}",
|
||||
"setups_before_after": "Zadania obiektu: {before} → {after}",
|
||||
"setups_new_object_count": "Nowy obiekt „{name}” · zadania: {count}",
|
||||
"schedule_preview_title": "Najbliższe terminy",
|
||||
"schedule_preview_ontime": "Przy założeniu terminowego ukończenia.",
|
||||
"schedule_preview_ends": "(seria się kończy)",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"templates_from": "A partir de modelo",
|
||||
"templates_title": "Comece com um modelo",
|
||||
"templates_task_count": "{n} tarefas",
|
||||
"templates_task_count_one": "1 tarefa",
|
||||
"template_created": "Criado a partir do modelo",
|
||||
"onboard_hint": "Adicione seu primeiro objeto para começar a acompanhar a manutenção.",
|
||||
"edit": "Editar",
|
||||
@@ -46,6 +47,7 @@
|
||||
"bulk_delete_objects_confirm": "Excluir {n} objetos e todas as suas tarefas? Arquivar mantém o histórico.",
|
||||
"bulk_objects_deleted": "{n} objetos excluídos",
|
||||
"bulk_objects_archived": "{n} objetos arquivados",
|
||||
"bulk_failed": "{n} falharam: {reason}",
|
||||
"completing": "Concluindo…",
|
||||
"interval": "Intervalo",
|
||||
"warning": "Aviso",
|
||||
@@ -200,8 +202,6 @@
|
||||
"show_all": "Mostrar tudo",
|
||||
"cost_duration_chart": "Custo e duração",
|
||||
"installed": "Instalado",
|
||||
"confirm_delete_object": "Excluir este objeto e todas as suas tarefas?",
|
||||
"confirm_delete_task": "Excluir esta tarefa?",
|
||||
"min": "Mín",
|
||||
"max": "Máx",
|
||||
"save": "Salvar",
|
||||
@@ -243,7 +243,6 @@
|
||||
"sort_task_name": "Nome da tarefa",
|
||||
"all_objects": "Todos os objetos",
|
||||
"all_parts": "Todas as peças",
|
||||
"tasks_lower": "tarefas",
|
||||
"no_tasks_yet": "Ainda sem tarefas",
|
||||
"add_first_task": "Adicionar a primeira tarefa",
|
||||
"trigger_configuration": "Configuração do gatilho",
|
||||
@@ -300,6 +299,7 @@
|
||||
"tab_calendar": "Calendário",
|
||||
"cal_no_events": "Sem manutenção",
|
||||
"cal_every_n_days": "a cada {n} dias",
|
||||
"cal_every_day": "todos os dias",
|
||||
"cal_source_time": "Baseado em tempo",
|
||||
"cal_source_time_adaptive": "Baseado em tempo (adaptativo)",
|
||||
"cal_source_sensor": "Baseado em sensor",
|
||||
@@ -691,7 +691,6 @@
|
||||
"budget_open_panel": "Abrir no painel",
|
||||
"groups_empty": "Ainda sem grupos.",
|
||||
"group_new_placeholder": "Adicionar grupo…",
|
||||
"group_delete_confirm": "Excluir o grupo \"{name}\"?",
|
||||
"groups_manage_tasks": "Gerenciar atribuições de tarefas…",
|
||||
"groups_open_panel": "Abrir no painel",
|
||||
"unassigned": "Sem atribuição",
|
||||
@@ -770,6 +769,7 @@
|
||||
"doc_delete_confirm": "Excluir \"{name}\"?",
|
||||
"doc_too_large": "O arquivo é muito grande (máx. 25 MB).",
|
||||
"doc_upload_failed": "Falha no envio.",
|
||||
"docs_archive_too_large": "O arquivo é grande demais (máx. {max}).",
|
||||
"completion_photos_optional": "Fotos de conclusão (opcional)",
|
||||
"completion_photos": "Fotos de conclusão",
|
||||
"choose_photos": "Escolher fotos",
|
||||
@@ -797,7 +797,11 @@
|
||||
"doc_camera": "Tirar foto",
|
||||
"camera_capture_shoot": "Capturar",
|
||||
"camera_switch_lens": "Trocar de câmera",
|
||||
"camera_switch_failed": "Nenhuma outra câmera respondeu — este celular libera só uma. Use o seletor de arquivos para a outra lente.",
|
||||
"camera_switching": "Trocando de câmera…",
|
||||
"camera_not_answered": "Esta câmera não respondeu. Toque de novo em trocar para tentar a próxima ou use o seletor de arquivos.",
|
||||
"camera_diagnostics": "Detalhes para um relatório de erro",
|
||||
"camera_copy": "Copiar",
|
||||
"camera_copied": "Copiado",
|
||||
"doc_drop_hint": "Solte os arquivos aqui",
|
||||
"doc_task_none": "Nenhum documento vinculado a esta tarefa.",
|
||||
"doc_link_existing": "Vincular um documento…",
|
||||
@@ -850,6 +854,55 @@
|
||||
"reading_below_last": "Menor que a última leitura ({value})",
|
||||
"settings_templates_label": "Galeria de modelos",
|
||||
"settings_templates_hint": "Desmarque os modelos de que você nunca precisará — eles somem dos seletores \"A partir de modelo\" (painel e fluxo de configuração). Nada mais muda; você pode reativá-los a qualquer momento.",
|
||||
"home_profile_title": "Perfil da residência",
|
||||
"home_profile_hint": "Recomenda modelos e define janelas sazonais de acordo com seu clima e hemisfério. Tudo é calculado localmente a partir dos seus andares, áreas e localização da casa.",
|
||||
"home_type_label": "Tipo de moradia",
|
||||
"home_type_auto": "Automático ({detected})",
|
||||
"home_region_label": "Estado, província ou região",
|
||||
"home_region_none": "não encontrada",
|
||||
"home_region_hint": "Algumas regras variam dentro de um país: vistoria anual do veículo em um estado, nenhuma no vizinho. Determinado pela localização da sua casa.",
|
||||
"home_dwelling_house": "Casa",
|
||||
"home_dwelling_apartment": "Apartamento",
|
||||
"home_dwelling_unknown": "não reconhecido",
|
||||
"home_detected_from": "Detectado por: {reasons}",
|
||||
"home_reason_floors": "vários andares",
|
||||
"home_reason_basement": "um porão",
|
||||
"home_reason_garden": "um quintal",
|
||||
"home_reason_shed": "um galpão",
|
||||
"home_reason_driveway": "uma entrada de garagem",
|
||||
"home_reason_garage": "uma garagem",
|
||||
"home_reason_attic": "um sótão",
|
||||
"home_reason_lawn_mower": "um cortador de grama",
|
||||
"home_reason_gate": "um portão",
|
||||
"home_reason_balcony": "uma sacada",
|
||||
"home_reason_small_home": "poucos cômodos em um só andar",
|
||||
"home_reason_ups": "um nobreak",
|
||||
"home_climate_label": "Clima",
|
||||
"home_climate_value": "Köppen {koppen} · mês mais frio {cold} °C · mês mais quente {warm} °C",
|
||||
"home_climate_unknown": "Nenhuma localização de casa definida no Home Assistant",
|
||||
"home_hemisphere_south": "Hemisfério sul — as janelas sazonais são invertidas",
|
||||
"home_trait_freeze": "Geada no inverno",
|
||||
"home_trait_snow": "Invernos com neve",
|
||||
"home_trait_severe_winter": "Invernos rigorosos",
|
||||
"home_trait_damp": "Clima úmido",
|
||||
"home_trait_mediterranean": "Clima mediterrâneo",
|
||||
"home_trait_earthquake": "Região sísmica",
|
||||
"home_trait_hot_summer": "Verões quentes",
|
||||
"home_trait_hot_humid": "Quente e úmido",
|
||||
"home_trait_hot_dry": "Quente e seco",
|
||||
"home_trait_termites": "Região de cupins",
|
||||
"home_trait_wildfire": "Risco de incêndios florestais",
|
||||
"home_trait_cyclone": "Região de furacões / tufões",
|
||||
"home_trait_tropical": "Clima tropical",
|
||||
"home_trait_radon": "Teste de radônio recomendado",
|
||||
"home_reason_starter": "O essencial para sua casa",
|
||||
"home_reason_country": "Comum em {country}",
|
||||
"home_reason_feature": "Encontrado na sua casa: {feature}",
|
||||
"templates_recommended_title": "Recomendado para sua casa",
|
||||
"templates_recommended_hint": "Com base no perfil da residência — ajuste em Configurações.",
|
||||
"templates_legal_hint": "As notas sobre obrigações legais e prazos são apenas orientação, não aconselhamento jurídico. As regras variam conforme a região e mudam com o tempo — prevalecem a regulamentação local e as instruções do fabricante.",
|
||||
"templates_not_typical": "Pouco comum no seu tipo de moradia",
|
||||
"templates_set_up": "Já configurado",
|
||||
"worksheet": "Folha de trabalho",
|
||||
"worksheet_scan_view": "Escaneie para abrir a tarefa",
|
||||
"worksheet_scan_complete": "Escaneie para concluir",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(novo)",
|
||||
"adopt_object_hint": "Dê a vários sensores o mesmo nome de objeto e eles viram um único objeto; digite o nome de um objeto existente para adicioná-los lá.",
|
||||
"adopt_summary_title": "O que a adoção muda",
|
||||
"adopt_summary_existing": "\"{name}\": tarefas {before} → {after}",
|
||||
"adopt_problem_adopt": "Adotar selecionados",
|
||||
"adopt_problem_done": "{tasks} sensor(es) de problema adotado(s)",
|
||||
"views_label": "Visualizações",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Afastando-se do limite",
|
||||
"split_select_hint": "Selecione uma tarefa para ver os detalhes aqui",
|
||||
"setups_target_new": "Criar novo: {name}",
|
||||
"setups_target_match": "{name} — corresponde: {reasons}",
|
||||
"setups_reason_model": "número do modelo",
|
||||
"setups_reason_name": "nome",
|
||||
"setups_reason_area": "área",
|
||||
"setups_reason_sibling": "mesmo modelo em outro dispositivo",
|
||||
"setups_maybe_covered": "Provavelmente já existe como \"{name}\"",
|
||||
"setups_already": "Já existe: {names}",
|
||||
"setups_before_after": "Tarefas do objeto: {before} → {after}",
|
||||
"setups_new_object_count": "Novo objeto \"{name}\" · tarefas: {count}",
|
||||
"schedule_preview_title": "Próximas datas",
|
||||
"schedule_preview_ontime": "Supondo conclusão em dia.",
|
||||
"schedule_preview_ends": "(a série termina)",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"templates_from": "De modelo",
|
||||
"templates_title": "Começar a partir de um modelo",
|
||||
"templates_task_count": "{n} tarefas",
|
||||
"templates_task_count_one": "1 tarefa",
|
||||
"template_created": "Criado a partir de modelo",
|
||||
"onboard_hint": "Adicione o seu primeiro objeto para acompanhar a manutenção.",
|
||||
"edit": "Editar",
|
||||
@@ -44,6 +45,7 @@
|
||||
"bulk_delete_objects_confirm": "Eliminar {n} objetos e todas as suas tarefas? Arquivar mantém o histórico.",
|
||||
"bulk_objects_deleted": "{n} objetos eliminados",
|
||||
"bulk_objects_archived": "{n} objetos arquivados",
|
||||
"bulk_failed": "{n} falharam: {reason}",
|
||||
"completing": "A concluir…",
|
||||
"interval": "Intervalo",
|
||||
"warning": "Aviso",
|
||||
@@ -198,8 +200,6 @@
|
||||
"show_all": "Mostrar tudo",
|
||||
"cost_duration_chart": "Custos & Duração",
|
||||
"installed": "Instalado",
|
||||
"confirm_delete_object": "Eliminar este objeto e todas as suas tarefas?",
|
||||
"confirm_delete_task": "Eliminar esta tarefa?",
|
||||
"min": "Mín",
|
||||
"max": "Máx",
|
||||
"save": "Guardar",
|
||||
@@ -241,7 +241,6 @@
|
||||
"sort_task_name": "Nome da tarefa",
|
||||
"all_objects": "Todos os objetos",
|
||||
"all_parts": "Todas as peças",
|
||||
"tasks_lower": "tarefas",
|
||||
"no_tasks_yet": "Ainda sem tarefas",
|
||||
"add_first_task": "Adicionar primeira tarefa",
|
||||
"trigger_configuration": "Configuração do acionador",
|
||||
@@ -298,6 +297,7 @@
|
||||
"tab_calendar": "Calendário",
|
||||
"cal_no_events": "Sem manutenção",
|
||||
"cal_every_n_days": "a cada {n} dias",
|
||||
"cal_every_day": "todos os dias",
|
||||
"cal_source_time": "Baseado em tempo",
|
||||
"cal_source_time_adaptive": "Baseado em tempo (adaptativo)",
|
||||
"cal_source_sensor": "Baseado em sensor",
|
||||
@@ -713,7 +713,6 @@
|
||||
"budget_open_panel": "Abrir no painel",
|
||||
"groups_empty": "Ainda sem grupos.",
|
||||
"group_new_placeholder": "Adicionar grupo…",
|
||||
"group_delete_confirm": "Eliminar o grupo \"{name}\"?",
|
||||
"groups_manage_tasks": "Gerir atribuições de tarefas…",
|
||||
"groups_open_panel": "Abrir no painel",
|
||||
"on_complete_action_target_hint": "Nota: o domínio da entidade tem de corresponder ao serviço — p. ex. 'button.press' só funciona em button.*, 'counter.increment' só em counter.*, 'input_button.press' só em input_button.* etc. Em caso de incompatibilidade, a ação falha silenciosamente (o HA regista 'Referenced entities ... missing or not currently available').",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "Eliminar «{name}»?",
|
||||
"doc_too_large": "Ficheiro demasiado grande (máx. 25 MB).",
|
||||
"doc_upload_failed": "Falha no carregamento.",
|
||||
"docs_archive_too_large": "O arquivo é demasiado grande (máx. {max}).",
|
||||
"completion_photos_optional": "Fotos de conclusão (opcional)",
|
||||
"completion_photos": "Fotos de conclusão",
|
||||
"choose_photos": "Escolher fotos",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "Tirar foto",
|
||||
"camera_capture_shoot": "Capturar",
|
||||
"camera_switch_lens": "Mudar de câmara",
|
||||
"camera_switch_failed": "Nenhuma outra câmara respondeu — este telemóvel só disponibiliza uma. Use o seletor de ficheiros para a outra objetiva.",
|
||||
"camera_switching": "A mudar de câmara…",
|
||||
"camera_not_answered": "Esta câmara não respondeu. Toque novamente em mudar para experimentar a seguinte ou use o seletor de ficheiros.",
|
||||
"camera_diagnostics": "Detalhes para comunicar um erro",
|
||||
"camera_copy": "Copiar",
|
||||
"camera_copied": "Copiado",
|
||||
"doc_drop_hint": "Solte os ficheiros aqui",
|
||||
"doc_task_none": "Nenhum documento associado a esta tarefa.",
|
||||
"doc_link_existing": "Associar um documento…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "Inferior à última leitura ({value})",
|
||||
"settings_templates_label": "Galeria de modelos",
|
||||
"settings_templates_hint": "Desmarque modelos de que nunca precisará — desaparecem dos seletores \"A partir de modelo\" (painel e config flow). Nada mais muda; reativáveis a qualquer momento.",
|
||||
"home_profile_title": "Perfil da habitação",
|
||||
"home_profile_hint": "Recomenda modelos e define janelas sazonais de acordo com o seu clima e hemisfério. Tudo é determinado localmente a partir dos seus pisos, áreas e localização da casa.",
|
||||
"home_type_label": "Tipo de habitação",
|
||||
"home_type_auto": "Automático ({detected})",
|
||||
"home_region_label": "Estado, província ou região",
|
||||
"home_region_none": "não encontrada",
|
||||
"home_region_hint": "Algumas regras variam dentro de um país: inspeção anual do veículo num estado, nenhuma no seguinte. Determinado a partir da localização da casa.",
|
||||
"home_dwelling_house": "Moradia",
|
||||
"home_dwelling_apartment": "Apartamento",
|
||||
"home_dwelling_unknown": "não reconhecido",
|
||||
"home_detected_from": "Detetado por: {reasons}",
|
||||
"home_reason_floors": "vários pisos",
|
||||
"home_reason_basement": "uma cave",
|
||||
"home_reason_garden": "um jardim",
|
||||
"home_reason_shed": "um barracão",
|
||||
"home_reason_driveway": "um acesso de garagem",
|
||||
"home_reason_garage": "uma garagem",
|
||||
"home_reason_attic": "um sótão",
|
||||
"home_reason_lawn_mower": "um corta-relva",
|
||||
"home_reason_gate": "um portão",
|
||||
"home_reason_balcony": "uma varanda",
|
||||
"home_reason_small_home": "poucas divisões num só piso",
|
||||
"home_reason_ups": "uma UPS",
|
||||
"home_climate_label": "Clima",
|
||||
"home_climate_value": "Köppen {koppen} · mês mais frio {cold} °C · mês mais quente {warm} °C",
|
||||
"home_climate_unknown": "Nenhuma localização de casa definida no Home Assistant",
|
||||
"home_hemisphere_south": "Hemisfério sul — as janelas sazonais são invertidas",
|
||||
"home_trait_freeze": "Geada no inverno",
|
||||
"home_trait_snow": "Invernos com neve",
|
||||
"home_trait_severe_winter": "Invernos rigorosos",
|
||||
"home_trait_damp": "Clima húmido",
|
||||
"home_trait_mediterranean": "Clima mediterrânico",
|
||||
"home_trait_earthquake": "Zona sísmica",
|
||||
"home_trait_hot_summer": "Verões quentes",
|
||||
"home_trait_hot_humid": "Quente e húmido",
|
||||
"home_trait_hot_dry": "Quente e seco",
|
||||
"home_trait_termites": "Zona de térmitas",
|
||||
"home_trait_wildfire": "Risco de incêndios florestais",
|
||||
"home_trait_cyclone": "Zona de furacões / tufões",
|
||||
"home_trait_tropical": "Clima tropical",
|
||||
"home_trait_radon": "Teste de radão recomendado",
|
||||
"home_reason_starter": "O essencial para a sua casa",
|
||||
"home_reason_country": "Comum em {country}",
|
||||
"home_reason_feature": "Encontrado na sua casa: {feature}",
|
||||
"templates_recommended_title": "Recomendado para a sua casa",
|
||||
"templates_recommended_hint": "Com base no perfil da habitação — ajuste-o nas Definições.",
|
||||
"templates_legal_hint": "As notas sobre obrigações legais e prazos são orientativas e não constituem aconselhamento jurídico. As regras variam consoante a região e mudam com o tempo — prevalecem a regulamentação local e as instruções do fabricante.",
|
||||
"templates_not_typical": "Pouco comum no seu tipo de habitação",
|
||||
"templates_set_up": "Já configurado",
|
||||
"worksheet": "Folha de trabalho",
|
||||
"worksheet_scan_view": "Digitalize para abrir a tarefa",
|
||||
"worksheet_scan_complete": "Digitalize para concluir",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(novo)",
|
||||
"adopt_object_hint": "Dê a vários sensores o mesmo nome de objeto e tornam-se um só objeto; escreva o nome de um objeto existente para os juntar lá.",
|
||||
"adopt_summary_title": "O que a adoção altera",
|
||||
"adopt_summary_existing": "«{name}»: tarefas {before} → {after}",
|
||||
"adopt_problem_adopt": "Adotar selecionados",
|
||||
"adopt_problem_done": "{tasks} sensor(es) de problema adotado(s)",
|
||||
"views_label": "Vistas",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "A afastar-se do limiar",
|
||||
"split_select_hint": "Selecione uma tarefa para ver os detalhes aqui",
|
||||
"setups_target_new": "Criar novo: {name}",
|
||||
"setups_target_match": "{name} — corresponde: {reasons}",
|
||||
"setups_reason_model": "número do modelo",
|
||||
"setups_reason_name": "nome",
|
||||
"setups_reason_area": "divisão",
|
||||
"setups_reason_sibling": "mesmo modelo noutro dispositivo",
|
||||
"setups_maybe_covered": "Provavelmente já existe como «{name}»",
|
||||
"setups_already": "Já existe: {names}",
|
||||
"setups_before_after": "Tarefas do objeto: {before} → {after}",
|
||||
"setups_new_object_count": "Novo objeto «{name}» · tarefas: {count}",
|
||||
"schedule_preview_title": "Próximas datas",
|
||||
"schedule_preview_ontime": "Assumindo conclusão pontual.",
|
||||
"schedule_preview_ends": "(a série termina)",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"templates_from": "Из шаблона",
|
||||
"templates_title": "Начать с шаблона",
|
||||
"templates_task_count": "{n} задач",
|
||||
"templates_task_count_one": "1 задача",
|
||||
"template_created": "Создано из шаблона",
|
||||
"onboard_hint": "Добавьте первый объект, чтобы отслеживать обслуживание.",
|
||||
"edit": "Изменить",
|
||||
@@ -44,6 +45,7 @@
|
||||
"bulk_delete_objects_confirm": "Удалить {n} объектов со всеми их задачами? Архивация вместо этого сохранит историю.",
|
||||
"bulk_objects_deleted": "Удалено объектов: {n}",
|
||||
"bulk_objects_archived": "Архивировано объектов: {n}",
|
||||
"bulk_failed": "Не удалось: {n} — {reason}",
|
||||
"completing": "Выполнение…",
|
||||
"interval": "Интервал",
|
||||
"warning": "Предупреждение",
|
||||
@@ -198,8 +200,6 @@
|
||||
"show_all": "Показать все",
|
||||
"cost_duration_chart": "Стоимость и длительность",
|
||||
"installed": "Установлен",
|
||||
"confirm_delete_object": "Удалить этот объект и все его задачи?",
|
||||
"confirm_delete_task": "Удалить эту задачу?",
|
||||
"min": "Мин",
|
||||
"max": "Макс",
|
||||
"save": "Сохранить",
|
||||
@@ -240,7 +240,6 @@
|
||||
"sort_task_name": "Имя задачи",
|
||||
"all_objects": "Все объекты",
|
||||
"all_parts": "Все детали",
|
||||
"tasks_lower": "задач",
|
||||
"no_tasks_yet": "Пока нет задач",
|
||||
"add_first_task": "Добавить первую задачу",
|
||||
"last_performed_optional": "Последнее выполнение (опционально)",
|
||||
@@ -298,6 +297,7 @@
|
||||
"tab_calendar": "Календарь",
|
||||
"cal_no_events": "Без обслуживания",
|
||||
"cal_every_n_days": "каждые {n} дней",
|
||||
"cal_every_day": "каждый день",
|
||||
"cal_source_time": "По времени",
|
||||
"cal_source_time_adaptive": "По времени (адаптивно)",
|
||||
"cal_source_sensor": "По датчику",
|
||||
@@ -713,7 +713,6 @@
|
||||
"budget_open_panel": "Открыть на панели",
|
||||
"groups_empty": "Пока нет групп.",
|
||||
"group_new_placeholder": "Добавить группу…",
|
||||
"group_delete_confirm": "Удалить группу «{name}»?",
|
||||
"groups_manage_tasks": "Управление назначениями задач…",
|
||||
"groups_open_panel": "Открыть на панели",
|
||||
"on_complete_action_target_hint": "Примечание: домен сущности должен соответствовать сервису — напр. 'button.press' работает только с button.*, 'counter.increment' только с counter.*, 'input_button.press' только с input_button.* и т. д. При несоответствии действие молча не выполнится (HA запишет в журнал 'Referenced entities ... missing or not currently available').",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "Удалить «{name}»?",
|
||||
"doc_too_large": "Файл слишком большой (макс. 25 МБ).",
|
||||
"doc_upload_failed": "Не удалось загрузить.",
|
||||
"docs_archive_too_large": "Архив слишком большой (макс. {max}).",
|
||||
"completion_photos_optional": "Фото выполнения (необязательно)",
|
||||
"completion_photos": "Фото выполнения",
|
||||
"choose_photos": "Выбрать фото",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "Сделать фото",
|
||||
"camera_capture_shoot": "Снять",
|
||||
"camera_switch_lens": "Сменить камеру",
|
||||
"camera_switch_failed": "Другая камера не ответила — этот телефон отдаёт только одну. Для другого объектива используйте выбор файла.",
|
||||
"camera_switching": "Переключение камеры…",
|
||||
"camera_not_answered": "Эта камера не ответила. Нажмите переключение ещё раз, чтобы попробовать следующую, или выберите файл.",
|
||||
"camera_diagnostics": "Подробности для отчёта об ошибке",
|
||||
"camera_copy": "Копировать",
|
||||
"camera_copied": "Скопировано",
|
||||
"doc_drop_hint": "Перетащите файлы сюда",
|
||||
"doc_task_none": "Нет документов, связанных с этой задачей.",
|
||||
"doc_link_existing": "Связать документ…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "Меньше предыдущего показания ({value})",
|
||||
"settings_templates_label": "Галерея шаблонов",
|
||||
"settings_templates_hint": "Снимите отметку с шаблонов, которые вам не нужны — они исчезнут из выбора «Из шаблона» (панель и config flow). Больше ничего не меняется; можно включить обратно в любой момент.",
|
||||
"home_profile_title": "Профиль жилья",
|
||||
"home_profile_hint": "Рекомендует шаблоны и задаёт сезонные окна по вашему климату и полушарию. Всё определяется локально по вашим этажам, зонам и местоположению дома.",
|
||||
"home_type_label": "Тип жилья",
|
||||
"home_type_auto": "Автоматически ({detected})",
|
||||
"home_region_label": "Штат, провинция или регион",
|
||||
"home_region_none": "не найден",
|
||||
"home_region_hint": "Некоторые правила различаются внутри страны: в одном штате техосмотр автомобиля ежегодный, в соседнем его нет. Определено по местоположению дома.",
|
||||
"home_dwelling_house": "Дом",
|
||||
"home_dwelling_apartment": "Квартира",
|
||||
"home_dwelling_unknown": "не определено",
|
||||
"home_detected_from": "Определено по: {reasons}",
|
||||
"home_reason_floors": "несколько этажей",
|
||||
"home_reason_basement": "подвал",
|
||||
"home_reason_garden": "сад",
|
||||
"home_reason_shed": "сарай",
|
||||
"home_reason_driveway": "подъездная дорожка",
|
||||
"home_reason_garage": "гараж",
|
||||
"home_reason_attic": "чердак",
|
||||
"home_reason_lawn_mower": "газонокосилка",
|
||||
"home_reason_gate": "ворота",
|
||||
"home_reason_balcony": "балкон",
|
||||
"home_reason_small_home": "мало комнат на одном этаже",
|
||||
"home_reason_ups": "ИБП",
|
||||
"home_climate_label": "Климат",
|
||||
"home_climate_value": "Кёппен {koppen} · самый холодный месяц {cold} °C · самый тёплый месяц {warm} °C",
|
||||
"home_climate_unknown": "В Home Assistant не задано местоположение дома",
|
||||
"home_hemisphere_south": "Южное полушарие — сезонные окна зеркально смещены",
|
||||
"home_trait_freeze": "Морозы зимой",
|
||||
"home_trait_snow": "Снежные зимы",
|
||||
"home_trait_severe_winter": "Суровые зимы",
|
||||
"home_trait_damp": "Влажный климат",
|
||||
"home_trait_mediterranean": "Средиземноморский климат",
|
||||
"home_trait_earthquake": "Сейсмоопасный район",
|
||||
"home_trait_hot_summer": "Жаркое лето",
|
||||
"home_trait_hot_humid": "Жарко и влажно",
|
||||
"home_trait_hot_dry": "Жарко и сухо",
|
||||
"home_trait_termites": "Район термитов",
|
||||
"home_trait_wildfire": "Риск лесных пожаров",
|
||||
"home_trait_cyclone": "Район ураганов / тайфунов",
|
||||
"home_trait_tropical": "Тропический климат",
|
||||
"home_trait_radon": "Рекомендуется замер радона",
|
||||
"home_reason_starter": "Основы для вашего дома",
|
||||
"home_reason_country": "Распространено: {country}",
|
||||
"home_reason_feature": "Найдено в вашем доме: {feature}",
|
||||
"templates_recommended_title": "Рекомендовано для вашего дома",
|
||||
"templates_recommended_hint": "На основе профиля жилья — можно изменить в настройках.",
|
||||
"templates_legal_hint": "Указания на обязательные требования и сроки носят справочный характер и не являются юридической консультацией. Правила различаются по регионам и меняются — приоритет имеют местные нормы и инструкции производителя.",
|
||||
"templates_not_typical": "Нетипично для вашего типа жилья",
|
||||
"templates_set_up": "Уже настроено",
|
||||
"worksheet": "Рабочий лист",
|
||||
"worksheet_scan_view": "Сканируйте, чтобы открыть задачу",
|
||||
"worksheet_scan_complete": "Сканируйте для выполнения",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "норма",
|
||||
"adopt_problem_new_object": "(новый)",
|
||||
"adopt_object_hint": "Дайте нескольким датчикам одно имя объекта — они станут одним объектом; введите имя существующего объекта, чтобы добавить их туда.",
|
||||
"adopt_summary_title": "Что изменит добавление",
|
||||
"adopt_summary_existing": "«{name}»: задачи {before} → {after}",
|
||||
"adopt_problem_adopt": "Принять выбранные",
|
||||
"adopt_problem_done": "Принято сенсоров проблем: {tasks}",
|
||||
"views_label": "Представления",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Отдаляется от порога",
|
||||
"split_select_hint": "Выберите задачу, чтобы увидеть здесь её детали",
|
||||
"setups_target_new": "Создать новый: {name}",
|
||||
"setups_target_match": "{name} — совпадает: {reasons}",
|
||||
"setups_reason_model": "номер модели",
|
||||
"setups_reason_name": "название",
|
||||
"setups_reason_area": "зона",
|
||||
"setups_reason_sibling": "та же модель на другом устройстве",
|
||||
"setups_maybe_covered": "Вероятно, уже есть как «{name}»",
|
||||
"setups_already": "Уже есть: {names}",
|
||||
"setups_before_after": "Задачи объекта: {before} → {after}",
|
||||
"setups_new_object_count": "Новый объект «{name}» · задачи: {count}",
|
||||
"schedule_preview_title": "Ближайшие даты",
|
||||
"schedule_preview_ontime": "При условии своевременного выполнения.",
|
||||
"schedule_preview_ends": "(серия завершается)",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"templates_from": "Från mall",
|
||||
"templates_title": "Börja från en mall",
|
||||
"templates_task_count": "{n} uppgifter",
|
||||
"templates_task_count_one": "1 uppgift",
|
||||
"template_created": "Skapad från mall",
|
||||
"onboard_hint": "Lägg till ditt första objekt för att spåra underhåll.",
|
||||
"edit": "Redigera",
|
||||
@@ -44,6 +45,7 @@
|
||||
"bulk_delete_objects_confirm": "Ta bort {n} objekt och alla deras uppgifter? Arkivering behåller historiken i stället.",
|
||||
"bulk_objects_deleted": "{n} objekt borttagna",
|
||||
"bulk_objects_archived": "{n} objekt arkiverade",
|
||||
"bulk_failed": "{n} misslyckades: {reason}",
|
||||
"completing": "Slutför…",
|
||||
"interval": "Intervall",
|
||||
"warning": "Varning",
|
||||
@@ -198,8 +200,6 @@
|
||||
"show_all": "Visa alla",
|
||||
"cost_duration_chart": "Kostnad och varaktighet",
|
||||
"installed": "Installerad",
|
||||
"confirm_delete_object": "Ta bort detta objekt och alla dess uppgifter?",
|
||||
"confirm_delete_task": "Ta bort denna uppgift?",
|
||||
"min": "Min",
|
||||
"max": "Max",
|
||||
"save": "Spara",
|
||||
@@ -241,7 +241,6 @@
|
||||
"sort_task_name": "Uppgiftsnamn",
|
||||
"all_objects": "Alla objekt",
|
||||
"all_parts": "Alla delar",
|
||||
"tasks_lower": "uppgifter",
|
||||
"no_tasks_yet": "Inga uppgifter ännu",
|
||||
"add_first_task": "Lägg till första uppgift",
|
||||
"trigger_configuration": "Utlösarkonfiguration",
|
||||
@@ -298,6 +297,7 @@
|
||||
"tab_calendar": "Kalender",
|
||||
"cal_no_events": "Inget underhåll",
|
||||
"cal_every_n_days": "var {n} dag",
|
||||
"cal_every_day": "varje dag",
|
||||
"cal_source_time": "Tidsbaserad",
|
||||
"cal_source_time_adaptive": "Tidsbaserad (adaptiv)",
|
||||
"cal_source_sensor": "Sensorbaserad",
|
||||
@@ -713,7 +713,6 @@
|
||||
"budget_open_panel": "Öppna i panelen",
|
||||
"groups_empty": "Inga grupper än.",
|
||||
"group_new_placeholder": "Lägg till grupp…",
|
||||
"group_delete_confirm": "Ta bort gruppen ”{name}”?",
|
||||
"groups_manage_tasks": "Hantera uppgiftstilldelningar…",
|
||||
"groups_open_panel": "Öppna i panelen",
|
||||
"on_complete_action_target_hint": "Obs: entitetens domän måste matcha tjänsten — t.ex. 'button.press' fungerar bara på button.*, 'counter.increment' bara på counter.*, 'input_button.press' bara på input_button.* osv. Vid en avvikelse misslyckas åtgärden tyst (HA loggar 'Referenced entities ... missing or not currently available').",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "Ta bort \"{name}\"?",
|
||||
"doc_too_large": "Filen är för stor (max 25 MB).",
|
||||
"doc_upload_failed": "Uppladdningen misslyckades.",
|
||||
"docs_archive_too_large": "Arkivet är för stort (max {max}).",
|
||||
"completion_photos_optional": "Foton vid slutförande (valfritt)",
|
||||
"completion_photos": "Foton vid slutförande",
|
||||
"choose_photos": "Välj foton",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "Ta foto",
|
||||
"camera_capture_shoot": "Ta bild",
|
||||
"camera_switch_lens": "Byt kamera",
|
||||
"camera_switch_failed": "Ingen annan kamera svarade – den här telefonen lämnar bara ut en. Använd filväljaren för det andra objektivet.",
|
||||
"camera_switching": "Byter kamera…",
|
||||
"camera_not_answered": "Den här kameran svarade inte. Tryck på byt igen för att prova nästa, eller använd filväljaren.",
|
||||
"camera_diagnostics": "Detaljer för en felrapport",
|
||||
"camera_copy": "Kopiera",
|
||||
"camera_copied": "Kopierat",
|
||||
"doc_drop_hint": "Släpp filer här",
|
||||
"doc_task_none": "Inga dokument kopplade till denna uppgift.",
|
||||
"doc_link_existing": "Koppla ett dokument…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "Lägre än senaste avläsningen ({value})",
|
||||
"settings_templates_label": "Mallgalleri",
|
||||
"settings_templates_hint": "Avmarkera mallar du aldrig behöver — de försvinner från \"Från mall\"-väljarna (panel och config flow). Inget annat ändras; kan återaktiveras när som helst.",
|
||||
"home_profile_title": "Bostadsprofil",
|
||||
"home_profile_hint": "Rekommenderar mallar och ställer in säsongsfönster efter ditt klimat och halvklot. Allt räknas ut lokalt från dina våningar, områden och hemmets plats.",
|
||||
"home_type_label": "Bostadstyp",
|
||||
"home_type_auto": "Automatiskt ({detected})",
|
||||
"home_region_label": "Delstat, provins eller region",
|
||||
"home_region_none": "hittades inte",
|
||||
"home_region_hint": "Vissa regler skiljer sig inom ett land – årlig fordonsbesiktning i en delstat, ingen i nästa. Hämtat från hemmets plats.",
|
||||
"home_dwelling_house": "Hus",
|
||||
"home_dwelling_apartment": "Lägenhet",
|
||||
"home_dwelling_unknown": "inte identifierad",
|
||||
"home_detected_from": "Identifierad utifrån: {reasons}",
|
||||
"home_reason_floors": "flera våningar",
|
||||
"home_reason_basement": "en källare",
|
||||
"home_reason_garden": "en trädgård",
|
||||
"home_reason_shed": "ett förråd",
|
||||
"home_reason_driveway": "en uppfart",
|
||||
"home_reason_garage": "ett garage",
|
||||
"home_reason_attic": "en vind",
|
||||
"home_reason_lawn_mower": "en gräsklippare",
|
||||
"home_reason_gate": "en grind",
|
||||
"home_reason_balcony": "en balkong",
|
||||
"home_reason_small_home": "få rum på ett plan",
|
||||
"home_reason_ups": "en UPS-enhet",
|
||||
"home_climate_label": "Klimat",
|
||||
"home_climate_value": "Köppen {koppen} · kallaste månaden {cold} °C · varmaste månaden {warm} °C",
|
||||
"home_climate_unknown": "Ingen hemplats angiven i Home Assistant",
|
||||
"home_hemisphere_south": "Södra halvklotet — säsongsfönstren speglas",
|
||||
"home_trait_freeze": "Frost på vintern",
|
||||
"home_trait_snow": "Snörika vintrar",
|
||||
"home_trait_severe_winter": "Stränga vintrar",
|
||||
"home_trait_damp": "Fuktigt klimat",
|
||||
"home_trait_mediterranean": "Medelhavsklimat",
|
||||
"home_trait_earthquake": "Jordbävningsområde",
|
||||
"home_trait_hot_summer": "Varma somrar",
|
||||
"home_trait_hot_humid": "Varmt och fuktigt",
|
||||
"home_trait_hot_dry": "Varmt och torrt",
|
||||
"home_trait_termites": "Termitområde",
|
||||
"home_trait_wildfire": "Risk för skogsbränder",
|
||||
"home_trait_cyclone": "Orkan-/tyfonområde",
|
||||
"home_trait_tropical": "Tropiskt klimat",
|
||||
"home_trait_radon": "Radonmätning rekommenderas",
|
||||
"home_reason_starter": "Grunderna för ditt hem",
|
||||
"home_reason_country": "Vanligt i {country}",
|
||||
"home_reason_feature": "Hittat i ditt hem: {feature}",
|
||||
"templates_recommended_title": "Rekommenderat för ditt hem",
|
||||
"templates_recommended_hint": "Baserat på din bostadsprofil — ändra den i Inställningar.",
|
||||
"templates_legal_hint": "Anvisningar om lagkrav och intervall är vägledning, inte juridisk rådgivning. Reglerna skiljer sig mellan regioner och ändras över tid — lokala föreskrifter och tillverkarens anvisningar gäller i första hand.",
|
||||
"templates_not_typical": "Ovanligt för din bostadstyp",
|
||||
"templates_set_up": "Redan konfigurerad",
|
||||
"worksheet": "Arbetsblad",
|
||||
"worksheet_scan_view": "Skanna för att öppna uppgiften",
|
||||
"worksheet_scan_complete": "Skanna för att slutföra",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "ok",
|
||||
"adopt_problem_new_object": "(ny)",
|
||||
"adopt_object_hint": "Ge flera sensorer samma objektnamn så blir de ett objekt; skriv ett befintligt objekts namn för att lägga dem där.",
|
||||
"adopt_summary_title": "Vad övertagandet ändrar",
|
||||
"adopt_summary_existing": "”{name}”: uppgifter {before} → {after}",
|
||||
"adopt_problem_adopt": "Anta valda",
|
||||
"adopt_problem_done": "Antog {tasks} problemsensor(er)",
|
||||
"views_label": "Vyer",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Rör sig bort från tröskeln",
|
||||
"split_select_hint": "Välj en uppgift för att se detaljerna här",
|
||||
"setups_target_new": "Skapa ny: {name}",
|
||||
"setups_target_match": "{name} — matchar: {reasons}",
|
||||
"setups_reason_model": "modellnummer",
|
||||
"setups_reason_name": "namn",
|
||||
"setups_reason_area": "område",
|
||||
"setups_reason_sibling": "samma modell på en annan enhet",
|
||||
"setups_maybe_covered": "Finns troligen redan som ”{name}”",
|
||||
"setups_already": "Finns redan: {names}",
|
||||
"setups_before_after": "Uppgifter på objektet: {before} → {after}",
|
||||
"setups_new_object_count": "Nytt objekt ”{name}” · uppgifter: {count}",
|
||||
"schedule_preview_title": "Kommande datum",
|
||||
"schedule_preview_ontime": "Förutsatt slutförande i tid.",
|
||||
"schedule_preview_ends": "(serien avslutas)",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"templates_from": "Şablondan",
|
||||
"templates_title": "Bir şablonla başlayın",
|
||||
"templates_task_count": "{n} görev",
|
||||
"templates_task_count_one": "1 görev",
|
||||
"template_created": "Şablondan oluşturuldu",
|
||||
"onboard_hint": "Bakım takibine başlamak için ilk nesnenizi ekleyin.",
|
||||
"edit": "Düzenle",
|
||||
@@ -46,6 +47,7 @@
|
||||
"bulk_delete_objects_confirm": "{n} nesne ve tüm görevleri silinsin mi? Arşivlemek geçmişi korur.",
|
||||
"bulk_objects_deleted": "{n} nesne silindi",
|
||||
"bulk_objects_archived": "{n} nesne arşivlendi",
|
||||
"bulk_failed": "{n} başarısız: {reason}",
|
||||
"completing": "Tamamlanıyor…",
|
||||
"interval": "Aralık",
|
||||
"warning": "Uyarı",
|
||||
@@ -200,8 +202,6 @@
|
||||
"show_all": "Tümünü göster",
|
||||
"cost_duration_chart": "Maliyet ve Süre",
|
||||
"installed": "Kurulum",
|
||||
"confirm_delete_object": "Bu nesne ve tüm görevleri silinsin mi?",
|
||||
"confirm_delete_task": "Bu görev silinsin mi?",
|
||||
"min": "Min",
|
||||
"max": "Maks",
|
||||
"save": "Kaydet",
|
||||
@@ -243,7 +243,6 @@
|
||||
"sort_task_name": "Görev adı",
|
||||
"all_objects": "Tüm nesneler",
|
||||
"all_parts": "Tüm parçalar",
|
||||
"tasks_lower": "görev",
|
||||
"no_tasks_yet": "Henüz görev yok",
|
||||
"add_first_task": "İlk görevi ekle",
|
||||
"trigger_configuration": "Tetikleyici Yapılandırması",
|
||||
@@ -300,6 +299,7 @@
|
||||
"tab_calendar": "Takvim",
|
||||
"cal_no_events": "Bakım yok",
|
||||
"cal_every_n_days": "her {n} günde bir",
|
||||
"cal_every_day": "her gün",
|
||||
"cal_source_time": "Zamana dayalı",
|
||||
"cal_source_time_adaptive": "Zamana dayalı (uyarlanabilir)",
|
||||
"cal_source_sensor": "Sensöre dayalı",
|
||||
@@ -691,7 +691,6 @@
|
||||
"budget_open_panel": "Panelde aç",
|
||||
"groups_empty": "Henüz grup yok.",
|
||||
"group_new_placeholder": "Grup ekle…",
|
||||
"group_delete_confirm": "\"{name}\" grubu silinsin mi?",
|
||||
"groups_manage_tasks": "Görev atamalarını yönet…",
|
||||
"groups_open_panel": "Panelde aç",
|
||||
"unassigned": "Atanmamış",
|
||||
@@ -770,6 +769,7 @@
|
||||
"doc_delete_confirm": "\"{name}\" silinsin mi?",
|
||||
"doc_too_large": "Dosya çok büyük (en fazla 25 MB).",
|
||||
"doc_upload_failed": "Yükleme başarısız oldu.",
|
||||
"docs_archive_too_large": "Arşiv çok büyük (en fazla {max}).",
|
||||
"completion_photos_optional": "Tamamlama fotoğrafları (isteğe bağlı)",
|
||||
"completion_photos": "Tamamlama fotoğrafları",
|
||||
"choose_photos": "Fotoğraf seç",
|
||||
@@ -797,7 +797,11 @@
|
||||
"doc_camera": "Fotoğraf çek",
|
||||
"camera_capture_shoot": "Çek",
|
||||
"camera_switch_lens": "Kamerayı değiştir",
|
||||
"camera_switch_failed": "Başka bir kamera yanıt vermedi — bu telefon yalnızca birini açıyor. Diğer lens için dosya seçiciyi kullanın.",
|
||||
"camera_switching": "Kamera değiştiriliyor…",
|
||||
"camera_not_answered": "Bu kamera yanıt vermedi. Sonrakini denemek için değiştir düğmesine tekrar dokunun veya dosya seçiciyi kullanın.",
|
||||
"camera_diagnostics": "Hata raporu için ayrıntılar",
|
||||
"camera_copy": "Kopyala",
|
||||
"camera_copied": "Kopyalandı",
|
||||
"doc_drop_hint": "Dosyaları buraya bırakın",
|
||||
"doc_task_none": "Bu göreve bağlı belge yok.",
|
||||
"doc_link_existing": "Belge bağla…",
|
||||
@@ -850,6 +854,55 @@
|
||||
"reading_below_last": "Son okumadan ({value}) düşük",
|
||||
"settings_templates_label": "Şablon galerisi",
|
||||
"settings_templates_hint": "Asla ihtiyaç duymayacağınız şablonların işaretini kaldırın — \"Şablondan\" seçicilerinden (panel ve yapılandırma akışı) kaybolurlar. Başka hiçbir şey değişmez; istediğiniz zaman yeniden etkinleştirebilirsiniz.",
|
||||
"home_profile_title": "Konut profili",
|
||||
"home_profile_hint": "İklim ve yarımküreye göre şablon önerir ve mevsimsel pencereleri ayarlar. Her şey katlarınız, alanlarınız ve ev konumunuzdan yerel olarak belirlenir.",
|
||||
"home_type_label": "Konut türü",
|
||||
"home_type_auto": "Otomatik ({detected})",
|
||||
"home_region_label": "Eyalet, il veya bölge",
|
||||
"home_region_none": "bulunamadı",
|
||||
"home_region_hint": "Bazı kurallar ülke içinde değişir: bir eyalette yıllık araç muayenesi vardır, komşusunda yoktur. Evinizin konumundan belirlendi.",
|
||||
"home_dwelling_house": "Müstakil ev",
|
||||
"home_dwelling_apartment": "Daire",
|
||||
"home_dwelling_unknown": "tanınmadı",
|
||||
"home_detected_from": "Şunlardan anlaşıldı: {reasons}",
|
||||
"home_reason_floors": "birden fazla kat",
|
||||
"home_reason_basement": "bodrum",
|
||||
"home_reason_garden": "bahçe",
|
||||
"home_reason_shed": "kulübe",
|
||||
"home_reason_driveway": "garaj yolu",
|
||||
"home_reason_garage": "garaj",
|
||||
"home_reason_attic": "çatı arası",
|
||||
"home_reason_lawn_mower": "çim biçme makinesi",
|
||||
"home_reason_gate": "bahçe kapısı",
|
||||
"home_reason_balcony": "balkon",
|
||||
"home_reason_small_home": "tek katta az oda",
|
||||
"home_reason_ups": "kesintisiz güç kaynağı",
|
||||
"home_climate_label": "İklim",
|
||||
"home_climate_value": "Köppen {koppen} · en soğuk ay {cold} °C · en sıcak ay {warm} °C",
|
||||
"home_climate_unknown": "Home Assistant'ta ev konumu ayarlanmamış",
|
||||
"home_hemisphere_south": "Güney yarımküre — mevsimsel pencereler tersine çevrilir",
|
||||
"home_trait_freeze": "Kışın don",
|
||||
"home_trait_snow": "Karlı kışlar",
|
||||
"home_trait_severe_winter": "Sert kışlar",
|
||||
"home_trait_damp": "Nemli iklim",
|
||||
"home_trait_mediterranean": "Akdeniz iklimi",
|
||||
"home_trait_earthquake": "Deprem bölgesi",
|
||||
"home_trait_hot_summer": "Sıcak yazlar",
|
||||
"home_trait_hot_humid": "Sıcak ve nemli",
|
||||
"home_trait_hot_dry": "Sıcak ve kuru",
|
||||
"home_trait_termites": "Termit bölgesi",
|
||||
"home_trait_wildfire": "Orman yangını riski",
|
||||
"home_trait_cyclone": "Kasırga / tayfun bölgesi",
|
||||
"home_trait_tropical": "Tropikal iklim",
|
||||
"home_trait_radon": "Radon ölçümü önerilir",
|
||||
"home_reason_starter": "Eviniz için temel bakım",
|
||||
"home_reason_country": "{country} için yaygın",
|
||||
"home_reason_feature": "Evinizde bulundu: {feature}",
|
||||
"templates_recommended_title": "Eviniz için önerilenler",
|
||||
"templates_recommended_hint": "Konut profilinize göre — Ayarlar'dan değiştirebilirsiniz.",
|
||||
"templates_legal_hint": "Yasal yükümlülükler ve süreler hakkındaki notlar yol gösterici niteliktedir, hukuki tavsiye değildir. Kurallar bölgeye göre değişir ve zamanla güncellenir — yerel mevzuat ve üreticinin talimatları esastır.",
|
||||
"templates_not_typical": "Konut türünüz için alışılmadık",
|
||||
"templates_set_up": "Zaten kurulu",
|
||||
"worksheet": "Çalışma sayfası",
|
||||
"worksheet_scan_view": "Görevi açmak için tarayın",
|
||||
"worksheet_scan_complete": "Tamamlamak için tarayın",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "tamam",
|
||||
"adopt_problem_new_object": "(yeni)",
|
||||
"adopt_object_hint": "Birden çok sensöre aynı nesne adını verin, tek nesne olurlar; mevcut bir nesnenin adını yazarsanız oraya eklenirler.",
|
||||
"adopt_summary_title": "Devralmanın değiştirecekleri",
|
||||
"adopt_summary_existing": "\"{name}\": görevler {before} → {after}",
|
||||
"adopt_problem_adopt": "Seçilenleri devral",
|
||||
"adopt_problem_done": "{tasks} sorun sensörü devralındı",
|
||||
"views_label": "Görünümler",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Eşikten uzaklaşıyor",
|
||||
"split_select_hint": "Ayrıntıları burada görmek için bir görev seçin",
|
||||
"setups_target_new": "Yeni oluştur: {name}",
|
||||
"setups_target_match": "{name} — eşleşiyor: {reasons}",
|
||||
"setups_reason_model": "model numarası",
|
||||
"setups_reason_name": "ad",
|
||||
"setups_reason_area": "alan",
|
||||
"setups_reason_sibling": "başka bir cihazda aynı model",
|
||||
"setups_maybe_covered": "Muhtemelen \"{name}\" olarak zaten var",
|
||||
"setups_already": "Zaten var: {names}",
|
||||
"setups_before_after": "Nesnenin görevleri: {before} → {after}",
|
||||
"setups_new_object_count": "Yeni nesne \"{name}\" · görevler: {count}",
|
||||
"schedule_preview_title": "Sonraki tarihler",
|
||||
"schedule_preview_ontime": "Zamanında tamamlama varsayılarak.",
|
||||
"schedule_preview_ends": "(seri sona erer)",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"templates_from": "Із шаблону",
|
||||
"templates_title": "Почати із шаблону",
|
||||
"templates_task_count": "{n} завдань",
|
||||
"templates_task_count_one": "1 завдання",
|
||||
"template_created": "Створено із шаблону",
|
||||
"onboard_hint": "Додайте перший об'єкт, щоб відстежувати обслуговування.",
|
||||
"edit": "Редагувати",
|
||||
@@ -44,6 +45,7 @@
|
||||
"bulk_delete_objects_confirm": "Видалити {n} об'єктів з усіма їхніми завданнями? Архівування натомість збереже історію.",
|
||||
"bulk_objects_deleted": "Видалено об'єктів: {n}",
|
||||
"bulk_objects_archived": "Архівовано об'єктів: {n}",
|
||||
"bulk_failed": "Не вдалося: {n} — {reason}",
|
||||
"completing": "Виконується…",
|
||||
"interval": "Інтервал",
|
||||
"warning": "Попередження",
|
||||
@@ -198,8 +200,6 @@
|
||||
"show_all": "Показати всі",
|
||||
"cost_duration_chart": "Вартість і тривалість",
|
||||
"installed": "Встановлено",
|
||||
"confirm_delete_object": "Видалити цей об'єкт і всі його завдання?",
|
||||
"confirm_delete_task": "Видалити це завдання?",
|
||||
"min": "Мін",
|
||||
"max": "Макс",
|
||||
"save": "Зберегти",
|
||||
@@ -241,7 +241,6 @@
|
||||
"sort_task_name": "Назва завдання",
|
||||
"all_objects": "Всі об'єкти",
|
||||
"all_parts": "Усі деталі",
|
||||
"tasks_lower": "завдань",
|
||||
"no_tasks_yet": "Завдань ще немає",
|
||||
"add_first_task": "Додати перше завдання",
|
||||
"trigger_configuration": "Налаштування тригера",
|
||||
@@ -298,6 +297,7 @@
|
||||
"tab_calendar": "Календар",
|
||||
"cal_no_events": "Без обслуговування",
|
||||
"cal_every_n_days": "кожні {n} днів",
|
||||
"cal_every_day": "щодня",
|
||||
"cal_source_time": "За часом",
|
||||
"cal_source_time_adaptive": "За часом (адаптивно)",
|
||||
"cal_source_sensor": "За датчиком",
|
||||
@@ -713,7 +713,6 @@
|
||||
"budget_open_panel": "Відкрити на панелі",
|
||||
"groups_empty": "Поки немає груп.",
|
||||
"group_new_placeholder": "Додати групу…",
|
||||
"group_delete_confirm": "Видалити групу «{name}»?",
|
||||
"groups_manage_tasks": "Керування призначеннями завдань…",
|
||||
"groups_open_panel": "Відкрити на панелі",
|
||||
"on_complete_action_target_hint": "Примітка: домен сутності має відповідати сервісу — напр. 'button.press' працює лише з button.*, 'counter.increment' лише з counter.*, 'input_button.press' лише з input_button.* тощо. У разі невідповідності дія мовчки не виконається (HA запише в журнал 'Referenced entities ... missing or not currently available').",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "Видалити «{name}»?",
|
||||
"doc_too_large": "Файл завеликий (макс. 25 МБ).",
|
||||
"doc_upload_failed": "Не вдалося завантажити.",
|
||||
"docs_archive_too_large": "Архів завеликий (макс. {max}).",
|
||||
"completion_photos_optional": "Фото виконання (необов'язково)",
|
||||
"completion_photos": "Фото виконання",
|
||||
"choose_photos": "Вибрати фото",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "Зробити фото",
|
||||
"camera_capture_shoot": "Зняти",
|
||||
"camera_switch_lens": "Змінити камеру",
|
||||
"camera_switch_failed": "Інша камера не відповіла — цей телефон надає лише одну. Для іншого об'єктива скористайтеся вибором файлу.",
|
||||
"camera_switching": "Перемикання камери…",
|
||||
"camera_not_answered": "Ця камера не відповіла. Натисніть перемикання ще раз, щоб спробувати наступну, або виберіть файл.",
|
||||
"camera_diagnostics": "Подробиці для звіту про помилку",
|
||||
"camera_copy": "Копіювати",
|
||||
"camera_copied": "Скопійовано",
|
||||
"doc_drop_hint": "Перетягніть файли сюди",
|
||||
"doc_task_none": "Немає документів, пов'язаних із цим завданням.",
|
||||
"doc_link_existing": "Пов'язати документ…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "Менше за попереднє показання ({value})",
|
||||
"settings_templates_label": "Галерея шаблонів",
|
||||
"settings_templates_hint": "Зніміть позначку з шаблонів, які вам не потрібні — вони зникнуть із вибору «З шаблону» (панель і config flow). Більше нічого не змінюється; можна ввімкнути знову будь-коли.",
|
||||
"home_profile_title": "Профіль житла",
|
||||
"home_profile_hint": "Рекомендує шаблони та задає сезонні вікна відповідно до вашого клімату й півкулі. Усе визначається локально за вашими поверхами, зонами та розташуванням дому.",
|
||||
"home_type_label": "Тип житла",
|
||||
"home_type_auto": "Автоматично ({detected})",
|
||||
"home_region_label": "Штат, провінція або регіон",
|
||||
"home_region_none": "не знайдено",
|
||||
"home_region_hint": "Деякі правила відрізняються в межах країни: в одному штаті щорічний техогляд авто, у сусідньому — жодного. Визначено за розташуванням дому.",
|
||||
"home_dwelling_house": "Будинок",
|
||||
"home_dwelling_apartment": "Квартира",
|
||||
"home_dwelling_unknown": "не визначено",
|
||||
"home_detected_from": "Визначено за: {reasons}",
|
||||
"home_reason_floors": "кілька поверхів",
|
||||
"home_reason_basement": "підвал",
|
||||
"home_reason_garden": "сад",
|
||||
"home_reason_shed": "сарай",
|
||||
"home_reason_driveway": "під'їзна доріжка",
|
||||
"home_reason_garage": "гараж",
|
||||
"home_reason_attic": "горище",
|
||||
"home_reason_lawn_mower": "газонокосарка",
|
||||
"home_reason_gate": "ворота",
|
||||
"home_reason_balcony": "балкон",
|
||||
"home_reason_small_home": "мало кімнат на одному поверсі",
|
||||
"home_reason_ups": "ДБЖ",
|
||||
"home_climate_label": "Клімат",
|
||||
"home_climate_value": "Кеппен {koppen} · найхолодніший місяць {cold} °C · найтепліший місяць {warm} °C",
|
||||
"home_climate_unknown": "У Home Assistant не задано розташування дому",
|
||||
"home_hemisphere_south": "Південна півкуля — сезонні вікна дзеркально зсунуто",
|
||||
"home_trait_freeze": "Морози взимку",
|
||||
"home_trait_snow": "Сніжні зими",
|
||||
"home_trait_severe_winter": "Суворі зими",
|
||||
"home_trait_damp": "Вологий клімат",
|
||||
"home_trait_mediterranean": "Середземноморський клімат",
|
||||
"home_trait_earthquake": "Сейсмонебезпечний район",
|
||||
"home_trait_hot_summer": "Спекотне літо",
|
||||
"home_trait_hot_humid": "Спекотно й волого",
|
||||
"home_trait_hot_dry": "Спекотно й сухо",
|
||||
"home_trait_termites": "Район термітів",
|
||||
"home_trait_wildfire": "Ризик лісових пожеж",
|
||||
"home_trait_cyclone": "Район ураганів / тайфунів",
|
||||
"home_trait_tropical": "Тропічний клімат",
|
||||
"home_trait_radon": "Рекомендовано вимірювання радону",
|
||||
"home_reason_starter": "Основи для вашого дому",
|
||||
"home_reason_country": "Поширено: {country}",
|
||||
"home_reason_feature": "Знайдено у вашому домі: {feature}",
|
||||
"templates_recommended_title": "Рекомендовано для вашого дому",
|
||||
"templates_recommended_hint": "На основі профілю житла — можна змінити в налаштуваннях.",
|
||||
"templates_legal_hint": "Примітки щодо обов'язкових вимог і строків мають довідковий характер і не є юридичною консультацією. Правила відрізняються залежно від регіону та змінюються — пріоритет мають місцеві норми й інструкції виробника.",
|
||||
"templates_not_typical": "Нетипово для вашого типу житла",
|
||||
"templates_set_up": "Уже налаштовано",
|
||||
"worksheet": "Робочий аркуш",
|
||||
"worksheet_scan_view": "Скануйте, щоб відкрити задачу",
|
||||
"worksheet_scan_complete": "Скануйте для виконання",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "норма",
|
||||
"adopt_problem_new_object": "(новий)",
|
||||
"adopt_object_hint": "Дайте кільком сенсорам однакову назву об'єкта — вони стануть одним об'єктом; введіть назву наявного об'єкта, щоб додати їх туди.",
|
||||
"adopt_summary_title": "Що змінить додавання",
|
||||
"adopt_summary_existing": "«{name}»: завдання {before} → {after}",
|
||||
"adopt_problem_adopt": "Прийняти вибрані",
|
||||
"adopt_problem_done": "Прийнято сенсорів проблем: {tasks}",
|
||||
"views_label": "Подання",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "Віддаляється від порога",
|
||||
"split_select_hint": "Виберіть завдання, щоб побачити тут його деталі",
|
||||
"setups_target_new": "Створити новий: {name}",
|
||||
"setups_target_match": "{name} — збігається: {reasons}",
|
||||
"setups_reason_model": "номер моделі",
|
||||
"setups_reason_name": "назва",
|
||||
"setups_reason_area": "зона",
|
||||
"setups_reason_sibling": "та сама модель на іншому пристрої",
|
||||
"setups_maybe_covered": "Імовірно, вже є як «{name}»",
|
||||
"setups_already": "Уже є: {names}",
|
||||
"setups_before_after": "Завдання об'єкта: {before} → {after}",
|
||||
"setups_new_object_count": "Новий об'єкт «{name}» · завдання: {count}",
|
||||
"schedule_preview_title": "Найближчі дати",
|
||||
"schedule_preview_ontime": "За умови вчасного виконання.",
|
||||
"schedule_preview_ends": "(серія завершується)",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"templates_from": "从模板",
|
||||
"templates_title": "从模板开始",
|
||||
"templates_task_count": "{n} 个任务",
|
||||
"templates_task_count_one": "1 个任务",
|
||||
"template_created": "已从模板创建",
|
||||
"onboard_hint": "添加第一个对象以开始跟踪维护。",
|
||||
"edit": "编辑",
|
||||
@@ -46,6 +47,7 @@
|
||||
"bulk_delete_objects_confirm": "删除 {n} 个对象及其全部任务?归档则会保留其历史记录。",
|
||||
"bulk_objects_deleted": "已删除 {n} 个对象",
|
||||
"bulk_objects_archived": "已归档 {n} 个对象",
|
||||
"bulk_failed": "{n} 项失败:{reason}",
|
||||
"completing": "正在完成…",
|
||||
"interval": "间隔",
|
||||
"warning": "预警",
|
||||
@@ -200,8 +202,6 @@
|
||||
"show_all": "全部显示",
|
||||
"cost_duration_chart": "成本与耗时",
|
||||
"installed": "已安装",
|
||||
"confirm_delete_object": "确定删除此维护项及其所有任务吗?",
|
||||
"confirm_delete_task": "确定删除此任务吗?",
|
||||
"min": "最小",
|
||||
"max": "最大",
|
||||
"save": "保存",
|
||||
@@ -243,7 +243,6 @@
|
||||
"sort_task_name": "任务名称",
|
||||
"all_objects": "所有维护项",
|
||||
"all_parts": "所有配件",
|
||||
"tasks_lower": "任务",
|
||||
"no_tasks_yet": "尚无任务",
|
||||
"add_first_task": "添加首个任务",
|
||||
"trigger_configuration": "触发器配置",
|
||||
@@ -300,6 +299,7 @@
|
||||
"tab_calendar": "日历",
|
||||
"cal_no_events": "无维护事项",
|
||||
"cal_every_n_days": "每 {n} 天",
|
||||
"cal_every_day": "每天",
|
||||
"cal_source_time": "基于时间",
|
||||
"cal_source_time_adaptive": "基于时间 (自适应)",
|
||||
"cal_source_sensor": "基于传感器",
|
||||
@@ -685,7 +685,6 @@
|
||||
"budget_open_panel": "在面板中打开",
|
||||
"groups_empty": "尚无分组。",
|
||||
"group_new_placeholder": "添加分组…",
|
||||
"group_delete_confirm": "确定删除分组 \"{name}\" 吗?",
|
||||
"groups_manage_tasks": "管理任务分配…",
|
||||
"groups_open_panel": "在面板中打开",
|
||||
"unassigned": "未分配",
|
||||
@@ -764,6 +763,7 @@
|
||||
"doc_delete_confirm": "删除“{name}”?",
|
||||
"doc_too_large": "文件过大(最大 25 MB)。",
|
||||
"doc_upload_failed": "上传失败。",
|
||||
"docs_archive_too_large": "压缩包过大(最大 {max})。",
|
||||
"completion_photos_optional": "完成照片(可选)",
|
||||
"completion_photos": "完成照片",
|
||||
"choose_photos": "选择照片",
|
||||
@@ -791,7 +791,11 @@
|
||||
"doc_camera": "拍照",
|
||||
"camera_capture_shoot": "拍摄",
|
||||
"camera_switch_lens": "切换摄像头",
|
||||
"camera_switch_failed": "没有其他摄像头响应——这部手机只开放一个。另一个镜头请使用文件选择器。",
|
||||
"camera_switching": "正在切换摄像头…",
|
||||
"camera_not_answered": "此摄像头没有响应。再次点击切换以尝试下一个,或使用文件选择器。",
|
||||
"camera_diagnostics": "用于错误报告的详细信息",
|
||||
"camera_copy": "复制",
|
||||
"camera_copied": "已复制",
|
||||
"doc_drop_hint": "将文件拖放到此处",
|
||||
"doc_task_none": "没有与此任务关联的文档。",
|
||||
"doc_link_existing": "关联文档…",
|
||||
@@ -844,6 +848,55 @@
|
||||
"reading_below_last": "低于上次读数({value})",
|
||||
"settings_templates_label": "模板库",
|
||||
"settings_templates_hint": "取消勾选你永远不需要的模板——它们会从\"从模板\"选择器(面板和配置流程)中消失。其他一切不变;可随时重新启用。",
|
||||
"home_profile_title": "住宅概况",
|
||||
"home_profile_hint": "根据您的气候和所在半球推荐模板并设置季节窗口。所有信息均根据您的楼层、区域和住宅位置在本地得出。",
|
||||
"home_type_label": "住宅类型",
|
||||
"home_type_auto": "自动({detected})",
|
||||
"home_region_label": "州、省或地区",
|
||||
"home_region_none": "未找到",
|
||||
"home_region_hint": "有些规定在同一国家内也不同——某个州每年检验车辆,相邻的州则不需要。根据住址位置判断。",
|
||||
"home_dwelling_house": "独栋住宅",
|
||||
"home_dwelling_apartment": "公寓",
|
||||
"home_dwelling_unknown": "未识别",
|
||||
"home_detected_from": "判断依据:{reasons}",
|
||||
"home_reason_floors": "多个楼层",
|
||||
"home_reason_basement": "地下室",
|
||||
"home_reason_garden": "花园",
|
||||
"home_reason_shed": "工具棚",
|
||||
"home_reason_driveway": "车道",
|
||||
"home_reason_garage": "车库",
|
||||
"home_reason_attic": "阁楼",
|
||||
"home_reason_lawn_mower": "割草机",
|
||||
"home_reason_gate": "大门",
|
||||
"home_reason_balcony": "阳台",
|
||||
"home_reason_small_home": "单层且房间较少",
|
||||
"home_reason_ups": "UPS 不间断电源",
|
||||
"home_climate_label": "气候",
|
||||
"home_climate_value": "柯本 {koppen} · 最冷月 {cold} °C · 最热月 {warm} °C",
|
||||
"home_climate_unknown": "Home Assistant 中未设置住宅位置",
|
||||
"home_hemisphere_south": "南半球——季节窗口自动对调",
|
||||
"home_trait_freeze": "冬季霜冻",
|
||||
"home_trait_snow": "冬季多雪",
|
||||
"home_trait_severe_winter": "严冬",
|
||||
"home_trait_damp": "潮湿气候",
|
||||
"home_trait_mediterranean": "地中海气候",
|
||||
"home_trait_earthquake": "地震多发地区",
|
||||
"home_trait_hot_summer": "夏季炎热",
|
||||
"home_trait_hot_humid": "湿热",
|
||||
"home_trait_hot_dry": "炎热干燥",
|
||||
"home_trait_termites": "白蚁多发地区",
|
||||
"home_trait_wildfire": "山火风险",
|
||||
"home_trait_cyclone": "飓风/台风地区",
|
||||
"home_trait_tropical": "热带气候",
|
||||
"home_trait_radon": "建议检测氡气",
|
||||
"home_reason_starter": "住宅基础项目",
|
||||
"home_reason_country": "在{country}很常见",
|
||||
"home_reason_feature": "在您的住宅中发现:{feature}",
|
||||
"templates_recommended_title": "为您的住宅推荐",
|
||||
"templates_recommended_hint": "基于您的住宅概况——可在设置中调整。",
|
||||
"templates_legal_hint": "有关法定义务和期限的说明仅供参考,不构成法律建议。各地规定不同且会变化——请以当地法规和制造商说明为准。",
|
||||
"templates_not_typical": "对您的住宅类型不常见",
|
||||
"templates_set_up": "已设置",
|
||||
"worksheet": "工作单",
|
||||
"worksheet_scan_view": "扫码打开任务",
|
||||
"worksheet_scan_complete": "扫码完成",
|
||||
@@ -901,6 +954,8 @@
|
||||
"adopt_problem_ok": "正常",
|
||||
"adopt_problem_new_object": "(新建)",
|
||||
"adopt_object_hint": "给多个传感器相同的对象名称,它们就会合并为一个对象;输入已有对象的名称即可加入该对象。",
|
||||
"adopt_summary_title": "采用后会发生的变化",
|
||||
"adopt_summary_existing": "“{name}”:任务 {before} → {after}",
|
||||
"adopt_problem_adopt": "采用所选",
|
||||
"adopt_problem_done": "已采用 {tasks} 个问题传感器",
|
||||
"views_label": "视图",
|
||||
@@ -973,6 +1028,15 @@
|
||||
"trend_easing": "正远离阈值",
|
||||
"split_select_hint": "选择一个任务,在此查看详情",
|
||||
"setups_target_new": "新建:{name}",
|
||||
"setups_target_match": "{name} — 匹配:{reasons}",
|
||||
"setups_reason_model": "型号",
|
||||
"setups_reason_name": "名称",
|
||||
"setups_reason_area": "区域",
|
||||
"setups_reason_sibling": "另一台设备上的相同型号",
|
||||
"setups_maybe_covered": "可能已存在为“{name}”",
|
||||
"setups_already": "已存在:{names}",
|
||||
"setups_before_after": "对象的任务:{before} → {after}",
|
||||
"setups_new_object_count": "新对象“{name}” · 任务:{count}",
|
||||
"schedule_preview_title": "下次日期",
|
||||
"schedule_preview_ontime": "假设按时完成。",
|
||||
"schedule_preview_ends": "(系列结束)",
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+301
@@ -0,0 +1,301 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{e as y}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-6LZYA7IL.js";import{d as m}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-63C4ZGBD.js";import{a as h}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-K4SNNHPR.js";import{a as o,b as u,c as n,f as l,h as v,l as g,m as d,s as r,u as f,w as b}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-JE577H3E.js";var a=class extends v{constructor(){super(...arguments);this._open=!1;this._loading=!1;this._adopting=!1;this._error="";this._sensors=[];this._selected=new Set;this._objectNames={};this._objects=[];this._covered={};this._users=[];this._responsible="";this._forMinutes="0";this._localeReady=!1;this._userService=null;this._toggle=t=>{let i=new Set(this._selected);i.has(t)?i.delete(t):i.add(t),this._selected=i};this._toggleAll=()=>{this._selected.size===this._sensors.length?this._selected=new Set:this._selected=new Set(this._sensors.map(t=>t.entity_id))};this._adopt=async()=>{if(this._selected.size===0||this._adopting)return;this._error="";let t=this._sensors.filter(e=>this._selected.has(e.entity_id)).map(e=>({entity_id:e.entity_id,name:e.name,entry_id:this._existingEntryFor(e)??void 0,object_name:this._effectiveName(e),device_id:e.device_id??void 0,part_id:e.suggested_part_id??void 0,responsible_user_id:this._responsible||void 0,for_minutes:parseInt(this._forMinutes,10)>0?parseInt(this._forMinutes,10):void 0})),i=await h(this,{type:"maintenance_supporter/problem_sensors/adopt",selections:t},{busy:e=>{this._adopting=e},onError:e=>{this._error=e}});i!==void 0&&(this.dispatchEvent(new CustomEvent("problem-sensors-adopted",{bubbles:!0,composed:!0,detail:i})),this._open=!1)}}get _lang(){return f(this.hass)}updated(t){t.has("hass")&&this.hass&&!this._localeReady&&(this._localeReady=!0,b(this._lang).then(()=>this.requestUpdate()))}async open(){this._open=!0,this._loading=!0,this._error="",this._sensors=[],this._selected=new Set,this._objectNames={},this._responsible="",this._forMinutes="0",this._userService?this._userService.updateHass(this.hass):this._userService=new y(this.hass);let[t,i,e]=await Promise.all([h(this,{type:"maintenance_supporter/problem_sensors/discover"},{onError:s=>{this._error=s}}),this._userService.getUsers().catch(()=>[]),this.hass.connection.sendMessagePromise({type:"maintenance_supporter/objects"}).catch(()=>({objects:[]}))]);this._loading=!1,t!==void 0&&(this._objects=(e?.objects||[]).filter(s=>!s.object.archived_at).map(s=>({entry_id:s.entry_id,name:s.object.name,tasks:(s.tasks||[]).length})),this._sensors=t?.sensors||[],this._covered=Object.fromEntries(this._sensors.map(s=>[s.entity_id,s.covered_by??null])),this._selected=new Set(this._sensors.filter(s=>!s.covered_by).map(s=>s.entity_id)),this._users=i)}_defaultName(t){return t.suggested_entry_id?t.suggested_object_name:t.candidate?.name??t.suggested_object_name}_effectiveName(t){return(this._objectNames[t.entity_id]??"").trim()||this._defaultName(t)}_existingEntryFor(t){let i=this._effectiveName(t),e=t.suggested_entry_id||t.target_entry_id||null;if(i===this._defaultName(t)&&e)return e;let s=this._objects.find(c=>c.name.trim().toLowerCase()===i.toLowerCase());return s?s.entry_id:null}_schedulePreview(){clearTimeout(this._previewTimer),this._previewTimer=setTimeout(()=>{this._preview()},350)}async _preview(){let t=this._sensors.map(e=>({entity_id:e.entity_id,name:e.name,entry_id:this._existingEntryFor(e)})),i=await h(this,{type:"maintenance_supporter/problem_sensors/preview",selections:t},{onError:()=>{}});i?.covered&&(this._covered={...this._covered,...i.covered})}_summary(t){let i=new Map;for(let e of this._sensors){if(!this._selected.has(e.entity_id))continue;let s=this._existingEntryFor(e),c=this._effectiveName(e),_=s??`new:${c.toLowerCase()}`,p=i.get(_)??{name:c,entry:s,adding:0};p.adding+=1,i.set(_,p)}return i.size===0?l:n`
|
||||
<div class="summary">
|
||||
<div class="summary-title">${r("adopt_summary_title",t)}</div>
|
||||
${[...i.values()].map(e=>{if(!e.entry)return n`<div class="summary-line new">
|
||||
${r("setups_new_object_count",t).replace("{name}",e.name).replace("{count}",String(e.adding))}
|
||||
</div>`;let s=this._objects.find(c=>c.entry_id===e.entry)?.tasks??0;return n`<div class="summary-line">
|
||||
${r("adopt_summary_existing",t).replace("{name}",e.name).replace("{before}",String(s)).replace("{after}",String(s+e.adding))}
|
||||
</div>`})}
|
||||
</div>
|
||||
`}_close(){clearTimeout(this._previewTimer),this._open=!1}_targetLabel(t,i){if(t.candidate&&this._existingEntryFor(t)===t.candidate.entry_id){let e=t.candidate.reasons.map(s=>r(`setups_reason_${s}`,i)).join(", ");return r("setups_target_match",i).replace("{name}",t.candidate.name).replace("{reasons}",e)}return this._effectiveName(t)}render(){if(!this._open)return n``;let t=this._lang,i=this._sensors.length>0&&this._selected.size===this._sensors.length;return n`
|
||||
<div class="overlay" @click=${this._close}>
|
||||
<div class="card" @click=${e=>e.stopPropagation()}>
|
||||
<div class="title">${r("adopt_problem_title",t)}</div>
|
||||
<div class="hint">${r("adopt_problem_hint",t)}</div>
|
||||
${this._error?n`<div class="error">${this._error}</div>`:l}
|
||||
|
||||
${this._loading?n`<div class="loading">…</div>`:this._sensors.length===0?n`<div class="empty">${r("adopt_problem_none",t)}</div>`:n`
|
||||
<label class="select-all">
|
||||
<input
|
||||
type="checkbox"
|
||||
.checked=${i}
|
||||
@change=${this._toggleAll}
|
||||
/>
|
||||
<span>${r("selected",t)}: ${this._selected.size} / ${this._sensors.length}</span>
|
||||
</label>
|
||||
<div class="row-sub adopt-object-hint">${r("adopt_object_hint",t)}</div>
|
||||
<datalist id="adopt-object-names">
|
||||
${this._objects.map(e=>n`<option value=${e.name}></option>`)}
|
||||
</datalist>
|
||||
<div class="list">
|
||||
${this._sensors.map(e=>{let s=this._selected.has(e.entity_id),c=e.state==="on",_=[e.device_name,e.area_name].filter(Boolean).join(" \xB7 ");return n`
|
||||
<label class="row">
|
||||
<input
|
||||
type="checkbox"
|
||||
.checked=${s}
|
||||
@change=${()=>this._toggle(e.entity_id)}
|
||||
/>
|
||||
<div class="row-main">
|
||||
<div class="row-top">
|
||||
<span class="row-name">${e.name}</span>
|
||||
<span class="chip ${c?"chip-active":"chip-ok"}">
|
||||
${c?r("adopt_problem_active",t):r("adopt_problem_ok",t)}
|
||||
</span>
|
||||
</div>
|
||||
${_?n`<div class="row-sub">${_}</div>`:l}
|
||||
${s?n`<div class="row-object" @click=${p=>p.stopPropagation()}>
|
||||
<input
|
||||
class="adopt-object"
|
||||
list="adopt-object-names"
|
||||
aria-label=${r("object",t)}
|
||||
placeholder=${this._defaultName(e)}
|
||||
.value=${this._objectNames[e.entity_id]??this._defaultName(e)}
|
||||
@input=${p=>{this._objectNames={...this._objectNames,[e.entity_id]:p.target.value},this._schedulePreview()}}
|
||||
/>
|
||||
</div>`:l}
|
||||
<div class="row-target">
|
||||
→ ${this._targetLabel(e,t)}${this._existingEntryFor(e)?l:n` <span class="new-tag">${r("adopt_problem_new_object",t)}</span>`}
|
||||
</div>
|
||||
${this._covered[e.entity_id]?n`<div class="maybe">
|
||||
${r("setups_maybe_covered",t).replace("{name}",this._covered[e.entity_id].name)}
|
||||
</div>`:l}
|
||||
${e.suggested_part_name?n`<div class="row-part">
|
||||
<ha-icon icon="mdi:package-variant-closed"></ha-icon>
|
||||
${r("adopt_problem_part",t).replace("{name}",e.suggested_part_name)}
|
||||
</div>`:l}
|
||||
</div>
|
||||
</label>
|
||||
`})}
|
||||
</div>
|
||||
`}
|
||||
|
||||
${!this._loading&&this._sensors.length>0?this._summary(t):l}
|
||||
|
||||
${!this._loading&&this._sensors.length>0?n`
|
||||
<label class="responsible">
|
||||
<span>${r("for_at_least_minutes",t)}</span>
|
||||
<input
|
||||
class="for-input"
|
||||
type="number"
|
||||
min=${m[0]}
|
||||
max=${m[1]}
|
||||
.value=${this._forMinutes}
|
||||
@input=${e=>this._forMinutes=e.target.value}
|
||||
/>
|
||||
</label>
|
||||
<div class="for-hint">${r("adopt_for_minutes_hint",t)}</div>
|
||||
`:l}
|
||||
|
||||
${!this._loading&&this._sensors.length>0&&this._users.length>0?n`
|
||||
<label class="responsible">
|
||||
<span>${r("adopt_problem_responsible",t)}</span>
|
||||
<select
|
||||
.value=${this._responsible}
|
||||
@change=${e=>{this._responsible=e.target.value}}
|
||||
>
|
||||
<option value="" ?selected=${!this._responsible}>${r("no_user_assigned",t)}</option>
|
||||
${this._users.map(e=>n`<option value=${e.id} ?selected=${e.id===this._responsible}>${e.name}</option>`)}
|
||||
</select>
|
||||
</label>
|
||||
`:l}
|
||||
|
||||
<div class="actions">
|
||||
<ha-button appearance="plain" @click=${this._close}>
|
||||
${r("cancel",t)}
|
||||
</ha-button>
|
||||
<ha-button
|
||||
@click=${this._adopt}
|
||||
.disabled=${this._selected.size===0||this._adopting}
|
||||
>
|
||||
${r("adopt_problem_adopt",t)}
|
||||
</ha-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`}};a.styles=u`
|
||||
.overlay {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 1000;
|
||||
}
|
||||
.card {
|
||||
background: var(--card-background-color, #fff);
|
||||
color: var(--primary-text-color);
|
||||
border-radius: 12px;
|
||||
padding: 20px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
min-width: min(360px, calc(100vw - 24px));
|
||||
max-width: 560px;
|
||||
width: 90vw;
|
||||
max-height: 80vh;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
.title {
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
}
|
||||
.hint {
|
||||
color: var(--secondary-text-color);
|
||||
font-size: 13px;
|
||||
}
|
||||
.error {
|
||||
color: var(--error-color, #f44336);
|
||||
font-size: 13px;
|
||||
}
|
||||
.loading,
|
||||
.empty {
|
||||
color: var(--secondary-text-color);
|
||||
font-size: 14px;
|
||||
padding: 12px 0;
|
||||
}
|
||||
.select-all {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
font-size: 12px;
|
||||
color: var(--secondary-text-color);
|
||||
cursor: pointer;
|
||||
}
|
||||
.select-all input {
|
||||
cursor: pointer;
|
||||
}
|
||||
.list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 6px;
|
||||
overflow-y: auto;
|
||||
max-height: 50vh;
|
||||
}
|
||||
.row {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 10px;
|
||||
padding: 8px;
|
||||
border: 1px solid var(--divider-color);
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.row input {
|
||||
margin-top: 2px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.row-main {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 2px;
|
||||
min-width: 0;
|
||||
flex: 1;
|
||||
}
|
||||
.row-top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
}
|
||||
.row-name {
|
||||
font-weight: 500;
|
||||
font-size: 13px;
|
||||
}
|
||||
.row-sub {
|
||||
color: var(--secondary-text-color);
|
||||
font-size: 12px;
|
||||
}
|
||||
.row-object { margin-top: 6px; }
|
||||
.row-object input {
|
||||
width: 100%; box-sizing: border-box; padding: 6px 8px; font: inherit;
|
||||
border: 1px solid var(--divider-color); border-radius: 6px;
|
||||
background: var(--card-background-color); color: var(--primary-text-color);
|
||||
}
|
||||
.adopt-object-hint { margin: 0 0 8px; }
|
||||
.row-target {
|
||||
color: var(--secondary-text-color);
|
||||
font-size: 12px;
|
||||
}
|
||||
.row-part {
|
||||
color: var(--secondary-text-color);
|
||||
font-size: 12px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
}
|
||||
.row-part ha-icon {
|
||||
--mdc-icon-size: 14px;
|
||||
}
|
||||
.new-tag {
|
||||
font-style: italic;
|
||||
}
|
||||
.maybe {
|
||||
font-size: 11px;
|
||||
color: var(--warning-color, #ff9800);
|
||||
}
|
||||
.summary {
|
||||
font-size: 12px;
|
||||
border-top: 1px dashed var(--divider-color);
|
||||
padding-top: 6px;
|
||||
}
|
||||
.summary-title {
|
||||
font-weight: 500;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
.summary-line {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
.chip {
|
||||
font-size: 11px;
|
||||
padding: 1px 8px;
|
||||
border-radius: 10px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.chip-active {
|
||||
background: var(--error-color, #f44336);
|
||||
color: #fff;
|
||||
}
|
||||
.chip-ok {
|
||||
background: var(--divider-color);
|
||||
color: var(--secondary-text-color);
|
||||
}
|
||||
.responsible {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
font-size: 12px;
|
||||
color: var(--secondary-text-color);
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.for-input {
|
||||
width: 70px;
|
||||
background: var(--card-background-color);
|
||||
color: var(--primary-text-color);
|
||||
border: 1px solid var(--divider-color);
|
||||
border-radius: 4px;
|
||||
padding: 4px 6px;
|
||||
}
|
||||
.for-hint {
|
||||
font-size: 11px;
|
||||
color: var(--secondary-text-color);
|
||||
margin: -4px 0 2px;
|
||||
}
|
||||
.responsible select {
|
||||
flex: 1;
|
||||
min-width: 140px;
|
||||
padding: 4px 6px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid var(--divider-color);
|
||||
background: var(--card-background-color, #fff);
|
||||
color: var(--primary-text-color);
|
||||
font-size: 13px;
|
||||
}
|
||||
.actions {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 8px;
|
||||
padding-top: 8px;
|
||||
}
|
||||
`,o([g({attribute:!1})],a.prototype,"hass",2),o([d()],a.prototype,"_open",2),o([d()],a.prototype,"_loading",2),o([d()],a.prototype,"_adopting",2),o([d()],a.prototype,"_error",2),o([d()],a.prototype,"_sensors",2),o([d()],a.prototype,"_selected",2),o([d()],a.prototype,"_objectNames",2),o([d()],a.prototype,"_objects",2),o([d()],a.prototype,"_covered",2),o([d()],a.prototype,"_users",2),o([d()],a.prototype,"_responsible",2),o([d()],a.prototype,"_forMinutes",2);customElements.get("maintenance-adopt-problem-sensors-dialog")||customElements.define("maintenance-adopt-problem-sensors-dialog",a);export{a as MaintenanceAdoptProblemSensorsDialog};
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
var n={default_warning_days:[0,365],default_consumable_threshold:[1,90],battery_low_percent:[1,90],battery_recovered_percent:[20,100],archive_oneoff_days:[0,3650],delete_archived_oneoff_days:[0,3650],notify_due_soon_interval_hours:[0,720],notify_overdue_interval_hours:[0,720],notify_triggered_interval_hours:[0,720],max_notifications_per_day:[0,1e3],notification_bundle_threshold:[2,20],snooze_duration_hours:[1,168],warranty_reminder_days:[1,365],budget_alert_threshold:[10,100],currency_decimals:[0,3]};function o(e){let r=n[e];if(!r)throw new Error(`not an int-ranged setting: ${e}`);return r}var t=[0,14],_=[0,1440],a=[1,1e4],u=15,d=[.1,.9],s=[0,365],i=[.01,999],b=[.01,9999],A=[.1,5];export{n as a,o as b,t as c,_ as d,a as e,u as f,d as g,s as h,i,b as j,A as k};
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{c as r,f as i}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-JE577H3E.js";var a=["#c62828","#ad1457","#6a1b9a","#4527a0","#283593","#1565c0","#00838f","#2e7d32","#558b2f","#ef6c00","#6d4c41","#546e7a"];function u(e){let s=(e||"").split(/\s+/).filter(Boolean);return s.length===0?"?":s.length===1?s[0][0].toUpperCase():(s[0][0]+s[s.length-1][0]).toUpperCase()}function c(e){let s=0;for(let n of e)s=s*31+n.charCodeAt(0)>>>0;return a[s%a.length]}function o(e){return e?{id:e.id,name:e.name,initials:e.initials||u(e.name),color:e.color||c(e.id)}:null}function h(e){return e?r`<span class="person-avatar" style="--person-color: ${e.color}" title=${e.name}>${e.initials}</span>`:i}function m(e,s=""){return e?r`<span class="person-chip ${s}" title=${e.name}>${h(e)}<span class="person-name">${e.name}</span></span>`:i}var l=class{constructor(s){this.usersCache=null;this.cacheTimestamp=0;this.CACHE_TTL_MS=6e4;this.hass=s}updateHass(s){this.hass=s}async getUsers(s=!1){let n=Date.now();if(!s&&this.usersCache&&n-this.cacheTimestamp<this.CACHE_TTL_MS)return this.usersCache;try{let t=await this.hass.connection.sendMessagePromise({type:"maintenance_supporter/users/list"});return this.usersCache=t.users,this.cacheTimestamp=n,this.usersCache}catch(t){return console.error("Failed to fetch users:",t),this.usersCache||[]}}async assignUser(s,n,t){await this.hass.connection.sendMessagePromise({type:"maintenance_supporter/task/assign_user",entry_id:s,task_id:n,user_id:t})}async getTasksByUser(s){return(await this.hass.connection.sendMessagePromise({type:"maintenance_supporter/tasks/by_user",user_id:s})).tasks}getUserName(s){return!s||!this.usersCache?null:this.usersCache.find(t=>t.id===s)?.name||null}getPerson(s){return o(this.getUser(s))}getUser(s){return!s||!this.usersCache?null:this.usersCache.find(n=>n.id===s)||null}getCurrentUserId(){return this.hass.user?.id||null}isCurrentUser(s){return s?s===this.getCurrentUserId():!1}clearCache(){this.usersCache=null,this.cacheTimestamp=0}};export{a,o as b,h as c,m as d,l as e};
|
||||
@@ -0,0 +1,88 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{D as m,a,b as y,c as s,f as l,h as g,l as o,m as f,s as d}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-JE577H3E.js";function $(n){let t=m("2001-02-03",n).match(/\d+/g)||[],e=v=>t.findIndex(_=>Number(_)===v),h=e(2001),c=e(2),u=e(3);return h===0?"YMD":c>=0&&u>=0&&c<u?"MDY":"DMY"}function p(n,i,t){if(n<1e3||n>9999||i<1||i>12||t<1||t>31)return null;let e=new Date(n,i-1,t);return e.getFullYear()!==n||e.getMonth()!==i-1||e.getDate()!==t?null:`${n}-${String(i).padStart(2,"0")}-${String(t).padStart(2,"0")}`}function b(n,i){let t=n.trim(),e;if(e=t.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/))return p(+e[1],+e[2],+e[3]);if(e=t.match(/^(\d{4})$/))return p(+e[1],1,1);if(e=t.match(/^(\d{1,2})[./](\d{4})$/))return p(+e[2],+e[1],1);if(e=t.match(/^(\d{1,2})\.(\d{1,2})\.(\d{4})$/))return p(+e[3],+e[2],+e[1]);if(e=t.match(/^(\d{1,2})[/-](\d{1,2})[/-](\d{4})$/)){let h=+e[1],c=+e[2],u=+e[3];return $(i)==="MDY"?p(u,h,c):p(u,c,h)}return null}function x(n,i){if(i)switch(n){case"date":return i.split("T")[0];case"time":return i.length===5?`${i}:00`:i;case"datetime":{let[t,e="00:00:00"]=i.split("T");return`${t} ${e.length===5?`${e}:00`:e}`}}}function k(n,i){if(typeof i!="string"||!i)return"";switch(n){case"date":return i.slice(0,10);case"time":return i.slice(0,5);case"datetime":{let[t,e="00:00:00"]=i.split(" ");return`${t}T${e.length===5?`${e}:00`:e}`}}}var r=class extends g{constructor(){super(...arguments);this.kind="date";this.label="";this.value="";this.clearable=!1;this.disabled=!1;this.required=!1;this.lang="en";this._typing=!1;this._typed="";this._typedInvalid=!1}_startTyping(){this._typed=this.value,this._typedInvalid=!1,this._typing=!0,this.updateComplete.then(()=>this.shadowRoot?.querySelector("input.typed")?.focus())}_commitTyped(){if(!this._typed.trim()){this._typing=!1;return}let t=b(this._typed,this.lang);if(!t){this._typedInvalid=!0;return}this._typing=!1,this._typedInvalid=!1,this._emit(t)}_onTypedKey(t){t.key==="Enter"?(t.preventDefault(),this._commitTyped()):t.key==="Escape"&&(t.preventDefault(),this._typing=!1,this._typedInvalid=!1)}_selector(){switch(this.kind){case"date":return{date:{}};case"time":return{time:{no_second:!0}};case"datetime":return{datetime:{}}}}_onSelectorChange(t){t.stopPropagation(),this._emit(k(this.kind,t.detail?.value))}_clear(){this._emit("")}_emit(t){t!==this.value&&(this.value=t,this.dispatchEvent(new CustomEvent("value-changed",{bubbles:!0,composed:!0,detail:{value:t}})))}render(){return s`
|
||||
<div class="field">
|
||||
${this.label?s`<span class="label">${this.label}${this.required?s`<span class="req">*</span>`:l}</span>`:l}
|
||||
<div class="row">
|
||||
${this._typing?s`<input class="typed" type="text" inputmode="numeric" autocomplete="off"
|
||||
.value=${this._typed}
|
||||
placeholder=${m("1978-03-15",this.lang)}
|
||||
aria-invalid=${this._typedInvalid?"true":"false"}
|
||||
@input=${t=>{this._typed=t.target.value,this._typedInvalid=!1}}
|
||||
@keydown=${this._onTypedKey}
|
||||
@blur=${this._commitTyped} />`:s`<ha-selector
|
||||
.hass=${this.hass}
|
||||
.selector=${this._selector()}
|
||||
.value=${x(this.kind,this.value)}
|
||||
.required=${this.required}
|
||||
.disabled=${this.disabled}
|
||||
@value-changed=${this._onSelectorChange}
|
||||
></ha-selector>`}
|
||||
${this.kind==="date"&&!this.disabled&&!this._typing?s`<button type="button" class="type-toggle" title=${d("date_type_toggle",this.lang)} aria-label=${d("date_type_toggle",this.lang)} @click=${this._startTyping}>
|
||||
<ha-icon icon="mdi:keyboard-outline"></ha-icon>
|
||||
</button>`:l}
|
||||
${this.clearable&&this.value&&!this.disabled&&!this._typing?s`<button type="button" class="clear" title=${d("clear",this.lang)} aria-label=${d("clear",this.lang)} @click=${this._clear}>
|
||||
<ha-icon icon="mdi:close"></ha-icon>
|
||||
</button>`:l}
|
||||
</div>
|
||||
${this._typedInvalid?s`<span class="helper invalid">${d("date_type_invalid",this.lang)}</span>`:this.helper?s`<span class="helper">${this.helper}</span>`:l}
|
||||
</div>
|
||||
`}};r.styles=y`
|
||||
:host { display: block; }
|
||||
.field {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 4px;
|
||||
}
|
||||
.label {
|
||||
font-size: 12px;
|
||||
color: var(--secondary-text-color, #888);
|
||||
font-weight: 500;
|
||||
}
|
||||
.req { color: var(--error-color, #f44336); margin-left: 2px; }
|
||||
.row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
}
|
||||
ha-selector {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
.clear, .type-toggle {
|
||||
flex: none;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
padding: 0;
|
||||
border: none;
|
||||
border-radius: 50%;
|
||||
background: transparent;
|
||||
color: var(--secondary-text-color);
|
||||
cursor: pointer;
|
||||
--mdc-icon-size: 20px;
|
||||
}
|
||||
.clear:hover, .type-toggle:hover { background: rgba(var(--rgb-primary-text-color, 0, 0, 0), 0.08); }
|
||||
.clear:focus-visible, .type-toggle:focus-visible { outline: 2px solid var(--primary-color); }
|
||||
.helper {
|
||||
font-size: 11px;
|
||||
color: var(--secondary-text-color);
|
||||
font-style: italic;
|
||||
}
|
||||
.helper.invalid { color: var(--error-color, #f44336); font-style: normal; }
|
||||
input.typed {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
height: 40px;
|
||||
box-sizing: border-box;
|
||||
padding: 0 12px;
|
||||
border: 1px solid var(--divider-color, #ccc);
|
||||
border-radius: 4px;
|
||||
background: var(--card-background-color, #fff);
|
||||
color: var(--primary-text-color);
|
||||
font: inherit;
|
||||
}
|
||||
input.typed[aria-invalid="true"] { border-color: var(--error-color, #f44336); }
|
||||
input.typed:focus { outline: 2px solid var(--primary-color); outline-offset: -1px; }
|
||||
`,a([o({attribute:!1})],r.prototype,"hass",2),a([o()],r.prototype,"kind",2),a([o()],r.prototype,"label",2),a([o()],r.prototype,"value",2),a([o()],r.prototype,"helper",2),a([o({type:Boolean})],r.prototype,"clearable",2),a([o({type:Boolean})],r.prototype,"disabled",2),a([o({type:Boolean})],r.prototype,"required",2),a([o()],r.prototype,"lang",2),a([f()],r.prototype,"_typing",2),a([f()],r.prototype,"_typed",2),a([f()],r.prototype,"_typedInvalid",2);customElements.get("ms-date-field")||customElements.define("ms-date-field",r);
|
||||
@@ -0,0 +1,153 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{a as u}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-K4SNNHPR.js";import{a as r,b as _,c as l,f as o,h as p,l as d,m as s,s as i,u as h}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-JE577H3E.js";var a=class extends p{constructor(){super(...arguments);this.objects=[];this._open=!1;this._loading=!1;this._error="";this._name="";this._manufacturer="";this._model="";this._serialNumber="";this._areaId="";this._installationDate="";this._warrantyExpiry="";this._documentationUrl="";this._notes="";this._haDeviceId="";this._parentEntryId="";this._entryId=null}get _lang(){return h(this.hass)}openCreate(){this._entryId=null,this._name="",this._manufacturer="",this._model="",this._serialNumber="",this._areaId="",this._installationDate="",this._warrantyExpiry="",this._documentationUrl="",this._notes="",this._haDeviceId="",this._parentEntryId="",this._error="",this._open=!0}openEdit(e,n){this._entryId=e,this._name=n.name||"",this._manufacturer=n.manufacturer||"",this._model=n.model||"",this._serialNumber=n.serial_number||"",this._areaId=n.area_id||"",this._installationDate=n.installation_date||"",this._warrantyExpiry=n.warranty_expiry||"",this._documentationUrl=n.documentation_url||"",this._notes=n.notes||"",this._haDeviceId=n.ha_device_id||"",this._parentEntryId=n.parent_entry_id||"",this._error="",this._open=!0}async _save(){if(this._loading||!this._name.trim())return;this._error="";let e={name:this._name,manufacturer:this._manufacturer||null,model:this._model||null,serial_number:this._serialNumber||null,area_id:this._areaId||null,installation_date:this._installationDate||null,warranty_expiry:this._warrantyExpiry||null,documentation_url:this._documentationUrl.trim()||null,notes:this._notes.trim()||null,ha_device_id:this._haDeviceId||null,parent_entry_id:this._parentEntryId||null};await u(this,this._entryId?{type:"maintenance_supporter/object/update",entry_id:this._entryId,...e}:{type:"maintenance_supporter/object/create",...e},{busy:t=>{this._loading=t},fallbackKey:"save_error",onError:t=>{this._error=t}})!==void 0&&(this._open=!1,this.dispatchEvent(new CustomEvent("object-saved")))}_parentChoices(){return(this.objects||[]).filter(e=>e.entry_id!==this._entryId)}_close(){this._open=!1}render(){if(!this._open)return l``;let e=this._lang,n=this._entryId?i("edit_object",e):i("new_object",e);return l`
|
||||
<ha-dialog open @closed=${this._close}>
|
||||
<div class="dialog-title">${n}</div>
|
||||
<div class="content">
|
||||
${this._error?l`<div class="error">${this._error}</div>`:o}
|
||||
<ms-textfield
|
||||
label="${i("name",e)}"
|
||||
required
|
||||
.value=${this._name}
|
||||
@input=${t=>this._name=t.target.value}
|
||||
></ms-textfield>
|
||||
<ms-textfield
|
||||
label="${i("manufacturer_optional",e)}"
|
||||
.value=${this._manufacturer}
|
||||
@input=${t=>this._manufacturer=t.target.value}
|
||||
></ms-textfield>
|
||||
<ms-textfield
|
||||
label="${i("model_optional",e)}"
|
||||
.value=${this._model}
|
||||
@input=${t=>this._model=t.target.value}
|
||||
></ms-textfield>
|
||||
<ms-textfield
|
||||
label="${i("serial_number_optional",e)}"
|
||||
.value=${this._serialNumber}
|
||||
@input=${t=>this._serialNumber=t.target.value}
|
||||
></ms-textfield>
|
||||
<ms-textfield
|
||||
label="${i("documentation_url_optional",e)}"
|
||||
type="url"
|
||||
.value=${this._documentationUrl}
|
||||
@input=${t=>this._documentationUrl=t.target.value}
|
||||
></ms-textfield>
|
||||
<ha-area-picker
|
||||
.hass=${this.hass}
|
||||
label="${i("area_id_optional",e)}"
|
||||
.value=${this._areaId}
|
||||
@value-changed=${t=>this._areaId=t.detail.value||""}
|
||||
></ha-area-picker>
|
||||
<ms-date-field
|
||||
kind="date"
|
||||
clearable
|
||||
.hass=${this.hass}
|
||||
.lang=${e}
|
||||
label="${i("installation_date_optional",e)}"
|
||||
.value=${this._installationDate}
|
||||
@value-changed=${t=>this._installationDate=t.detail.value}
|
||||
></ms-date-field>
|
||||
<ms-date-field
|
||||
kind="date"
|
||||
clearable
|
||||
.hass=${this.hass}
|
||||
.lang=${e}
|
||||
label="${i("warranty_expiry_optional",e)}"
|
||||
.value=${this._warrantyExpiry}
|
||||
@value-changed=${t=>this._warrantyExpiry=t.detail.value}
|
||||
></ms-date-field>
|
||||
<ha-form
|
||||
.hass=${this.hass}
|
||||
.data=${{device:this._haDeviceId||void 0}}
|
||||
.schema=${[{name:"device",selector:{device:{}}}]}
|
||||
.computeLabel=${()=>i("link_device_optional",e)}
|
||||
@value-changed=${t=>this._haDeviceId=t.detail.value?.device||""}
|
||||
></ha-form>
|
||||
${this._parentChoices().length?l`<label class="textarea-field">
|
||||
<span class="textarea-label">${i("parent_object_optional",e)}</span>
|
||||
<select
|
||||
class="parent-select"
|
||||
.value=${this._parentEntryId}
|
||||
@change=${t=>this._parentEntryId=t.target.value}
|
||||
>
|
||||
<option value="" ?selected=${!this._parentEntryId}>
|
||||
${i("parent_none",e)}
|
||||
</option>
|
||||
${this._parentChoices().map(t=>l`<option
|
||||
value=${t.entry_id}
|
||||
?selected=${this._parentEntryId===t.entry_id}
|
||||
>${t.object.name}</option>`)}
|
||||
</select>
|
||||
</label>`:o}
|
||||
<label class="textarea-field">
|
||||
<span class="textarea-label">${i("object_notes_optional",e)}</span>
|
||||
<textarea
|
||||
rows="3"
|
||||
.value=${this._notes}
|
||||
@input=${t=>this._notes=t.target.value}
|
||||
></textarea>
|
||||
<span class="md-hint">${i("notes_markdown_hint",e)}</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="dialog-actions">
|
||||
<ha-button appearance="plain" @click=${this._close}>
|
||||
${i("cancel",this._lang)}
|
||||
</ha-button>
|
||||
<ha-button
|
||||
@click=${this._save}
|
||||
.disabled=${this._loading||!this._name.trim()}
|
||||
>
|
||||
${this._loading?i("saving",this._lang):i("save",this._lang)}
|
||||
</ha-button>
|
||||
</div>
|
||||
</ha-dialog>
|
||||
`}};a.styles=_`
|
||||
.dialog-title {
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
.content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
min-width: 300px;
|
||||
}
|
||||
.dialog-actions {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 8px;
|
||||
padding-top: 16px;
|
||||
}
|
||||
ms-textfield {
|
||||
display: block;
|
||||
}
|
||||
.textarea-field {
|
||||
display: flex; flex-direction: column; gap: 4px;
|
||||
}
|
||||
.textarea-label {
|
||||
font-size: 12px; color: var(--secondary-text-color, #888); font-weight: 500;
|
||||
}
|
||||
.textarea-field textarea {
|
||||
padding: 8px 10px; font-size: 14px; font-family: inherit;
|
||||
background: var(--secondary-background-color, rgba(0,0,0,0.06));
|
||||
color: var(--primary-text-color);
|
||||
border: 1px solid var(--divider-color); border-radius: 6px;
|
||||
resize: vertical;
|
||||
}
|
||||
.textarea-field textarea:focus {
|
||||
outline: none; border-color: var(--primary-color);
|
||||
}
|
||||
.md-hint {
|
||||
font-size: 11px; color: var(--secondary-text-color); font-style: italic;
|
||||
}
|
||||
.parent-select {
|
||||
padding: 8px 10px; font-size: 14px; font-family: inherit;
|
||||
background: var(--secondary-background-color, rgba(0,0,0,0.06));
|
||||
color: var(--primary-text-color);
|
||||
border: 1px solid var(--divider-color); border-radius: 6px;
|
||||
}
|
||||
.error {
|
||||
color: var(--error-color, #f44336);
|
||||
font-size: 13px;
|
||||
}
|
||||
`,r([d({attribute:!1})],a.prototype,"hass",2),r([d({attribute:!1})],a.prototype,"objects",2),r([s()],a.prototype,"_open",2),r([s()],a.prototype,"_loading",2),r([s()],a.prototype,"_error",2),r([s()],a.prototype,"_name",2),r([s()],a.prototype,"_manufacturer",2),r([s()],a.prototype,"_model",2),r([s()],a.prototype,"_serialNumber",2),r([s()],a.prototype,"_areaId",2),r([s()],a.prototype,"_installationDate",2),r([s()],a.prototype,"_warrantyExpiry",2),r([s()],a.prototype,"_documentationUrl",2),r([s()],a.prototype,"_notes",2),r([s()],a.prototype,"_haDeviceId",2),r([s()],a.prototype,"_parentEntryId",2),r([s()],a.prototype,"_entryId",2);customElements.get("maintenance-object-dialog")||customElements.define("maintenance-object-dialog",a);export{a};
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{s as a}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-JE577H3E.js";var _=[{key:"name",labelKey:"name",required:!0},{key:"ref_no",labelKey:"ref_number"},{key:"manufacturer",labelKey:"manufacturer"},{key:"model",labelKey:"model"},{key:"serial_number",labelKey:"serial_number_label"},{key:"installation_date",labelKey:"installed"},{key:"warranty_expiry",labelKey:"warranty"},{key:"area_id",labelKey:"area"},{key:"documentation_url",labelKey:"documentation_url_label"},{key:"notes",labelKey:"object_notes_label"},{key:"task_count",labelKey:"tasks"},{key:"actions",labelKey:"actions"}],u=_.map(e=>e.key),i=["name","manufacturer","model","serial_number","installation_date","warranty_expiry","area_id","task_count","actions"];function g(e){if(!Array.isArray(e))return[...i];let n=new Set,r=[];for(let t of e)typeof t=="string"&&u.includes(t)&&!n.has(t)&&(n.add(t),r.push(t));return r.length?(r.includes("name")||r.unshift("name"),r):[...i]}function f(e,n){return a(`home_dwelling_${e==="house"||e==="apartment"?e:"unknown"}`,n)}function m(e,n){if(!e)return"";try{return new Intl.DisplayNames([n],{type:"region"}).of(e)||e}catch{return e}}var l={floors:"home_reason_floors",basement_floor:"home_reason_basement",area_basement:"home_reason_basement",area_garden:"home_reason_garden",area_shed:"home_reason_shed",area_driveway:"home_reason_driveway",area_garage:"home_reason_garage",entity_garage:"home_reason_garage",area_attic:"home_reason_attic",entity_lawn_mower:"home_reason_lawn_mower",entity_gate:"home_reason_gate",area_balcony:"home_reason_balcony",small_home:"home_reason_small_home"},c={ups:"home_reason_ups"};function d(e,n){let r=[];for(let t of e){let o=l[t];if(!o)continue;let s=a(o,n);r.includes(s)||r.push(s)}return r.join(", ")}function b(e,n,r){if(e==="starter")return a("home_reason_starter",n);if(e==="country")return a("home_reason_country",n).replace("{country}",m(r,n));if(e.startsWith("feature_")){let t=e.slice(8),o=l[`area_${t}`]??c[t];return a("home_reason_feature",n).replace("{feature}",o?a(o,n):e)}return a(`home_trait_${e}`,n)}export{_ as a,i as b,g as c,f as d,m as e,d as f,b as g};
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
function c(o,t,e){let l=new Blob([o],{type:e}),d=URL.createObjectURL(l),n=document.createElement("a");n.href=d,n.download=t,n.target="_blank",n.rel="noopener",n.style.display="none",document.body.appendChild(n),n.dispatchEvent(new MouseEvent("click")),document.body.removeChild(n),setTimeout(()=>URL.revokeObjectURL(d),6e4)}function r(o,t){let e=document.createElement("a");e.href=o,e.download=t,e.target="_blank",e.rel="noopener",e.style.display="none",document.body.appendChild(e),e.dispatchEvent(new MouseEvent("click")),document.body.removeChild(e)}export{c as a,r as b};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{b as a}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-DTRCTWKY.js";import{a as l}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-63C4ZGBD.js";async function _(e,t,n=300){return(await e.connection.sendMessagePromise({type:"auth/sign_path",path:t,expires:n})).path}async function c(e,t,n=300){return _(e,`/api/maintenance_supporter/document/${t}`,n)}async function b(e,t,n=""){let o=window.open("about:blank","_blank");try{let s=await c(e,t);o&&(o.location.href=new URL(s+n,window.location.origin).href)}catch(s){throw o&&o.close(),s}}async function h(e,t,n){a(await c(e,t,30),n)}function w(e,t=null){let n=URL.createObjectURL(new Blob([e],{type:"text/html"}));t&&!t.closed?t.location.href=n:window.open(n,"_blank"),setTimeout(()=>URL.revokeObjectURL(n),6e4)}function y(){return window.open("about:blank","_blank")}var r={operatorWriteEnabled:!1,operatorIds:[]};function A(e,t=r){return e?e.is_admin?!0:t.operatorWriteEnabled&&t.operatorIds.includes(e.id):!1}var m=["buttons_compact","buttons","icons"];function g(e){let[t,n]=l.default_warning_days,o=e?.general?.default_warning_days,s=e?.general?.row_action_style;return{features:{...i.features,...e?.features??{}},defaultWarningDays:typeof o=="number"&&Number.isFinite(o)&&o>=t&&o<=n?o:i.defaultWarningDays,rowActionStyle:m.includes(s??"")?s:i.rowActionStyle,access:{operatorWriteEnabled:e?.operator_write_enabled===!0,operatorIds:Array.isArray(e?.admin_panel_user_ids)?e.admin_panel_user_ids.filter(p=>typeof p=="string"):[]},budget:e?.budget??null,rowActionNoticePending:e?.general?.row_action_notice_pending===!0,refsInLists:e?.general?.ref_numbers_in_lists===!0,objectsTableColumns:Array.isArray(e?.objects_table_columns)?e.objects_table_columns:void 0}}var i={features:{adaptive:!1,predictions:!1,seasonal:!1,environmental:!1,budget:!1,groups:!1,checklists:!1,schedule_time:!1,completion_actions:!1},defaultWarningDays:7,rowActionStyle:"buttons_compact",access:r,budget:null,rowActionNoticePending:!1,refsInLists:!1,objectsTableColumns:void 0};function u(){let e=window;return e.__msSettingsCache??={promise:null}}function C(e){let t=u();if(t.promise)return t.promise;let n=e.connection.sendMessagePromise({type:"maintenance_supporter/settings"}).then(o=>g(o)).catch(()=>(t.promise===n&&(t.promise=null),i));return t.promise=n,n}function W(){u().promise=null}var d=class{constructor(){this._handle=null}schedule(t,n=4e3){this.clear(),this._handle=setTimeout(()=>{this._handle=null,t()},n)}clear(){this._handle!==null&&(clearTimeout(this._handle),this._handle=null)}get pending(){return this._handle!==null}};export{_ as a,c as b,b as c,h as d,w as e,y as f,r as g,A as h,m as i,g as j,C as k,W as l,d as m};
|
||||
@@ -0,0 +1,79 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{a as r,b as l,c as i,f as o,h as n,l as t}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-JE577H3E.js";var e=class extends n{constructor(){super(...arguments);this.label="";this.value="";this.placeholder="";this.type="text";this.required=!1;this.disabled=!1;this.multiline=!1;this.rows=3}_onInput(s){let a=s.target.value;this.value=a,this.dispatchEvent(new CustomEvent("input",{bubbles:!0,composed:!0,detail:{value:a}}))}render(){return i`
|
||||
<label class="field">
|
||||
${this.label?i`<span class="label">${this.label}${this.required?i`<span class="req">*</span>`:o}</span>`:o}
|
||||
${this.multiline?i`
|
||||
<textarea
|
||||
.value=${this.value??""}
|
||||
rows=${this.rows}
|
||||
?required=${this.required}
|
||||
?disabled=${this.disabled}
|
||||
placeholder=${this.placeholder}
|
||||
@input=${this._onInput}
|
||||
@change=${this._onInput}
|
||||
></textarea>`:i`
|
||||
<input
|
||||
.value=${this.value??""}
|
||||
.type=${this.type}
|
||||
?required=${this.required}
|
||||
?disabled=${this.disabled}
|
||||
placeholder=${this.placeholder}
|
||||
step=${this.step??o}
|
||||
min=${this.min??o}
|
||||
max=${this.max??o}
|
||||
pattern=${this.pattern??o}
|
||||
@input=${this._onInput}
|
||||
@change=${this._onInput}
|
||||
/>`}
|
||||
${this.helper?i`<span class="helper">${this.helper}</span>`:o}
|
||||
</label>
|
||||
`}};e.styles=l`
|
||||
:host { display: block; }
|
||||
.field {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 4px;
|
||||
}
|
||||
.label {
|
||||
font-size: 12px;
|
||||
color: var(--secondary-text-color, #888);
|
||||
font-weight: 500;
|
||||
}
|
||||
.req { color: var(--error-color, #f44336); margin-left: 2px; }
|
||||
input {
|
||||
padding: 8px 10px;
|
||||
font-size: 14px;
|
||||
background: var(--secondary-background-color, rgba(0,0,0,0.06));
|
||||
color: var(--primary-text-color);
|
||||
border: 1px solid var(--divider-color, rgba(255,255,255,0.12));
|
||||
border-radius: 6px;
|
||||
font-family: inherit;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
outline: none;
|
||||
}
|
||||
input:focus {
|
||||
border-color: var(--primary-color);
|
||||
}
|
||||
input:disabled { opacity: 0.5; cursor: not-allowed; }
|
||||
textarea {
|
||||
padding: 8px 10px;
|
||||
font-size: 14px;
|
||||
background: var(--secondary-background-color, rgba(0,0,0,0.06));
|
||||
color: var(--primary-text-color);
|
||||
border: 1px solid var(--divider-color, rgba(255,255,255,0.12));
|
||||
border-radius: 6px;
|
||||
font-family: inherit;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
outline: none;
|
||||
resize: vertical;
|
||||
}
|
||||
textarea:focus { border-color: var(--primary-color); }
|
||||
textarea:disabled { opacity: 0.5; cursor: not-allowed; }
|
||||
.helper {
|
||||
font-size: 11px;
|
||||
color: var(--secondary-text-color);
|
||||
font-style: italic;
|
||||
}
|
||||
`,r([t()],e.prototype,"label",2),r([t()],e.prototype,"value",2),r([t()],e.prototype,"placeholder",2),r([t()],e.prototype,"type",2),r([t({type:Boolean})],e.prototype,"required",2),r([t({type:Boolean})],e.prototype,"disabled",2),r([t()],e.prototype,"step",2),r([t()],e.prototype,"min",2),r([t()],e.prototype,"max",2),r([t()],e.prototype,"pattern",2),r([t()],e.prototype,"helper",2),r([t({type:Boolean})],e.prototype,"multiline",2),r([t({type:Number})],e.prototype,"rows",2);customElements.get("ms-textfield")||customElements.define("ms-textfield",e);
|
||||
@@ -0,0 +1,213 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{a as x}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-DTRCTWKY.js";import{a,b as v,c as n,f as p,h as b,l as h,m as c,s as t}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-JE577H3E.js";function d(l){return l.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function f(l){return!l.startsWith("data:image/svg+xml,")&&!l.startsWith("data:image/png;base64,")?"":d(l)}function q(l){return l.replace(/[/\\:*?"<>|#%]+/g,"").replace(/\s+/g,"-").toLowerCase().substring(0,100)}var o=class extends b{constructor(){super(...arguments);this.lang="en";this._open=!1;this._loading=!1;this._error="";this._viewResult=null;this._completeResult=null;this._urlMode="companion";this._entryId="";this._taskId=null;this._objectName="";this._taskName="";this._generateSeq=0}openForObject(e,i){this._entryId=e,this._taskId=null,this._objectName=i,this._taskName="",this._urlMode="companion",this._error="",this._viewResult=null,this._completeResult=null,this._open=!0,this._generate()}openForTask(e,i,r,s){this._entryId=e,this._taskId=i,this._objectName=r,this._taskName=s,this._urlMode="companion",this._error="",this._viewResult=null,this._completeResult=null,this._open=!0,this._generate()}async _generate(){let e=++this._generateSeq;this._loading=!0,this._error="",this._viewResult=null,this._completeResult=null;try{let i={type:"maintenance_supporter/qr/generate",entry_id:this._entryId,url_mode:this._urlMode};this._taskId&&(i.task_id=this._taskId);let r=[this.hass.connection.sendMessagePromise({...i,action:"view"})];this._taskId&&r.push(this.hass.connection.sendMessagePromise({...i,action:"complete"}));let s=await Promise.all(r);if(e!==this._generateSeq)return;this._viewResult=s[0],s.length>1&&(this._completeResult=s[1])}catch(i){if(e!==this._generateSeq)return;let r=i?.code,s=i?.message;this._error=r==="no_url"||typeof s=="string"&&s.includes("No Home Assistant URL")?t("qr_error_no_url",this.lang):t("qr_error",this.lang)}finally{e===this._generateSeq&&(this._loading=!1)}}_setUrlMode(e){this._urlMode!==e&&(this._urlMode=e,this._generate())}_print(){if(!this._viewResult)return;let e=this._viewResult,i=e.label.task_name?`${e.label.object_name} \u2014 ${e.label.task_name}`:e.label.object_name,r=[e.label.manufacturer,e.label.model].filter(Boolean).join(" "),s=window.open("","_blank","width=600,height=500");if(!s)return;let g=this.lang||"en",u=d(i),m=d(r),_=!!this._completeResult,w=d(t("qr_action_view",g)),$=d(t("qr_action_complete",g));s.document.write(`<!DOCTYPE html><html><head><meta charset="utf-8">
|
||||
<meta name="color-scheme" content="light">
|
||||
<title>${u}</title>
|
||||
<style>
|
||||
/* Printable sheet \u2014 must not inherit the phone's dark theme. The QR images
|
||||
carry their own white quiet zone and stay scannable either way, but the
|
||||
labels below are explicit dark greys and would vanish on a WebView's dark
|
||||
canvas. Same reasoning as helpers/report.ts. */
|
||||
:root{color-scheme:light}
|
||||
body{font-family:sans-serif;text-align:center;padding:20px;background:#fff;color:#1a1a1a}
|
||||
h2{margin:0 0 4px}
|
||||
.sub{color:#666;font-size:14px;margin-bottom:16px}
|
||||
.qr-row{display:flex;justify-content:center;gap:24px;margin:12px 0}
|
||||
.qr-col{display:flex;flex-direction:column;align-items:center;gap:6px}
|
||||
.qr-col img{width:${_?"200px":"280px"}}
|
||||
.qr-label{font-size:13px;font-weight:500;color:#333}
|
||||
.url{font-size:10px;color:#999;word-break:break-all;margin-top:8px;max-width:480px}
|
||||
</style></head><body>
|
||||
<h2>${u}</h2>
|
||||
${m?`<div class="sub">${m}</div>`:""}
|
||||
<div class="qr-row">
|
||||
<div class="qr-col">
|
||||
<img src="${f(this._viewResult.svg_data_uri)}" alt="QR Info" />
|
||||
<div class="qr-label">${w}</div>
|
||||
</div>
|
||||
${_?`<div class="qr-col">
|
||||
<img src="${f(this._completeResult.svg_data_uri)}" alt="QR Complete" />
|
||||
<div class="qr-label">${$}</div>
|
||||
</div>`:""}
|
||||
</div>
|
||||
<div class="url">${d(this._viewResult.url)}</div>
|
||||
<script>setTimeout(()=>window.print(),300)<\/script>
|
||||
</body></html>`),s.document.close()}_downloadSvg(e,i){let r=decodeURIComponent(e.svg_data_uri.replace("data:image/svg+xml,","")),s=this._taskName?`${this._objectName}-${this._taskName}`:this._objectName;x(r,`qr-${q(s)}-${i}.svg`,"image/svg+xml")}_close(){this._open=!1,this._viewResult=null,this._completeResult=null,this._error="",this._loading=!1}render(){if(!this._open)return n``;let e=this.lang||this.hass?.language||"en",i=this._taskName?`${t("qr_code",e)}: ${this._objectName} \u2014 ${this._taskName}`:`${t("qr_code",e)}: ${this._objectName}`,r=!!this._viewResult;return n`
|
||||
<ha-dialog open @closed=${this._close}>
|
||||
<div class="dialog-title">${i}</div>
|
||||
<div class="content">
|
||||
${this._loading?n`<div class="loading">${t("qr_generating",e)}</div>`:this._error?n`<div class="error">${this._error}</div>`:r?n`
|
||||
<div class="qr-pair">
|
||||
<div class="qr-item">
|
||||
<img
|
||||
class="qr-image ${this._completeResult?"small":""}"
|
||||
src="${this._viewResult.svg_data_uri}"
|
||||
alt="QR Info"
|
||||
/>
|
||||
<div class="qr-item-label">${t("qr_action_view",e)}</div>
|
||||
<button class="dl-btn"
|
||||
@click=${()=>this._downloadSvg(this._viewResult,"info")}>
|
||||
<ha-icon icon="mdi:download"></ha-icon>
|
||||
${t("qr_download",e)}
|
||||
</button>
|
||||
</div>
|
||||
${this._completeResult?n`
|
||||
<div class="qr-item">
|
||||
<img
|
||||
class="qr-image small"
|
||||
src="${this._completeResult.svg_data_uri}"
|
||||
alt="QR Complete"
|
||||
/>
|
||||
<div class="qr-item-label">${t("qr_action_complete",e)}</div>
|
||||
<button class="dl-btn"
|
||||
@click=${()=>this._downloadSvg(this._completeResult,"complete")}>
|
||||
<ha-icon icon="mdi:download"></ha-icon>
|
||||
${t("qr_download",e)}
|
||||
</button>
|
||||
</div>
|
||||
`:p}
|
||||
</div>
|
||||
<div class="url-display">${this._viewResult.url}</div>
|
||||
`:p}
|
||||
<div class="action-row">
|
||||
<label>${t("qr_url_mode",e)}</label>
|
||||
<div class="action-toggle">
|
||||
<button class="toggle-btn ${this._urlMode==="companion"?"active":""}"
|
||||
@click=${()=>this._setUrlMode("companion")}>${t("qr_mode_companion",e)}</button>
|
||||
<button class="toggle-btn ${this._urlMode==="local"?"active":""}"
|
||||
@click=${()=>this._setUrlMode("local")}>${t("qr_mode_local",e)}</button>
|
||||
<button class="toggle-btn ${this._urlMode==="server"?"active":""}"
|
||||
@click=${()=>this._setUrlMode("server")}>${t("qr_mode_server",e)}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dialog-actions">
|
||||
<ha-button appearance="plain" @click=${this._close}>
|
||||
${t("cancel",e)}
|
||||
</ha-button>
|
||||
<ha-button
|
||||
@click=${this._print}
|
||||
.disabled=${!r}
|
||||
>
|
||||
${t("qr_print",e)}
|
||||
</ha-button>
|
||||
</div>
|
||||
</ha-dialog>
|
||||
`}};o.styles=v`
|
||||
.dialog-title {
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
.content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
min-width: 300px;
|
||||
}
|
||||
.dialog-actions {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 8px;
|
||||
padding-top: 16px;
|
||||
}
|
||||
.qr-pair {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
}
|
||||
.qr-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
}
|
||||
.qr-image {
|
||||
width: 240px;
|
||||
height: 240px;
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
.qr-image.small {
|
||||
width: 180px;
|
||||
height: 180px;
|
||||
}
|
||||
.qr-item-label {
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
color: var(--secondary-text-color);
|
||||
text-align: center;
|
||||
}
|
||||
.dl-btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
background: none;
|
||||
border: 1px solid var(--divider-color, #e0e0e0);
|
||||
cursor: pointer;
|
||||
font-size: 13px;
|
||||
color: var(--primary-text-color);
|
||||
padding: 6px 14px;
|
||||
border-radius: 18px;
|
||||
transition: background 0.2s, border-color 0.2s;
|
||||
}
|
||||
.dl-btn:hover {
|
||||
background: var(--secondary-background-color, #f5f5f5);
|
||||
border-color: var(--primary-color);
|
||||
}
|
||||
.dl-btn ha-icon {
|
||||
--mdc-icon-size: 18px;
|
||||
}
|
||||
.url-display {
|
||||
font-size: 11px;
|
||||
color: var(--secondary-text-color);
|
||||
word-break: break-all;
|
||||
text-align: center;
|
||||
max-width: 400px;
|
||||
}
|
||||
.loading {
|
||||
padding: 40px 0;
|
||||
color: var(--secondary-text-color);
|
||||
}
|
||||
.error {
|
||||
padding: 20px 0;
|
||||
color: var(--error-color, #f44336);
|
||||
}
|
||||
.action-row {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 6px;
|
||||
width: 100%;
|
||||
}
|
||||
.action-row label {
|
||||
font-size: 13px;
|
||||
color: var(--secondary-text-color);
|
||||
}
|
||||
.action-toggle {
|
||||
display: flex;
|
||||
gap: 4px;
|
||||
background: var(--divider-color, #e0e0e0);
|
||||
border-radius: 6px;
|
||||
padding: 3px;
|
||||
}
|
||||
.toggle-btn {
|
||||
flex: 1;
|
||||
padding: 8px 12px;
|
||||
border: none;
|
||||
background: transparent;
|
||||
color: var(--primary-text-color);
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
font-size: 13px;
|
||||
transition: all 0.2s;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.toggle-btn:hover {
|
||||
background: rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.toggle-btn.active {
|
||||
background: var(--primary-color);
|
||||
color: var(--text-primary-color, #fff);
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
`,a([h({attribute:!1})],o.prototype,"hass",2),a([h()],o.prototype,"lang",2),a([c()],o.prototype,"_open",2),a([c()],o.prototype,"_loading",2),a([c()],o.prototype,"_error",2),a([c()],o.prototype,"_viewResult",2),a([c()],o.prototype,"_completeResult",2),a([c()],o.prototype,"_urlMode",2);customElements.get("maintenance-qr-dialog")||customElements.define("maintenance-qr-dialog",o);export{o as a};
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{B as g,s as p,z as f}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-JE577H3E.js";function m(r){return`${r.entry_id??""}\0${r.part_id}`}function y(r,n,i,o){let e=!!r.entry_id&&r.entry_id!==n,t=e?r.entry_id:n,s=i.find(l=>l.entry_id===t),a=(s?.parts||[]).find(l=>l.id===r.part_id)||null,d=e&&s?.object?.name||"",u=a?.name||p("shared_part_unknown",o);return{part:a,foreign:e,ownerName:d,label:d?`${u} (${d})`:u}}function k(r,n,i,o){let{part:e,label:t}=y(r,n,i,o),s=e&&e.stock!==null&&e.stock!==void 0?` (${g(e.stock,e.unit,o)})`:"",a=e?.storage_location?` \u2014 ${e.storage_location}`:"";return`${f(r.quantity,o)}\xD7 ${t}${s}${a}`}function b(r,n,i,o){let t=(i.find(a=>a.entry_id===n)?.parts||[]).map(a=>({...a})),s=new Set(t.map(a=>m({part_id:a.id})));for(let a of r?.consumes_parts||[]){if(!a.entry_id||a.entry_id===n)continue;let d=m(a);if(s.has(d))continue;s.add(d);let{part:u,ownerName:l}=y(a,n,i,o);t.push({id:a.part_id,name:u?.name||p("shared_part_unknown",o),unit:u?.unit,stock:u?.stock??null,storage_location:u?.storage_location,entry_id:a.entry_id,owner_name:l})}return t}function S(){let r=new Uint8Array(4);return(globalThis.crypto??{getRandomValues:n=>n.map(()=>Math.floor(Math.random()*256))}).getRandomValues(r),Array.from(r,n=>n.toString(16).padStart(2,"0")).join("")}function c(r){let n=r?.reading_values;if(!Array.isArray(n))return[];let i=[],o=new Set;for(let e of n){if(!e||typeof e!="object")continue;let t=e;typeof t.id!="string"||!t.id||o.has(t.id)||typeof t.value!="number"||!Number.isFinite(t.value)||(o.add(t.id),i.push({id:t.id,name:typeof t.name=="string"?t.name:t.id,unit:typeof t.unit=="string"?t.unit:null,value:t.value}))}return i}function _(r){return r.filter(n=>n.type==="completed"&&(n.reading_value!=null||c(n).length>0)).sort((n,i)=>n.timestamp.localeCompare(i.timestamp))}function P(r){return _(r??[]).map(n=>({timestamp:n.timestamp,values:c(n)})).filter(n=>n.values.length>0)}function v(r,n,i){let o;for(let e of r){if(i!==void 0){let s=new Date(e.timestamp).getTime();if(!isNaN(s)&&s>=i)break}let t=e.values.find(s=>s.id===n);t&&(o=t)}return o}function x(r,n,i){let o=c(n).find(t=>t.id===i);if(!o)return null;let e=null;for(let t of _(r)){if(t.timestamp>=n.timestamp)break;let s=c(t).find(a=>a.id===i);s&&(e=s.value)}return e==null?null:o.value-e}function E(r){let n=new Set,i=new Set;for(let o of r){let e=(o.name||"").trim().toLowerCase();e&&(n.has(e)?i.add(o.id):n.add(e))}return i}function L(r){let n=[],i=new Set,o=new Set;for(let e of r){let t=(e.name||"").trim();if(!(!t||i.has(e.id)||o.has(t.toLowerCase()))&&(i.add(e.id),o.add(t.toLowerCase()),n.push({id:e.id,name:t,unit:(e.unit||"").trim()||null}),n.length>=20))break}return n}function N(r){let n=(r??"").trim();if(n==="")return null;let i=Number(n.replace(",","."));return!Number.isFinite(i)||i<0?null:Math.round(i)}var M=["notes","cost","duration","photo","user"],H={notes:"notes_label",cost:"cost",duration:"duration",photo:"photo_label",user:"user_label"};export{m as a,k as b,b as c,S as d,c as e,P as f,v as g,x as h,E as i,L as j,N as k,M as l,H as m};
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{g as a}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-FR6WMAD6.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-IRVVKPDP.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-ZA53FZUW.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-7NJJOABV.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-63C4ZGBD.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-K4SNNHPR.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-JE577H3E.js";export{a as MaintenanceCompleteDialog};
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{H as a,I as b,J as c,K as d,L as e,M as f,N as g,O as h,P as i,Q as j,R as k}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-KFHQ72KC.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-P3JMRZOA.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-BLR3NVGU.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-3GDXUAER.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-RSVG7WFD.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-FR6WMAD6.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-IRVVKPDP.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-ZA53FZUW.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-7NJJOABV.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-YV5NLEJS.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-DTRCTWKY.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-6LZYA7IL.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-63C4ZGBD.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-K4SNNHPR.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-JE577H3E.js";export{b as __resetSettingsCacheForTests,a as getRowActionStyle,h as openCompleteDialog,c as openCreateObjectDialog,e as openCreateTaskDialog,d as openEditObjectDialog,f as openEditTaskDialog,g as openHistoryEditDialog,k as openObjectQuickActions,i as openQrDialog,j as openTaskQuickActions};
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{a}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-BLR3NVGU.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-RSVG7WFD.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-7NJJOABV.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-K4SNNHPR.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-JE577H3E.js";export{a as MaintenanceObjectDialog};
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{a}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-YV5NLEJS.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-DTRCTWKY.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-JE577H3E.js";export{a as MaintenanceQrDialog};
|
||||
+1421
File diff suppressed because one or more lines are too long
+149
@@ -0,0 +1,149 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{a as v}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-K4SNNHPR.js";import{a as d,b as m,c as r,f as g,h as f,l as x,m as c,s as o,u as b,w as y}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-JE577H3E.js";var p="__new__",n=class extends f{constructor(){super(...arguments);this._open=!1;this._loading=!1;this._adopting=!1;this._error="";this._setups=[];this._selected=new Set;this._baselines=new Map;this._targets=new Map;this._tasks=new Map;this._objects=[];this._localeReady=!1;this._toggle=t=>{let e=new Set(this._selected);e.has(t)?e.delete(t):e.add(t),this._selected=e};this._adopt=async()=>{if(this._adopting)return;this._error="";let t=[...this._selected].map(s=>{let a=[...this._tasks.get(s)??[]],l={device_id:s,task_names:a},i=this._targets.get(s);i&&i!==p&&(l.entry_id=i);for(let _ of a){let h=this._baselines.get(`${s} ${_}`),u=h?parseFloat(h):NaN;!isNaN(u)&&u>=0&&((l.baselines??={})[_]=u)}return l}).filter(s=>s.task_names.length>0);if(t.length===0)return;let e=await v(this,{type:"maintenance_supporter/integration_setups/adopt",selections:t},{busy:s=>{this._adopting=s},onError:s=>{this._error=s}});e!==void 0&&(this.dispatchEvent(new CustomEvent("integration-setups-adopted",{bubbles:!0,composed:!0,detail:e})),this._open=!1)}}get _lang(){return b(this.hass)}updated(t){t.has("hass")&&this.hass&&!this._localeReady&&(this._localeReady=!0,y(this._lang).then(()=>this.requestUpdate()))}_defaultTicks(t){return new Set(t.tasks.filter(e=>!e.covered_by).map(e=>e.task_name))}async open(){this._open=!0,this._loading=!0,this._error="",this._setups=[],this._selected=new Set;let t=await v(this,{type:"maintenance_supporter/integration_setups/discover"},{onError:e=>{this._error=e}});if(t!==void 0){this._setups=t?.setups||[],this._selected=new Set(this._setups.map(e=>e.device_id)),this._baselines=new Map,this._targets=new Map(this._setups.map(e=>[e.device_id,e.target_entry_id||p])),this._tasks=new Map(this._setups.map(e=>[e.device_id,this._defaultTicks(e)]));try{let e=await this.hass.connection.sendMessagePromise({type:"maintenance_supporter/objects"});this._objects=(e.objects||[]).filter(s=>!s.object?.archived_at).map(s=>({entry_id:s.entry_id,name:s.object?.name||s.entry_id})).sort((s,a)=>s.name.localeCompare(a.name))}catch{this._objects=[]}}this._loading=!1}_close(){this._open=!1}_toggleTask(t,e){let s=new Set(this._tasks.get(t)??[]);s.has(e)?s.delete(e):s.add(e),this._tasks=new Map(this._tasks).set(t,s)}async _retarget(t,e){this._targets=new Map(this._targets).set(t.device_id,e);let s=await v(this,{type:"maintenance_supporter/integration_setups/preview",device_id:t.device_id,entry_id:e===p?null:e},{onError:a=>{this._error=a}});!s||!Array.isArray(s.tasks)||(this._setups=this._setups.map(a=>a.device_id===t.device_id?{...a,...s}:a),this._tasks=new Map(this._tasks).set(t.device_id,this._defaultTicks(s)))}get _anythingTicked(){return[...this._selected].some(t=>(this._tasks.get(t)?.size??0)>0)}_targetOptions(t,e){let s=this._targets.get(t.device_id)??p,a=[];if(t.suggested_entry_id)a.push({value:t.suggested_entry_id,label:t.suggested_object_name});else{if(t.candidate){let i=t.candidate.reasons.map(_=>o(`setups_reason_${_}`,e)).join(", ");a.push({value:t.candidate.entry_id,label:o("setups_target_match",e).replace("{name}",t.candidate.name).replace("{reasons}",i)})}a.push({value:p,label:o("setups_target_new",e).replace("{name}",t.device_name)})}let l=new Set(a.map(i=>i.value));for(let i of this._objects)l.has(i.entry_id)||a.push({value:i.entry_id,label:i.name});return r`
|
||||
<select
|
||||
class="target-select"
|
||||
@click=${i=>i.stopPropagation()}
|
||||
@change=${i=>{this._retarget(t,i.target.value)}}
|
||||
>
|
||||
${a.map(i=>r`<option value=${i.value} ?selected=${i.value===s}>${i.label}</option>`)}
|
||||
</select>
|
||||
`}_beforeAfter(t,e){let s=this._tasks.get(t.device_id)?.size??0;if((this._targets.get(t.device_id)??p)===p)return o("setups_new_object_count",e).replace("{name}",t.device_name).replace("{count}",String(s));let l=t.target_task_count??0;return o("setups_before_after",e).replace("{before}",String(l)).replace("{after}",String(l+s))}render(){if(!this._open)return r``;let t=this._lang;return r`
|
||||
<div class="overlay" @click=${this._close}>
|
||||
<div class="card" @click=${e=>e.stopPropagation()}>
|
||||
<div class="title">${o("setups_title",t)}</div>
|
||||
<div class="hint">${o("setups_hint",t)}</div>
|
||||
${this._error?r`<div class="error">${this._error}</div>`:g}
|
||||
|
||||
${this._loading?r`<div class="loading">…</div>`:this._setups.length===0?r`<div class="empty">${o("setups_none",t)}</div>`:r`
|
||||
<div class="list">
|
||||
${this._setups.map(e=>{let s=this._selected.has(e.device_id),a=[e.integration_name,e.area_name].filter(Boolean).join(" \xB7 "),l=this._tasks.get(e.device_id)??new Set;return r`
|
||||
<div class="row ${s?"":"off"}" data-device=${e.device_id}>
|
||||
<input
|
||||
type="checkbox"
|
||||
class="device-check"
|
||||
.checked=${s}
|
||||
@change=${()=>this._toggle(e.device_id)}
|
||||
/>
|
||||
<div class="row-main">
|
||||
<div class="row-top">
|
||||
<span class="row-name">${e.device_name}</span>
|
||||
</div>
|
||||
<div class="row-sub">${a}</div>
|
||||
<div class="row-target">→ ${this._targetOptions(e,t)}</div>
|
||||
${s?r`
|
||||
<div class="task-list">
|
||||
${e.tasks.map(i=>r`
|
||||
<label class="task" title=${i.entity_ids.join(", ")}>
|
||||
<input
|
||||
type="checkbox"
|
||||
class="task-check"
|
||||
.checked=${l.has(i.task_name)}
|
||||
@change=${()=>this._toggleTask(e.device_id,i.task_name)}
|
||||
/>
|
||||
<span class="task-text">
|
||||
<span>${i.task_name_localized||i.task_name}</span>
|
||||
${i.covered_by?r`<span class="maybe">${o("setups_maybe_covered",t).replace("{name}",i.covered_by.name)}</span>`:g}
|
||||
</span>
|
||||
</label>
|
||||
${i.direction==="usage_delta"&&l.has(i.task_name)?r`
|
||||
<div class="baseline-field">
|
||||
<span class="baseline-label">${o("setups_baseline_hint",t)}</span>
|
||||
<input
|
||||
type="number"
|
||||
step="any"
|
||||
min="0"
|
||||
.value=${this._baselines.get(`${e.device_id} ${i.task_name}`)??""}
|
||||
@input=${_=>{let h=new Map(this._baselines);h.set(`${e.device_id} ${i.task_name}`,_.target.value),this._baselines=h}}
|
||||
/>
|
||||
</div>
|
||||
`:g}
|
||||
`)}
|
||||
${e.already?.length?r`<div class="already">
|
||||
${o("setups_already",t).replace("{names}",e.already.map(i=>i.existing_name).join(", "))}
|
||||
</div>`:g}
|
||||
</div>
|
||||
<div class="before-after">${this._beforeAfter(e,t)}</div>
|
||||
`:g}
|
||||
</div>
|
||||
</div>
|
||||
`})}
|
||||
</div>
|
||||
`}
|
||||
|
||||
<div class="actions">
|
||||
<ha-button appearance="plain" @click=${this._close}>
|
||||
${o("cancel",t)}
|
||||
</ha-button>
|
||||
<ha-button @click=${this._adopt} .disabled=${!this._anythingTicked||this._adopting}>
|
||||
${o("setups_adopt",t)}
|
||||
</ha-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`}};n.styles=m`
|
||||
.overlay {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 1000;
|
||||
}
|
||||
.card {
|
||||
background: var(--card-background-color, #fff);
|
||||
color: var(--primary-text-color);
|
||||
border-radius: 12px;
|
||||
padding: 20px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
min-width: min(360px, calc(100vw - 24px));
|
||||
max-width: 560px;
|
||||
width: 90vw;
|
||||
max-height: 80vh;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
.title { font-size: 18px; font-weight: 500; }
|
||||
.hint { color: var(--secondary-text-color); font-size: 13px; }
|
||||
.error { color: var(--error-color, #f44336); font-size: 13px; }
|
||||
.loading, .empty { color: var(--secondary-text-color); font-size: 14px; padding: 12px 0; }
|
||||
.list { display: flex; flex-direction: column; gap: 6px; overflow-y: auto; max-height: 55vh; }
|
||||
.row {
|
||||
display: flex; align-items: flex-start; gap: 10px; padding: 8px;
|
||||
border: 1px solid var(--divider-color); border-radius: 6px;
|
||||
}
|
||||
.row.off .row-main { opacity: 0.6; }
|
||||
.row input { margin-top: 2px; cursor: pointer; }
|
||||
.row-main { display: flex; flex-direction: column; gap: 4px; min-width: 0; flex: 1; }
|
||||
.row-name { font-weight: 500; font-size: 13px; }
|
||||
.row-sub, .row-target { color: var(--secondary-text-color); font-size: 12px; }
|
||||
.row-target { display: flex; align-items: center; gap: 6px; min-width: 0; }
|
||||
.target-select {
|
||||
font-size: 12px; padding: 2px 4px; min-width: 0; max-width: 100%; flex: 1 1 auto;
|
||||
border: 1px solid var(--divider-color); border-radius: 4px;
|
||||
background: var(--card-background-color, #fff);
|
||||
color: var(--primary-text-color);
|
||||
}
|
||||
.task-list { display: flex; flex-direction: column; gap: 2px; margin-top: 2px; }
|
||||
.task { display: flex; align-items: flex-start; gap: 6px; font-size: 13px; cursor: pointer; }
|
||||
.task-text { display: flex; flex-direction: column; min-width: 0; }
|
||||
.maybe { font-size: 11px; color: var(--warning-color, #ff9800); }
|
||||
.already { font-size: 11px; color: var(--secondary-text-color); margin-top: 2px; }
|
||||
.before-after {
|
||||
font-size: 12px; font-weight: 500; color: var(--primary-color);
|
||||
border-top: 1px dashed var(--divider-color); padding-top: 4px; margin-top: 2px;
|
||||
}
|
||||
.baseline-field {
|
||||
display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
|
||||
margin: 0 0 2px 24px; font-size: 12px; color: var(--secondary-text-color);
|
||||
}
|
||||
.baseline-field input {
|
||||
width: 110px; padding: 3px 6px; font-size: 12px;
|
||||
border: 1px solid var(--divider-color); border-radius: 4px;
|
||||
background: var(--card-background-color, #fff);
|
||||
color: var(--primary-text-color);
|
||||
}
|
||||
.actions { display: flex; justify-content: flex-end; gap: 8px; padding-top: 8px; }
|
||||
`,d([x({attribute:!1})],n.prototype,"hass",2),d([c()],n.prototype,"_open",2),d([c()],n.prototype,"_loading",2),d([c()],n.prototype,"_adopting",2),d([c()],n.prototype,"_error",2),d([c()],n.prototype,"_setups",2),d([c()],n.prototype,"_selected",2),d([c()],n.prototype,"_baselines",2),d([c()],n.prototype,"_targets",2),d([c()],n.prototype,"_tasks",2),d([c()],n.prototype,"_objects",2);customElements.get("maintenance-suggested-setups-dialog")||customElements.define("maintenance-suggested-setups-dialog",n);export{n as MaintenanceSuggestedSetupsDialog};
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{a,b,c}from"/maintenance_supporter_panelfiles/panel-chunks/chunk-3GDXUAER.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-RSVG7WFD.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-ZA53FZUW.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-7NJJOABV.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-6LZYA7IL.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-63C4ZGBD.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-K4SNNHPR.js";import"/maintenance_supporter_panelfiles/panel-chunks/chunk-JE577H3E.js";export{c as MaintenanceTaskDialog,b as applyTypeFields,a as typeFieldsFromConfig};
|
||||
+127
@@ -0,0 +1,127 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{a as w,b as $}from"./chunk-7S4QZ3RX.js";import{C as u,a as h,b as o,d as m,e as y,f as v,g as l,h as g,i,j as _,k as f,n as x,q as p}from"./chunk-6VYW2MWJ.js";import{a as n}from"./chunk-RVTWU5ZB.js";var E=80,s=class extends y{constructor(){super(...arguments);this._config={type:""};this._status=null;this._busy=!1;this._error="";this._localMonthly="";this._localYearly="";this._dirty=!1;this._loaded=!1}setConfig(t){this._config=t}getCardSize(){return 2}get _lang(){return f(this.hass)}get _isAdmin(){return this.hass?.user?.is_admin??!0}updated(t){super.updated(t),_(this,t),t.has("hass")&&this.hass&&!this._loaded&&(this._loaded=!0,this._load())}async _load(){let t=await u(this,{type:"maintenance_supporter/budget_status"},{onError:e=>{this._error=e}});t&&(this._status=t,x(t),this._localMonthly=t.monthly_budget?String(t.monthly_budget):"",this._localYearly=t.yearly_budget?String(t.yearly_budget):"",this._dirty=!1)}async _save(){if(!this._isAdmin)return;this._error="";let t=this._localMonthly.trim()===""?0:parseFloat(this._localMonthly),e=this._localYearly.trim()===""?0:parseFloat(this._localYearly),a={};!isNaN(t)&&t>=0&&(a.budget_monthly=t),!isNaN(e)&&e>=0&&(a.budget_yearly=e),await u(this,{type:"maintenance_supporter/global/update",settings:a},{busy:d=>{this._busy=d},reload:()=>this._load(),onError:d=>{this._error=d}})}_onDeepLink(){history.pushState(null,"","/maintenance-supporter?ms_action=open_budget"),window.dispatchEvent(new CustomEvent("location-changed"))}render(){let t=this._lang,e=this._status;if(!e)return o`<ha-card><div class="loading">${i("loading",t)}</div></ha-card>`;let a=g(e),d=e.alert_threshold_pct??E,k=[{label:i("budget_monthly",t),spent:e.monthly_spent||0,budget:e.monthly_budget||0},{label:i("budget_yearly",t),spent:e.yearly_spent||0,budget:e.yearly_budget||0}];return o`
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
<div class="header">
|
||||
<div class="title">
|
||||
<span class="emoji">💰</span>
|
||||
<span>${this._config.title||i("settings_budget",t)}</span>
|
||||
</div>
|
||||
<span class="currency">${a}</span>
|
||||
</div>
|
||||
|
||||
${this._error?o`<div class="error">${this._error}</div>`:m}
|
||||
|
||||
${k.map(r=>{if(!(r.budget>0))return o`
|
||||
<div class="track spent-only">
|
||||
<div class="track-label-row">
|
||||
<label>${r.label}</label>
|
||||
<span class="track-numbers ok">${p(r.spent,a,t)}</span>
|
||||
</div>
|
||||
</div>
|
||||
`;let c=Math.min(100,Math.max(0,r.spent/r.budget*100)),b=c>=100?"danger":c>=d?"warning":"ok";return o`
|
||||
<div class="track">
|
||||
<div class="track-label-row">
|
||||
<label>${r.label}</label>
|
||||
<span class="track-numbers ${b}">
|
||||
${p(r.spent,void 0,t)} / ${p(r.budget,a,t)}
|
||||
</span>
|
||||
</div>
|
||||
<div class="bar"><div class="bar-fill ${b}" style="width:${c}%"></div></div>
|
||||
</div>
|
||||
`})}
|
||||
|
||||
${this._isAdmin?o`
|
||||
<div class="inputs-row">
|
||||
<div class="input-field">
|
||||
<label>${i("budget_monthly_set",t)}</label>
|
||||
<div class="input-wrap">
|
||||
<input type="number" min="0" step="1"
|
||||
.value=${this._localMonthly}
|
||||
?disabled=${this._busy}
|
||||
@input=${r=>{this._localMonthly=r.target.value,this._dirty=!0}} />
|
||||
<span class="input-suffix">${a}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-field">
|
||||
<label>${i("budget_yearly_set",t)}</label>
|
||||
<div class="input-wrap">
|
||||
<input type="number" min="0" step="1"
|
||||
.value=${this._localYearly}
|
||||
?disabled=${this._busy}
|
||||
@input=${r=>{this._localYearly=r.target.value,this._dirty=!0}} />
|
||||
<span class="input-suffix">${a}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<button class="btn ${this._dirty?"primary":"muted"}"
|
||||
@click=${this._save}
|
||||
?disabled=${this._busy||!this._dirty}>
|
||||
<ha-icon icon="${this._dirty?"mdi:content-save":"mdi:check"}"></ha-icon>
|
||||
${this._dirty?i("save",t):i("saved",t)}
|
||||
</button>
|
||||
<button class="btn link" @click=${this._onDeepLink}>
|
||||
${i("budget_advanced",t)}
|
||||
</button>
|
||||
</div>
|
||||
`:o`
|
||||
<button class="btn link" @click=${this._onDeepLink}>
|
||||
${i("budget_open_panel",t)}
|
||||
</button>
|
||||
`}
|
||||
</div>
|
||||
</ha-card>
|
||||
`}};s.styles=[$,h`
|
||||
.currency {
|
||||
font-size: 14px; font-weight: 600;
|
||||
color: var(--secondary-text-color);
|
||||
background: var(--secondary-background-color);
|
||||
padding: 2px 10px; border-radius: 999px;
|
||||
}
|
||||
.track { display: flex; flex-direction: column; gap: 4px; }
|
||||
.track-label-row {
|
||||
display: flex; align-items: center; justify-content: space-between;
|
||||
}
|
||||
.track-label-row label {
|
||||
font-size: 12px; color: var(--secondary-text-color);
|
||||
text-transform: uppercase; letter-spacing: 0.5px;
|
||||
}
|
||||
.track-numbers { font-size: 13px; font-weight: 600; }
|
||||
.track-numbers.ok { color: var(--primary-text-color); }
|
||||
.track-numbers.warning { color: #ff9800; }
|
||||
.track-numbers.danger { color: var(--error-color, #f44336); }
|
||||
.bar {
|
||||
height: 6px; background: var(--secondary-background-color);
|
||||
border-radius: 3px; overflow: hidden;
|
||||
}
|
||||
.bar-fill { height: 100%; transition: width 0.3s; border-radius: 3px; }
|
||||
.bar-fill.ok { background: var(--primary-color); }
|
||||
.bar-fill.warning { background: #ff9800; }
|
||||
.bar-fill.danger { background: var(--error-color, #f44336); }
|
||||
/* minmax(0, …): a bare 1fr never shrinks below the number inputs'
|
||||
natural width — the row was 420 px wide on a phone (2026-09-27). */
|
||||
.inputs-row {
|
||||
display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px;
|
||||
padding-top: 4px; border-top: 1px solid var(--divider-color);
|
||||
}
|
||||
.input-field { display: flex; flex-direction: column; gap: 4px; }
|
||||
.input-field label {
|
||||
font-size: 11px; color: var(--secondary-text-color);
|
||||
text-transform: uppercase; letter-spacing: 0.3px;
|
||||
}
|
||||
.input-wrap { position: relative; display: flex; align-items: center; }
|
||||
.input-wrap input {
|
||||
flex: 1; min-width: 0; width: 100%; box-sizing: border-box; padding: 6px 32px 6px 8px; font-size: 13px;
|
||||
background: var(--secondary-background-color, #2c2c2c);
|
||||
color: var(--primary-text-color);
|
||||
border: 1px solid var(--divider-color); border-radius: 6px;
|
||||
font-family: inherit;
|
||||
}
|
||||
.input-suffix {
|
||||
position: absolute; right: 8px;
|
||||
color: var(--secondary-text-color); font-size: 13px;
|
||||
pointer-events: none;
|
||||
}
|
||||
.actions { display: flex; gap: 8px; align-items: center; }
|
||||
`],n([v({attribute:!1})],s.prototype,"hass",2),n([l()],s.prototype,"_config",2),n([l()],s.prototype,"_status",2),n([l()],s.prototype,"_busy",2),n([l()],s.prototype,"_error",2),n([l()],s.prototype,"_localMonthly",2),n([l()],s.prototype,"_localYearly",2),n([l()],s.prototype,"_dirty",2);customElements.get("maintenance-budget-section-card")||customElements.define("maintenance-budget-section-card",s);w({type:"maintenance-budget-section-card",name:"Maintenance Supporter \u2014 Budget",description:"Inline monthly + yearly budget editor",preview:!1});export{s as MaintenanceBudgetSectionCard};
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{a as i}from"./chunk-QP2XJAYX.js";var a={operatorWriteEnabled:!1,operatorIds:[]};function _(e,t=a){return e?e.is_admin?!0:t.operatorWriteEnabled&&t.operatorIds.includes(e.id):!1}var u=["buttons_compact","buttons","icons"];function d(e){let[t,s]=i.default_warning_days,n=e?.general?.default_warning_days,r=e?.general?.row_action_style;return{features:{...o.features,...e?.features??{}},defaultWarningDays:typeof n=="number"&&Number.isFinite(n)&&n>=t&&n<=s?n:o.defaultWarningDays,rowActionStyle:u.includes(r??"")?r:o.rowActionStyle,access:{operatorWriteEnabled:e?.operator_write_enabled===!0,operatorIds:Array.isArray(e?.admin_panel_user_ids)?e.admin_panel_user_ids.filter(c=>typeof c=="string"):[]},budget:e?.budget??null,rowActionNoticePending:e?.general?.row_action_notice_pending===!0,refsInLists:e?.general?.ref_numbers_in_lists===!0,objectsTableColumns:Array.isArray(e?.objects_table_columns)?e.objects_table_columns:void 0}}var o={features:{adaptive:!1,predictions:!1,seasonal:!1,environmental:!1,budget:!1,groups:!1,checklists:!1,schedule_time:!1,completion_actions:!1},defaultWarningDays:7,rowActionStyle:"buttons_compact",access:a,budget:null,rowActionNoticePending:!1,refsInLists:!1,objectsTableColumns:void 0};function l(){let e=window;return e.__msSettingsCache??={promise:null}}function m(e){let t=l();if(t.promise)return t.promise;let s=e.connection.sendMessagePromise({type:"maintenance_supporter/settings"}).then(n=>d(n)).catch(()=>(t.promise===s&&(t.promise=null),o));return t.promise=s,s}function b(){l().promise=null}export{a,_ as b,m as c,b as d};
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,60 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{a as t}from"./chunk-6VYW2MWJ.js";function e(o){let r=window;r.customCards=r.customCards||[],r.customCards.some(a=>a.type===o.type)||r.customCards.push(o)}var d=t`
|
||||
ha-card { overflow: hidden; }
|
||||
.card-content {
|
||||
padding: 16px;
|
||||
display: flex; flex-direction: column;
|
||||
gap: 12px;
|
||||
}
|
||||
.header {
|
||||
display: flex; align-items: center; justify-content: space-between;
|
||||
gap: 12px;
|
||||
}
|
||||
.title {
|
||||
display: flex; align-items: center; gap: 8px;
|
||||
font-size: 16px; font-weight: 500;
|
||||
}
|
||||
.emoji { font-size: 20px; }
|
||||
|
||||
/* Button family — primary action / muted-saved-state / link / icon-with-text */
|
||||
.btn {
|
||||
padding: 6px 12px; font-size: 13px;
|
||||
border-radius: 6px; cursor: pointer;
|
||||
border: 1px solid var(--divider-color);
|
||||
background: var(--secondary-background-color, transparent);
|
||||
color: var(--primary-text-color);
|
||||
font-weight: 500;
|
||||
display: inline-flex; align-items: center; gap: 4px;
|
||||
}
|
||||
.btn:hover { background: var(--state-icon-color, rgba(255,255,255,0.06)); }
|
||||
.btn[disabled] { opacity: 0.5; cursor: not-allowed; }
|
||||
.btn.primary {
|
||||
background: var(--primary-color);
|
||||
color: var(--text-primary-color, white);
|
||||
border-color: var(--primary-color);
|
||||
}
|
||||
.btn.primary[disabled] { opacity: 0.6; }
|
||||
.btn.muted {
|
||||
background: transparent;
|
||||
color: var(--secondary-text-color);
|
||||
border-style: dashed;
|
||||
}
|
||||
.btn.muted[disabled] { opacity: 1; cursor: default; }
|
||||
.btn.muted ha-icon, .btn.primary ha-icon { --mdc-icon-size: 14px; }
|
||||
.btn.link {
|
||||
background: transparent; border: none; padding: 6px 4px;
|
||||
color: var(--primary-color); margin-left: auto;
|
||||
}
|
||||
.btn.link:hover { background: transparent; text-decoration: underline; }
|
||||
|
||||
/* Error + loading states */
|
||||
.error {
|
||||
padding: 8px; border-radius: 6px;
|
||||
background: rgba(211, 47, 47, 0.1);
|
||||
color: var(--error-color, #d32f2f); font-size: 13px;
|
||||
}
|
||||
.loading {
|
||||
padding: 24px; text-align: center;
|
||||
color: var(--secondary-text-color);
|
||||
}
|
||||
`;export{e as a,d as b};
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
function l(r){if(!r)return[];let n=[],i=r.photo_doc_id;typeof i=="string"&&n.push(i);let o=r.photo_doc_ids;Array.isArray(o)&&n.push(...o);let t=[];for(let e of n){if(typeof e!="string")continue;let s=e.trim();if(!(!s||t.includes(s))&&(t.push(s),t.length>=10))break}return t}function f(){let r=new Uint8Array(4);return(globalThis.crypto??{getRandomValues:n=>n.map(()=>Math.floor(Math.random()*256))}).getRandomValues(r),Array.from(r,n=>n.toString(16).padStart(2,"0")).join("")}function d(r){let n=r?.reading_values;if(!Array.isArray(n))return[];let i=[],o=new Set;for(let t of n){if(!t||typeof t!="object")continue;let e=t;typeof e.id!="string"||!e.id||o.has(e.id)||typeof e.value!="number"||!Number.isFinite(e.value)||(o.add(e.id),i.push({id:e.id,name:typeof e.name=="string"?e.name:e.id,unit:typeof e.unit=="string"?e.unit:null,value:e.value}))}return i}function c(r){return r.filter(n=>n.type==="completed"&&(n.reading_value!=null||d(n).length>0)).sort((n,i)=>n.timestamp.localeCompare(i.timestamp))}function p(r){return c(r??[]).map(n=>({timestamp:n.timestamp,values:d(n)})).filter(n=>n.values.length>0)}function m(r,n,i){let o;for(let t of r){if(i!==void 0){let s=new Date(t.timestamp).getTime();if(!isNaN(s)&&s>=i)break}let e=t.values.find(s=>s.id===n);e&&(o=e)}return o}function _(r,n,i){let o=d(n).find(e=>e.id===i);if(!o)return null;let t=null;for(let e of c(r)){if(e.timestamp>=n.timestamp)break;let s=d(e).find(a=>a.id===i);s&&(t=s.value)}return t==null?null:o.value-t}function R(r){let n=new Set,i=new Set;for(let o of r){let t=(o.name||"").trim().toLowerCase();t&&(n.has(t)?i.add(o.id):n.add(t))}return i}function h(r){let n=[],i=new Set,o=new Set;for(let t of r){let e=(t.name||"").trim();if(!(!e||i.has(t.id)||o.has(e.toLowerCase()))&&(i.add(t.id),o.add(e.toLowerCase()),n.push({id:t.id,name:e,unit:(t.unit||"").trim()||null}),n.length>=20))break}return n}function y(r,n,i,o){let t=i,e=u=>typeof u=="string"?u:null,s=u=>typeof u=="number"?u:null,a=e(t.timestamp)??"";return{entry_id:r,task_id:n,original_timestamp:a,type:e(t.type)||"completed",timestamp:a,notes:e(t.notes),cost:s(t.cost),duration:s(t.duration),completed_by:e(t.completed_by),used_parts:Array.isArray(t.used_parts)?t.used_parts:null,photo_doc_ids:l(t),reading_value:s(t.reading_value),reading_values:d(t),readings:o?.readings??[],task_type:o?.type??null,reading_unit:o?.reading_unit??null}}async function E(r,n,i,o){let e=(await r.connection.sendMessagePromise({type:"maintenance_supporter/object",entry_id:n})).tasks?.find(a=>a.id===i);if(!e)return null;let s=e.history?.find(a=>a.timestamp===o);return s||(s=(await r.connection.sendMessagePromise({type:"maintenance_supporter/task/history",entry_id:n,task_id:i})).history?.find(u=>u.timestamp===o)),s?y(n,i,s,e):null}export{l as a,f as b,d as c,p as d,m as e,_ as f,R as g,h,y as i,E as j};
|
||||
@@ -0,0 +1,66 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{A as c,a as p,b as s,d as r,e as u,f as _,g as o,i as m,k as d}from"./chunk-6VYW2MWJ.js";import{a as n}from"./chunk-RVTWU5ZB.js";var g={default_warning_days:[0,365],default_consumable_threshold:[1,90],battery_low_percent:[1,90],battery_recovered_percent:[20,100],archive_oneoff_days:[0,3650],delete_archived_oneoff_days:[0,3650],notify_due_soon_interval_hours:[0,720],notify_overdue_interval_hours:[0,720],notify_triggered_interval_hours:[0,720],max_notifications_per_day:[0,1e3],notification_bundle_threshold:[2,20],snooze_duration_hours:[1,168],warranty_reminder_days:[1,365],budget_alert_threshold:[10,100],currency_decimals:[0,3]};var b=[0,14],x=[0,1440],y=[1,1e4],R=15,A=[.1,.9],E=[0,365],T=[.01,999],$=[.01,9999];var i=class extends u{constructor(){super(...arguments);this._open=!1;this._title="";this._message="";this._confirmText="";this._danger=!1;this._inputLabel="";this._inputType="";this._options=null;this._inputValue="";this._resolve=null;this._promptResolve=null}confirm(e){return this._title=e.title,this._message=e.message,this._confirmText=e.confirmText||"OK",this._danger=e.danger||!1,this._inputLabel="",this._inputType="",this._options=null,this._inputValue="",this._open=!0,new Promise(t=>{this._resolve=t,this._promptResolve=null})}prompt(e){return this._title=e.title,this._message=e.message,this._confirmText=e.confirmText||"OK",this._danger=e.danger||!1,this._inputLabel=e.inputLabel||"",this._inputType=e.inputType||"text",this._options=e.options&&e.options.length?e.options:null,this._inputValue=e.inputValue||"",this._open=!0,new Promise(t=>{this._promptResolve=t,this._resolve=null})}_cancel(){this._open=!1,this._promptResolve&&(this._promptResolve({confirmed:!1,value:""}),this._promptResolve=null),this._resolve?.(!1),this._resolve=null}_confirmAction(){this._open=!1,this._promptResolve&&(this._promptResolve({confirmed:!0,value:this._inputValue}),this._promptResolve=null),this._resolve?.(!0),this._resolve=null}render(){if(!this._open)return r;let e=d(this.hass);return s`
|
||||
<ha-dialog open @closed=${this._cancel}>
|
||||
<div class="dialog-title">${this._title}</div>
|
||||
<div class="content">
|
||||
${this._message}
|
||||
${this._inputLabel?s`
|
||||
<!-- Native <input> rather than <ha-textfield>: HA loads
|
||||
ha-textfield lazily for its own panels, so inside this custom
|
||||
panel it can be unregistered and render with zero height —
|
||||
the prompt then shows no field at all (caught live testing
|
||||
the pause/replace prompts; same fix as complete-dialog). -->
|
||||
<label class="field">
|
||||
<span class="field-label">${this._inputLabel}</span>
|
||||
${this._options?s`<select class="field-input field-select"
|
||||
@change=${t=>this._inputValue=t.target.value}>
|
||||
${this._options.map(t=>s`<option value=${t.value} ?selected=${t.value===this._inputValue}>${t.label}</option>`)}
|
||||
</select>`:s`<input class="field-input"
|
||||
type="${this._inputType||"text"}"
|
||||
.value=${this._inputValue}
|
||||
@input=${t=>this._inputValue=t.target.value} />`}
|
||||
</label>
|
||||
`:r}
|
||||
</div>
|
||||
<div class="dialog-actions">
|
||||
<ha-button appearance="plain" @click=${this._cancel}>
|
||||
${m("cancel",e)}
|
||||
</ha-button>
|
||||
<ha-button
|
||||
class="${this._danger?"danger":""}"
|
||||
@click=${this._confirmAction}
|
||||
>
|
||||
${this._confirmText}
|
||||
</ha-button>
|
||||
</div>
|
||||
</ha-dialog>
|
||||
`}};i.styles=[c,p`
|
||||
.dialog-title {
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
/* shared native-field scaffold from nativeFieldStyles; the prompt input
|
||||
follows the message text, hence the extra top margin here */
|
||||
.field { margin-top: 12px; }
|
||||
.content {
|
||||
padding: 8px 0;
|
||||
min-width: 280px;
|
||||
line-height: 1.5;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
}
|
||||
.dialog-actions {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 8px;
|
||||
padding-top: 16px;
|
||||
}
|
||||
ha-textfield {
|
||||
display: block;
|
||||
}
|
||||
ha-button.danger {
|
||||
--mdc-theme-primary: var(--error-color, #f44336);
|
||||
}
|
||||
`],n([_({attribute:!1})],i.prototype,"hass",2),n([o()],i.prototype,"_open",2),n([o()],i.prototype,"_title",2),n([o()],i.prototype,"_message",2),n([o()],i.prototype,"_confirmText",2),n([o()],i.prototype,"_danger",2),n([o()],i.prototype,"_inputLabel",2),n([o()],i.prototype,"_inputType",2),n([o()],i.prototype,"_options",2),n([o()],i.prototype,"_inputValue",2);customElements.get("maintenance-confirm-dialog")||customElements.define("maintenance-confirm-dialog",i);var h="maintenance-confirm-dialog",f="data-ms-lovelace-confirm";function v(){return document.querySelector("home-assistant")?.shadowRoot??document.body}function H(l,a){let e=v(),t=e.querySelector(`${h}[${f}]`);return t||(t=document.createElement(h),t.setAttribute(f,""),e.appendChild(t)),t.hass=l,t.confirm(a)}export{g as a,b,x as c,y as d,R as e,A as f,E as g,T as h,$ as i,H as j};
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
var c=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var u=(o,r,n,t)=>{for(var e=t>1?void 0:t?d(r,n):r,i=o.length-1,s;i>=0;i--)(s=o[i])&&(e=(t?s(r,n,e):s(e))||e);return t&&e&&c(r,n,e),e};var g={ok:"var(--success-color, #4caf50)",due_soon:"var(--warning-color, #ff9800)",overdue:"var(--error-color, #f44336)",triggered:"var(--deep-orange-color, #ff5722)",archived:"var(--disabled-color, #9e9e9e)",paused:"var(--info-color, #2196f3)"},a=["overdue","triggered","due_soon","ok"],S=["overdue","triggered","due_soon"],m=Object.fromEntries(a.map((o,r)=>[o,r]));var p={ok:"mdi:check-circle",due_soon:"mdi:alert-circle",overdue:"mdi:alert-octagon",triggered:"mdi:bell-alert",archived:"mdi:archive-outline",paused:"mdi:pause-circle-outline",completed:"mdi:check-circle",skipped:"mdi:skip-next",missed:"mdi:calendar-remove",reset:"mdi:refresh"};export{u as a,g as b,S as c,p as d};
|
||||
@@ -0,0 +1,88 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{a as y,b as s,d as l,e as g,f as o,g as f,i as d,s as m}from"./chunk-6VYW2MWJ.js";import{a}from"./chunk-RVTWU5ZB.js";function $(n){let t=m("2001-02-03",n).match(/\d+/g)||[],e=v=>t.findIndex(_=>Number(_)===v),h=e(2001),c=e(2),u=e(3);return h===0?"YMD":c>=0&&u>=0&&c<u?"MDY":"DMY"}function p(n,i,t){if(n<1e3||n>9999||i<1||i>12||t<1||t>31)return null;let e=new Date(n,i-1,t);return e.getFullYear()!==n||e.getMonth()!==i-1||e.getDate()!==t?null:`${n}-${String(i).padStart(2,"0")}-${String(t).padStart(2,"0")}`}function b(n,i){let t=n.trim(),e;if(e=t.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/))return p(+e[1],+e[2],+e[3]);if(e=t.match(/^(\d{4})$/))return p(+e[1],1,1);if(e=t.match(/^(\d{1,2})[./](\d{4})$/))return p(+e[2],+e[1],1);if(e=t.match(/^(\d{1,2})\.(\d{1,2})\.(\d{4})$/))return p(+e[3],+e[2],+e[1]);if(e=t.match(/^(\d{1,2})[/-](\d{1,2})[/-](\d{4})$/)){let h=+e[1],c=+e[2],u=+e[3];return $(i)==="MDY"?p(u,h,c):p(u,c,h)}return null}function x(n,i){if(i)switch(n){case"date":return i.split("T")[0];case"time":return i.length===5?`${i}:00`:i;case"datetime":{let[t,e="00:00:00"]=i.split("T");return`${t} ${e.length===5?`${e}:00`:e}`}}}function k(n,i){if(typeof i!="string"||!i)return"";switch(n){case"date":return i.slice(0,10);case"time":return i.slice(0,5);case"datetime":{let[t,e="00:00:00"]=i.split(" ");return`${t}T${e.length===5?`${e}:00`:e}`}}}var r=class extends g{constructor(){super(...arguments);this.kind="date";this.label="";this.value="";this.clearable=!1;this.disabled=!1;this.required=!1;this.lang="en";this._typing=!1;this._typed="";this._typedInvalid=!1}_startTyping(){this._typed=this.value,this._typedInvalid=!1,this._typing=!0,this.updateComplete.then(()=>this.shadowRoot?.querySelector("input.typed")?.focus())}_commitTyped(){if(!this._typed.trim()){this._typing=!1;return}let t=b(this._typed,this.lang);if(!t){this._typedInvalid=!0;return}this._typing=!1,this._typedInvalid=!1,this._emit(t)}_onTypedKey(t){t.key==="Enter"?(t.preventDefault(),this._commitTyped()):t.key==="Escape"&&(t.preventDefault(),this._typing=!1,this._typedInvalid=!1)}_selector(){switch(this.kind){case"date":return{date:{}};case"time":return{time:{no_second:!0}};case"datetime":return{datetime:{}}}}_onSelectorChange(t){t.stopPropagation(),this._emit(k(this.kind,t.detail?.value))}_clear(){this._emit("")}_emit(t){t!==this.value&&(this.value=t,this.dispatchEvent(new CustomEvent("value-changed",{bubbles:!0,composed:!0,detail:{value:t}})))}render(){return s`
|
||||
<div class="field">
|
||||
${this.label?s`<span class="label">${this.label}${this.required?s`<span class="req">*</span>`:l}</span>`:l}
|
||||
<div class="row">
|
||||
${this._typing?s`<input class="typed" type="text" inputmode="numeric" autocomplete="off"
|
||||
.value=${this._typed}
|
||||
placeholder=${m("1978-03-15",this.lang)}
|
||||
aria-invalid=${this._typedInvalid?"true":"false"}
|
||||
@input=${t=>{this._typed=t.target.value,this._typedInvalid=!1}}
|
||||
@keydown=${this._onTypedKey}
|
||||
@blur=${this._commitTyped} />`:s`<ha-selector
|
||||
.hass=${this.hass}
|
||||
.selector=${this._selector()}
|
||||
.value=${x(this.kind,this.value)}
|
||||
.required=${this.required}
|
||||
.disabled=${this.disabled}
|
||||
@value-changed=${this._onSelectorChange}
|
||||
></ha-selector>`}
|
||||
${this.kind==="date"&&!this.disabled&&!this._typing?s`<button type="button" class="type-toggle" title=${d("date_type_toggle",this.lang)} aria-label=${d("date_type_toggle",this.lang)} @click=${this._startTyping}>
|
||||
<ha-icon icon="mdi:keyboard-outline"></ha-icon>
|
||||
</button>`:l}
|
||||
${this.clearable&&this.value&&!this.disabled&&!this._typing?s`<button type="button" class="clear" title=${d("clear",this.lang)} aria-label=${d("clear",this.lang)} @click=${this._clear}>
|
||||
<ha-icon icon="mdi:close"></ha-icon>
|
||||
</button>`:l}
|
||||
</div>
|
||||
${this._typedInvalid?s`<span class="helper invalid">${d("date_type_invalid",this.lang)}</span>`:this.helper?s`<span class="helper">${this.helper}</span>`:l}
|
||||
</div>
|
||||
`}};r.styles=y`
|
||||
:host { display: block; }
|
||||
.field {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 4px;
|
||||
}
|
||||
.label {
|
||||
font-size: 12px;
|
||||
color: var(--secondary-text-color, #888);
|
||||
font-weight: 500;
|
||||
}
|
||||
.req { color: var(--error-color, #f44336); margin-left: 2px; }
|
||||
.row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
}
|
||||
ha-selector {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
.clear, .type-toggle {
|
||||
flex: none;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
padding: 0;
|
||||
border: none;
|
||||
border-radius: 50%;
|
||||
background: transparent;
|
||||
color: var(--secondary-text-color);
|
||||
cursor: pointer;
|
||||
--mdc-icon-size: 20px;
|
||||
}
|
||||
.clear:hover, .type-toggle:hover { background: rgba(var(--rgb-primary-text-color, 0, 0, 0), 0.08); }
|
||||
.clear:focus-visible, .type-toggle:focus-visible { outline: 2px solid var(--primary-color); }
|
||||
.helper {
|
||||
font-size: 11px;
|
||||
color: var(--secondary-text-color);
|
||||
font-style: italic;
|
||||
}
|
||||
.helper.invalid { color: var(--error-color, #f44336); font-style: normal; }
|
||||
input.typed {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
height: 40px;
|
||||
box-sizing: border-box;
|
||||
padding: 0 12px;
|
||||
border: 1px solid var(--divider-color, #ccc);
|
||||
border-radius: 4px;
|
||||
background: var(--card-background-color, #fff);
|
||||
color: var(--primary-text-color);
|
||||
font: inherit;
|
||||
}
|
||||
input.typed[aria-invalid="true"] { border-color: var(--error-color, #f44336); }
|
||||
input.typed:focus { outline: 2px solid var(--primary-color); outline-offset: -1px; }
|
||||
`,a([o({attribute:!1})],r.prototype,"hass",2),a([o()],r.prototype,"kind",2),a([o()],r.prototype,"label",2),a([o()],r.prototype,"value",2),a([o()],r.prototype,"helper",2),a([o({type:Boolean})],r.prototype,"clearable",2),a([o({type:Boolean})],r.prototype,"disabled",2),a([o({type:Boolean})],r.prototype,"required",2),a([o()],r.prototype,"lang",2),a([f()],r.prototype,"_typing",2),a([f()],r.prototype,"_typed",2),a([f()],r.prototype,"_typedInvalid",2);customElements.get("ms-date-field")||customElements.define("ms-date-field",r);
|
||||
+3264
File diff suppressed because one or more lines are too long
+137
@@ -0,0 +1,137 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{a as v,b as y}from"./chunk-7S4QZ3RX.js";import{a as f,b as x,c as k}from"./chunk-42I2X2DS.js";import{j as b}from"./chunk-QP2XJAYX.js";import{C as l,a as u,b as a,d as c,e as g,f as h,g as o,i,k as _,m}from"./chunk-6VYW2MWJ.js";import{a as n}from"./chunk-RVTWU5ZB.js";var e=class extends g{constructor(){super(...arguments);this._config={type:""};this._groups={};this._loaded=!1;this._busy=!1;this._error="";this._newName="";this._editingId=null;this._editingName="";this._access=f;this._hasInitiallyLoaded=!1}setConfig(t){this._config=t}getCardSize(){return 2}get _lang(){return _(this.hass)}get _canWrite(){return x(this.hass?.user,this._access)}updated(t){super.updated(t),t.has("hass")&&this.hass&&!this._hasInitiallyLoaded&&(this._hasInitiallyLoaded=!0,this._load(),k(this.hass).then(r=>{this._access=r.access}),m(this._lang).then(()=>this.requestUpdate()))}async _load(){let t=await l(this,{type:"maintenance_supporter/groups"},{onError:r=>{this._error=r}});t!==void 0&&(this._groups=t?.groups||{},this._loaded=!0)}async _act(t,r){this._error="",await l(this,t,{busy:s=>{this._busy=s},reload:async()=>{r?.(),await this._load()},onError:s=>{this._error=s}})}async _addGroup(){if(!this._canWrite)return;let t=this._newName.trim();t&&await this._act({type:"maintenance_supporter/group/create",name:t},()=>{this._newName=""})}_startEdit(t){this._editingId=t,this._editingName=this._groups[t]?.name||""}async _saveEdit(){if(!this._canWrite||!this._editingId)return;let t=this._editingName.trim();t&&await this._act({type:"maintenance_supporter/group/update",group_id:this._editingId,name:t},()=>{this._editingId=null,this._editingName=""})}async _deleteGroup(t,r){!this._canWrite||!await b(this.hass,{title:i("delete",this._lang),message:i("delete_group_confirm",this._lang).replace("{name}",r),confirmText:i("delete",this._lang),danger:!0})||await this._act({type:"maintenance_supporter/group/delete",group_id:t})}_onDeepLink(){history.pushState(null,"","/maintenance-supporter?ms_action=open_groups"),window.dispatchEvent(new CustomEvent("location-changed"))}_onKeyDown(t,r){t.key==="Enter"?(t.preventDefault(),r()):t.key==="Escape"&&(t.preventDefault(),this._editingId=null,this._editingName="")}render(){let t=this._lang;if(!this._loaded)return a`<ha-card><div class="loading">${i("loading",t)}</div></ha-card>`;let r=Object.keys(this._groups);return a`
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
<div class="header">
|
||||
<div class="title">
|
||||
<span class="emoji">🏷️</span>
|
||||
<span>${this._config.title||i("groups",t)}</span>
|
||||
<span class="count">${r.length}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
${this._error?a`<div class="error">${this._error}</div>`:c}
|
||||
|
||||
${r.length===0?a`<div class="empty">${i("groups_empty",t)}</div>`:a`
|
||||
<div class="group-list">
|
||||
${r.map(s=>{let d=this._groups[s],$=d.task_refs?.length??0,w=this._editingId===s;return a`
|
||||
<div class="group-row">
|
||||
${w?a`
|
||||
<input class="edit-input" type="text"
|
||||
.value=${this._editingName}
|
||||
?disabled=${this._busy}
|
||||
@input=${p=>{this._editingName=p.target.value}}
|
||||
@keydown=${p=>this._onKeyDown(p,this._saveEdit.bind(this))} />
|
||||
<button class="btn small primary"
|
||||
@click=${this._saveEdit}
|
||||
?disabled=${this._busy||!this._editingName.trim()}>
|
||||
${i("save",t)}
|
||||
</button>
|
||||
<button class="btn small"
|
||||
@click=${()=>{this._editingId=null}}>
|
||||
${i("cancel",t)}
|
||||
</button>
|
||||
`:a`
|
||||
<span class="group-name">${d.name||"Unnamed"}</span>
|
||||
<span class="task-count">${$}</span>
|
||||
${this._canWrite?a`
|
||||
<button class="icon-btn"
|
||||
title="${i("edit",t)}"
|
||||
@click=${()=>this._startEdit(s)}
|
||||
?disabled=${this._busy}>
|
||||
<ha-icon icon="mdi:pencil"></ha-icon>
|
||||
</button>
|
||||
<button class="icon-btn danger"
|
||||
title="${i("delete",t)}"
|
||||
@click=${()=>this._deleteGroup(s,d.name||"Unnamed")}
|
||||
?disabled=${this._busy}>
|
||||
<ha-icon icon="mdi:delete"></ha-icon>
|
||||
</button>
|
||||
`:c}
|
||||
`}
|
||||
</div>
|
||||
`})}
|
||||
</div>
|
||||
`}
|
||||
|
||||
${this._canWrite?a`
|
||||
<div class="add-row">
|
||||
<input type="text"
|
||||
placeholder="${i("group_new_placeholder",t)}"
|
||||
.value=${this._newName}
|
||||
?disabled=${this._busy}
|
||||
@input=${s=>{this._newName=s.target.value}}
|
||||
@keydown=${s=>this._onKeyDown(s,this._addGroup.bind(this))} />
|
||||
<button class="btn primary"
|
||||
@click=${this._addGroup}
|
||||
?disabled=${this._busy||!this._newName.trim()}>
|
||||
<ha-icon icon="mdi:plus"></ha-icon>
|
||||
${i("add",t)}
|
||||
</button>
|
||||
</div>
|
||||
<button class="btn link" @click=${this._onDeepLink}>
|
||||
${i("groups_manage_tasks",t)}
|
||||
</button>
|
||||
`:a`
|
||||
<button class="btn link" @click=${this._onDeepLink}>
|
||||
${i("groups_open_panel",t)}
|
||||
</button>
|
||||
`}
|
||||
</div>
|
||||
</ha-card>
|
||||
`}};e.styles=[y,u`
|
||||
.count {
|
||||
font-size: 12px; color: var(--secondary-text-color);
|
||||
background: var(--secondary-background-color);
|
||||
padding: 2px 8px; border-radius: 999px;
|
||||
}
|
||||
.empty {
|
||||
padding: 16px; text-align: center;
|
||||
color: var(--secondary-text-color); font-style: italic;
|
||||
}
|
||||
.group-list { display: flex; flex-direction: column; gap: 4px; }
|
||||
.group-row {
|
||||
display: flex; align-items: center; gap: 8px;
|
||||
padding: 6px 8px; border-radius: 6px;
|
||||
background: var(--secondary-background-color, rgba(255,255,255,0.03));
|
||||
}
|
||||
.group-name { flex: 1; font-size: 14px; }
|
||||
.task-count {
|
||||
font-size: 11px; color: var(--secondary-text-color);
|
||||
background: var(--card-background-color, rgba(0,0,0,0.2));
|
||||
padding: 1px 8px; border-radius: 999px;
|
||||
font-weight: 500;
|
||||
}
|
||||
.edit-input {
|
||||
flex: 1; padding: 4px 8px; font-size: 14px;
|
||||
background: var(--card-background-color, #1c1c1c);
|
||||
color: var(--primary-text-color);
|
||||
border: 1px solid var(--primary-color); border-radius: 4px;
|
||||
font-family: inherit;
|
||||
}
|
||||
.icon-btn {
|
||||
background: transparent; border: none; cursor: pointer;
|
||||
color: var(--secondary-text-color); padding: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.icon-btn:hover {
|
||||
background: var(--state-icon-color, rgba(255,255,255,0.06));
|
||||
color: var(--primary-text-color);
|
||||
}
|
||||
.icon-btn.danger:hover { color: var(--error-color); }
|
||||
.icon-btn ha-icon { --mdc-icon-size: 18px; }
|
||||
.add-row {
|
||||
display: flex; gap: 6px;
|
||||
padding-top: 8px; border-top: 1px solid var(--divider-color);
|
||||
}
|
||||
.add-row input {
|
||||
flex: 1; padding: 6px 8px; font-size: 13px;
|
||||
background: var(--secondary-background-color, #2c2c2c);
|
||||
color: var(--primary-text-color);
|
||||
border: 1px solid var(--divider-color); border-radius: 6px;
|
||||
font-family: inherit;
|
||||
}
|
||||
/* Card-specific overrides on the shared .btn */
|
||||
.btn.small { padding: 4px 8px; font-size: 12px; }
|
||||
.btn ha-icon { --mdc-icon-size: 16px; }
|
||||
`],n([h({attribute:!1})],e.prototype,"hass",2),n([o()],e.prototype,"_config",2),n([o()],e.prototype,"_groups",2),n([o()],e.prototype,"_loaded",2),n([o()],e.prototype,"_busy",2),n([o()],e.prototype,"_error",2),n([o()],e.prototype,"_newName",2),n([o()],e.prototype,"_editingId",2),n([o()],e.prototype,"_editingName",2),n([o()],e.prototype,"_access",2);customElements.get("maintenance-groups-section-card")||customElements.define("maintenance-groups-section-card",e);v({type:"maintenance-groups-section-card",name:"Maintenance Supporter \u2014 Groups",description:"Inline group CRUD",preview:!1});export{e as MaintenanceGroupsSectionCard};
|
||||
+134
@@ -0,0 +1,134 @@
|
||||
/*! maintenance_supporter frontend 2.94.0 */
|
||||
import{a as y,b as x}from"./chunk-7S4QZ3RX.js";import"./chunk-XXOH7YPH.js";import{b as p,j as $}from"./chunk-QP2XJAYX.js";import{C as u,a as h,b as r,d as c,e as v,f,g as n,i as a,j as m,k as b,m as g}from"./chunk-6VYW2MWJ.js";import{a as s}from"./chunk-RVTWU5ZB.js";var i=class extends v{constructor(){super(...arguments);this._config={type:""};this._state=null;this._busy=!1;this._error="";this._localStart="";this._localEnd="";this._localBuffer="3";this._dirty=!1;this._loaded=!1}setConfig(t){this._config=t}getCardSize(){return 2}get _lang(){return b(this.hass)}get _isAdmin(){return this.hass?.user?.is_admin??!0}updated(t){super.updated(t),m(this,t),t.has("hass")&&this.hass&&!this._loaded&&(this._loaded=!0,this._load(),g(this._lang).then(()=>this.requestUpdate()))}async _load(){let t=await u(this,{type:"maintenance_supporter/vacation/state"},{onError:e=>{this._error=e}});t&&(this._state=t,this._localStart=t.start||"",this._localEnd=t.end||"",this._localBuffer=String(t.buffer_days??3),this._dirty=!1)}_act(t){return this._error="",u(this,t,{busy:e=>{this._busy=e},onError:e=>{this._error=e}})}async _toggleEnabled(t){let e=await this._act({type:"maintenance_supporter/vacation/update",enabled:t});e&&(this._state=e)}async _save(){if(!this._isAdmin)return;let[t,e]=p,o=Number(this._localBuffer);if(this._localBuffer.trim()===""||!Number.isInteger(o)||o<t||o>e){this._error=a("settings_value_out_of_range",this._lang).replace("{min}",String(t)).replace("{max}",String(e));return}let l=await this._act({type:"maintenance_supporter/vacation/update",start:this._localStart||null,end:this._localEnd||null,buffer_days:o});l&&(this._state=l,this._dirty=!1)}async _endNow(){if(!this._isAdmin||!await $(this.hass,{title:a("vacation_end_now",this._lang),message:a("vacation_end_now_confirm",this._lang),confirmText:a("vacation_end_now",this._lang)}))return;let e=await this._act({type:"maintenance_supporter/vacation/end_now"});e&&(this._state=e,this._localStart=e.start||"",this._localEnd=e.end||"")}_onDeepLink(){history.pushState(null,"","/maintenance-supporter?ms_action=open_vacation"),window.dispatchEvent(new CustomEvent("location-changed"))}render(){let t=this._lang,e=this._state;if(!e)return r`<ha-card><div class="loading">${a("loading",t)}</div></ha-card>`;let o=e.is_active===!0,l=e.enabled===!0,_=e.exempt_task_ids?.length??0,w=o?a("vacation_status_active",t):l?a("vacation_status_scheduled",t):a("vacation_status_inactive",t),k=o?"active":l?"scheduled":"inactive";return r`
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
<div class="header">
|
||||
<div class="title">
|
||||
<span class="emoji">🏖️</span>
|
||||
<span>${this._config.title||a("vacation_mode",t)}</span>
|
||||
</div>
|
||||
<span class="status-pill ${k}">${w}</span>
|
||||
</div>
|
||||
|
||||
${this._error?r`<div class="error">${this._error}</div>`:c}
|
||||
|
||||
${this._isAdmin?r`
|
||||
<div class="row toggle-row">
|
||||
<label>${a("enable",t)}</label>
|
||||
<ha-switch
|
||||
.checked=${l}
|
||||
.disabled=${this._busy}
|
||||
@change=${d=>this._toggleEnabled(d.target.checked)}
|
||||
></ha-switch>
|
||||
</div>
|
||||
|
||||
<div class="dates-row">
|
||||
<div class="date-field">
|
||||
<label>${a("vacation_start",t)}</label>
|
||||
<ms-date-field
|
||||
kind="date"
|
||||
clearable
|
||||
.hass=${this.hass}
|
||||
.lang=${t}
|
||||
.value=${this._localStart}
|
||||
.disabled=${this._busy}
|
||||
@value-changed=${d=>{this._localStart=d.detail.value,this._dirty=!0}}
|
||||
></ms-date-field>
|
||||
</div>
|
||||
<div class="date-field">
|
||||
<label>${a("vacation_end",t)}</label>
|
||||
<ms-date-field
|
||||
kind="date"
|
||||
clearable
|
||||
.hass=${this.hass}
|
||||
.lang=${t}
|
||||
.value=${this._localEnd}
|
||||
.disabled=${this._busy}
|
||||
@value-changed=${d=>{this._localEnd=d.detail.value,this._dirty=!0}}
|
||||
></ms-date-field>
|
||||
</div>
|
||||
<div class="date-field buffer">
|
||||
<label>${a("vacation_buffer",t)}</label>
|
||||
<input type="number" min=${p[0]} max=${p[1]}
|
||||
.value=${this._localBuffer}
|
||||
?disabled=${this._busy}
|
||||
@input=${d=>{this._localBuffer=d.target.value,this._dirty=!0}} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="actions">
|
||||
<button class="btn ${this._dirty?"primary":"muted"}"
|
||||
@click=${this._save}
|
||||
?disabled=${this._busy||!this._dirty}>
|
||||
<ha-icon icon="${this._dirty?"mdi:content-save":"mdi:check"}"></ha-icon>
|
||||
${this._dirty?a("save",t):a("saved",t)}
|
||||
</button>
|
||||
${o?r`<button class="btn"
|
||||
@click=${this._endNow}
|
||||
?disabled=${this._busy}>
|
||||
${a("vacation_end_now",t)}
|
||||
</button>`:c}
|
||||
${_>0?r`<button class="btn link"
|
||||
@click=${this._onDeepLink}>
|
||||
${_} ${a("vacation_exempt_count",t)}…
|
||||
</button>`:r`<button class="btn link"
|
||||
@click=${this._onDeepLink}>
|
||||
${a("vacation_advanced",t)}
|
||||
</button>`}
|
||||
</div>
|
||||
`:r`
|
||||
<div class="readonly">
|
||||
${l&&e.start&&e.end?r`<div>${e.start} → ${e.end}</div>`:c}
|
||||
<button class="btn link" @click=${this._onDeepLink}>
|
||||
${a("vacation_open_panel",t)}
|
||||
</button>
|
||||
</div>
|
||||
`}
|
||||
</div>
|
||||
</ha-card>
|
||||
`}};i.styles=[x,h`
|
||||
.status-pill {
|
||||
font-size: 11px; font-weight: 600;
|
||||
padding: 3px 8px; border-radius: 999px;
|
||||
text-transform: uppercase; letter-spacing: 0.5px;
|
||||
}
|
||||
.status-pill.active {
|
||||
background: rgba(76, 175, 80, 0.15);
|
||||
color: #4caf50;
|
||||
}
|
||||
.status-pill.scheduled {
|
||||
background: rgba(255, 152, 0, 0.15);
|
||||
color: #ff9800;
|
||||
}
|
||||
.status-pill.inactive {
|
||||
background: rgba(158, 158, 158, 0.15);
|
||||
color: var(--secondary-text-color);
|
||||
}
|
||||
.row.toggle-row {
|
||||
display: flex; align-items: center; justify-content: space-between;
|
||||
}
|
||||
.row.toggle-row label {
|
||||
font-size: 14px; color: var(--primary-text-color);
|
||||
}
|
||||
.dates-row {
|
||||
display: grid; grid-template-columns: 1fr 1fr 100px; gap: 10px;
|
||||
}
|
||||
.date-field.buffer label { white-space: nowrap; }
|
||||
.date-field { display: flex; flex-direction: column; gap: 4px; }
|
||||
.date-field label {
|
||||
font-size: 11px; color: var(--secondary-text-color);
|
||||
text-transform: uppercase; letter-spacing: 0.3px;
|
||||
}
|
||||
.date-field input {
|
||||
padding: 6px 8px; font-size: 13px;
|
||||
background: var(--secondary-background-color, #2c2c2c);
|
||||
color: var(--primary-text-color);
|
||||
border: 1px solid var(--divider-color); border-radius: 6px;
|
||||
font-family: inherit;
|
||||
}
|
||||
.date-field input:disabled { opacity: 0.5; cursor: not-allowed; }
|
||||
.actions {
|
||||
display: flex; gap: 8px; align-items: center; flex-wrap: wrap;
|
||||
}
|
||||
.readonly { display: flex; flex-direction: column; gap: 8px; }
|
||||
`],s([f({attribute:!1})],i.prototype,"hass",2),s([n()],i.prototype,"_config",2),s([n()],i.prototype,"_state",2),s([n()],i.prototype,"_busy",2),s([n()],i.prototype,"_error",2),s([n()],i.prototype,"_localStart",2),s([n()],i.prototype,"_localEnd",2),s([n()],i.prototype,"_localBuffer",2),s([n()],i.prototype,"_dirty",2);customElements.get("maintenance-vacation-section-card")||customElements.define("maintenance-vacation-section-card",i);y({type:"maintenance-vacation-section-card",name:"Maintenance Supporter \u2014 Vacation",description:"Inline vacation mode toggle + dates",preview:!1});export{i as MaintenanceVacationSectionCard};
|
||||
+3
-3
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user