From 4cd4b328c873aa201ebe91179ad3fd3f0709e161 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Wed, 30 Dec 2020 00:32:31 +0000 Subject: [PATCH 001/115] [ci skip] Translation update --- translations/frontend/en.json | 14 ++--- translations/frontend/ro.json | 112 ++++++++++++++++++++++++++++++---- 2 files changed, 107 insertions(+), 19 deletions(-) diff --git a/translations/frontend/en.json b/translations/frontend/en.json index 148a2259d6..59c2d59442 100644 --- a/translations/frontend/en.json +++ b/translations/frontend/en.json @@ -929,7 +929,7 @@ "filter": "Reload filter entities", "generic": "Reload generic IP camera entities", "generic_thermostat": "Reload generic thermostat entities", - "group": "Reload groups, group entities, and notify services", + "group": "Reload groups, group entities, and group notify services", "history_stats": "Reload history stats entities", "homekit": "Reload HomeKit", "input_boolean": "Reload input booleans", @@ -942,7 +942,7 @@ "person": "Reload people", "ping": "Reload ping binary sensor entities", "reload": "Reload {domain}", - "rest": "Reload rest entities and notify services", + "rest": "Reload rest entities, and rest notify services", "rpi_gpio": "Reload Raspberry Pi GPIO entities", "scene": "Reload scenes", "script": "Reload scripts", @@ -1439,7 +1439,7 @@ "confirm_delete_header": "Delete this blueprint?", "confirm_delete_text": "Are you sure you want to delete this blueprint?", "delete_blueprint": "Delete blueprint", - "discover_more": "Discover more Blueprints", + "discover_more": "Discover more blueprints", "header": "Blueprint Editor", "headers": { "domain": "Domain", @@ -2259,7 +2259,7 @@ "without_device": "Entities without device" }, "icon": "Icon", - "introduction": "Use scenes to bring your home to live.", + "introduction": "Use scenes to bring your home to life.", "load_error_not_editable": "Only scenes in scenes.yaml are editable.", "load_error_unknown": "Error loading scene ({err_no}).", "name": "Name", @@ -2345,7 +2345,7 @@ "filter": "Reload filter entities", "generic": "Reload generic IP camera entities", "generic_thermostat": "Reload generic thermostat entities", - "group": "Reload groups, group entities, and notify services", + "group": "Reload groups, group entities, and group notify services", "heading": "YAML configuration reloading", "history_stats": "Reload history stats entities", "homekit": "Reload HomeKit", @@ -2360,7 +2360,7 @@ "person": "Reload people", "ping": "Reload ping binary sensor entities", "reload": "Reload {domain}", - "rest": "Reload rest entities and notify services", + "rest": "Reload rest entities, and rest notify services", "rpi_gpio": "Reload Raspberry Pi GPIO entities", "scene": "Reload scenes", "script": "Reload scripts", @@ -2405,7 +2405,7 @@ "description": "Description", "name": "Name", "new_tag": "New tag", - "tag_id": "Tag id", + "tag_id": "Tag ID", "tag_id_placeholder": "Autogenerated when left empty", "update": "Update", "usage": "A tag can trigger an automation when scanned, you can use NFC tags, QR codes or any other kind of tag. Use our {companion_link} to write this tag to a programmable NFC tag or create a QR code below." diff --git a/translations/frontend/ro.json b/translations/frontend/ro.json index 0fb42b56da..cff63251e5 100644 --- a/translations/frontend/ro.json +++ b/translations/frontend/ro.json @@ -2,11 +2,13 @@ "config_entry": { "disabled_by": { "config_entry": "Intrare config", + "device": "Dispozitiv", "integration": "Integrare", "user": "Utilizator" } }, "groups": { + "owner": "Proprietar", "system-admin": "Administratori", "system-read-only": "Utilizatori cu drepturi de citire", "system-users": "Utilizatori" @@ -491,14 +493,19 @@ "close": "Închide", "copied": "Copiat", "delete": "Șterge", + "disable": "Dezactivați", + "enable": "Activați", "error_required": "Necesar", "loading": "Se încarcă", "menu": "Meniu", "next": "Următorul", "no": "Nu", + "not_now": "Nu acum", "previous": "Anterior", "refresh": "Reîmprospătare", + "rename": "Redenumiți", "save": "Salvați", + "skip": "Sari peste", "successfully_deleted": "Șters cu succes", "successfully_saved": "Opțiunile salvate cu succes.", "undo": "Undo", @@ -518,6 +525,10 @@ "clear": "Şterge", "show_areas": "Arată zonele" }, + "blueprint-picker": { + "add_user": "Adăugați utilizator", + "remove_user": "Eliminați utilizatorul" + }, "data-table": { "no-data": "Fără date", "search": "Căutare" @@ -615,7 +626,8 @@ }, "user-picker": { "add_user": "Adăugați utilizator", - "no_user": "Niciun utilizator" + "no_user": "Niciun utilizator", + "remove_user": "Eliminați utilizatorul" } }, "dialogs": { @@ -753,6 +765,13 @@ "description": "Opțiunile salvate cu succes." } }, + "quick-bar": { + "commands": { + "server_control": { + "stop": "Stop" + } + } + }, "voice_command": { "did_not_hear": "Home Assistant nu a auzit nimic", "error": "Oops, a apărut o eroare", @@ -851,6 +870,11 @@ "automation": { "caption": "Automatizări", "description": "Gestionarea automatizărilor", + "dialog_new": { + "thingtalk": { + "create": "Creează" + } + }, "editor": { "actions": { "add": "Adăugați o acțiune", @@ -913,15 +937,15 @@ "service_data": "Date serviciu" }, "wait_for_trigger": { - "continue_timeout": "Continua la timeout", + "continue_timeout": "Continuă la timeout", "label": "Așteptați declanșatorul", - "timeout": "Timeout (optional)" + "timeout": "Timeout (opțional)" }, "wait_template": { "continue_timeout": "Continuați la expirare", - "label": "Asteptare", + "label": "Așteaptă", "timeout": "Timeout (opțional)", - "wait_template": "Sablon Asteptare" + "wait_template": "Șablon așteptare" } }, "unsupported_action": "Acțiune nesuportată: {action}" @@ -1038,7 +1062,7 @@ "label": "Dispozitiv" }, "event": { - "context_user_pick": "Selectare utilizatorul", + "context_user_pick": "Selectați utilizator", "event_data": "Date eveniment", "event_type": "Tip eveniment", "label": "Eveniment" @@ -1127,15 +1151,29 @@ "only_editable": "Numai automatizările din automations.yaml pot fi editate.", "pick_automation": "Alegeți automatizarea pentru a o edita", "show_info_automation": "Afișați informații despre automatizare" + }, + "thingtalk": { + "task_selection": { + "for_example": "De exemplu:", + "header": "Creați o nouă automatizare", + "language_note": "Notă: Deocamdată este acceptată numai limba engleză." + } } }, "blueprint": { "add": { + "header": "Importați un plan", "url": "Adresa URL a planului" }, "overview": { "add_blueprint": "Importați planul", - "confirm_delete_text": "Sigur doriți să ștergeți acest plan?" + "confirm_delete_header": "Ștergeți acest plan?", + "confirm_delete_text": "Sigur doriți să ștergeți acest plan?", + "headers": { + "domain": "Domeniu", + "file_name": "Nume fișier", + "name": "Nume" + } } }, "cloud": { @@ -1269,6 +1307,12 @@ "description": "Gestionați dispozitivele conectate", "device_info": "Informații despre dispozitiv", "device_not_found": "Dispozitivul nu a fost găsit.", + "disabled": "Dezactivat", + "disabled_by": { + "integration": "Integrare", + "user": "Utilizator" + }, + "enabled_label": "Activează dispozitiv", "entities": { "add_entities_lovelace": "Adăugați la Lovelace", "entities": "Entități", @@ -1276,6 +1320,13 @@ }, "name": "Nume", "no_devices": "Nu există dispozitive", + "picker": { + "filter": { + "filter": "Filtru", + "show_all": "Arată tot" + }, + "search": "Caută dispozitive" + }, "scene": { "create": "Creează un scenariu cu dispozitivul", "no_scenes": "Nu există scenarii", @@ -1372,6 +1423,7 @@ "info": { "built_using": "Construit folosind", "caption": "Info", + "copy_github": "Pentru GitHub", "documentation": "Documentație", "frontend": "front-end-ui", "home_assistant_logo": "Logo-ul Home Assistant", @@ -1383,16 +1435,27 @@ "source": "Sursă:", "system_health": { "checks": { + "cloud": { + "logged_in": "Conectat" + }, "homeassistant": { + "arch": "Arhitectura CPU", + "docker": "Docker", "hassio": "HassOS", "installation_type": "Tipul de instalare", + "os_name": "Numele sistemului de operare", + "os_version": "Versiunea sistemului de operare", + "python_version": "Versiunea Python", "timezone": "Fus orar", "version": "Versiune" }, "lovelace": { + "dashboards": "Tablouri de bord", + "mode": "Mod", "resources": "Resurse" } - } + }, + "more_info": "mai multe informații" }, "title": "Info" }, @@ -1711,6 +1774,9 @@ } } }, + "tags": { + "confirm_remove_title": "Eliminați eticheta?" + }, "users": { "add_user": { "caption": "Adăugați utilizator", @@ -1731,17 +1797,22 @@ "delete_user": "Ștergeți utilizatorul", "name": "Nume", "system_generated_users_not_editable": "Nu s-au putut actualiza utilizatorii generați de sistem.", - "update_user": "Actualizare" + "update_user": "Actualizare", + "username": "Nume de utilizator" }, "picker": { + "add_user": "Adăugați utilizator", "headers": { "group": "Grup", + "is_owner": "Proprietar", "name": "Nume", - "system": "Sistem" + "system": "Sistem", + "username": "Nume de utilizator" } } }, "zha": { + "add_device": "Adaugă un dispozitiv", "add_device_page": { "discovered_text": "Dispozitivele vor apărea aici odată descoperite.", "discovery_text": "Dispozitivele descoperite vor apărea aici. Urmați instrucțiunile pentru dispozitiv (e) și așezați dispozitivul (ele) în modul de împerechere.", @@ -1782,6 +1853,11 @@ "value": "Valoare" }, "description": "Managementul rețelei Zigbee Home Automation", + "device_pairing_card": { + "CONFIGURED": "Configurare terminată", + "CONFIGURED_status_text": "Iniţializare", + "INTERVIEW_COMPLETE_status_text": "Configurez" + }, "devices": { "header": "Zigbee Home Automation - Dispozitiv" }, @@ -1797,6 +1873,7 @@ "unbind_button_label": "Deconectează grupul" }, "groups": { + "add_group": "Adăugare grup", "add_members": "Adăugați membri", "adding_members": "Adăugarea membrilor", "caption": "Grupuri", @@ -1835,7 +1912,10 @@ "node_management": { "header": "Gestionare dispozitive" }, - "title": "Automatizare Zigbee Home" + "title": "Automatizare Zigbee Home", + "visualization": { + "caption": "Vizualizare" + } }, "zone": { "add_zone": "Adăugare zonă", @@ -2015,7 +2095,7 @@ "result_type": "Tipul rezultatului", "template_extensions": "Șabloane de extensie pentru Home Assistant", "time": "Acest șablon se actualizează la fiecare 60 de secunde după ultimul eveniment modificat de stare.", - "title": "Sabloane", + "title": "Şablon", "unknown_error_template": "Sa produs o eroare de randare necunoscută." } } @@ -2244,6 +2324,12 @@ "custom_card": "Personalizare", "no_description": "Nicio descriere disponibilă." }, + "common": { + "add": "Adaugă", + "clear": "Şterge", + "edit": "Editați", + "none": "Niciunul" + }, "edit_card": { "add": "Adăugare card", "confirm_cancel": "Ești sigur că vrei să anulezi?", @@ -2280,6 +2366,8 @@ }, "header": "Editați interfața utilizator", "header-footer": { + "footer": "Subsol", + "header": "Antet", "types": { "graph": { "name": "Grafic" From fe8dda8996b3fba2e230a60685d6b9ae2fc62fa6 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Thu, 31 Dec 2020 00:32:48 +0000 Subject: [PATCH 002/115] [ci skip] Translation update --- translations/frontend/da.json | 84 +++++++++++++++++++++++++++--- translations/frontend/de.json | 18 +++---- translations/frontend/et.json | 8 +-- translations/frontend/zh-Hans.json | 8 +-- 4 files changed, 94 insertions(+), 24 deletions(-) diff --git a/translations/frontend/da.json b/translations/frontend/da.json index 2362722efd..3ef5462877 100644 --- a/translations/frontend/da.json +++ b/translations/frontend/da.json @@ -533,6 +533,8 @@ "add_new": "Tilføj nyt område...", "area": "Område", "clear": "Ryd", + "no_areas": "Du har ikke nogen områder", + "no_match": "Ingen matchende områder fundet", "show_areas": "Vis områder" }, "blueprint-picker": { @@ -553,6 +555,7 @@ "device": "Enhed", "no_area": "Intet område", "no_devices": "Du har ingen enheder", + "no_match": "Ingen matchende enheder fundet", "show_devices": "Vis enheder", "toggle": "Til/fra" }, @@ -563,6 +566,7 @@ "entity-picker": { "clear": "Ryd", "entity": "Entitet", + "no_match": "Ingen matchende entiteter fundet", "show_entities": "Vis entiteter" } }, @@ -631,7 +635,10 @@ }, "target-picker": { "add_device_id": "Vælg enhed", - "remove_device_id": "Fjern enhed" + "add_entity_id": "Vælg entitet", + "remove_area_id": "Fjern område", + "remove_device_id": "Fjern enhed", + "remove_entity_id": "Fjern entitet" }, "user-picker": { "add_user": "Tilføj bruger", @@ -655,6 +662,7 @@ "editor": { "confirm_delete": "Er du sikker på, at du vil slette denne post?", "delete": "Slet", + "device_disabled": "Denne entitets enheden er deaktiveret.", "enabled_cause": "Deaktiveret af {cause}.", "enabled_description": "Deaktiverede entiteter tilføjes ikke til Home Assistant.", "enabled_label": "Aktivér entitet", @@ -663,6 +671,7 @@ "icon_error": "Ikoner skal være i formatet 'præfiks:ikonnavn', fx. 'mdi:home'", "name": "Brugerdefineret navn", "note": "Bemærk: Dette virker muligvis ikke med alle integrationer endnu.", + "open_device_settings": "Åbn enhedsindstillinger", "unavailable": "Denne entitet er ikke tilgængelig i øjeblikket.", "update": "Opdater" }, @@ -715,6 +724,10 @@ "yaml_not_editable": "Indstillingerne for denne entitet kan ikke redigeres fra brugerfladen. Det er kun entiteter, der er konfigureret fra brugerfladen, der kan konfigureres herfra." }, "more_info_control": { + "cover": { + "close_cover": "Luk cover", + "open_cover": "Åbn cover" + }, "details": "Detaljer", "dismiss": "Afvis dialog", "edit": "Rediger entitet", @@ -776,6 +789,16 @@ }, "quick-bar": { "commands": { + "navigation": { + "blueprint": "Tegninger", + "core": "Generelt", + "customize": "Tilpasninger", + "entities": "Entiteter", + "info": "Information", + "server_control": "Serverstyring", + "users": "Brugere", + "zone": "Zoner" + }, "server_control": { "perform_action": "{action} server", "restart": "Genstart", @@ -892,6 +915,12 @@ "caption": "Automatiseringer", "description": "Administrer automatiseringer", "dialog_new": { + "blueprint": { + "use_blueprint": "Brug en tegning" + }, + "header": "Opret en ny automatisering", + "how": "Hvordan vil du oprette din nye automatisering?", + "start_empty": "Start med en tom automatisering", "thingtalk": { "create": "Opret", "header": "Beskriv automationen du vil lave", @@ -973,6 +1002,13 @@ "unsupported_action": "Ikke-understøttet handling: {action}" }, "alias": "Navn", + "blueprint": { + "blueprint_to_use": "Tegninger klar til brug", + "header": "Tegninger", + "inputs": "Indgange", + "manage_blueprints": "Administrer tegninger", + "no_blueprints": "Du har ingen tegninger" + }, "conditions": { "add": "Tilføj betingelse", "delete": "Slet", @@ -1190,14 +1226,22 @@ }, "blueprint": { "add": { + "community_forums": "Fællesskabsfora", + "file_name": "Tegningssti", "import_introduction": "Du kan importere skabeloner af andre brugere fra Github og {community_link} . Indtast URL'en til skabelonen nedenfor.", - "import_introduction_link": "Du kan importere tegninger af andre brugere fra Github og {community_link} . Indtast webadressen til tegningen nedenfor." + "import_introduction_link": "Du kan importere tegninger af andre brugere fra Github og {community_link} . Indtast webadressen til tegningen nedenfor.", + "raw_blueprint": "Tegningsindhold", + "unsupported_blueprint": "Denne tegning understøttes ikke" }, "overview": { + "add_blueprint": "Importer tegning", + "delete_blueprint": "Slet tegning", + "discover_more": "Find flere tegninger", "headers": { "domain": "Domæne", "file_name": "Filnavn" - } + }, + "use_blueprint": "Opret automation" } }, "cloud": { @@ -1448,9 +1492,12 @@ "device_not_found": "Enhed blev ikke fundet.", "disabled": "Deaktiveret", "disabled_by": { + "config_entry": "Konfigurationsparameter", "integration": "Integration", "user": "Bruger" }, + "enabled_cause": "Enheden er deaktiveret pga. {cause} .", + "enabled_description": "Deaktiverede enheder vises ikke, og entiteter, der hører til enheden, deaktiveres og tilføjes ikke til Home Assistant.", "enabled_label": "Aktiver enhed", "entities": { "add_entities_lovelace": "Tilføj til Lovelace", @@ -1570,6 +1617,7 @@ "info": { "built_using": "Bygget ved hjælp af", "caption": "Oplysninger", + "copy_github": "Til GitHub", "copy_raw": "Rå tekst", "custom_uis": "Tilpassede brugergrænseflader:", "description": "Se oplysninger om din Home Assistant-installation", @@ -1987,6 +2035,7 @@ "editor": { "activate_user": "Aktivér bruger", "active": "Aktiv", + "active_tooltip": "Kontrollerer, om brugeren kan logge ind", "admin": "Administrator", "caption": "Vis bruger", "change_password": "Skift adgangskode", @@ -2007,6 +2056,7 @@ "username": "Brugernavn" }, "picker": { + "add_user": "Tilføj bruger", "headers": { "group": "Gruppe", "is_active": "Aktiv", @@ -2066,7 +2116,14 @@ }, "description": "Zigbee Home Automation-opsætning", "device_pairing_card": { - "INITIALIZED_status_text": "Enheden er klar til brug" + "CONFIGURED": "Konfiguration fuldført", + "CONFIGURED_status_text": "Initialiserer", + "INITIALIZED": "Initialiseringen er fuldført", + "INITIALIZED_status_text": "Enheden er klar til brug", + "INTERVIEW_COMPLETE": "Interview fuldført", + "INTERVIEW_COMPLETE_status_text": "Konfigurerer", + "PAIRED": "Enhed fundet", + "PAIRED_status_text": "Starter Interview" }, "devices": { "header": "Zigbee Home Automation - Enhed" @@ -2126,7 +2183,11 @@ "hint_wakeup": "Nogle enheder som Xiaomi-sensorer har en vækkeknap, som du kan trykke på med ~5 sekunders intervaller, der holder enheder vågne, mens du interagerer med dem.", "introduction": "Kør ZHA-kommandoer, der påvirker en enkelt enhed. Vælg en enhed for at se en liste over tilgængelige kommandoer." }, - "title": "Zigbee Home Automation" + "title": "Zigbee Home Automation", + "visualization": { + "caption": "Visualisering", + "header": "Netværksvisualisering" + } }, "zone": { "add_zone": "Tilføj zone", @@ -2295,6 +2356,8 @@ "filter_attributes": "Filtrer egenskaber", "filter_entities": "Filtrer entiteter", "filter_states": "Filtrer tilstande", + "last_changed": "Senest ændret", + "last_updated": "Senest opdateret", "more_info": "Mere information", "no_entities": "Ingen entiteter", "set_state": "Sæt tilstand", @@ -2491,6 +2554,9 @@ "description": "Lys-kortet giver dig mulighed for at ændre lysets lysstyrke.", "name": "Lys" }, + "logbook": { + "name": "Logbog" + }, "map": { "dark_mode": "Mørk tilstand?", "default_zoom": "Standard-zoom", @@ -2519,7 +2585,8 @@ }, "picture-glance": { "description": "Billedblik-kortet viser et billede og den tilsvarende entitetstilstand som et ikon. Entiteterne på højre side tillader at skifte handlinger, andre viser dialogboksen for mere information.", - "name": "Billedblik" + "name": "Billedblik", + "state_entity": "Entitet status" }, "picture": { "description": "Billedkortet giver dig mulighed for at indstille et billede, der skal bruges til navigation til forskellige stier i brugerfladen eller til at kalde en tjeneste.", @@ -2883,10 +2950,13 @@ "change_password": { "confirm_new_password": "Bekræft ny adgangskode", "current_password": "Nuværende adgangskode", + "error_new_is_old": "Ny adgangskode skal være forskellig fra den aktuelle adgangskode", + "error_new_mismatch": "Indtastede nye adgangskoder er ikke ens", "error_required": "Påkrævet", "header": "Skift adgangskode", "new_password": "Ny adgangskode", - "submit": "Indsend" + "submit": "Indsend", + "success": "Adgangskoden blev ændret" }, "current_user": "Du er logget ind som {fullName}.", "customize_sidebar": { diff --git a/translations/frontend/de.json b/translations/frontend/de.json index 3fccd06dfa..ad8db30e6c 100644 --- a/translations/frontend/de.json +++ b/translations/frontend/de.json @@ -706,11 +706,11 @@ "never": "Noch nie", "past": "Vor {time}", "past_duration": { - "day": "vor {count} {count, plural,\n one {Tag}\n other {Tagen}\n}", - "hour": "vor {count} {count, plural,\n one {Stunde}\n other {Stunden}\n}", - "minute": "vor {count} {count, plural,\n one {Minute}\n other {Minuten}\n}", - "second": "vor {count} {count, plural,\n one {Sekunde}\n other {Sekunden}\n}", - "week": "vor {count} {count, plural,\n one {Woche}\n other {Wochen}\n}" + "day": "Vor {count} {count, plural,\n one {Tag}\n other {Tagen}\n}", + "hour": "Vor {count} {count, plural,\n one {Stunde}\n other {Stunden}\n}", + "minute": "Vor {count} {count, plural,\n one {Minute}\n other {Minuten}\n}", + "second": "Vor {count} {count, plural,\n one {Sekunde}\n other {Sekunden}\n}", + "week": "Vor {count} {count, plural,\n one {Woche}\n other {Wochen}\n}" } }, "service-picker": { @@ -2139,7 +2139,7 @@ }, "network": { "header": "Netzwerkverwaltung", - "introduction": "Verwalten netzwerkweiter Funktionen.", + "introduction": "Verwalten der Netzwerk-Funktionen.", "node_count": "{count} Knoten" }, "node_config": { @@ -2358,9 +2358,9 @@ "min_max": "Min/Max-Entitäten neu laden", "mqtt": "Lade manuell konfigurierte MQTT-Entitäten neu", "person": "Personen neu laden", - "ping": "Binäre Ping Sensorentitäten neu laden", + "ping": "Binäre Ping-Sensorentitäten neu laden", "reload": "{domain} neu laden", - "rest": "Rest Entitäten und Benachrichtigungsdienste neu laden", + "rest": "Rest-Entitäten und Benachrichtigungsdienste neu laden", "rpi_gpio": "Raspberry Pi GPIO Entitäten neu laden", "scene": "Szenen neu laden", "script": "Skripte neu laden", @@ -2431,7 +2431,7 @@ "username": "Benutzername" }, "caption": "Benutzer", - "description": "Home Assistant Benutzerkonten verwalten", + "description": "Home Assistant-Benutzerkonten verwalten", "editor": { "activate_user": "Benutzer aktivieren", "active": "Aktiv", diff --git a/translations/frontend/et.json b/translations/frontend/et.json index 94bd5c8cb8..ce04a214ce 100644 --- a/translations/frontend/et.json +++ b/translations/frontend/et.json @@ -1439,7 +1439,7 @@ "confirm_delete_header": "Kas kustutada see kavand?", "confirm_delete_text": "Kas soovid kindlasti selle kavandi kustutada?", "delete_blueprint": "Kustuta kavand", - "discover_more": "Avasta rohkem kavandeid", + "discover_more": "Leia rohkem kavandeid", "header": "Kavandi redaktor", "headers": { "domain": "Domeen", @@ -1895,7 +1895,7 @@ "lovelace": { "dashboards": "Vaated", "mode": "Režiim", - "resources": "Ressursid" + "resources": "Ressursse" } }, "manage": "Halda", @@ -2259,7 +2259,7 @@ "without_device": "Olemid ilma seadmeta" }, "icon": "Ikoon", - "introduction": "Kasutage stseene, et oma kodu mõnusamaks muuta.", + "introduction": "Kasutage stseene, et oma kodu nutikamaks muuta.", "load_error_not_editable": "Ainult scenes.yaml failis asuvad stseenid on muudetavad.", "load_error_unknown": "Viga stseeni laadimisel ({err_no}).", "name": "Nimi", @@ -2345,7 +2345,7 @@ "filter": "TAASLAE FILTREERITUD OLEMID", "generic": "TAASLAE IP KAAMERAD", "generic_thermostat": "TAASLAE TERMOSTAADID", - "group": "Taaslae grupid", + "group": "Taaslae grupid, grupi olemid ja teavitusteenused", "heading": "YAML konfiguratsiooni taaslaadimine", "history_stats": "TAASLAE OLEMITE AJALUGU", "homekit": "Taaslae HomeKit andmed", diff --git a/translations/frontend/zh-Hans.json b/translations/frontend/zh-Hans.json index 6ac94c308a..6df0b40d0d 100644 --- a/translations/frontend/zh-Hans.json +++ b/translations/frontend/zh-Hans.json @@ -929,7 +929,7 @@ "filter": "重载 filter 实体", "generic": "重载通用 IP 摄像机实体", "generic_thermostat": "重载通用恒温器实体", - "group": "重载分组、分组实体及通知服务", + "group": "重载分组、分组实体及其通知服务", "history_stats": "重载历史记录统计实体", "homekit": "重载 HomeKit", "input_boolean": "重载二元选择器", @@ -942,7 +942,7 @@ "person": "重载人员", "ping": "重载 ping 二元传感器实体", "reload": "重载{domain}", - "rest": "重载 REST 实体及通知服务", + "rest": "重载 REST 实体及其通知服务", "rpi_gpio": "重载树莓派 GPIO 实体", "scene": "重载场景", "script": "重载脚本", @@ -2345,7 +2345,7 @@ "filter": "重载 filter 实体", "generic": "重载通用 IP 摄像机实体", "generic_thermostat": "重载通用恒温器实体", - "group": "重载分组、分组实体及通知服务", + "group": "重载分组、分组实体及其通知服务", "heading": "配置重载", "history_stats": "重载历史记录统计实体", "homekit": "重载 HomeKit", @@ -2360,7 +2360,7 @@ "person": "重载人员", "ping": "重载 ping 二元传感器实体", "reload": "重载{domain}", - "rest": "重载 REST 实体及通知服务", + "rest": "重载 REST 实体及其通知服务", "rpi_gpio": "重载树莓派 GPIO 实体", "scene": "重载场景", "script": "重载脚本", From f684531315552aa2b679097ae4e0696719dd72d7 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Sat, 2 Jan 2021 00:41:18 +0000 Subject: [PATCH 003/115] [ci skip] Translation update --- translations/frontend/fr.json | 66 +- translations/frontend/it.json | 2 +- translations/frontend/uk.json | 1721 ++++++++++++++++++++++----------- 3 files changed, 1196 insertions(+), 593 deletions(-) diff --git a/translations/frontend/fr.json b/translations/frontend/fr.json index f40f96f149..c36a97374f 100644 --- a/translations/frontend/fr.json +++ b/translations/frontend/fr.json @@ -554,7 +554,7 @@ "blueprint-picker": { "add_user": "Ajouter un utilisateur", "remove_user": "Supprimer l'utilisateur", - "select_blueprint": "Sélectionnez un plan" + "select_blueprint": "Sélectionnez un Blueprint" }, "data-table": { "no-data": "Pas de données", @@ -901,7 +901,7 @@ "navigation": { "areas": "Zones", "automation": "Automatisations", - "blueprint": "Plans", + "blueprint": "Blueprints", "core": "Général", "customize": "Customisations", "devices": "Appareils", @@ -1073,7 +1073,7 @@ "description": "Créez des règles de comportement personnalisées pour votre maison", "dialog_new": { "blueprint": { - "use_blueprint": "Utiliser un plan" + "use_blueprint": "Utiliser un Blueprint" }, "header": "Créer une nouvelle automatisation", "how": "Comment souhaitez-vous créer votre nouvelle automatisation?", @@ -1166,12 +1166,12 @@ }, "alias": "Nom", "blueprint": { - "blueprint_to_use": "Plan à utiliser", - "header": "Plan", + "blueprint_to_use": "Blueprint à utiliser", + "header": "Blueprint", "inputs": "Entrées", - "manage_blueprints": "Gérer les plans", - "no_blueprints": "Vous n'avez pas de plans", - "no_inputs": "Ce plan n'a aucune entrée." + "manage_blueprints": "Gérer les Blueprints", + "no_blueprints": "Vous n'avez pas de Blueprint", + "no_inputs": "Ce Blueprint n'a aucune entrée." }, "conditions": { "add": "Ajouter une condition", @@ -1417,37 +1417,37 @@ }, "blueprint": { "add": { - "community_forums": "Forums communautaires", - "error_no_url": "Veuillez entrer l'URL du plan", - "file_name": "Chemin du fichier de plan local", - "header": "Importer un plan", - "import_btn": "Aperçu du plan", - "import_header": "Importer \" {name} \" (type: {domain} )", - "import_introduction": "Vous pouvez importer les plans d'autres utilisateurs de Github et des forums de la communauté. Entrez l'URL du plan ci-dessous.", - "import_introduction_link": "Vous pouvez importer les plans d'autres utilisateurs de Github et des forums de la communauté. Entrez l'URL du plan ci-dessous.", - "importing": "Chargement du plan ...", - "raw_blueprint": "Contenu du plan", - "save_btn": "Importer un plan", - "saving": "Importation du plan ...", - "unsupported_blueprint": "Ce plan n'est pas pris en charge", - "url": "URL du plan" + "community_forums": "Forum de la communauté", + "error_no_url": "Veuillez entrer l'URL du Blueprint", + "file_name": "Chemin du Blueprint", + "header": "Importer un Blueprint", + "import_btn": "Aperçu du Blueprint", + "import_header": "Blueprint \"{name}\"", + "import_introduction": "Vous pouvez importer les Blueprints d'autres utilisateurs à partir de GitHub et du forum de la communauté. Entrez l'URL du Blueprint ci-dessous.", + "import_introduction_link": "Vous pouvez importer les Blueprints d'autres utilisateurs à partir de GitHub et du {community_link}. Entrez l'URL du Blueprint ci-dessous.", + "importing": "Chargement du Blueprint ...", + "raw_blueprint": "Contenu du Blueprint", + "save_btn": "Importer un Blueprint", + "saving": "Importation du Blueprint ...", + "unsupported_blueprint": "Ce Blueprint n'est pas pris en charge", + "url": "URL du Blueprint" }, - "caption": "Plans", - "description": "Gérer les plans", + "caption": "Blueprints", + "description": "Créez des automatisations facilement à l'aide de modèles configurables", "overview": { - "add_blueprint": "Importer un plan", - "confirm_delete_header": "Supprimer ce plan ?", - "confirm_delete_text": "Êtes-vous sûr de vouloir supprimer ce plan ?", - "delete_blueprint": "Supprimer le plan", - "discover_more": "Découvrez plus de plans", - "header": "Éditeur de plans", + "add_blueprint": "Importer un Blueprint", + "confirm_delete_header": "Supprimer ce Blueprint ?", + "confirm_delete_text": "Êtes-vous sûr de vouloir supprimer ce Blueprint ?", + "delete_blueprint": "Supprimer le Blueprint", + "discover_more": "Découvrez plus de Blueprints", + "header": "Éditeur de Blueprints", "headers": { "domain": "Domaine", "file_name": "Nom de fichier", "name": "Nom" }, - "introduction": "L’éditeur de plans vous permet de créer et de modifier des plans.", - "learn_more": "En savoir plus sur les plans", + "introduction": "L’éditeur de Blueprint vous permet de créer et de modifier les Blueprints qui permettent de créer des automatisations facilement à l'aide de modèles configurables.", + "learn_more": "En savoir plus sur les Blueprints", "use_blueprint": "Créer une automatisation" } }, @@ -1848,7 +1848,7 @@ "info": { "built_using": "Construit en utilisant", "caption": "Info", - "copy_github": "Pour Github", + "copy_github": "Pour GitHub", "copy_raw": "Texte brut", "custom_uis": "Interfaces utilisateur personnalisées :", "description": "Version, état du système et liens vers la documentation", diff --git a/translations/frontend/it.json b/translations/frontend/it.json index c8f3799f7f..e0f644ef2d 100644 --- a/translations/frontend/it.json +++ b/translations/frontend/it.json @@ -2405,7 +2405,7 @@ "description": "Descrizione", "name": "Nome", "new_tag": "Nuova etichetta", - "tag_id": "Id etichetta", + "tag_id": "ID etichetta", "tag_id_placeholder": "Autogenerato quando lasciato vuoto", "update": "Aggiorna", "usage": "Una etichetta può attivare un'automazione quando viene scansionata, puoi utilizzare etichette NFC, codici QR o qualsiasi altro tipo di tag. Utilizza il nostro {companion_link} per scrivere questa etichetta su un tag NFC programmabile o crea un codice QR di seguito." diff --git a/translations/frontend/uk.json b/translations/frontend/uk.json index 23dfa07277..53ca0855e4 100644 --- a/translations/frontend/uk.json +++ b/translations/frontend/uk.json @@ -1,14 +1,16 @@ { "config_entry": { "disabled_by": { - "config_entry": "Запис", + "config_entry": "Конфігурація", + "device": "Пристрій", "integration": "Інтеграція", "user": "Користувач" } }, "groups": { + "owner": "Власник", "system-admin": "Адміністратори", - "system-read-only": "Користувачі лише для читання", + "system-read-only": "Системні користувачі", "system-users": "Користувачі" }, "panel": { @@ -19,6 +21,7 @@ "logbook": "Журнал", "mailbox": "Поштова скринька", "map": "Мапа", + "media_browser": "Переглядач мультимедіа", "profile": "Профіль", "shopping_list": "Список покупок", "states": "Огляд" @@ -41,7 +44,7 @@ "preset_mode": { "activity": "Діяльність", "away": "Відсутній", - "boost": "Підвищення", + "boost": "Турбо", "comfort": "Комфорт", "eco": "Еко", "home": "Вдома", @@ -70,14 +73,14 @@ "armed_custom_bypass": "Охорона", "armed_home": "Охорона", "armed_night": "Охорона", - "arming": "Ставлю", - "disarmed": "Знято з охорони", - "disarming": "Зняття", + "arming": "Поставлено", + "disarmed": "Знято", + "disarming": "Знято", "pending": "Очікування", "triggered": "Тривога" }, "default": { - "entity_not_found": "Об'єкт не знайдено", + "entity_not_found": "Сутність не знайдено", "error": "Помилка", "unavailable": "Недоступно", "unknown": "Невід" @@ -130,11 +133,11 @@ "on": "Відчинені" }, "garage_door": { - "off": "ЗачиненІ", + "off": "Зачинені", "on": "Відкриті" }, "gas": { - "off": "Чисто", + "off": "Не виявлено", "on": "Виявлено газ" }, "heat": { @@ -150,16 +153,16 @@ "on": "Волого" }, "motion": { - "off": "Немає руху", + "off": "Не виявлено", "on": "Виявлено рух" }, "occupancy": { - "off": "Чисто", + "off": "Не виявлено", "on": "Виявлено присутність" }, "opening": { - "off": "Закрито", - "on": "Відкритий" + "off": "Зачинено", + "on": "Відчинено" }, "presence": { "off": "Відсутній", @@ -174,11 +177,11 @@ "on": "Небезпечно" }, "smoke": { - "off": "Чисто", + "off": "Не виявлено", "on": "Виявлено дим" }, "sound": { - "off": "Чисто", + "off": "Не виявлено", "on": "Виявлено звук" }, "vibration": { @@ -186,8 +189,8 @@ "on": "Виявлена вібрація" }, "window": { - "off": "Зачинене", - "on": "Відчинене" + "off": "Зачинено", + "on": "Відчинено" } }, "calendar": { @@ -204,7 +207,7 @@ "dry": "Осушення", "fan_only": "Лише вентилятор", "heat": "Обігрівання", - "heat_cool": "Нагрівання/Охолодження", + "heat_cool": "Нагрівання / Охолодження", "off": "Вимкнено" }, "configurator": { @@ -242,7 +245,7 @@ "on": "Увімкнено", "open": "Відчинено", "opening": "Відкривається", - "problem": "Халепа", + "problem": "Проблема", "stopped": "Призупинено", "unlocked": "Розблоковано" }, @@ -270,8 +273,8 @@ "home": "Вдома" }, "plant": { - "ok": "ТАК", - "problem": "Халепа" + "ok": "ОК", + "problem": "Проблема" }, "remote": { "off": "Вимкнено", @@ -309,7 +312,7 @@ "off": "Вимкнено", "on": "Увімкнено", "paused": "Призупинено", - "returning": "Повернення до дока" + "returning": "Повернення на док-станцію" }, "weather": { "clear-night": "Ясно, ніч", @@ -321,9 +324,9 @@ "lightning-rainy": "Блискавка, дощ", "partlycloudy": "Невелика хмарність", "pouring": "Злива", - "rainy": "Дощова", - "snowy": "Сніжно", - "snowy-rainy": "Сніг, дощ", + "rainy": "Дощ", + "snowy": "Сніг", + "snowy-rainy": "Сніг з дощем", "sunny": "Сонячно", "windy": "Вітряно", "windy-variant": "Вітряно" @@ -332,8 +335,8 @@ "default": { "dead": "Неробоча", "initializing": "Ініціалізація", - "ready": "Готовий", - "sleeping": "Сплячка" + "ready": "Готово", + "sleeping": "Очікує" }, "query_stage": { "dead": "Неробоча ({query_stage})", @@ -355,33 +358,33 @@ "arm_night": "Нічна охорона", "clear_code": "Очистити", "code": "Код", - "disarm": "Зняття з охорони" + "disarm": "Зняти з охорони" }, "automation": { - "last_triggered": "Спрацьовано", - "trigger": "Тригер" + "last_triggered": "Останній запуск", + "trigger": "Запуск" }, "camera": { "not_available": "Зображення недоступне" }, "climate": { - "aux_heat": "Aux тепла", - "away_mode": "Режиму очікування", - "cooling": "Охолодження", + "aux_heat": "Додатковий нагрів", + "away_mode": "Режим \"Не вдома\"", + "cooling": "{name} охолодження", "current_temperature": "{name} поточна температура", "currently": "В даний час", - "fan_mode": "Режим вентилятора", + "fan_mode": "Режим вентиляції", "heating": "{name} нагрівання", "high": "високий", "low": "низький", - "on_off": "Вкл / викл", + "on_off": "Вкл / Викл", "operation": "Режим", "preset_mode": "Режим", - "swing_mode": "Режим гойдання", - "target_humidity": "Цільова вологість", + "swing_mode": "Режим гойдання повітряних шторок", + "target_humidity": "Задана вологість", "target_temperature": "Задана температура", - "target_temperature_entity": "{name} цільова температура", - "target_temperature_mode": "{name} цільова температура {mode}" + "target_temperature_entity": "{name} задана температура", + "target_temperature_mode": "{name} задана температура {mode}" }, "counter": { "actions": { @@ -409,7 +412,7 @@ }, "light": { "brightness": "Яскравість", - "color_temperature": "Температура кольору", + "color_temperature": "Кольорова температура", "effect": "Ефект", "white_value": "Значення білого" }, @@ -419,9 +422,16 @@ "unlock": "Розблокувати" }, "media_player": { + "browse_media": "Перегляд медіа", + "media_next_track": "Наступний", + "media_play": "Грати", + "media_play_pause": "Відтворення / пауза", + "media_previous_track": "Попередній", "sound_mode": "Режим звуку", "source": "Джерело", - "text_to_speak": "Текст для відтворення" + "text_to_speak": "Текст для відтворення", + "turn_off": "Вимкнути", + "turn_on": "Увімкнути" }, "persistent_notification": { "dismiss": "Відхилити" @@ -447,17 +457,17 @@ }, "vacuum": { "actions": { - "resume_cleaning": "Відновити очищення", - "return_to_base": "Повернутись до дока", - "start_cleaning": "Почати очищення", + "resume_cleaning": "Продовжити прибирання", + "return_to_base": "Повернутись на док-станцію", + "start_cleaning": "Почати прибирання", "turn_off": "Вимкнути", "turn_on": "Ввімкнути" } }, "water_heater": { - "away_mode": "Режиму очікування", + "away_mode": "Режим \"Не вдома\"", "currently": "В даний час", - "on_off": "Вкл / викл", + "on_off": "Вкл / Викл", "operation": "Операція", "target_temperature": "Задана температура" }, @@ -503,15 +513,23 @@ "continue": "Продовжити", "copied": "Скопійовано", "delete": "Видалити", - "error_required": "Обов'язково", + "disable": "Вимкнути", + "enable": "Увімкнути", + "error_required": "Обов'язкове поле", + "leave": "Вийти", "loading": "Завантаження", "menu": "Меню", "next": "Далі", "no": "Ні", - "overflow_menu": "Меню переповнення", + "not_now": "Не зараз", + "overflow_menu": "Випадаюче меню", "previous": "Назад", "refresh": "Оновити", + "remove": "Видалити", + "rename": "Перейменувати", "save": "Зберегти", + "skip": "Пропустити", + "stay": "Залишитись", "successfully_deleted": "Успішно видалено", "successfully_saved": "Успішно збережено", "undo": "Скасувати", @@ -521,16 +539,23 @@ "area-picker": { "add_dialog": { "add": "Додати", - "failed_create_area": "Не вдалося створити область.", + "failed_create_area": "Не вдалося створити приміщення.", "name": "Назва", - "text": "Введіть назву нової області.", - "title": "Додати нову область" + "text": "Введіть назву нового приміщення.", + "title": "Додати приміщення" }, - "add_new": "Додати нову область…", + "add_new": "Додати приміщення ...", "area": "Приміщення", "clear": "Очистити", + "no_areas": "Не знайдено жодного приміщення", + "no_match": "Відповідних приміщень не знайдено", "show_areas": "Показати приміщення" }, + "blueprint-picker": { + "add_user": "Додати користувача", + "remove_user": "Видалити користувача", + "select_blueprint": "Виберіть проект" + }, "data-table": { "no-data": "Немає даних", "search": "Пошук" @@ -544,6 +569,8 @@ "clear": "Очистити", "device": "Пристрій", "no_area": "Немає області", + "no_devices": "Не знайдено жодного пристрою", + "no_match": "Відповідних пристроїв не знайдено", "show_devices": "Показати пристрої", "toggle": "Перемкнути" }, @@ -554,7 +581,8 @@ }, "entity-picker": { "clear": "Очистити", - "entity": "Об'єкт", + "entity": "Сутність", + "no_match": "Відповідних об'єктів не знайдено", "show_entities": "Показати об'єкти" } }, @@ -568,10 +596,11 @@ "entries_not_found": "Записів у журналі не знайдено.", "messages": { "became_unavailable": "стала недоступною", - "changed_to_state": "змінено на {state}", + "changed_to_state": "змінює стан на {state}", "cleared_device_class": "чисто ({device_class} не виявлено)", "detected_device_class": "виявлено {device_class}", - "set": "встановити", + "rose": "сходить", + "set": "заходить", "turned_off": "вимкнено", "turned_on": "ввімкнено", "was_at_home": "був вдома", @@ -592,8 +621,55 @@ } }, "media-browser": { - "documentation": "документація", - "no_local_media_found": "Локальні медіа не знайдено" + "audio_not_supported": "Ваш браузер не підтримує аудіо.", + "choose_player": "Вибір медіапрогравача", + "choose-source": "Виберіть джерело", + "class": { + "album": "Альбом", + "app": "Додаток", + "artist": "Виконавець", + "channel": "Канал", + "composer": "Композитор", + "contributing_artist": "Співвиконавець", + "directory": "Бібліотека", + "episode": "Епізод", + "game": "Гра", + "genre": "Жанр", + "image": "Зображення", + "movie": "Фільм", + "music": "Музика", + "playlist": "Список відтворення", + "podcast": "Подкаст", + "season": "Сезон", + "track": "Трек", + "tv_show": "Серіали", + "url": "URL-адреса", + "video": "Відео" + }, + "content-type": { + "album": "Альбом", + "artist": "Виконавець", + "library": "Бібліотека", + "playlist": "Список відтворення", + "server": "Сервер" + }, + "documentation": "документації", + "learn_adding_local_media": "Детальніше про додавання мультимедіа читайте в {documentation}.", + "local_media_files": "Розмістіть відео, аудіо та графіку в медіа-каталозі, щоб мати змогу переглядати та відтворювати їх у браузері або на підтримуваних медіапрогравачах.", + "media_browsing_error": "Помилка перегляду мультимедіа", + "media_not_supported": "Цей тип мультимедіа не підтримується.", + "media_player": "Медіапрогравач", + "media-player-browser": "Переглядач мультимедіа", + "no_items": "Немає елементів", + "no_local_media_found": "У локальному сховищі не знайдено медіафайлів.", + "no_media_folder": "Схоже, що Ви ще не створили каталог мультимедіа.", + "pick": "Вибрати", + "pick-media": "Вибір медіафайлів", + "play": "Грати", + "play-media": "Відтворення медіафайлів", + "setup_local_help": "Про те, як додати мультимедійні файли в локальне сховище, Ви можете дізнатися в {documentation}.", + "video_not_supported": "Ваш браузер не підтримує відео.", + "web-browser": "Веб-браузер" }, "picture-upload": { "label": "Зображення", @@ -601,14 +677,14 @@ }, "related-items": { "area": "Приміщення", - "automation": "Частина наступних автоматизацій", + "automation": "Використовується в автоматизаціях", "device": "Пристрій", "entity": "Пов'язані сутності", - "group": "Частина наступних груп", + "group": "Використовується в групах", "integration": "Інтеграція", "no_related_found": "Не знайдено пов'язаних елементів", - "scene": "Частина наступних сцен", - "script": "Частина наступних сценаріїв" + "scene": "Використовується в сценах", + "script": "Використовується в скриптах" }, "relative_time": { "duration": { @@ -618,12 +694,15 @@ "second": "{count} {count, plural,\n one {сек.}\n other {сек.}\n}", "week": "{count} {count, plural,\n one {тиж.}\n other {тиж.}\n}" }, - "future": "{time} тому", + "future": "через {time}", "future_duration": { - "hour": "In {count} {count, plural,\n one {hour}\n other {hours}\n}", - "minute": "In {count} {count, plural,\n one {minute}\n other {minutes}\n}" + "day": "Через {count} {count, plural,\n one {день}\n other {днів}\n}", + "hour": "Через {count} {count, plural,\n one {година}\n other {годин}\n}", + "minute": "Через {count} {count, plural,\n one {хвилина}\n other {хвилин}\n}", + "second": "Через {count} {count, plural,\n one {секунда}\n other {секунд}\n}", + "week": "Через {count} {count, plural,\n one {тиждень}\n other {тижнів}\n}" }, - "just_now": "Щойно", + "just_now": "Зараз", "never": "Ніколи", "past": "{time} тому", "past_duration": { @@ -635,44 +714,64 @@ } }, "service-picker": { - "service": "Сервіс" + "service": "Служба" + }, + "target-picker": { + "add_area_id": "Вибрати приміщення", + "add_device_id": "Вибрати пристрій", + "add_entity_id": "Вибрати об'єкт", + "expand_area_id": "Розділити це приміщення на окремі пристрої і об'єкти. Після поділу пристрої та об'єкти не будуть оновлюватися при зміні приміщення.", + "expand_device_id": "Розділити цей пристрій на окремі об'єкти. Після відокремлення об'єкти не будуть оновлюватися при зміні пристрою.", + "remove_area_id": "Видалити приміщення", + "remove_device_id": "Видалити пристрій", + "remove_entity_id": "Видалити об'єкт" + }, + "user-picker": { + "add_user": "Додати користувача", + "no_user": "Немає користувача", + "remove_user": "Видалити користувача" } }, "dialogs": { "config_entry_system_options": { - "enable_new_entities_description": "Якщо вимкнено, нововиявлені об'єкти для {integration} не будуть автоматично додані до Home Assistant.", + "enable_new_entities_description": "{integration} буде автоматично додавати в Home Assistant виявлені об'єкти", "enable_new_entities_label": "Додавати нові об'єкти.", "title": "Параметри системи для {integration}", "update": "Оновити" }, "domain_toggler": { "reset_entities": "Скинути сутності", - "title": "Переключення доменів" + "title": "Керування доменами" }, "entity_registry": { "control": "Керування", "dismiss": "Відхилити", "editor": { - "confirm_delete": "Ви впевнені, що хочете видалити цей об'єкт?", + "confirm_delete": "Ви впевнені, що хочете видалити цей запис?", "delete": "Видалити", - "enabled_cause": "Вимкнено {cause} .", - "enabled_description": "Вимкнені сутності не буде додано до Home Assistant.", - "enabled_label": "Увімкнути сутність", + "device_disabled": "Батьківський пристрій цього об'єкта приховано.", + "enabled_cause": "Ініціатор: {cause}.", + "enabled_delay_confirm": "Об'єкти будуть додані в Home Assistant через {delay} секунд", + "enabled_description": "Приховані об'єкти не будуть доступні в Home Assistant.", + "enabled_label": "Відображати об'єкт", + "enabled_restart_confirm": "Перезапустіть Home Assistant, щоб завершити редагування об'єктів", "entity_id": "Ідентифікатор об'єкта", - "icon": "Перевизначення значка", - "icon_error": "Значки повинні мати формат \"префікс: ім'я іконки\", наприклад \"mdi: home\"", - "name": "Заміна імені", + "icon": "Значок", + "icon_error": "Параметр повинен бути в форматі 'prefix:iconname' (наприклад: 'mdi:home')", + "name": "Назва", + "note": "(може працювати не з усіма інтеграціями)", + "open_device_settings": "Відкрити параметри пристрою", "unavailable": "Цей об'єкт наразі недоступний.", "update": "Оновити" }, - "faq": "Документація", - "no_unique_id": "Ця сутність не має унікального ідентифікатора, тому її настройками не можна керувати з інтерфейсу користувача. Докладніше про це можна дізнатися з {faq_link}.", + "faq": "документацією", + "no_unique_id": "У цієї сутності ( \"{entity_id}\") немає унікального ідентифікатора, тому її налаштуваннями можна керувати з інтерфейсу користувача. Ознайомтеся з {faq_link} для отримання більш докладної інформації.", "related": "Пов'язані", "settings": "Налаштування" }, "generic": { "cancel": "Скасувати", - "close": "закрити", + "close": "Закрити", "default_confirmation_title": "Ви впевнені?", "ok": "ТАК" }, @@ -706,7 +805,7 @@ "input_select": { "add": "Додати", "add_option": "Додати опцію", - "no_options": "Варіантів ще немає.", + "no_options": "Опцій ще немає.", "options": "Опції" }, "input_text": { @@ -714,18 +813,28 @@ "min": "Мінімальна довжина", "mode": "Режим відображення", "password": "Пароль", + "pattern": "Шаблон регулярного виразу для перевірки на стороні клієнта", "text": "Текст" }, + "platform_not_loaded": "Інтеграція {platform} не завантажена. Додайте в YAML-конфігурацію 'default_config:' або \"{platform}:\".", "required_error_msg": "Це поле є обов'язковим", "timer": { "duration": "Тривалість" - } + }, + "yaml_not_editable": "Не можна змінити настройки цієї сутності з інтерфейсу користувача. З інтерфейсу користувача можна настроїти лише створені в ньому об'єкти." }, "image_cropper": { "crop": "Обрізати" }, "more_info_control": { "controls": "Елементи управління", + "cover": { + "close_cover": "Закрити", + "close_tile_cover": "Закрити", + "open_cover": "Відкрити", + "open_tilt_cover": "Відкрити", + "stop_cover": "Зупинити" + }, "details": "Деталі", "dismiss": "Відхилити", "edit": "Редагувати об'єкт", @@ -733,13 +842,14 @@ "last_changed": "Востаннє змінено", "last_updated": "Останнє оновлення", "person": { - "create_zone": "Створити зону з поточного місця розташування" + "create_zone": "Створити зону з поточного місцезнаходження" }, "restored": { "confirm_remove_text": "Ви дійсно бажаєте видалити цю сутність?", - "confirm_remove_title": "Видалити об’єкт?", - "remove_action": "Видалити об'єкт", - "remove_intro": "Якщо сутність більше не використовується, її можна очистити, видаливши її." + "confirm_remove_title": "Видалити сутність?", + "not_provided": "Ця сутність в даний час недоступна і його батьківська інтеграція або пристрій видалені, змінені або несправні.", + "remove_action": "Видалити сутність", + "remove_intro": "Якщо сутність більше не використовується, її можна видалити." }, "script": { "last_action": "Остання дія", @@ -747,7 +857,7 @@ }, "settings": "Налаштування об'єкта", "sun": { - "elevation": "Висота", + "elevation": "Висота над горизонтом", "rising": "Схід сонця", "setting": "Захід сонця" }, @@ -755,13 +865,14 @@ "title": "Інструкції по оновленню" }, "vacuum": { - "clean_spot": "Очищення ділянки", - "fan_speed": "Швидкість вентилятора", + "clean_spot": "Очищення зони", + "commands": "Команди:", + "fan_speed": "Потужність всмоктування", "locate": "Знайти", "pause": "Пауза", - "return_home": "Повернутися додому", + "return_home": "Повернутись на док-станцію", "start": "Прибрати", - "start_pause": "Початок/Пауза", + "start_pause": "Старт / Пауза", "status": "Статус", "stop": "Зупинити" } @@ -770,11 +881,11 @@ "deserialize": "Розібрати MQTT повідомлення як JSON", "entities": "Об'єкти", "no_entities": "Немає об'єктів", - "no_triggers": "Жодних тригерів", - "payload_display": "Відображення корисного навантаження", + "no_triggers": "Немає тригерів", + "payload_display": "Вміст повідомлень", "recent_messages": "{n} останніх отриманих повідомлень", "show_as_yaml": "Показати як YAML", - "title": "інформація про налагодження {device}", + "title": "Інформація про налагодження {device}", "triggers": "Тригери" }, "options_flow": { @@ -787,6 +898,62 @@ }, "quick-bar": { "commands": { + "navigation": { + "areas": "Реєстр приміщень", + "automation": "Автоматизації", + "blueprint": "Проекти", + "core": "Основні", + "customize": "Кастомізація", + "devices": "Пристрої", + "entities": "Сутності", + "helpers": "Помічники", + "info": "Інформація", + "integrations": "Інтеграція", + "logs": "Журнал сервера", + "lovelace": "Інформаційні панелі Lovelace", + "navigate_to": "Відкрити \"{panel}\"", + "navigate_to_config": "Перейти в розділ \"{panel}\"", + "person": "Особи", + "scene": "Сцени", + "script": "Скрипти", + "server_control": "Керування сервером", + "tags": "Теги", + "users": "Користувачі", + "zone": "Зони" + }, + "reload": { + "automation": "Перезавантаження автоматизації", + "command_line": "Перезавантажити сутності інтеграції \"Command Line\"", + "core": "Оновити місцезнаходження і кастомізації", + "filesize": "Перезавантажити сутності інтеграції \"File Size\"", + "filter": "Перезавантажити сутності інтеграції \"Filter\"", + "generic": "Перезавантажити сутності інтеграції \"Generic IP Camera\"", + "generic_thermostat": "Перезавантажити сутності інтеграції \"Generic Thermostat\"", + "group": "Перезавантажити групи", + "history_stats": "Перезавантажити сутності інтеграції \"History Stats\"", + "homekit": "Перезавантажити HomeKit", + "input_boolean": "Перезавантажити сутності \"Input Boolean\"", + "input_datetime": "Перезавантажити сутності \"Input Datetime\"", + "input_number": "Перезавантажити сутності \"Input Number\"", + "input_select": "Перезавантажити сутності \"Input Select\"", + "input_text": "Перезавантажити сутності \"Input Text\"", + "min_max": "Перезавантажити сутності інтеграції \"Min / Max\"", + "mqtt": "Перезавантажити об'єкти інтеграції \"MQTT\", налаштовані вручну", + "person": "Перезавантажити користувачів", + "ping": "Перезавантажити сутності інтеграції \"Ping (ICMP)\"", + "reload": "Перезавантажити \"{domain}\"", + "rest": "Перезавантажити сутності і служби сповіщень інтеграції \"REST\"", + "rpi_gpio": "Перезавантажити об'єкти інтеграції \"Raspberry Pi GPIO\"", + "scene": "Перезавантажити сцени", + "script": "Перезавантажити скрипти", + "smtp": "Перезавантажити служби повідомлень SMTP", + "statistics": "Перезавантажити сутності інтеграції \"Statistics\"", + "telegram": "Перезавантажити служби повідомлень Telegram", + "template": "Перезавантажити сутності шаблону", + "trend": "Перезавантажити сутності інтеграції \"Trend\"", + "universal": "Перезавантажити сутності інтеграції \"Universal Media Player\"", + "zone": "Перезавантажити зони" + }, "server_control": { "perform_action": "{action} сервер", "restart": "Перезапустити", @@ -801,11 +968,11 @@ "found": "Я знайшов для вас наступне:", "how_can_i_help": "Як я можу допомогти?", "label": "Введіть запитання та натисніть \"Enter\"", - "label_voice": "Введіть і натисніть «Enter» або натисніть на мікрофон, щоб говорити" + "label_voice": "Введіть текст і натисніть 'Enter' або натисніть на значок мікрофона, щоб говорити" }, "zha_device_info": { "buttons": { - "add": "Додати пристрої", + "add": "Додати пристрої через цей пристрій", "clusters": "Управління кластерами", "reconfigure": "Переналаштувати пристрій", "remove": "Видалити пристрій", @@ -815,21 +982,21 @@ "remove": "Ви впевнені, що хочете вилучити пристрій?" }, "device_signature": "Підпис пристрою Zigbee", - "last_seen": "Останній раз", + "last_seen": "Пристрій був в мережі", "manuf": "Виробник: {manufacturer}", "no_area": "Приміщення не вказано", "power_source": "Джерело живлення", - "quirk": "Химерність", + "quirk": "Нестандартний обробник", "services": { "reconfigure": "Перенастроювання пристрою ZHA. Використовуйте цю службу, якщо у Вас є проблеми з пристроєм. Якщо даний пристрій працює від батареї, будь ласка, переконайтеся, що воно не знаходиться в режимі сну і приймає команди, коли ви запускаєте цю службу.", "remove": "Видалити пристрій з мережі Zigbee.", "updateDeviceName": "Встановіть ім'я для цього пристрою в реєстрі пристроїв.", "zigbee_information": "Переглянути інформацію про пристрій Zigbee." }, - "unknown": "Невідомий", + "unknown": "Невідомо", "zha_device_card": { "area_picker_label": "Приміщення", - "device_name_placeholder": "Логін", + "device_name_placeholder": "Назва", "update_name_button": "Оновити назву" } } @@ -842,7 +1009,7 @@ "week": "{count} {count, plural,\n one {тиж.}\n other {тиж.}\n}" }, "login-form": { - "log_in": "Ввійти", + "log_in": "Увійти", "password": "Пароль", "remember": "Запам'ятати" }, @@ -854,11 +1021,12 @@ "title": "Сповіщення" }, "notification_toast": { - "connection_lost": "З'єднання втрачено. Повторне підключення...", + "connection_lost": "З'єднання втрачено. Повторне підключення ...", "dismiss": "Відхилити", - "service_call_failed": "Не вдалося викликати сервіс {service}.", + "service_call_failed": "Не вдалося викликати службу {service}.", "started": "Home Assistant запущений!", - "triggered": "Запущено {name}" + "starting": "Home Assistant запускається, поки що не все може бути доступно", + "triggered": "Виконано від імені {name}" }, "panel": { "calendar": { @@ -867,8 +1035,8 @@ }, "config": { "advanced_mode": { - "hint_enable": "Відсутні параметри конфігурації? Увімкнути розширений режим", - "link_profile_page": "сторінка вашого профілю" + "hint_enable": "Відсутні необхідні параметри конфігурації? Увімкніть розширений режим.", + "link_profile_page": "сторінка Вашого профілю" }, "areas": { "caption": "Реєстр приміщень", @@ -877,10 +1045,10 @@ "devices": "Пристрої" }, "delete": { - "confirmation_text": "Усі пристрої в цій області стануть непризначеними.", - "confirmation_title": "Ви дійсно бажаєте видалити цю область?" + "confirmation_text": "Пов'язані пристрої втратять прив'язку до приміщення.", + "confirmation_title": "Ви впевнені, що хочете видалити це приміщення?" }, - "description": "Огляд всіх приміщень у вашому домі.", + "description": "Групуйте пристрої та сутності за приміщеннями", "editor": { "area_id": "Ідентифікатор приміщення", "create": "СТВОРИТИ", @@ -895,14 +1063,28 @@ "create_area": "Створити приміщення", "header": "Реєстр приміщень", "integrations_page": "Сторінка інтеграцій", - "introduction": "Приміщення використовуються для організації розташування пристроїв. Ця інформація буде використовуватися Home Assistant, щоб допомогти вам організувати ваш інтерфейс, дозволи та інтеграції з іншими системами.", - "introduction2": "Щоб розмістити пристрої в приміщенні, скористайтеся посиланням нижче, щоб перейти до сторінки інтеграції, а потім натисніть налаштовану інтеграцію, щоб дістатися до карток пристрою.", - "no_areas": "Схоже, що у вас ще немає приміщень!" + "introduction": "Цей розділ використовується для визначення місцезнаходження пристроїв у приміщеннях. Дана інформація буде використовуватися в Home Assistant, щоб допомогти Вам в організації вашого інтерфейсу, визначенні прав доступу та інтеграції з іншими системами.", + "introduction2": "Щоб задати місцезнаходження пристрою, використовуйте вказане нижче посилання для переходу на сторінку інтеграцій, а потім відкрийте вже налаштовану інтеграцію.", + "no_areas": "Схоже, що у Вас ще немає приміщень!" } }, "automation": { - "caption": "Автоматизація", - "description": "Створення та редагування автоматизації", + "caption": "Автоматизації", + "description": "Створення та редагування автоматизацій", + "dialog_new": { + "blueprint": { + "use_blueprint": "Використати проект" + }, + "header": "Нова автоматизація", + "how": "Яким чином Ви хотіли б створити автоматизацію?", + "start_empty": "Почати з порожньої автоматизації", + "thingtalk": { + "create": "Створити", + "header": "Опишіть автоматизацію, яку Ви хочете створити", + "input_label": "Що повинна робити ця автоматизація?", + "intro": "І ми спробуємо перетворити її з тексту. Наприклад: Turn the lights off when I leave." + } + }, "editor": { "actions": { "add": "Додати дію", @@ -910,7 +1092,7 @@ "delete_confirm": "Ви впевнені, що хочете видалити?", "duplicate": "Дублювати", "header": "Дії", - "introduction": "Що Home Assistant буде робити, коли автоматизація спрацьовує. \n\n [Докладніше про дії.] (https://home-assistant.io/docs/automation/action/)", + "introduction": "Дії - це те, що зробить Home Assistant, коли спрацює правило автоматизації.\n\n[Докладніше про дії.] (https://home-assistant.io/docs/automation/action/)", "learn_more": "Докладніше про дії", "name": "Дія", "type_select": "Тип дії", @@ -941,19 +1123,22 @@ "event": { "event": "Подія:", "label": "Викликати подію", - "service_data": "Дані сервісу" + "service_data": "Дані служби" }, "repeat": { "label": "Повторити", "sequence": "Дії", - "type_select": "Тип повторення", + "type_select": "Режим повторення", "type": { + "count": { + "label": "Лічильник" + }, "until": { - "conditions": "Умова до", + "conditions": "Дії будуть виконуватися в циклі до тих пір, поки не почнуть виконуватись наступні умови", "label": "Доки" }, "while": { - "conditions": "Поки умови", + "conditions": "Дії будуть виконуватися в циклі до тих пір, поки виконуються наступні умови", "label": "Поки" } } @@ -962,24 +1147,32 @@ "label": "Активувати сцену" }, "service": { - "label": "Викликати сервіс", - "service_data": "Дані сервісу" + "label": "Викликати службу", + "service_data": "Дані служби" }, "wait_for_trigger": { - "continue_timeout": "Продовжити при таймауті", + "continue_timeout": "Продовжити при тайм-ауті", "label": "Зачекати на тригер", - "timeout": "Таймаут (опціонально)" + "timeout": "Тайм-аут (необов'язково)" }, "wait_template": { "continue_timeout": "Продовжити при тайм-ауті", "label": "Чекати", "timeout": "Тайм-аут (необов'язково)", - "wait_template": "Шаблон Wait" + "wait_template": "Шаблон очікування" } }, "unsupported_action": "Непідтримувана дія: {action}" }, "alias": "Назва", + "blueprint": { + "blueprint_to_use": "Використовуваний проект", + "header": "Проект", + "inputs": "Вихідні дані", + "manage_blueprints": "Керування проектами", + "no_blueprints": "У Вас ще немає проектів.", + "no_inputs": "Цей проект не потребує вихідних даних." + }, "conditions": { "add": "Додати умову", "delete": "Видалити", @@ -1007,10 +1200,10 @@ "label": "Ні" }, "numeric_state": { - "above": "Над", + "above": "Вище", "below": "Нижче", - "label": "Числовий статус", - "value_template": "Значення шаблону (не обов'язково)" + "label": "Числовий стан", + "value_template": "Значення шаблону (необов'язково)" }, "or": { "label": "Або" @@ -1021,12 +1214,12 @@ }, "sun": { "after": "Після:", - "after_offset": "Після зміщення (опціонально)", + "after_offset": "Після (опціонально)", "before": "Перед:", - "before_offset": "Перед зміщенням (необов'язково)", + "before_offset": "Перед (необов'язково)", "label": "Сонце", - "sunrise": "Схід", - "sunset": "Захід" + "sunrise": "Сходом", + "sunset": "Заходом" }, "template": { "label": "Шаблон", @@ -1036,6 +1229,7 @@ "after": "Після", "before": "До", "label": "Час", + "type_input": "Значення помічника дати й часу", "type_value": "Фіксований час", "weekdays": { "fri": "П’ятниця", @@ -1048,7 +1242,7 @@ } }, "zone": { - "entity": "Об'єкт з місцем розташування", + "entity": "Місцезнаходження сутності", "label": "Зона", "zone": "Зона" } @@ -1064,22 +1258,24 @@ "edit_ui": "Редагувати за допомогою інтерфейсу користувача", "edit_yaml": "Редагувати як YAML", "enable_disable": "Увімкнути / Вимкнути автоматизацію", - "introduction": "Використовуйте автоматизацію, щоб оживити ваш будинок", - "load_error_not_editable": "Можна редагувати лише секцію automations у файлі automations.yaml", + "introduction": "Використовуйте автоматизацію, щоб оживити Ваш будинок", + "load_error_not_editable": "Доступні для редагування тільки автоматизації з 'automations.yaml'.", "load_error_unknown": "Помилка під час завантаження автоматизації ({err_no}).", "max": { "parallel": "Максимальна кількість паралельних запусків", "queued": "Довжина черги" }, "modes": { + "description": "Режим управляє тим, що відбувається під час виконання автоматизації, коли вона все ще виконується з попереднього виклику. Ознайомтеся з {documentation_link} для отримання додаткової інформації.", + "documentation": "документацією", "label": "Режим", "parallel": "Паралельно", "queued": "Почергово", "restart": "Повторно", "single": "Одинарно (за замовчуванням)" }, - "move_down": "Рухатися вниз", - "move_up": "Рухатися вгору", + "move_down": "Перемістити вниз", + "move_up": "Перемістити вгору", "save": "Зберегти", "triggers": { "add": "Додати тригер", @@ -1087,7 +1283,7 @@ "delete_confirm": "Ви впевнені, що хочете видалити?", "duplicate": "Дублювати", "header": "Тригери", - "introduction": "Тригери - це те, що починає обробляти правило автоматизації. Можна вказати декілька тригерів для одного і того ж правила. Після запуску тригера, Home Assistant перевірить умови, якщо такі є, і викликає дію. \n\n [Докладніше про тригери.] (https://home-assistant.io/docs/automation/trigger/)", + "introduction": "Тригери - це те, що починає обробляти правило автоматизації. Можна вказати декілька тригерів для одного і того ж правила. Після запуску тригера, Home Assistant перевірить умови, і, якщо такі є, виконає дії. \n\n [Докладніше про тригери.] (https://home-assistant.io/docs/automation/trigger/)", "learn_more": "Докладніше про тригери", "name": "Тригер", "type_select": "Тип тригера", @@ -1102,6 +1298,9 @@ "trigger": "Тригер" }, "event": { + "context_user_pick": "Виберіть користувача", + "context_user_picked": "Користувач, що викликає події", + "context_users": "Обмежити подіями, викликаними", "event_data": "Дані події", "event_type": "Тип події", "label": "Подія:" @@ -1118,7 +1317,7 @@ "event": "Подія:", "label": "Home Assistant", "shutdown": "Завершення роботи", - "start": "Початок" + "start": "Запуск" }, "mqtt": { "label": "MQTT", @@ -1134,16 +1333,16 @@ "state": { "attribute": "Атрибут (необов’язково)", "for": "Протягом", - "from": "Від", + "from": "З", "label": "Статус", - "to": "До" + "to": "На" }, "sun": { "event": "Подія:", "label": "Сонце", "offset": "Зміщення (необов'язково)", - "sunrise": "Схід сонця", - "sunset": "Захід сонця" + "sunrise": "Схід", + "sunset": "Захід" }, "tag": { "label": "Тег" @@ -1159,22 +1358,22 @@ "seconds": "Секунд" }, "time": { - "at": "У", + "at": "О", "label": "Час", - "type_input": "Значення помічнику дати й часу", + "type_input": "Значення помічника дати й часу", "type_value": "Фіксований час" }, "webhook": { "label": "Webhook", - "webhook_id": "Webhook ID" + "webhook_id": "Ідентифікатор Webhook" }, "zone": { "enter": "Увійшов", - "entity": "Місце розташування об'єкту", + "entity": "Місцезнаходження сутності", "event": "Подія:", "label": "Зона", "leave": "Залишив", - "zone": "Зона:" + "zone": "Зона" } }, "unsupported_platform": "Непідтримувана платформа: {platform}" @@ -1185,10 +1384,10 @@ "add_automation": "Додати автоматизацію", "delete_automation": "Видалити автоматизацію", "delete_confirm": "Ви впевнені, що хочете видалити цю автоматизацію?", - "duplicate": "Дублікат", + "duplicate": "Дублювати", "duplicate_automation": "Дублювання автоматизації", "edit_automation": "Редагувати автоматизацію", - "header": "Редактор автоматизації", + "header": "Редактор автоматизацій", "headers": { "name": "Назва" }, @@ -1198,45 +1397,98 @@ "only_editable": "Редагуються лише автоматизації, визначені в automations.yaml.", "pick_automation": "Оберіть автоматизацію для редагування", "show_info_automation": "Показати інформацію про автоматизацію" + }, + "thingtalk": { + "create": "Створити автоматизацію", + "link_devices": { + "ambiguous_entities": "Один або кілька пристроїв мають більше одного відповідного об’єкта. Будь ласка, виберіть той, який ви хочете використовувати.", + "header": "Чудово! Тепер нам потрібно зв'язати деякі пристрої", + "unknown_placeholder": "Невідомий заповнювач" + }, + "task_selection": { + "error_empty": "Введіть текст автоматизації або натисніть \"Пропустити\".", + "error_unsupported": "Ми не змогли створити автоматизацію для цього (поки що?).", + "for_example": "Наприклад:", + "header": "Нова автоматизація", + "introduction": "Введіть нижче, що повинна робити ця автоматизація, і ми спробуємо перетворити текст в автоматизацію Home Assistant.", + "language_note": "Примітка: поки що підтримується лише англійська мова." + } + } + }, + "blueprint": { + "add": { + "community_forums": "форуми спільноти", + "error_no_url": "Введіть URL-адресу проекту.", + "file_name": "Шлях до проекту", + "header": "Імпортувати проект", + "import_btn": "Попередній перегляд проекту", + "import_header": "Проект \"{name}\"", + "import_introduction": "Ви можете імпортувати проекти інших користувачів з Github і форумів спільноти. Для цього введіть у цьому вікні URL-адресу проекту.", + "import_introduction_link": "Ви можете імпортувати проекти інших користувачів з Github і {community_link} . Для цього введіть у цьому вікні URL-адресу проекту.", + "importing": "Завантаження проекту...", + "raw_blueprint": "Вміст проекту", + "save_btn": "Імпортувати проект", + "saving": "Імпорт проекту...", + "unsupported_blueprint": "Цей проект не підтримується", + "url": "URL-адреса проекту" + }, + "caption": "Проекти", + "description": "Керування проектами", + "overview": { + "add_blueprint": "Імпортувати проект", + "confirm_delete_header": "Видалити цей проект?", + "confirm_delete_text": "Ви впевнені, що хочете видалити цей проект?", + "delete_blueprint": "Видалити проект", + "discover_more": "Знайти більше проектів", + "header": "Редактор проектів", + "headers": { + "domain": "Домен", + "file_name": "Ім'я файлу", + "name": "Ім'я" + }, + "introduction": "У цьому розділі параметрів можна імпортувати нові та керувати наявними проектами.", + "learn_more": "Докладніше про використання проектів", + "use_blueprint": "Створити автоматизацію" } }, "cloud": { "account": { "alexa": { "config_documentation": "Документація з налаштування", - "disable": "Вимкнути", - "enable": "Увімкнути", - "enable_ha_skill": "Активувати навичку Home Assistant для Alexa", - "enable_state_reporting": "Увімкнути звітність про стан", + "disable": "вимкнути", + "enable": "увімкнути", + "enable_ha_skill": "Активувати навик Home Assistant для Alexa", + "enable_state_reporting": "Відправляти зміни станів об'єктів", "info": "Завдяки інтеграції Alexa для Home Assistant Cloud ви зможете керувати всіма своїми пристроями Home Assistant за допомогою будь-якого пристрою з Alexa.", - "info_state_reporting": "Якщо ви ввімкнете звітність про стан, Home Assistant надсилатиме всі зміни стану об'єктів, відкритих для Amazon. Це дозволяє завжди бачити актуальні стани в додатку Alexa та використовувати зміни у станах, щоб створювати рутини.", + "info_state_reporting": "Якщо Ви включите цей параметр, Home Assistant буде відправляти всі зміни станів об'єктів, доступних Amazon. Це дозволить Вам завжди бачити актуальні стани в додатках Amazon.", "manage_entities": "Керування об'єктами", - "state_reporting_error": "Не вдалося {enable_disable} звіт про стан.", + "state_reporting_error": "Неможливо {enable_disable} оновлення змін станів.", "sync_entities": "Синхронізація об'єктів", "sync_entities_error": "Не вдалося синхронізувати об’єкти:", "title": "Alexa" }, "connected": "Під'єднаний", - "connection_status": "Стан підключення до хмари ", - "fetching_subscription": "Отримання підписки...", + "connection_status": "Статус підключення до хмари", + "fetching_subscription": "Отримання підписки ...", "google": { "config_documentation": "Документація з налаштування", "devices_pin": "PIN-код пристроїв безпеки", - "enable_ha_skill": "Активувати навичку Home Assistant для Google Assistant", - "enable_state_reporting": "Увімкнути звітність про стан", + "enable_ha_skill": "Активувати навик Home Assistant для Google Assistant", + "enable_state_reporting": "Відправляти зміни станів об'єктів", "enter_pin_error": "Не вдалося зберегти PIN-код:", "enter_pin_hint": "Введіть PIN-код, щоб використовувати пристрої безпеки", "enter_pin_info": "Будь ласка, введіть PIN-код, щоб взаємодіяти з пристроями безпеки. Пристрої безпеки — це двері, гаражні двері й замки. Вас попросять сказати/вказати цей код при взаємодії з такими пристроями через Google Assistant.", "info": "Завдяки інтеграції Google Assistant для Home Assistant Cloud ви зможете керувати всіма своїми пристроями Home Assistant за допомогою будь-якого пристрою з підтримкою Google Assistant.", - "info_state_reporting": "Якщо ви ввімкнете звітність про стан, Home Assistant надсилатиме всі зміни стану об'єктів, відкритих для Google. Це дозволяє завжди бачити актуальні стани в додатку Google.", + "info_state_reporting": "Якщо Ви включите цей параметр, Home Assistant буде відправляти всі зміни станів об'єктів, доступних Google. Це дозволить Вам завжди бачити актуальні стани в додатках Google.", "manage_entities": "Керування об'єктами", "security_devices": "Пристрої безпеки", "sync_entities": "Синхронізуйте об'єкти в Google", + "sync_entities_404_message": "Не вдалось синхронізувати Ваші сутності з Google. Спробуйте запустити синхронізацію шляхом голосового запиту: «ОК, Google, синхронізуй мої пристрої».", "title": "Google Assistant" }, "integrations": "Інтеграції", "integrations_introduction": "Інтеграції для Home Assistant Cloud дозволяють вам підключатися до служб у хмарі, не викриваючи систему Home Assistant публічно в Інтернеті.", - "integrations_introduction2": "Перевірити веб-сайт на", + "integrations_introduction2": "Відвідайте веб-сайт для отримання інформації про ", "integrations_link_all_features": "всі доступні функції", "manage_account": "Керування обліковим записом", "nabu_casa_account": "Обліковий запис Nabu Casa", @@ -1244,36 +1496,42 @@ "remote": { "access_is_being_prepared": "Віддалений доступ встановлюється. Ми повідомимо вас, коли він буде готовий.", "certificate_info": "Інформація про сертифікат", - "info": "Cloud Assistant Cloud забезпечує безпечне віддалене з'єднання з вашою системою, навіть перебуваючи далеко від дому.", - "instance_is_available": "Ваша система доступна на", - "instance_will_be_available": "Ваша система буде доступна на", + "info": "Home Assistant Cloud забезпечує безпечне підключення до Вашого сервера, навіть якщо Ви перебуваєте далеко від дому.", + "instance_is_available": "Ваш Home Assistant доступний за адресою", + "instance_will_be_available": "Ваш Home Assistant буде доступний за адресою", "link_learn_how_it_works": "Дізнатись, як це працює", "title": "Дистанційне керування" }, "sign_out": "Вийти", - "thank_you_note": "Дякуємо, що ви є учасником Cloud Assistant Cloud. Саме завдяки таким людям ми можемо зробити чудовий досвід домашньої автоматизації для всіх. Дякую!", + "thank_you_note": "Дякуємо за те, що стали частиною Home Assistant Cloud. Саме завдяки таким людям, як Ви, ми маємо змогу зробити все можливе для того, щоб домашня автоматизація була максимально зручною для всіх. Дякуємо!", "webhooks": { - "disable_hook_error_msg": "Не вдалося вимкнути webhook:", - "info": "Все, що налаштовано на ініціювання через webhook може бути публічним URL, щоб дозволити вам відправляти дані назад на Home Assistant з будь-якого місця, не викриваючи вашу систему інтернету.", - "link_learn_more": "Дізнайтеся більше про створення webhook автоматизації", + "disable_hook_error_msg": "Не вдалося вимкнути Webhook:", + "info": "Всьому, що налаштовано на ініціювання через Webhook можуть бути призначені публічні URL, щоб дозволити Вам відправляти дані в Home Assistant з будь-якого місця, не відкриваючи ваш сервер в інтернет.", + "link_learn_more": "Дізнайтеся більше про створення автоматизації на базі Webhook.", "loading": "Завантаження ...", "manage": "Керування", - "no_hooks_yet": "Схоже, у вас ще немає webhooks. Почніть із налаштування ", - "no_hooks_yet_link_automation": "автоматизація webhook", - "no_hooks_yet_link_integration": "інтеграція на основі webhook", - "no_hooks_yet2": " або створюючи ", - "title": "Webhooks" + "no_hooks_yet": "Схоже, у вас ще немає Webhooks. Почніть із налаштування ", + "no_hooks_yet_link_automation": "автоматизацію Webhook", + "no_hooks_yet_link_integration": "інтеграції на основі Webhook", + "no_hooks_yet2": " або створивши ", + "title": "Webhook" } }, "alexa": { - "banner": "Редагування об'єктів, які піддаються впливу цього інтерфейсу, вимкнено, оскільки ви налаштували фільтри об'єктів у configuration.yaml.", - "expose": "Відкрити для Alexa", - "exposed_entities": "Викриті сутності", - "not_exposed_entities": "Сутності, що не будуть викриті", + "banner": "Редагування списку доступних об'єктів через інтерфейс користувача відключено, бо Ви вже налаштували фільтри в файлі 'configuration.yaml'.", + "dont_expose_entity": "Закрити доступ", + "expose": "Надати доступ для Alexa", + "expose_entity": "Відкрити доступ", + "exposed": "Всього: {selected}", + "exposed_entities": "Сутності, до яких відкритий доступ", + "follow_domain": "За доменом", + "manage_domains": "Керування доменами", + "not_exposed": "Всього: {selected}", + "not_exposed_entities": "Сутності, до яких закритий доступ", "title": "Alexa" }, - "caption": "Хмара Home Assistant", - "description_features": "Керуйте далеко від дому, інтегруйтеся з Alexa та Google Assistant.", + "caption": "Home Assistant Cloud", + "description_features": "Віддалений доступ до сервера, інтеграція з Alexa і Google Assistant", "description_login": "Увійшли в систему як {email}", "description_not_login": "Не ввійшли в систему", "dialog_certificate": { @@ -1281,16 +1539,16 @@ "certificate_information": "Інформація про сертифікат", "close": "Закрити", "fingerprint": "Відбиток сертифіката:", - "will_be_auto_renewed": "Буде автоматично оновлено" + "will_be_auto_renewed": "по закінченню терміну дії сертифікат буде продовжений автоматично" }, "dialog_cloudhook": { "available_at": "Webhook доступний за наступною адресою:", "close": "Закрити", - "confirm_disable": "Ви впевнені, що хочете вимкнути цей webhook?", + "confirm_disable": "Ви впевнені, що хочете вимкнути цей Webhook?", "copied_to_clipboard": "Скопійовано до буфера обміну", - "info_disable_webhook": "Якщо ви більше не хочете використовувати цей webhook, ви можете", + "info_disable_webhook": "Якщо ви більше не хочете використовувати цей Webhook, ви можете", "link_disable_webhook": "вимкнути його", - "managed_by_integration": "Цей webhook керується інтеграцією і не може бути відключена.", + "managed_by_integration": "Цей Webhook керується інтеграцією і не може бути відключений.", "view_documentation": "Переглянути документацію", "webhook_for": "Webhook для {name}" }, @@ -1304,12 +1562,18 @@ "title": "Забули пароль" }, "google": { - "banner": "Редагування об'єктів, які піддаються впливу цього інтерфейсу, вимкнено, оскільки ви налаштували фільтри об'єктів у configuration.yaml.", + "banner": "Редагування списку доступних об'єктів через інтерфейс користувача відключено, бо Ви вже налаштували фільтри в файлі 'configuration.yaml'.", "disable_2FA": "Вимкнути двофакторну аутентифікацію", - "expose": "Відкрити для Google Assistant", - "exposed_entities": "Сутності, що будуть викриті", - "not_exposed_entities": "Сутності, що не будуть викриті", - "sync_to_google": "Синхронізація змін у Google.", + "dont_expose_entity": "Закрити доступ", + "expose": "Надати доступ для Google Assistant", + "expose_entity": "Відкрити доступ", + "exposed": "Всього: {selected}", + "exposed_entities": "Сутності, до яких відкритий доступ", + "follow_domain": "За доменом", + "manage_domains": "Керування доменами", + "not_exposed": "Всього: {selected}", + "not_exposed_entities": "Сутності, до яких закритий доступ", + "sync_to_google": "Синхронізація змін з Google.", "title": "Google Assistant" }, "login": { @@ -1319,13 +1583,17 @@ "email": "Електронна пошта", "email_error_msg": "Недійсна електронна пошта", "forgot_password": "забули пароль?", + "introduction": "Home Assistant Cloud забезпечує безпечний доступ до Вашого сервера, навіть якщо Ви перебуваєте далеко від дому. Також це дає можливість простого підключення до функцій хмарних сервісів Amazon Alexa і Google Assistant.", + "introduction2": "Послуга надається нашим партнером ", + "introduction2a": ", компанією від засновників Home Assistant і Hass.io.", + "introduction3": "Home Assistant Cloud пропонує одноразовий безкоштовний пробний період тривалістю один місяць. Для активації пробного періоду платіжна інформація не потрібна.", "learn_more_link": "Докладніше про Home Assistant Cloud", "password": "Пароль", - "password_error_msg": "Паролі має бути не менше 8 символів", - "sign_in": "Ввійти", + "password_error_msg": "Пароль повинен містити не менше 8 символів.", + "sign_in": "Увійти", "start_trial": "Почніть безкоштовну пробну версію на 1 місяць", - "title": "Cloud Login", - "trial_info": "Платіжна інформація не потрібна" + "title": "Home Assistant Cloud", + "trial_info": "Платіжна інформація не потрібна. Тривалість періоду - 1 місяць" }, "register": { "account_created": "Обліковий запис створено! Перевірте свою електронну пошту, щоб отримати інструкції щодо активації облікового запису.", @@ -1334,18 +1602,18 @@ "email_error_msg": "Недійсна електронна пошта", "feature_amazon_alexa": "Інтеграція з Amazon Alexa", "feature_google_home": "Інтеграція з Google Assistant", - "feature_remote_control": "Управління Home Assistant далеко від дому", - "feature_webhook_apps": "Легка інтеграція з додатками, що базуються на webhook, подібно до OwnTracks", + "feature_remote_control": "Безпечний доступ до Вашого Home Assistant, навіть далеко від дому", + "feature_webhook_apps": "Проста інтеграція з додатками на основі webhook, такими як OwnTracks", "headline": "Почніть безкоштовну пробну версію", "information": "Створіть обліковий запис, щоб розпочати безкоштовну одномісячну пробну версію з Home Assistant Cloud. Платіжна інформація не потрібна.", - "information2": "Випробування надасть вам доступ до всіх переваг Cloud Assistant Cloud, включаючи:", + "information2": "Протягом пробного періоду Вам буде надано доступ до всіх переваг Home Assistant Cloud, включаючи:", "information3": "Ця послуга надається нашим партнером ", - "information3a": ", компанія, заснована засновниками Home Assistant та Hass.io.", - "information4": "Реєструючи обліковий запис, ви погоджуєтесь з наступними умовами та умовами.", + "information3a": ", компанією від засновників Home Assistant і Hass.io.", + "information4": "Реєструючи обліковий запис, Ви погоджуєтесь з наступними умовами:", "link_privacy_policy": "Політика конфіденційності", "link_terms_conditions": "Правила та умови", "password": "Пароль", - "password_error_msg": "Паролі має бути не менше 8 символів", + "password_error_msg": "Пароль повинен містити не менше 8 символів.", "resend_confirm_email": "Надіслати повторне підтвердження електронної пошти", "start_trial": "Почати пробну версію", "title": "Зареєструвати обліковий запис" @@ -1362,14 +1630,14 @@ "section": { "core": { "core_config": { - "edit_requires_storage": "Редактор відключено, оскільки конфігурація вже збережена у configuration.yaml.", + "edit_requires_storage": "Редактор відключено, оскільки конфігурація вже збережена у 'configuration.yaml'.", "elevation": "Висота", "elevation_meters": "метрів", "external_url": "Зовнішня URL-адреса", "imperial_example": "Фаренгейти, фунти", "internal_url": "Внутрішня URL-адреса", "latitude": "Широта", - "location_name": "Заголовок для вашого Home Assistant", + "location_name": "Назва для Вашого Home Assistant", "longitude": "Довгота", "metric_example": "Цельсії, кілограми", "save_button": "Зберегти", @@ -1385,47 +1653,56 @@ }, "customize": { "attributes_customize": "Наступні атрибути вже встановлені в customize.yaml", - "attributes_not_set": "Наступні атрибути не встановлені. Встановіть їх, якщо хочете.", - "attributes_outside": "Наступні атрибути налаштовані поза межами customize.yaml", + "attributes_not_set": "Наступні атрибути не встановлені. Встановіть їх, якщо потрібно.", + "attributes_outside": "Наступні атрибути налаштовані поза межами 'customize.yaml'", "attributes_override": "Ви можете їх замінити, якщо хочете.", "attributes_set": "Наступні атрибути сутності задаються програмно.", - "caption": "Налаштування", - "description": "Налаштуйте свої об'єкти", - "different_include": "Можливо, через домен, glob або інше включення.", + "caption": "Кастомізація", + "description": "Налаштування атрибутів сутностей", + "different_include": "Можливо через домен, glob або include.", "pick_attribute": "Виберіть атрибут, який слід замінити", "picker": { + "documentation": "Документація по налаштуванню", "entity": "Сутність", - "header": "Налаштування", - "introduction": "Налаштування атрибутів на об'єкт. Додані / відредаговані налаштування набудуть чинності негайно. Видалені налаштування набудуть чинності після оновлення об'єкта." + "header": "Кастомізація", + "introduction": "Налаштування атрибутів об'єктів. Додані або змінені налаштування відразу ж наберуть чинності. Віддалені налаштування наберуть чинності після оновлення об'єкта." }, "warning": { "include_link": "включити customize.yaml", - "include_sentence": "Здається, що ваш config.yaml не працює належним чином", - "not_applied": "Зміни, внесені тут, записані в ньому, але не будуть застосовані після перезавантаження конфігурації, якщо не має включення." + "include_sentence": "Схоже, що Ваш файл 'configuration.yaml' складений неправильно", + "not_applied": "Зміни збережені, але не будуть застосовані після перезавантаження конфігурації поки не буде доступний include." } }, "devices": { "add_prompt": "{name} немає для цього пристрою. Ви можете додати, натиснувши кнопку + вище.", "automation": { "actions": { - "caption": "Коли щось спрацьовує ..." + "caption": "Коли щось спрацьовує ...", + "no_actions": "Немає дій", + "unknown_action": "Невідома дія" }, "automations": "Автоматизації", "conditions": { - "caption": "Робити щось, тільки якщо..." + "caption": "Робити щось, тільки якщо ...", + "no_conditions": "Немає умов", + "unknown_condition": "Невідома умова" }, - "create": "Створіть автоматизацію за допомогою пристрою", + "create": "Створити автоматизацію", + "create_disable": "Приховані пристрої не можна використовувати для створення автоматизацій", "no_automations": "Немає автоматизацій", "no_device_automations": "Для цього пристрою немає автоматизації.", "triggers": { - "caption": "Зроби щось, коли..." - } + "caption": "Зроби щось, коли ...", + "no_triggers": "Немає тригерів", + "unknown_trigger": "Невідомий тригер" + }, + "unknown_automation": "Невідома автоматизація" }, "cant_edit": "Ви можете редагувати лише елементи, створені в інтерфейсі користувача.", "caption": "Пристрої", "confirm_delete": "Ви впевнені, що хочете видалити цей пристрій?", - "confirm_rename_entity_ids": "Ви також хочете перейменувати ідентифікатор сутності з ваших сутностей?", - "confirm_rename_entity_ids_warning": "Це не змінить жодної конфігурації (наприклад, автоматизації, сценарії, сцени, Lovelace), яка наразі використовує ці сутності, вам доведеться їх оновити самостійно.", + "confirm_rename_entity_ids": "Чи хочете Ви також перейменувати ідентифікатори сутностей?", + "confirm_rename_entity_ids_warning": "Після перейменування необхідно вручну оновити змінені дані в правилах автоматизації, скриптах, сценах та інтерфейсі користувача.", "data_table": { "area": "Приміщення", "battery": "Акумулятор", @@ -1440,22 +1717,43 @@ "description": "Керування підключеними пристроями", "device_info": "Інформація про пристрій", "device_not_found": "Пристрій не знайдено", + "disabled": "Приховані", + "disabled_by": { + "config_entry": "Конфігурація", + "integration": "Інтеграція", + "user": "Користувач" + }, + "enabled_cause": "Ініціатор: {cause}.", + "enabled_description": "Приховані пристрої та їх дочірні об'єкти не будуть доступні в Home Assistant.", + "enabled_label": "Відображати пристрій", "entities": { - "add_entities_lovelace": "Додати до Lovelace", - "entities": "Об'єкти", - "hide_disabled": "Сховати вимкнені", - "none": "Цей пристрій не має об'єктів" + "add_entities_lovelace": "Додати сутності до Lovelace UI", + "disabled_entities": "Показати {count} {count, plural,\n one {прихований об'єкт}\n other {прихованих об'єктів}\n}", + "entities": "Сутності", + "hide_disabled": "Не показувати приховані", + "none": "Цей пристрій не має сутностей" }, "name": "Назва", "no_devices": "Немає пристроїв", + "picker": { + "filter": { + "filter": "Фільтр", + "hidden_devices": "{number} {number, plural,\n one {прихований пристрій}\n other {прихованих пристроїв}\n}", + "show_all": "Показати всі", + "show_disabled": "Приховані пристрої" + }, + "search": "Пошук пристроїв" + }, "scene": { - "create": "Створення сцени за допомогою пристрою", + "create": "Створити сцену", + "create_disable": "Приховані пристрої не можна використовувати для створення сцен", "no_scenes": "Немає сцен", "scenes": "Сцени" }, "scenes": "Сцени", "script": { - "create": "Створити сценарій за допомогою пристрою", + "create": "Створити скрипт", + "create_disable": "Приховані пристрої не можна використовувати для створення скриптів", "no_scripts": "Немає скриптів", "scripts": "Скрипти" }, @@ -1465,47 +1763,52 @@ "update": "Оновити" }, "entities": { - "caption": "Реєстр об'єктів", + "caption": "Сутності", "description": "Огляд всіх відомих об'єктів.", "picker": { "disable_selected": { "button": "Вимкнути вибрані", - "confirm_text": "Вимкнені сутності не буде додано до Home Assistant.", - "confirm_title": "Вимкнути {number} сутності?" + "confirm_text": "Приховані сутності не будуть доступні в Home Assistant.", + "confirm_title": "Ви впевнені, що хочете вимкнути {number} {number, plural,\n one {вибрану сутність}\n other {вибраних сутностей}\n}?" }, "enable_selected": { "button": "Увімкнути вибрані", - "confirm_text": "Це зробить їх доступними в Home Assistant, якщо їх зараз вимкнено.", - "confirm_title": "Ви хочете ввімкнути {number} сутності?" + "confirm_text": "Якщо ці сутності раніше були вимкнені, вони знову будуть відображатися в Home Assistant.", + "confirm_title": "Увімкнути {number} {number, plural,\n one {вибрану сутність}\n other {вибраних сутностей}\n}?" }, "filter": { "filter": "Фільтр", + "hidden_entities": "{number} приховано {number, plural,\n one {сутність}\n other {сутностей}\n}", "show_all": "Показати все", - "show_disabled": "Показати відключені об’єкти", + "show_disabled": "Показати вимкнені сутності", "show_readonly": "Показати об'єкти лише для читання", - "show_unavailable": "Показати недоступні об'єкти" + "show_unavailable": "Показати недоступні сутності" }, - "header": "Реєстр об'єктів", + "header": "Сутності", "headers": { - "entity_id": "ID об'єкта", + "area": "Приміщення", + "entity_id": "Ідентифікатор сутності", "integration": "Інтеграція", "name": "Назва", "status": "Статус" }, - "introduction": "Home Assistant зберігає реєстр кожного об'єкта, який він коли-небудь бачив, який може бути унікально ідентифікований. Кожному з цих об'єктів буде призначений ідентифікатор, який буде зарезервований тільки для цього об'єкта.", - "introduction2": "Використовуйте реєстр об'єктів, щоб перевизначити ім'я, змінити ідентифікатор об'єкта або видалити запис з Home Assistant. Примітка: видалення запису реєстру не видалить об'єкт. Щоб зробити це, перейдіть за наведеним нижче посиланням і видаліть його зі сторінки інтеграції.", + "introduction": "Home Assistant зберігає у реєстрі кожну сутність, яка була коли-небудь створена в системі. Кожній з цих сутностей призначений ідентифікатор, який зарезервований тільки для цієї сутності.", + "introduction2": "Використовуйте реєстр сутностей, щоб перевизначити ім'я, змінити ідентифікатор сутності або видалити запис з Home Assistant. Примітка: видалення запису реєстру не видалить об'єкт. Щоб зробити це, перейдіть за наведеним нижче посиланням і видаліть його зі сторінки інтеграції.", "remove_selected": { "button": "Видалити вибране", - "confirm_text": "Вам слід видалити їх із конфігурації та автоматики Lovelace, якщо вони містять ці сутності.", - "confirm_title": "Видалити {number} сутності?" + "confirm_partly_text": "Ви можете видалити тільки {removable} з обраних {selected} об'єктів. Сутності можуть бути видалені тільки коли інтеграція більше не надає їх. У деяких випадках Вам потрібно буде перезапустити Home Assistant, щоб видалити сутності видаленої інтеграції. Ви впевнені, що хочете видалити об'єкти?", + "confirm_partly_title": "Тільки {number} {number, plural,\n one {вибрана сутність}\n other {вибраних сутностей}\n} можуть бути видалені.", + "confirm_text": "Вам слід видалити ці сутності з конфігурації Lovelace і з правил автоматизації.", + "confirm_title": "Ви впевнені, що хочете видалити {number} {number, plural,\n one {вибрану сутність}\n other {вибраних сутностей}\n}?" }, "search": "Пошук сутностей", "selected": "{number} вибрано", "status": { - "disabled": "Вимкнений", + "disabled": "Вимкнено", "ok": "Так", "readonly": "Лише для читання", - "unavailable": "Недоступний" + "restored": "Відновлено", + "unavailable": "Недоступно" } } }, @@ -1516,17 +1819,17 @@ "header": "Налаштуваня Home Assistant", "helpers": { "caption": "Помічники", - "description": "Елементи, які можуть допомогти побудувати автоматизацію.", + "description": "Елементи, які можуть допомогти в автоматизації", "dialog": { - "add_helper": "Додати помічника", - "add_platform": "Додати {platform}", + "add_helper": "Створити помічника", + "add_platform": "Додати \"{platform}\"", "create": "Створити" }, "picker": { "add_helper": "Додати помічника", "headers": { "editable": "Можна редагувати", - "entity_id": "ID Сутності", + "entity_id": "ID сутності", "name": "Назва", "type": "Тип" }, @@ -1534,53 +1837,94 @@ }, "types": { "counter": "Лічильник", - "input_boolean": "Тумблер", - "input_datetime": "Дата та/або час", - "input_number": "Номер", - "input_select": "Випадання", - "input_text": "Текст", + "input_boolean": "Input Boolean", + "input_datetime": "Input Datetime", + "input_number": "Input Number", + "input_select": "Input Select", + "input_text": "Input Text", "timer": "Таймер" } }, "info": { - "built_using": "Побудований за допомогою", + "built_using": "Створено з використанням", "caption": "Інформація", + "copy_github": "Для GitHub", + "copy_raw": "Необроблений текст", "custom_uis": "Спеціальні інтерфейси користувача:", "description": "Інформація про інсталяцію Home Assistant", - "developed_by": "Розроблена купою дивовижних людей.", + "developed_by": "Розроблено групою дивовижних людей.", "documentation": "Документація", "frontend": "інтерфейс користувача", "frontend_version": "Версія Frontend: {version} - {type}", "home_assistant_logo": "Логотип Home Assistant", - "icons_by": "Ікони від", + "icons_by": "Значки від", "integrations": "Інтеграції", "issues": "Проблеми", "license": "Опубліковано під ліцензією Apache 2.0", - "path_configuration": "Шлях до config.yaml: {path}", + "path_configuration": "Шлях до configuration.yaml: {path}", "server": "сервер", - "source": "Джерело:", - "system_health_error": "Компонент системи здоров'я не завантажено. Додайте 'system_health:' у configuration.yaml", + "source": "Вихідний код:", + "system_health_error": "Компонент System Health не завантажено. Додайте 'system_health:' в файл 'configuration.yaml'.", + "system_health": { + "checks": { + "cloud": { + "alexa_enabled": "Інтеграція з Alexa", + "can_reach_cert_server": "Доступ до сервера сертифікатів", + "can_reach_cloud": "Доступ до Home Assistant Cloud", + "can_reach_cloud_auth": "Доступ до сервера аутентифікації", + "google_enabled": "Інтеграція з Google", + "logged_in": "Вхід у систему", + "relayer_connected": "Relayer підключений", + "remote_connected": "Віддалений доступ підключений", + "remote_enabled": "Віддалений доступ активований", + "subscription_expiration": "Термін дії підписки" + }, + "homeassistant": { + "arch": "Архітектура ЦП", + "dev": "Середовище розробки", + "docker": "Docker", + "hassio": "HassOS", + "installation_type": "Тип інсталяції", + "os_name": "Назва операційної системи", + "os_version": "Версія операційної системи", + "python_version": "Версія Python", + "timezone": "Часовий пояс", + "version": "Версія", + "virtualenv": "Віртуальне оточення" + }, + "lovelace": { + "dashboards": "Панелі", + "mode": "Режим", + "resources": "Ресурси" + } + }, + "manage": "Керування", + "more_info": "додаткова інформація" + }, "title": "Інформація" }, "integration_panel_move": { "link_integration_page": "сторінка інтеграцій", - "missing_zha": "Відсутня панель конфігурації ZHA? Її було переміщено до запису ZHA на {integrations_page} ." + "missing_zha": "Відсутня панель конфігурації ZHA? Налаштування ZHA тепер знаходяться на {integrations_page} в картці ZHA.", + "missing_zwave": "Відсутня панель конфігурації Z-Wave? Налаштування Z-Wave тепер знаходяться на {integrations_page} в картці Z-Wave." }, "integrations": { "add_integration": "Додати інтеграцію", "attention": "Потрібна увага", "caption": "Інтеграція", "config_entry": { - "area": "У {area}", + "area": "Приміщення: {area}", "delete": "Видалити", - "delete_button": "Видалити {integration}", + "delete_button": "Видалити інтеграцію {integration}", "delete_confirm": "Ви впевнені, що хочете видалити цю інтеграцію?", - "device_unavailable": "пристрій недоступний", + "device_unavailable": "Пристрій недоступний", + "devices": "{count} {count, plural,\n one {пристрій}\n other {пристроїв}\n}", "documentation": "Документація", - "entity_unavailable": "Недоступний", + "entities": "{count} {count, plural,\n one {об'єкт}\n other {об'єктів}\n}", + "entity_unavailable": "Сутність недоступна", "firmware": "Прошивка: {version}", "hub": "Підключено через", - "manuf": "створено: {manufacturer}", + "manuf": "виробник: {manufacturer}", "no_area": "Приміщення не вказано", "no_device": "Об'єкти без пристроїв", "no_devices": "Ця інтеграція не має пристроїв.", @@ -1590,10 +1934,11 @@ "reload_restart_confirm": "Перезапустіть Home Assistant, щоб закінчити перезавантаження цієї інтеграції", "rename": "Перейменувати", "restart_confirm": "Перезавантажте Home Assistant, щоб завершити видалення цієї інтеграції", + "services": "{count} {count, plural,\n one {служба}\n other {служб}\n}", "settings_button": "Редагувати налаштування для {integration}", "system_options": "Системні параметри", - "system_options_button": "Системні параметри для {integration}", - "unnamed_entry": "Запис без назви" + "system_options_button": "Системні параметри інтеграції {integration}", + "unnamed_entry": "Без назви" }, "config_flow": { "aborted": "Скасовано", @@ -1602,7 +1947,7 @@ "dismiss": "Відхилити", "error_saving_area": "Помилка збереження приміщення: {error}", "external_step": { - "description": "На цьому кроці необхідно відвідати зовнішній веб-сайт.", + "description": "Для завершення цього кроку потрібно відвідати зовнішній веб-сайт.", "open_site": "Відкрити веб-сайт" }, "finish": "Закінчити", @@ -1612,54 +1957,54 @@ }, "configure": "Налаштувати", "configured": "Налаштовано", - "description": "Управління та налаштування інтеграцій", + "description": "Керування підключеними пристроями та службами", "details": "Деталі інтеграції", "discovered": "Виявлено", "home_assistant_website": "Веб-сайт Home Assistant", "ignore": { - "confirm_delete_ignore": "Це знову показуватиме цю інтеграцію у ваших знайдених інтеграціях. Це може потребувати перезавантаження або зайняти деякий час.", + "confirm_delete_ignore": "Ця інтеграція стане доступна для виявлення системою. Виявлення відбудеться автоматично протягом деякого часу, або після перезапуску системи.", "confirm_delete_ignore_title": "Припинити ігнорування {name}?", "confirm_ignore": "Ви дійсно не бажаєте встановити цю інтеграцію? Ви можете скасувати це, натиснувши кнопку \"Показати проігноровані інтеграції\" в меню в правому верхньому кутку.", - "confirm_ignore_title": "Ігнорувати знаходження {name}?", + "confirm_ignore_title": "Ігнорувати виявлення інтеграції {name}?", "hide_ignored": "Приховати ігноровані інтеграції", "ignore": "Ігнорувати", "ignored": "Ігнорується", "show_ignored": "Показати ігноровані інтеграції", "stop_ignore": "Припинити ігнорування" }, - "integration": "інтеграція", + "integration": "інтеграції", "integration_not_found": "Інтеграція не знайдена.", "new": "Налаштуйте нову інтеграцію", - "no_integrations": "Схоже, у вас ще немає інтегацій. Натисніть на кнопку нижче, щоб додати свою першу інтеграцію!", + "no_integrations": "Схоже, у вас ще немає інтеграцій. Натисніть на кнопку нижче, щоб додати свою першу інтеграцію!", "none": "Ще нічого не налаштовано", "none_found": "Інтеграції не знайдено", "none_found_detail": "Налаштуйте критерії пошуку.", - "note_about_integrations": "Ще не всі інтеграції можна налаштувати через інтерфейс користувача.", - "note_about_website_reference": "Більше можна знайти на", + "note_about_integrations": "Ще не всі інтеграції можна налаштовувати через інтерфейс користувача.", + "note_about_website_reference": "Всі доступні інтеграції Ви можете знайти на ", "reconfigure": "Переналаштувати", - "rename_dialog": "Відредагуйте ім'я цього конфігураційного запису", + "rename_dialog": "Назва інтеграції", "rename_input_label": "Ім'я запису", "search": "Пошук інтеграцій" }, - "introduction": "Тут можна налаштувати свої компоненти та Home Assistant. Не все можна налаштувати з інтерфейсу користувача, але ми працюємо над цим.", + "introduction": "Тут можна налаштувати свої компоненти та Home Assistant. Ще не все можна налаштувати з інтерфейсу користувача, але ми працюємо над цим.", "logs": { - "caption": "Журнали", + "caption": "Журнал сервера", "clear": "Очистити", "description": "Перегляд журналів Home Assistant", "details": "Деталі журналу ({level})", - "load_full_log": "Завантажте повний журнал Home Assistant", + "load_full_log": "Показати повний журнал Home Assistant", "loading_log": "Завантаження журналу помилок...", - "multiple_messages": "повідомлення вперше виникло в {time} і показується {counter} раз", - "no_errors": "Про помилки не повідомлялося.", - "no_issues": "Нових проблем немає!", + "multiple_messages": "повідомлення вперше виникло о {time} і показується {counter} разів", + "no_errors": "Немає повідомлень про помилки.", + "no_issues": "Немає повідомлень про проблеми.", "refresh": "Оновити", "title": "Лог" }, "lovelace": { "caption": "Інформаційні панелі Lovelace", "dashboards": { - "cant_edit_default": "Стандартну інформаційну панель Lovelace не можна редагувати з інтерфейсу користувача. Ви можете приховати це, встановивши іншу інформаційну панель за замовчуванням.", - "cant_edit_yaml": "Інформаційні панелі, визначені в YAML, не можна редагувати з інтерфейсу користувача. Змініть їх у config.yaml.", + "cant_edit_default": "Стандартну інформаційну панель Lovelace не можна редагувати з інтерфейсу користувача. Ви можете приховати її, встановивши іншу інформаційну панель за замовчуванням.", + "cant_edit_yaml": "Інформаційні панелі, визначені в YAML, не можна редагувати з інтерфейсу користувача. Змініть їх у 'configuration.yaml'.", "caption": "Інформаційні панелі", "conf_mode": { "storage": "Керований інтерфейсом користувача", @@ -1697,8 +2042,9 @@ "open": "Відкрити" } }, - "description": "Налаштуйте панелі Lovelace", + "description": "Налаштування панелі Lovelace", "resources": { + "cant_edit_yaml": "Ви використовуєте Lovelace в режимі YAML, тому неможливо управляти ресурсами через інтерфейс користувача. В даному режимі управління здійснюється через файл 'configuration.yaml'.", "caption": "Ресурси", "confirm_delete": "Ви впевнені, що хочете видалити цей ресурс?", "detail": { @@ -1711,7 +2057,7 @@ "url": "URL-адреса", "url_error_msg": "URL-адреса – обов'язкове поле", "warning_header": "Будьте обережні!", - "warning_text": "Додавання ресурсів може бути небезпечним, переконайтесь, що ви знаєте джерело ресурсу і довіряєте їм. Погані ресурси можуть серйозно зашкодити вашій системі." + "warning_text": "Додавання ресурсів може бути небезпечним, переконайтесь, що ви знаєте джерело ресурсу і довіряєте їм. Погані ресурси можуть серйозно зашкодити Вашій системі." }, "picker": { "add_resource": "Додати ресурс", @@ -1721,8 +2067,8 @@ }, "no_resources": "Немає ресурсів" }, - "refresh_body": "Для завершення перезавантаження потрібно оновити сторінку. Оновити зараз?", - "refresh_header": "Оновити?", + "refresh_body": "Для завершення видалення потрібно оновити сторінку. Оновити зараз?", + "refresh_header": "Оновити сторінку?", "types": { "css": "Таблиця стилів", "html": "HTML (застарілий)", @@ -1734,7 +2080,7 @@ "mqtt": { "button": "Налаштувати", "description_listen": "Слухати тему", - "description_publish": "Опублікувати пакет", + "description_publish": "Опублікувати дані", "listening_to": "Слухати", "message_received": "Повідомлення {id} отримане в {topic} о {time} :", "payload": "Значення (шаблон дозволений)", @@ -1743,19 +2089,134 @@ "stop_listening": "Припинити прослуховування", "subscribe_to": "Тема для підписки", "title": "MQTT", - "topic": "тема" + "topic": "Тема" + }, + "ozw": { + "button": "Параметри", + "common": { + "controller": "Контролер", + "instance": "Екземпляр", + "network": "Мережа", + "node_id": "Ідентифікатор вузла", + "ozw_instance": "Екземпляр OpenZWave", + "query_stage": "Стадія запиту", + "wakeup_instructions": "Інструкції по пробудженню", + "zwave": "Z-Wave" + }, + "device_info": { + "node_failed": "Помилка вузла", + "stage": "Стадія", + "zwave_info": "Інформація про Z-Wave" + }, + "navigation": { + "network": "Мережа", + "node": { + "config": "Конфігурація", + "dashboard": "Панель" + }, + "nodes": "Вузли", + "select_instance": "Вибір екземпляра" + }, + "network_status": { + "details": { + "driverallnodesqueried": "Всі вузли були опитані", + "driverallnodesqueriedsomedead": "Всі вузли опитано. У мережі виявлено мертві вузли", + "driverawakenodesqueries": "Всі активні вузли опитано", + "driverfailed": "Не вдалося підключитися до контролера Z-Wave", + "driverready": "Ініціалізація контролера Z-Wave", + "driverremoved": "Драйвер видалено", + "driverreset": "Драйвер скинутий", + "offline": "OZWDaemon не в мережі", + "ready": "Готовий до підключення", + "started": "Підключено до MQTT", + "starting": "Підключення до MQTT", + "stopped": "OpenZWave зупинений" + }, + "offline": "Не в мережі", + "online": "Онлайн", + "starting": "Запускається", + "unknown": "Невідомо" + }, + "network": { + "header": "Керування мережею", + "introduction": "Керування мережевими функціями.", + "node_count": "{count} вузлів" + }, + "node_config": { + "header": "Налаштування вузла", + "help_source": "Описи параметрів конфігурації і текст довідки надані проектом OpenZWave.", + "introduction": "Управління різними параметрами конфігурації вузла мережі Z-Wave.", + "wakeup_help": "Вузли з живленням від батареї повинні бути активними, щоб змінити свою конфігурацію. Якщо вузол не активний, OpenZWave спробує оновити конфігурацію вузла наступного разу, коли він прокинеться, що може статися через кілька годин (або днів). Виконайте наступні дії, щоб вивести пристрій із сплячого режиму:" + }, + "node_metadata": { + "product_manual": "Посібник користувача" + }, + "node_query_stages": { + "associations": "Оновлення асоціативних груп і членства", + "cacheload": "Завантаження інформації з кеш-файлу OpenZWave. Вузли батареї залишаться на цьому етапі, поки вузол не прокинеться.", + "complete": "Процес інтерв'ювання завершено", + "configuration": "Отримання значень конфігурації від вузла", + "dynamic": "Отримання часто змінюваних значень від вузла", + "instances": "Отримання відомостей про те, які екземпляри або канали підтримує пристрій", + "manufacturerspecific1": "Отримання ідентифікаційних кодів виробника і продукту від вузла", + "manufacturerspecific2": "Отримання додаткових кодів виробника і ідентифікатора продукту від вузла", + "neighbors": "Отримання списку сусідніх вузлів", + "nodeinfo": "Отримання підтримуваних класів команд від вузла", + "nodeplusinfo": "Отримання інформації Z-Wave + від вузла", + "probe": "Перевірка активності вузла", + "protocolinfo": "Отримання базових можливостей цього вузла від контролера", + "session": "Отримання рідко змінюваних значень від вузла", + "static": "Отримання статичних значень від пристрою", + "versions": "Отримання відомостей про версії мікропрограми та класи команд", + "wakeup": "Налаштування підтримки черг пробудження і повідомлень" + }, + "node": { + "button": "Детальніше про вузол", + "not_found": "Вузол не знайдено" + }, + "nodes_table": { + "failed": "Збій", + "id": "Ідентифікатор", + "manufacturer": "Виробник", + "model": "Модель", + "query_stage": "Стадія запиту", + "zwave_plus": "Z-Wave Plus" + }, + "refresh_node": { + "battery_note": "Якщо вузол працює від акумулятора, обов'язково розбудіть його, перш ніж продовжити", + "button": "Оновити вузол", + "complete": "Оновлення вузла завершено", + "description": "Повторне опитування вузла і оновлення класів команд, можливостей і значень вузла.", + "node_status": "Статус вузла", + "refreshing_description": "Оновлення інформації про вузол ...", + "start_refresh_button": "Почати оновлення", + "step": "Крок", + "title": "Оновити інформацію про вузол", + "wakeup_header": "Інструкції по пробудженню для", + "wakeup_instructions_source": "Інструкції щодо пробудження взяті з бази даних пристроїв спільноти OpenZWave." + }, + "select_instance": { + "header": "Виберіть екземпляр OpenZWave", + "introduction": "У вас працює декілька копій OpenZWave. Яким екземпляром ви хочете керувати?", + "none_found": "Не вдалося знайти екземпляр OpenZWave. Перевірте настройки OpenZWave і MQTT і переконайтеся, що Home Assistant може зв'язуватися з Вашим брокером MQTT." + }, + "services": { + "add_node": "Додати вузол", + "cancel_command": "Скасувати команду", + "remove_node": "Видалити вузол" + } }, "person": { - "add_person": "Додати Людини", + "add_person": "Додати людину", "caption": "Особи", "confirm_delete": "Ви впевнені, що хочете видалити цю людину?", - "confirm_delete2": "Усі пристрої, які належать цій особі, стануть непризначеними.", - "create_person": "Створити Людину", + "confirm_delete2": "Всі пристрої, пов'язані з цією людиною, стануть непризначеними.", + "create_person": "Створити людину", "description": "Керуйте особами, які відстежуються Home Assistant.", "detail": { "admin": "Адміністратор", - "allow_login": "Дозволити особі входити в систему", - "confirm_delete_user": "Ви впевнені, що хочете видалити обліковий запис користувача {name} ? Ви все ще можете відстежувати користувача, але людина більше не зможе ввійти в систему.", + "allow_login": "Дозволити вхід в систему", + "confirm_delete_user": "Ви впевнені, що хочете видалити обліковий запис користувача {name} ? Ви все ще можете відстежувати користувача, але користувач більше не зможе ввійти в систему.", "create": "Створити", "delete": "Видалити", "device_tracker_intro": "Виберіть пристрої, які належать цій людині.", @@ -1766,14 +2227,14 @@ "linked_user": "Пов'язаний користувач", "name": "Ім'я", "name_error_msg": "Ім'я є обов'язковим", - "new_person": "Нова людина", - "no_device_tracker_available_intro": "Коли у вас будуть пристрої, які вказують на присутність людини, ви зможете призначити їх людині тут. Ви можете додати свій перший пристрій, додавши інтеграцію виявлення присутності на сторінці інтеграції.", + "new_person": "Нова персона", + "no_device_tracker_available_intro": "Якщо у вас є пристрої, які вказують на присутність людиною, ви зможете призначити їх людині тут. Ви можете додати свій перший пристрій, додавши інтеграцію виявлення присутності на сторінці інтеграцій.", "update": "Оновити" }, - "introduction": "Тут ви можете визначити кожну особу для Home Assistant.", + "introduction": "Тут ви можете визначити всіх людей для Home Assistant.", "learn_more": "Дізнайтеся більше про людей", - "no_persons_created_yet": "Схоже, ви ще не створили жодної людини.", - "note_about_persons_configured_in_yaml": "Примітка: люди, налаштовані за допомогою config.yaml, не можуть редагуватися через інтерфейс користувача.", + "no_persons_created_yet": "Схоже, ви ще не створили жодної особи.", + "note_about_persons_configured_in_yaml": "Примітка: люди, налаштовані за допомогою 'configuration.yaml', не можуть редагуватися через інтерфейс користувача.", "person_not_found": "Не вдалося знайти особу, яку ви намагалися редагувати.", "person_not_found_title": "Особу не знайдено" }, @@ -1792,10 +2253,10 @@ "entities": { "add": "Додайте об'єкт", "delete": "Видалити об'єкт", - "device_entities": "Якщо додати об'єкт, який належить пристрою, цей пристрій буде додано.", - "header": "Об'єкти", - "introduction": "Об'єкти, які не належать до пристроїв, можна встановити тут.", - "without_device": "Об’єкти без пристрою" + "device_entities": "Якщо додати сутність, яка належить пристрою, цей пристрій також буде додано.", + "header": "Сутності", + "introduction": "Сутності, які не пов'язані з будь-яким пристроєм, можуть бути вказані тут.", + "without_device": "Сутності без пристрою" }, "icon": "Значок", "introduction": "Використовуйте сцени, щоб оживити ваш будинок.", @@ -1814,50 +2275,53 @@ "headers": { "name": "Назва" }, - "introduction": "Редактор скриптів дозволяє створювати та редагувати скрипти. Перейдіть за посиланням нижче, щоб прочитати вказівки, щоб переконатися, що ви правильно налаштували Home Assistant.", + "introduction": "Редактор сцен дозволяє створювати та редагувати сцени. Перейдіть за посиланням нижче, щоб прочитати вказівки, щоб переконатися, що ви правильно налаштували Home Assistant.", "learn_more": "Докладніше про сцени", - "no_scenes": "Ми не змогли знайти жодної редагованої сцени", + "no_scenes": "Ми не змогли знайти жодної доступної для редагування сцени", "only_editable": "Лише сцени в scenes.yaml можуть бути відредагованими.", "pick_scene": "Виберіть сцену для редагування", "show_info_scene": "Показати інформацію про сцену" } }, "script": { - "caption": "Сценарій", + "caption": "Скрипти", "description": "Створення та редагування скриптів", "editor": { "alias": "Назва", - "default_name": "Новий Скрипт", + "default_name": "Новий скрипт", "delete_confirm": "Ви впевнені, що хочете видалити цей скрипт?", "delete_script": "Видалити скрипт", "header": "Скрипт: {name}", "icon": "Значок", - "id": "ID Сутності", + "id": "ID сутності", "id_already_exists": "Такий ID уже існує", - "id_already_exists_save_error": "Ви не можете зберегти цей сценарій, оскільки ідентифікатор не є унікальним, виберіть інший ідентифікатор або залиште його порожнім, щоб автоматично створити його.", + "id_already_exists_save_error": "Ви не можете зберегти цей скрипт, оскільки ідентифікатор не є унікальним, виберіть інший ідентифікатор або залиште його порожнім, щоб автоматично створити його.", "introduction": "Використовуйте скрипти для виконання послідовності дій.", "link_available_actions": "Дізнайтеся більше про доступні дії.", - "load_error_not_editable": "Тільки скрипти всередині scripts.yaml доступні для редагування", + "load_error_not_editable": "Для редагування доступні лише скрипти з 'scripts.yaml'.", "max": { "parallel": "Максимальна кількість паралельних запусків", "queued": "Довжина черги" }, "modes": { - "documentation": "документація сценаріїв", + "description": "Режим управляє тим, що відбувається під час виконання скрипта, коли він все ще виконуються з попереднього виклику. Ознайомтеся з {documentation_link} для отримання додаткової інформації.", + "documentation": "документацією", "label": "Режим", "parallel": "Паралельно", "queued": "Почергово", "restart": "Повторно", "single": "Одинарно (за замовчуванням)" }, - "save_script": "Зберегти сценарій", + "save_script": "Зберегти скрипт", "sequence": "Послідовність", "sequence_sentence": "Послідовність дій цього скрипта." }, "picker": { "add_script": "Додати скрипт", + "duplicate": "Дублювати", + "duplicate_script": "Дублювати", "edit_script": "Редагувати скрипт", - "header": "Редактор скриптів ", + "header": "Редактор скриптів", "headers": { "name": "Назва" }, @@ -1865,8 +2329,8 @@ "learn_more": "Дізнатися більше про скрипти", "no_scripts": "Не вдалося знайти жодного скрипту для редагування", "run_script": "Запусти скрипт", - "show_info": "Показати інформацію про сценарій", - "trigger_script": "Тригер скрипту" + "show_info": "Показати інформацію про скрипт", + "trigger_script": "Виконати скрипт" } }, "server_control": { @@ -1875,30 +2339,38 @@ "section": { "reloading": { "automation": "Перезавантаження автоматизації", - "command_line": "Перезавантажити сутності командного рядка", - "core": "Перезавантажити ядро", - "filesize": "Перезавантажити сутності розміру файлу", - "filter": "Перезавантажити сутності фільтра", - "generic": "Перезавантажити загальні сутності IP-камер", - "generic_thermostat": "Перезавантажити загальні сутності термостата", + "command_line": "Перезавантажити сутності інтеграції \"Command Line\"", + "core": "Оновити місцезнаходження і кастомізації", + "filesize": "Перезавантажити сутності інтеграції \"File Size\"", + "filter": "Перезавантажити сутності інтеграції \"Filter\"", + "generic": "Перезавантажити сутності інтеграції \"Generic IP Camera\"", + "generic_thermostat": "Перезавантажити сутності інтеграції \"Generic Thermostat\"", "group": "Перезавантажити групи", - "heading": "Перезавантаження конфігурації", - "history_stats": "Перезавантажити сутності статистики журналу", + "heading": "Перезавантаження конфігурації YAML", + "history_stats": "Перезавантажити сутності інтеграції \"History Stats\"", "homekit": "Перезавантажити HomeKit", - "introduction": "Деякі частини Home Assistant можна оновити без необхідності перезавантаження. Натискання перезавантаження вивантажить поточну конфігурацію та завантажить нову.", - "min_max": "Перезавантажити мінімальні/максимальні сутності", - "mqtt": "Перезавантажити сутності mqtt", + "input_boolean": "Перезавантажити сутності \"Input Boolean\"", + "input_datetime": "Перезавантажити сутності \"Input Datetime\"", + "input_number": "Перезавантажити сутності \"Input Number\"", + "input_select": "Перезавантажити сутності \"Input Select\"", + "input_text": "Перезавантажити сутності \"Input Text\"", + "introduction": "Деякі компоненти Home Assistant можна оновити без необхідності перезавантаження усієї системи. Натискання перезавантаження вивантажить поточну конфігурацію YAML та завантажить нову.", + "min_max": "Перезавантажити сутності інтеграції \"Min / Max\"", + "mqtt": "Перезавантажити об'єкти інтеграції \"MQTT\", налаштовані вручну", "person": "Перезавантажити користувачів", - "ping": "Перезавантажити сутності бінарного датчика", - "reload": "Перезавантажити {domain}", + "ping": "Перезавантажити сутності інтеграції \"Ping (ICMP)\"", + "reload": "Перезавантажити \"{domain}\"", + "rest": "Перезавантажити сутності і служби сповіщень інтеграції \"REST\"", + "rpi_gpio": "Перезавантажити об'єкти інтеграції \"Raspberry Pi GPIO\"", "scene": "Перезавантажити сцени", "script": "Перезавантажити скрипти", - "smtp": "Перезавантажте служби сповіщення smtp", - "statistics": "Перезавантажити сутності статистики", - "telegram": "Перезавантажити служби сповіщення телеграм", + "smtp": "Перезавантажити служби повідомлень SMTP", + "statistics": "Перезавантажити сутності інтеграції \"Statistics\"", + "telegram": "Перезавантажити служби повідомлень Telegram", "template": "Перезавантажити сутності шаблону", - "trend": "Перезавантажити сутності тренду", - "zone": "Перезавантаження зон" + "trend": "Перезавантажити сутності інтеграції \"Trend\"", + "universal": "Перезавантажити сутності інтеграції \"Universal Media Player\"", + "zone": "Перезавантажити зони" }, "server_management": { "confirm_restart": "Ви впевнені, що хочете перезапустити Home Assistant?", @@ -1921,26 +2393,30 @@ "add_tag": "Додати тег", "automation_title": "Тег {name} відсканований", "caption": "Теги", + "confirm_remove": "Ви впевнені, що хочете видалити мітку {tag}?", + "confirm_remove_title": "Видалити мітку?", "create_automation": "Створіть автоматизацію за допомогою тегу", "description": "Керування тегами", "detail": { "companion_apps": "програми для компаньйонів", "create": "Створити", - "create_and_write": "Створення та записування", + "create_and_write": "Створити та записати", "delete": "Видалити", "description": "Опис", "name": "Назва", "new_tag": "Новий тег", "tag_id": "Ідентифікатор тегу", - "tag_id_placeholder": "Автогенерується, якщо залишити його порожнім", - "update": "Оновити" + "tag_id_placeholder": "Якщо не вказано, створюється автоматично", + "update": "Оновити", + "usage": "Тег може викликати автоматизацію при скануванні, ви можете використовувати теги NFC, QR-коди або будь-який інший типи тегів. Скористайтеся нашим {companion_link} щоб записати цей тег до програмованого тегу NFC або створіть QR-код нижче." }, "edit": "Редагувати", "headers": { "last_scanned": "Останнє сканування", "name": "Назва" }, - "never_scanned": "Ніколи не сканували", + "learn_more": "Докладніше про теги", + "never_scanned": "Сканування ще не виконувалось", "no_tags": "Немає тегів", "write": "Записати" }, @@ -1959,10 +2435,11 @@ "editor": { "activate_user": "Активувати користувача", "active": "Активний", - "admin": "Адміністратора", + "active_tooltip": "Дозволяє або забороняє користувачеві входити в систему", + "admin": "Адміністратор", "caption": "Переглянути користувача", "change_password": "Змінити пароль", - "confirm_user_deletion": "Справді видалити {name} ?", + "confirm_user_deletion": "Ви впевнені, що хочете видалити {name}?", "deactivate_user": "Деактивувати користувача", "delete_user": "Видалити користувача", "group": "Група", @@ -1975,23 +2452,30 @@ "system_generated_users_not_editable": "Не вдається оновити користувачів, створених системою.", "system_generated_users_not_removable": "Не вдається видалити користувачів, створених системою.", "unnamed_user": "Безіменний користувач", - "update_user": "Оновити" + "update_user": "Оновити", + "username": "Логін" }, "picker": { + "add_user": "Додати користувача", "headers": { "group": "Група", + "is_active": "Активний", + "is_owner": "Власник", "name": "Назва", - "system": "Система" + "system": "Система", + "username": "Логін" } - } + }, + "users_privileges_note": "Функціонал групи користувачів все ще в стадії розробки. Надалі користувачі не зможуть адмініструвати сервер через інтерфейс користувача. Ми все ще перевіряємо всі кінцеві API, щоб переконатися, що вони правильно обмежують доступ." }, "zha": { + "add_device": "Додати пристрій", "add_device_page": { "discovered_text": "Після виявлення тут з’являться пристрої.", - "discovery_text": "Тут будуть показані автоматично виявлені пристрої. Дотримуйтесь вказівок на пристроях і переведіть пристрої в режим з'єднання.", + "discovery_text": "Тут будуть відображатися автоматично виявлені пристрої. Дотримуйтесь вказівок на пристроях і переведіть їх в режим з'єднання.", "header": "Розумні пристрої на базі Zigbee - додавання пристроїв", - "no_devices_found": "Не знайдено жодного пристрою, переконайтесь, що вони перебувають у режимі сполучення, і не дайте їм спати, поки виявлення працює.", - "pairing_mode": "Переконайтеся, що ваші пристрої перебувають у режимі сполучення. Перевірте інструкції вашого пристрою, як це зробити.", + "no_devices_found": "Не знайдено жодного пристрою, переконайтесь, що вони перебувають у режимі сполучення, і не дайте їм спати, поки йде процес виявлення.", + "pairing_mode": "Переконайтеся, що пристрої, які підключаються знаходяться в режимі сполучення. Щоб дізнатися, як активувати режим сполучення, ознайомтеся з інструкцією для Вашого пристрою.", "search_again": "Повторити пошук", "spinner": "Пошук пристроїв ZHA Zigbee ..." }, @@ -2000,7 +2484,7 @@ "description": "Додавання пристроїв до мережі Zigbee" }, "button": "Налаштувати", - "caption": "ZHA", + "caption": "Zigbee Home Automation", "cluster_attributes": { "attributes_of_cluster": "Атрибути вибраного кластера", "get_zigbee_attribute": "Отримати атрибут Zigbee", @@ -2021,7 +2505,7 @@ "clusters": { "header": "Кластери", "help_cluster_dropdown": "Виберіть кластер, щоб переглянути атрибути та команди.", - "introduction": "Кластери є стандартними блоками для функціональності Zigbee. Вони розділяються функціональністю на логічні одиниці. Існують типи клієнтів і серверів, які складаються з атрибутів і команд." + "introduction": "Кластери є стандартними блоками для функціональності Zigbee. Вони розділяються функціональністю на логічні одиниці. В структурі кластера існують елементи клієнтів і серверів, які складаються з атрибутів і команд." }, "common": { "add_devices": "Додати пристрої", @@ -2030,9 +2514,19 @@ "manufacturer_code_override": "Перевизначення коду виробника", "value": "Значення" }, - "description": "Управління мережею домашньої автоматизації Zigbee", + "description": "Керування мережею Zigbee Home Automation", + "device_pairing_card": { + "CONFIGURED": "Налаштування завершено", + "CONFIGURED_status_text": "Ініціалізація", + "INITIALIZED": "Ініціалізація завершена", + "INITIALIZED_status_text": "Пристрій готовий до використання", + "INTERVIEW_COMPLETE": "Опитування завершено", + "INTERVIEW_COMPLETE_status_text": "Налаштування", + "PAIRED": "Знайдено пристрій", + "PAIRED_status_text": "Опитування розпочато" + }, "devices": { - "header": "Zigbee Home Automation - Пристрій" + "header": "Zigbee Home Automation - пристрій" }, "group_binding": { "bind_button_help": "Прив’язати вибрану групу до вибраних кластерів пристроїв.", @@ -2046,12 +2540,13 @@ "unbind_button_label": "Відв'язати групу" }, "groups": { + "add_group": "Додати групу", "add_members": "Додати учасників", "adding_members": "Додавання учасників", "caption": "Групи", "create": "Створити групу", - "create_group": "Zigbee Home Automation - Створити групу", - "create_group_details": "Введіть необхідні дані, щоб створити нову групу zigbee", + "create_group": "Zigbee Home Automation - створити групу", + "create_group_details": "Введіть необхідні дані, щоб створити нову групу Zigbee", "creating_group": "Створення групи", "description": "Керування групами Zigbee", "group_details": "Ось усі подробиці для обраної групи Zigbee.", @@ -2059,11 +2554,11 @@ "group_info": "Інформація про групу", "group_name_placeholder": "Назва групи", "group_not_found": "Групу не знайдено!", - "group-header": "Zigbee Home Automation - Деталі групи", + "group-header": "Zigbee Home Automation - деталі групи", "groups": "Групи", - "groups-header": "Zigbee Home Assistant - управління групами", - "header": "Zigbee Home Automation - управління групами", - "introduction": "Створення та модифікація груп zigbee", + "groups-header": "Zigbee Home Assistant - керування групами", + "header": "Zigbee Home Automation - керування групами", + "introduction": "Створення та модифікація груп Zigbee", "manage_groups": "Керування групами Zigbee", "members": "Учасники", "remove_groups": "Видалити групи", @@ -2082,17 +2577,22 @@ "caption": "Мережа" }, "node_management": { - "header": "Керування пристроями", - "help_node_dropdown": "Виберіть пристрій для перегляду параметрів на кожному пристрої.", - "hint_battery_devices": "Примітка. Пристрої, щр живляться від акумулятора повинні бути активними під час виконання команд. Як правило, можна розбудити сонний пристрій, запустивши його.", - "hint_wakeup": "Деякі пристрої, такі як датчики Xiaomi, мають кнопку пробудження, яку ви можете натискати з інтервалом ~5 секунд, що підтримує стан пристрою під час взаємодії з ними.", + "header": "Керування пристроєм", + "help_node_dropdown": "Виберіть пристрій для перегляду індивідуальних параметрів.", + "hint_battery_devices": "Примітка:\n Сплячі (працюють від батареї) пристрої повинні бути активні при виконанні команд. Зазвичай пристрій виходить з режиму сну, коли спрацьовує на зміну зовнішніх умов.", + "hint_wakeup": "Деякі пристрої, такі як датчики Xiaomi, мають кнопку пробудження, яку Ви можете натискати з інтервалом ~ 5 секунд, щоб тримати пристрої в активному стані під час взаємодії з ними.", "introduction": "Запустіть команди ZHA, які впливають на один пристрій. Виберіть пристрій, щоб переглянути список доступних команд." + }, + "title": "Zigbee Home Automation", + "visualization": { + "caption": "Візуалізація", + "header": "Візуалізація мережі" } }, "zone": { "add_zone": "Додати зону", "caption": "Зони", - "configured_in_yaml": "Зони, налаштовані через configuration.yaml, не можуть бути відредаговані через інтерфейс користувача.", + "configured_in_yaml": "Зони, налаштовані через 'configuration.yaml', не можуть бути відредаговані через інтерфейс користувача.", "confirm_delete": "Ви впевнені, що хочете видалити цю зону?", "create_zone": "Створити зону", "description": "Керуйте зонами, в яких слід відстежувати людей.", @@ -2100,13 +2600,13 @@ "create": "Створити", "delete": "Видалити", "icon": "Значок", - "icon_error_msg": "Піктограма має бути у форматі ' ''префікс:назва_іконки, наприклад: ''mdi:home''", + "icon_error_msg": "Параметр повинен бути в форматі \"prefix:iconname\" (наприклад: \"mdi:home\")", "latitude": "Широта", "longitude": "Довгота", "name": "Назва", "new_zone": "Нова зона", "passive": "Пасивний", - "passive_note": "Пасивні зони приховані у front-end-і і не використовуються як місце для відстеження пристроїв. Це корисно, якщо ви просто хочете використовувати його для автоматизації.", + "passive_note": "Пасивні зони можуть використовуватися тільки в автоматизації. Вони не відображаються на карті в інтерфейсі і не використовуються в якості місця розташування для пристроїв відстеження.", "radius": "Радіус", "required_error_msg": "Це поле є обов'язковим", "update": "Оновити" @@ -2115,7 +2615,7 @@ "edit_home_zone_narrow": "Радіус домашньої зони поки не можна редагувати з інтерфейсу. Місцезнаходження можна змінити із загальної конфігурації.", "go_to_core_config": "Перейти до загальних налаштувань?", "home_zone_core_config": "Місцезнаходження вашої домашньої зони можна редагувати на сторінці загальних налаштувань. На даний час, радіус зони \"Головна\" не можна редагувати з адміністративної панелі. Ви хочете перейти до загальних налаштувань?", - "introduction": "Зони дозволяють вказувати певні регіони на землі. Коли людина знаходиться в зоні, область візьме ім’я зони. Зони також можна використовувати як тригер або стан всередині налаштувань автоматизації.", + "introduction": "Зони дозволяють вказувати певні області на землі. Коли відстежувана персона знаходиться в визначеній зоні, її станом буде назва зони. Зони також можуть використовуватися як тригер або умова в автоматизації.", "no_zones_created_yet": "Схоже, ви ще не створили жодної зони." }, "zwave": { @@ -2128,7 +2628,7 @@ "value": "Значення", "wakeup_interval": "Інтервал пробудження" }, - "description": "Керуйте мережею Z-Wave", + "description": "Керування мережею Z-Wave", "learn_more": "Дізнатись більше про Z-Wave", "network_management": { "header": "Керування мережею Z-Wave", @@ -2145,32 +2645,54 @@ "node_config": { "config_parameter": "Параметр конфігурації", "config_value": "Значення параметра", - "false": "Брехня", + "false": "False", "header": "Параметри конфігурації вузла", "seconds": "секунд", - "set_config_parameter": "Встановити параметр налаштування", + "set_config_parameter": "Встановити параметр конфігурації", "set_wakeup": "Встановити інтервал пробудження", - "true": "Істина" + "true": "True" }, "node_management": { + "add_to_group": "Додати в групу", + "entities": "Об'єкти цього вузла", "entity_info": "Інформація про сутність", - "exclude_entity": "Виключити цю сутність з Home Assistant" + "exclude_entity": "Виключити цю сутність з Home Assistant", + "group": "Група", + "header": "Управління вузлами Z-Wave", + "introduction": "Команди Z-Wave, які впливають на один вузол. Виберіть вузол, щоб побачити список доступних команд.", + "max_associations": "Максимальна кількість зв'язків:", + "node_group_associations": "Асоціації груп вузлів", + "node_protection": "Захист вузла", + "node_to_control": "Вузол для управління", + "nodes": "Вузли", + "nodes_hint": "Виберіть вузол для перегляду індивідуальних параметрів.", + "nodes_in_group": "Інші вузли в цій групі:", + "pooling_intensity": "Інтенсивність опитування", + "protection": "Захист", + "remove_broadcast": "Видалити трансляцію", + "remove_from_group": "Видалити з групи", + "set_protection": "Встановити захист" }, "ozw_log": { "header": "Журнал OZW", - "introduction": "Переглянути журнал. 0 - мінімум (завантажує весь журнал), а 1000 - максимум. Навантаження покаже статичний журнал, а кінець автоматично оновиться з останньою заданою кількістю рядків журналу.", - "load": "Завантажити" + "introduction": "Перегляд журналу подій. 0 - мінімум (завантажує весь журнал), 1000 - максимум. Журнал оновлюється автоматично.", + "last_log_lines": "Кількість останніх рядків журналу", + "load": "Завантажити", + "tail": "Кінець" }, "services": { "add_node": "Додати вузол", "add_node_secure": "Додати захищений вузол", "cancel_command": "Скасувати команду", "heal_network": "Виправити мережу", - "heal_node": "Зцілити вузол", + "heal_node": "Виправити вузол", "node_info": "Інформація про вузол", - "print_node": "Вивести вузол", + "print_node": "Показати вузол", "refresh_entity": "Оновити сутність", + "refresh_node": "Оновити вузол", + "remove_failed_node": "Вилучити несправний вузол", "remove_node": "Видалити вузол", + "replace_failed_node": "Замінити несправний вузол", "save_config": "Зберегти конфігурацію", "soft_reset": "Скидання", "start_network": "Увімкнути", @@ -2185,9 +2707,9 @@ }, "custom": { "external_panel": { - "complete_access": "Буде надано доступ до всіх даних «Home Assistant».", - "hide_message": "Перевірте документацію для panel_custom компонента, щоб сховати це повідомлення", - "question_trust": "Ви довіряєте зовнішній панелі {name} за адресою {link} ?" + "complete_access": "Підтверджуючи, Ви надасте для панелі доступ до всіх даних в Home Assistant.", + "hide_message": "Ознайомтеся з інструкцією до компонента \"Panel Custom\", щоб дізнатися як приховати це повідомлення.", + "question_trust": "Ви довіряєте зовнішній панелі {name} за адресою {link}?" } }, "developer-tools": { @@ -2196,7 +2718,7 @@ "alert_event_type": "Тип події — обов'язкове поле", "available_events": "Доступні події", "count_listeners": " ({count} слухачів)", - "data": "Дані події (YAML, необов'язково)", + "data": "Дані події в форматі YAML (необов'язково)", "description": "Викликати подію через шину подій", "documentation": "Документація подій", "event_fired": "Подія {type} викликана", @@ -2211,48 +2733,53 @@ "type": "Тип події" }, "services": { - "alert_parsing_yaml": "Помилка під час розбору YAML: {data}", + "alert_parsing_yaml": "Помилка при розборі синтаксису YAML: {data}", "call_service": "Викликати службу", "column_description": "Опис", "column_example": "Приклад", "column_parameter": "Параметр", - "data": "Дані служби (YAML, необов'язково)", - "description": "Сервіс dev Tool дозволяє викликати будь-яку доступну службу в Home Assistant.", - "fill_example_data": "Заповнити дані прикладом", + "data": "Дані служби в форматі YAML (необов'язково)", + "description": "Тут Ви можете викликати будь-яку службу Home Assistant зі списку доступних.", + "fill_example_data": "Заповнити даними з прикладу", "no_description": "Опис відсутній", "no_parameters": "Ця служба не приймає ніяких параметрів.", "select_service": "Виберіть службу, щоб переглянути опис", - "title": "Сервіси" + "title": "Служби" }, "states": { "alert_entity_field": "Об'єкт є обов'язковим полем", "attributes": "Атрибути", "current_entities": "Поточні сутності", - "description1": "Встановіть представлення пристрою в Home Assistant.", - "description2": "Це не буде взаємодіяти з реальним пристроєм.", + "description1": "Тут Ви можете вручну змінити стан пристрою в Home Assistant.", + "description2": "Змінений стан не буде синхронізовано з пристроєм.", "entity": "Об'єкт", "filter_attributes": "Фільтрувати атрибути", - "filter_entities": "Фільтрувати об'єкти", + "filter_entities": "Фільтрувати сутності", "filter_states": "Фільтрувати стани", + "last_changed": "Востаннє змінено", + "last_updated": "Останнє оновлення", "more_info": "Більше інформації", - "no_entities": "Немає об'єктів", + "no_entities": "Немає сутностей", "set_state": "Встановити стан", "state": "Статус", - "state_attributes": "Атрибути стану (YAML, необов'язково)", - "title": "Стан" + "state_attributes": "Атрибути стану в форматі YAML (необов'язково)", + "title": "Стани" }, "templates": { - "all_listeners": "Цей шаблон прослуховує всі події, що змінилися.", - "description": "Шаблони відтворюються за допомогою механізму шаблонів Jinja2 з деякими розширеннями Home Assistant.", + "all_listeners": "Цей шаблон відстежує всі події зміни стану.", + "description": "Тут Ви можете протестувати поведінку шаблонів. В Home Assistant використовується шаблонизатор Jinja2 з деякими спеціальними розширеннями.", "domain": "Домен", "editor": "Редактор шаблонів", "entity": "Об'єкт", - "jinja_documentation": "Документація щодо шаблону Jinja2", - "listeners": "Цей шаблон прослуховує такі події, що змінилися:", - "no_listeners": "Цей шаблон не прослуховує будь-які події, що змінилися, і не оновлюватиметься автоматично.", + "jinja_documentation": "Дізнайтеся більше про шаблонізатор Jinja2", + "listeners": "Цей шаблон відстежує такі події зміни стану:", + "no_listeners": "Цей шаблон не відстежує ніяких подій і не буде оновлюватися автоматично.", + "reset": "Повернутися до демонстраційного шаблону", + "result_type": "Тип результату", "template_extensions": "Розширення шаблонів Home Assistant", - "title": "Шаблон", - "unknown_error_template": "Невідома помилка відтворення шаблону" + "time": "Цей шаблон оновлюється на початку кожної хвилини.", + "title": "Шаблони", + "unknown_error_template": "Невідома помилка при візуалізації шаблону." } } }, @@ -2264,10 +2791,10 @@ "today": "Сьогодні", "yesterday": "Вчора" }, - "showing_entries": "Показані записи для" + "showing_entries": "Показані записи за" }, "logbook": { - "entries_not_found": "Не знайдено записів журналу.", + "entries_not_found": "Не знайдено записів у журналі.", "period": "Період", "ranges": { "last_week": "Минулого тижня", @@ -2275,11 +2802,16 @@ "today": "Сьогодні", "yesterday": "Вчора" }, - "showing_entries": "Відображення записів за" + "showing_entries": "Показані записи за" }, "lovelace": { + "add_entities": { + "generated_unsupported": "Цю функцію можна використовувати тільки після отримання контролю над інтерфейсом користувача Lovelace.", + "saving_failed": "Неможливо зберегти конфігурацію інтерфейсу користувача.", + "yaml_unsupported": "Цю функцію не можна використовувати, якщо інтерфейс користувача Lovelace працює в режимі YAML." + }, "cards": { - "confirm_delete": "Ви впевнені, що хочете видалити цю карту?", + "confirm_delete": "Ви впевнені, що хочете видалити цю картку?", "empty_state": { "go_to_integrations_page": "Перейти на сторінку інтеграцій.", "no_devices": "Ця сторінка дозволяє керувати пристроями, однак, схоже, у вас ще немає налаштованих пристроїв. Щоб почати, перейдіть на сторінку інтеграції.", @@ -2289,16 +2821,16 @@ "never_triggered": "Ніколи не спрацьовувало" }, "picture-elements": { - "call_service": "Звернутись до сервісу {name}", + "call_service": "Викликати службу {name}", "hold": "Утримуйте:", - "more_info": "Показати більше: {name}", + "more_info": "Показати більше інформації: {name}", "navigate_to": "Перейти до {location}", "tap": "Торкніться:", "toggle": "Переключити {name}", - "url": "Відкрити вікно для {url_path}" + "url": "Відкрити вікно {url_path}" }, "safe-mode": { - "description": "Home Assistant зіткнувся з проблемою під час завантаження конфігурації і тепер працює в безпечному режимі. Погляньте на журнал помилок, щоб побачити, що пішло не так.", + "description": "Home Assistant зіткнувся з проблемою під час завантаження конфігурації і тепер працює в безпечному режимі. Перегляньте журнал помилок, щоб побачити, що пішло не так.", "header": "Активовано безпечний режим" }, "shopping-list": { @@ -2323,7 +2855,7 @@ "more-info": "Більше інформації", "navigate": "Навігація", "none": "Немає дій", - "toggle": "Перемкнути", + "toggle": "Переключити", "url": "URL-адреса" }, "editor_service_data": "Дані служби можна вводити лише в редакторі коду", @@ -2333,15 +2865,17 @@ "card": { "alarm-panel": { "available_states": "Доступні стани", + "description": "Картка дозволяє управляти панеллю сигналізації, ставити об'єкт на охорону і знімати з неї.", "name": "Панель сигналізації" }, "button": { - "default_action_help": "Дія за замовчуванням залежить від можливостей сутності, вона буде або перемкнена, або буде показано більше інформації.", - "description": "Картка кнопки дозволяє додавати кнопки для виконання завдань.", + "default_action_help": "Дія за замовчуванням залежить від можливостей об'єкта. Це може бути перемикання стану, або відображення додаткової інформації.", + "description": "Картка кнопки дозволяє створювати кнопки для виконання завдань.", "name": "Кнопка" }, "calendar": { "calendar_entities": "Сутності календаря", + "description": "Відображає календар, включаючи день, тиждень і списки завдань.", "inital_view": "Початковий вигляд", "name": "Календар", "views": { @@ -2357,16 +2891,16 @@ "conditions": "Умови", "current_state": "поточний", "description": "Умовна картка відображає іншу картку на основі станів сутностей.", - "name": "Умова", - "state_equal": "Стан дорівнює", - "state_not_equal": "Стан не дорівнює" + "name": "Умови", + "state_equal": "Стан співпадає", + "state_not_equal": "Стан не співпадає" }, "config": { - "optional": "Додатково", - "required": "Обов'язково" + "optional": "необов'язково", + "required": "обов'язково" }, "entities": { - "description": "Картка Entities - найпоширеніший тип карт. Вона об'єднує елементи у списки.", + "description": "Картка \"Entities\" - найпоширеніший тип карт. Вона об'єднує елементи у списки.", "edit_special_row": "Щоб переглянути відомості про цей рядок, натисніть кнопку редагування", "entity_row_editor": "Редактор рядків сутності", "entity_row": { @@ -2374,10 +2908,11 @@ "button": "Кнопка", "buttons": "Кнопки", "call-service": "Викликати службу", - "conditional": "Умовне", + "cast": "Cast", + "conditional": "Умови", "divider": "Розділювач", "section": "Розділ", - "weblink": "Веб посилання" + "weblink": "Посилання на веб-сторінку" }, "name": "Об'єкти", "secondary_info_values": { @@ -2390,23 +2925,23 @@ "position": "Положення", "tilt-position": "Положення нахилу" }, - "show_header_toggle": "Показати тумблер заголовка?", - "special_row": "спеціальний рядок", + "show_header_toggle": "Перемикач в заголовку", + "special_row": "(спеціальний рядок)", "toggle": "Перемкнути сутності." }, "entity-filter": { - "description": "Картка фільтра сутності дає змогу визначити список сутностей, які потрібно відстежувати лише в певному стані.", - "name": "Фільтр об'єкта" + "description": "Картка \"Entity-Filter\" дає змогу визначити список сутностей, які потрібно відстежувати лише в певному стані.", + "name": "Фільтр об'єктів" }, "entity": { "description": "Картка сутності дає вам короткий огляд стану вашої сутності.", "name": "Сутність" }, "gauge": { - "description": "Картка Gauge - це базова картка, яка дозволяє візуально бачити дані датчика.", - "name": "Датчик", + "description": "Картка \"Gauge\" - це базова картка, яка дозволяє візуально бачити дані датчика у вигляді шкали.", + "name": "Шкала", "severity": { - "define": "Визначити тяжкість?", + "define": "Задати відтінок для значень", "green": "Зелений", "red": "Червоний", "yellow": "Жовтий" @@ -2418,13 +2953,13 @@ "camera_image": "Сутність камери", "camera_view": "Перегляд камери", "double_tap_action": "Дія при подвійному дотику", - "entities": "Об'єкти", - "entity": "Об'єкт", + "entities": "Сутності", + "entity": "Сутність", "hold_action": "Дія при утримуванні", - "hours_to_show": "Годин, щоб показати", + "hours_to_show": "Годин показувати", "icon": "Іконка", "icon_height": "Висота значка", - "image": "Шлях зображення", + "image": "Шлях до зображення", "manual": "Вручну", "manual_description": "Потрібно додати власну картку або просто хочете написати Yaml вручну?", "maximum": "Максимум", @@ -2433,96 +2968,114 @@ "no_theme": "Немає теми", "refresh_interval": "Інтервал оновлення", "search": "Пошук", - "secondary_info_attribute": "Додатковий інформаційний атрибут", - "show_icon": "Показати значок?", - "show_name": "Показати назву?", - "show_state": "Показати стан?", + "secondary_info_attribute": "Додаткова інформація", + "show_icon": "Показати значок", + "show_name": "Показати назву", + "show_state": "Показати стан", "state": "Стан", "state_color": "Кольорові значки на основі стану?", "tap_action": "Дія при дотику", "theme": "Тема", "title": "Заголовок", - "unit": "Одиниця", + "unit": "Одиниця виміру", "url": "URL-адреса" }, "glance": { "columns": "Стовпці", - "description": "Картка Glance корисна для групування декількох датчиків у компактному вигляді.", - "name": "Картина" + "description": "Картка \"Glance\" корисна для групування декількох датчиків у компактному вигляді.", + "name": "Glance" + }, + "grid": { + "description": "Дозволяє відображати кілька карток у вигляді сітки.", + "name": "Сітка" }, "history-graph": { - "description": "Картка \"Графік історії\" дозволяє відобразити графік для кожного з перелічених об'єктів.", + "description": "Картка \"History-Graph\" дозволяє відображати графіки для обраних об'єктів.", "name": "Графік історії" }, "horizontal-stack": { + "description": "Картка \"Горизонтальний стек\" дозволяє згрупувати кілька карток так, щоб вони завжди знаходилися поруч одна з одною в межах одного стовпчика.", "name": "Горизонтальний стек" }, "humidifier": { - "description": "Карта зволожувача повітря дає контроль над сутністю зволожувача повітря. Дозволяє змінювати вологість і режим сутності.", + "description": "Дозволяє контролювати зволожувач повітря, змінювати вологість і режим роботи.", "name": "Зволожувач" }, "iframe": { - "name": "iFrame" + "description": "Картка дозволяє вбудувати веб-сторінку в інтерфейс Home Assistant.", + "name": "Веб-сторінка" }, "light": { - "description": "Карта Світла дозволяє змінювати яскравість світла.", + "description": "Картка дозволяє контролювати джерело світла, змінювати яскравість.", "name": "Освітлення" }, + "logbook": { + "description": "Відображає список подій для об'єктів.", + "name": "Журнал подій" + }, "map": { - "dark_mode": "Темний режим?", + "dark_mode": "Темний режим", "default_zoom": "Масштабування за замовчуванням", - "description": "Карта карти дозволяє відображати об'єкти на карті.", + "description": "Картка карти дозволяє відображати об'єкти на карті.", "geo_location_sources": "Джерела геолокації", - "hours_to_show": "Годин, щоб показати", + "hours_to_show": "Годин показувати", "name": "Мапа", "source": "Джерело" }, "markdown": { "content": "Зміст", - "description": "Картка Markdown використовується для відображення Markdown.", + "description": "Картка використовується для відображення розмітки Markdown.", "name": "Markdown" }, "media-control": { - "name": "Медіа-контроль" + "description": "Картка використовується для відображення в інтерфейсі медіапрогравача з простими у використанні елементами управління.", + "name": "Медіапрогравач" }, "picture-elements": { - "name": "Елементи з зображенням" + "description": "Картка \"Picture-Elements\" дозволяє на підставі координат позиціонувати на зображенні значки, текст або служби. Один з найбільш універсальних типів карток.", + "name": "Picture Elements" }, "picture-entity": { - "name": "Зображення об'єкта" + "description": "Картка \"Picture-Entity\" відображає об'єкт разом із зображенням. Можна використовувати зображення з URL-адреси, або зображення з камери.", + "name": "Picture Entity" }, "picture-glance": { - "name": "Картина із зображенням" + "description": "Картка \"Picture Glance\" показує зображення і стан об'єктів у вигляді значків. Об'єкти в правій стороні дозволяють виконувати дії, інші об'єкти при натисканні відображають вікно з додатковою інформацією.", + "name": "Picture Glance", + "state_entity": "Об'єкт, який визначає стан зображення" }, "picture": { - "description": "Картка Picture дозволяє встановити зображення, яке буде використовуватися для навігації різними шляхами у вашому інтерфейсі або для виклику служби.", - "name": "Зображення" + "description": "Картка \"Picture\" дозволяє встановити зображення, яке буде використовуватися для навігації по вашому інтерфейсі або для виклику служби.", + "name": "Picture" }, "plant-status": { + "description": "Корисний інструмент для догляду за рослинами.", "name": "Стан рослини" }, "sensor": { - "description": "Картка датчиків дає вам швидкий огляд стану ваших датчиків за допомогою необов’язкового графіку для візуалізації змін з часом.", - "graph_detail": "Деталі графіка", + "description": "Картка датчиків дає вам швидкий огляд стану ваших датчиків. Додатково може відображати графік для візуалізації змін в часі.", + "graph_detail": "Деталізація графіка", "graph_type": "Тип графіка", "name": "Датчик", - "show_more_detail": "Показати більше деталей" + "show_more_detail": "Більше деталей на графіку" }, "shopping-list": { - "description": "Картка списку покупок дозволяє додавати, редагувати, вилучати та очищати предмети зі списку покупок.", + "description": "Картка списку покупок дозволяє додавати, редагувати, відзначати і видаляти елементи в списку покупок.", + "integration_not_loaded": "Для роботи цієї картки необхідно налаштувати інтеграцію `shopping_list`.", "name": "Список покупок" }, "thermostat": { - "description": "Картка термостата забезпечує контроль вашої кліматичної сутності. Дозволяє змінювати температуру та режим сутності.", + "description": "Картка термостата забезпечує контроль вашої кліматичної сутності. Дозволяє змінювати температуру та режими роботи.", "name": "Термостат" }, "vertical-stack": { - "description": "Картка \"вертикальний стек\" дозволяє згрупувати кілька карток, щоб вони завжди знаходились в одній колонці.", + "description": "Картка \"Вертикальний стек\" дозволяє згрупувати кілька карток, щоб вони завжди знаходились в одній колонці.", "name": "Вертикальний стек" }, "weather-forecast": { - "description": "Карта прогнозу погоди відображає погоду. Дуже корисно включити на інтерфейси цих людей що відображаються на стіні.", - "name": "Прогноз погоди" + "description": "Карта прогнозу погоди відображає погоду. Може бути корисна на пристроях, що розміщуються на стіні.", + "name": "Прогноз погоди", + "show_forecast": "Показати прогноз" } }, "cardpicker": { @@ -2533,106 +3086,146 @@ "entity": "Сутність", "no_description": "Опис відсутній." }, + "common": { + "add": "Додати", + "clear": "Очистити", + "edit": "Змінити", + "none": "Не вибрано" + }, + "edit_badges": { + "panel_mode": "Ці значки не відображатимуться, оскільки ця вкладка знаходиться в \"Режимі панелі\"." + }, "edit_card": { "add": "Додати картку", + "clear": "Очистити", "confirm_cancel": "Ви впевнені, що хочете скасувати?", - "delete": "Видалити", + "delete": "Видалити картку", "duplicate": "Дублювати", "edit": "Редагувати", "header": "Конфігурація картки", "move": "Перемістити", "move_after": "Пересунути картку після", - "move_before": "Перемістити картку раніше", + "move_before": "Перемістити картку перед", "options": "Більше опцій", "pick_card": "Виберіть картку, яку хочете додати.", - "pick_card_view_title": "Яку карту слід додати до подання {name}?", - "show_code_editor": "Показати редактор коду", - "show_visual_editor": "Показати візуальний редактор", + "pick_card_view_title": "Яку картку Ви хотіли б додати на вкладку {name}?", + "search_cards": "Пошук карток", + "show_code_editor": "Редактор коду", + "show_visual_editor": "Візуальний редактор", "toggle_editor": "Перемкнути редактор", - "typed_header": "Конфігурація картки ${type}", + "typed_header": "Конфігурація картки {type}", "unsaved_changes": "Ви маєте незбережені зміни" }, "edit_lovelace": { - "edit_title": "Редагувати назву", + "edit_title": "Редагувати заголовок", "explanation": "Цей заголовок буде показаний над вашими картками в Lovelace", "header": "Заголовок для Lovelace", "title": "Заголовок" }, "edit_view": { - "add": "Додати вигляд", - "delete": "Видалити вигляд", - "edit": "Редагувати вигляд", - "header": "Перегляд Конфігурації", - "header_name": "{name} Переглянути конфігурацію", - "move_left": "Перемістити перегляд ліворуч", - "move_right": "Перемістити перегляд праворуч", + "add": "Додати вкладку", + "delete": "Видалити вкладку", + "edit": "Змінити вкладку", + "header": "Налаштування вкладки", + "header_name": "Налаштування вкладки \"{name}\"", + "move_left": "Перемістити вкладку ліворуч", + "move_right": "Перемістити вкладку праворуч", "tab_badges": "Значки", "tab_settings": "Налаштування", "tab_visibility": "Видимість", "visibility": { - "select_users": "Виберіть користувачів, які мають бачити це подання в області переходів" + "select_users": "Виберіть, які користувачі повинні бачити цю вкладку" } }, "header": "Редагування інтерфейсу", + "header-footer": { + "choose_header_footer": "Виберіть {type}", + "footer": "Footer", + "header": "Header", + "types": { + "buttons": { + "name": "Кнопки" + }, + "graph": { + "name": "Графік" + }, + "picture": { + "name": "Зображення" + } + } + }, "menu": { - "open": "Відкрийте меню Lovelace", + "open": "Відкрити меню інтерфейсу користувача Lovelace", "raw_editor": "Текстовий редактор" }, "migrate": { "header": "Конфігурація несумісна", - "migrate": "Перенесення конфігурації", - "para_migrate": "Домашній помічник може автоматично додавати ідентифікатори ID до всіх ваших карт і переглядів, натиснувши кнопку \"Перенести налаштування\".", + "migrate": "Перенести конфігурацію", + "para_migrate": "Home Assistant може автоматично додати ID для всіх карток і вкладок, якщо натиснути кнопку 'Перенести конфігурацію'.", "para_no_id": "Цей елемент не має ID. Додайте ID до цього елемента в 'ui-lovelace.yaml'." }, "move_card": { - "header": "Виберіть подання, куди потрібно перенести картку" + "header": "На яку вкладку потрібно перемістити картку?" }, "raw_editor": { "confirm_remove_config_text": "Ми автоматично генеруватимемо ваші подання інтерфейсу користувача Lovelace з вашими областями та пристроями, якщо ви видалите конфігурацію інтерфейсу користувача Lovelace.", "confirm_remove_config_title": "Ви дійсно бажаєте видалити конфігурацію інтерфейсу користувача Lovelace?", "confirm_unsaved_changes": "У вас є незбережені зміни, ви впевнені, що хочете вийти?", "confirm_unsaved_comments": "Ваша конфігурація містить коментарі, вони не будуть збережені. Ви хочете продовжити?", - "error_invalid_config": "Ваш конфігурація недійсна: {error}", - "error_parse_yaml": "Неможливо розібрати YAML: {error}", + "error_invalid_config": "Ваша конфігурація недійсна: {error}", + "error_parse_yaml": "Помилка при розборі синтаксису YAML: {error}", "error_remove": "Неможливо видалити конфігурацію: {error}", "error_save_yaml": "Неможливо зберегти YAML: {error}", "header": "Редагувати конфігурацію", + "resources_moved": "Ресурси більше не слід додавати до конфігурації Lovelace, але їх можна додати до панелі налаштування Lovelace.", "save": "Зберегти", "saved": "Збережено", "unsaved_changes": "Незбережені зміни" }, "save_config": { - "cancel": "Неважливо", + "cancel": "Залишити як є", "close": "Закрити", - "empty_config": "Почніть з порожньої панелі", + "empty_config": "Почати з порожньої панелі", "header": "Візьміть під свій контроль Lovelace UI", - "para": "За замовчуванням Home Assistant буде підтримувати ваш інтерфейс, оновлюючи його, коли з'являться нові об'єкти або компоненти Lovelace. Якщо ви візьмете під контроль, ми більше не будемо автоматично вносити зміни для вас.", - "para_sure": "Ви впевнені, що хочете взяти під свій контроль інтерфейс?", - "save": "Взяти під контроль" + "para": "В даний час цю панель Lovelace обслуговує Home Assistant, автоматично додаючи нові сутності та компоненти, якщо вони доступні. Якщо Ви отримаєте контроль над цією панеллю, Home Assistant не зможе змінювати її автоматично. Ви завжди зможете повернути контроль Home Assistant, очистивши конфігурацію цієї панелі, або створивши нову панель.", + "para_sure": "Ви впевнені, що хочете самостійно контролювати інтерфейс користувача?", + "save": "Взяти під контроль", + "yaml_config": "Ви можете використовувати поточну конфігурацію цієї панелі як основу для редагування:", + "yaml_control": "Щоб отримати контроль в режимі YAML, створіть файл з ім'ям, вказаним у налаштуваннях цієї панелі (за замовчуванням 'ui-lovelace.yaml').", + "yaml_mode": "Ця панель Lovelace використовується в режимі YAML. У цьому режимі неможливо використовувати візуальний редактор інтерфейсу. Якщо Ви все ж хочете редагувати конфігурацію цієї панелі з інтерфейсу користувача, видаліть рядок 'mode: yaml' з розділу Lovelace в файлі 'configuration.yaml'." }, "select_view": { "dashboard_label": "Панель", - "header": "Вибір подання" + "header": "Виберіть вкладку" + }, + "sub-element-editor": { + "types": { + "footer": "Footer", + "header": "Header", + "row": "Редактор рядка об'єкта" + } }, "suggest_card": { "add": "Додати до Lovelace", - "create_own": "Вибрати іншу картку" + "create_own": "Вибрати іншу картку", + "header": "Варіант відображення в інтерфейсі користувача" }, "view": { "panel_mode": { - "description": "Це робить першу карту на повну ширину; інші карти в цьому вікні не будуть надані.", - "title": "Панельний режим?", - "warning_multiple_cards": "Цей вигляд містить більше однієї картки, але на панелі подання може відображатися лише 1 картка." + "description": "Перша картка буде розтягнута на всю ширину. Інші картки і піктограми не будуть відображатися на цій вкладці", + "title": "Панельний режим", + "warning_multiple_cards": "На цій вкладці кілька карток. У режимі панелі може відображатися тільки одна картка." } } }, "menu": { "close": "Закрити", - "configure_ui": "Налаштувати інтерфейс користувача", + "configure_ui": "Налаштувати панель", "exit_edit_mode": "Вийти з режиму редагування інтерфейсу користувача", "help": "Допомога", "refresh": "Оновити", - "reload_resources": "Перезавантажити ресурси" + "reload_resources": "Перезавантажити ресурси", + "start_conversation": "Почати діалог" }, "reload_lovelace": "Перезавантажити Lovelace", "reload_resources": { @@ -2640,27 +3233,28 @@ "refresh_header": "Оновити?" }, "unused_entities": { - "available_entities": "Це доступні об'єкти, які відсутні у Lovelace UI.", + "available_entities": "Це доступні сутності, які відсутні у Вашому Lovelace UI.", "domain": "Домен", - "entity": "Об'єкт", - "entity_id": "ID об'єкту", + "entity": "Сутність", + "entity_id": "Ідентифікатор сутності", "last_changed": "Востаннє змінено", "no_data": "Не знайдено невикористаних сутностей", "search": "Пошук сутностей", - "select_to_add": "Виберіть об'єкти, які ви хочете додати до картки, а потім натисніть кнопку додати карту.", - "title": "Незадіяні об'єкти" + "select_to_add": "Виберіть сутності, які ви хочете додати до картки, а потім натисніть кнопку Додати карту.", + "title": "Незадіяні сутності" }, "views": { - "confirm_delete": "Ви впевнені, що хочете видалити цей вид?", - "confirm_delete_existing_cards": "Видалення цього подання також видалить картки", - "confirm_delete_text": "Ви впевнені, що хочете видалити перегляд '' {name} ''?" + "confirm_delete": "Ви впевнені, що хочете видалити цю вкладку?", + "confirm_delete_existing_cards": "Видалити вкладку і картки в ній?", + "confirm_delete_existing_cards_text": "Ви впевнені, що хочете видалити вкладку \"{name}\"? Ця вкладка містить {number} карток, які також будуть видалені. Видалення скасувати буде неможливо.", + "confirm_delete_text": "Ви впевнені, що хочете видалити вкладку \"{name}\"?" }, "warning": { - "attribute_not_found": "Атрибут {attribute} недоступний у: {entity}", - "entity_non_numeric": "Об'єкт не є числовим: {entity}", - "entity_not_found": "Об'єкт не доступний: {entity}", - "entity_unavailable": "{entity} наразі недоступний.", - "starting": "Home Assistant запускається, ще не все може бути доступно" + "attribute_not_found": "Атрибут {attribute} недоступний у {entity}", + "entity_non_numeric": "Сутність не є числовою: {entity}", + "entity_not_found": "Сутність {entity} недоступна.", + "entity_unavailable": "Сутність {entity} наразі недоступна.", + "starting": "Home Assistant запускається, поки що не все може бути доступно" } }, "mailbox": { @@ -2678,30 +3272,7 @@ "providers": { "command_line": { "abort": { - "login_expired": "Сесія закінчилася, увійдіть знову." - }, - "error": { - "invalid_auth": "Неправильне ім'я користувача або пароль", - "invalid_code": "Невірний код аутентифікації" - }, - "step": { - "init": { - "data": { - "password": "Пароль", - "username": "Логін" - } - }, - "mfa": { - "data": { - "code": "Код двофакторної аутентифікації" - }, - "description": "Відкрийте **{mfa_module_name}** на своєму пристрої, щоб переглянути свій двофакторний код автентифікації та підтвердити свою особу:" - } - } - }, - "homeassistant": { - "abort": { - "login_expired": "Сесія закінчилася, увійдіть знову." + "login_expired": "Час сеансу минув, Ви повинні увійти у систему знову." }, "error": { "invalid_auth": "Неправильне ім'я користувача або пароль", @@ -2716,7 +3287,30 @@ }, "mfa": { "data": { - "code": "Двофакторний ідентифікаційний код" + "code": "Код двофакторної ідентифікації" + }, + "description": "Відкрийте **{mfa_module_name}** на своєму пристрої, щоб переглянути свій двофакторний код автентифікації та підтвердити свою особу:" + } + } + }, + "homeassistant": { + "abort": { + "login_expired": "Час сеансу минув, Ви повинні увійти у систему знову." + }, + "error": { + "invalid_auth": "Неправильне ім'я користувача або пароль", + "invalid_code": "Невірний код автентифікації" + }, + "step": { + "init": { + "data": { + "password": "Пароль", + "username": "Ім'я користувача" + } + }, + "mfa": { + "data": { + "code": "Код двофакторної ідентифікації" }, "description": "Відкрийте **{mfa_module_name}** на своєму пристрої, щоб переглянути свій двофакторний код автентифікації та підтвердити свою особу:" } @@ -2724,23 +3318,23 @@ }, "legacy_api_password": { "abort": { - "login_expired": "Термін дії сесії закінчився, авторизуйтесь ще раз", - "no_api_password_set": "Ви не маєте налаштованого пароля API." + "login_expired": "Час сеансу минув, Ви повинні увійти у систему знову.", + "no_api_password_set": "Ви не налаштували пароль для API." }, "error": { "invalid_auth": "Невірний пароль API", - "invalid_code": "Невірний код авторизації" + "invalid_code": "Невірний код автентифікації" }, "step": { "init": { "data": { "password": "Пароль API" }, - "description": "Будь ласка, введіть пароль API у вашій конфігурацію http:" + "description": "Будь ласка, введіть пароль API, зазначений у Вашій конфігурації http:" }, "mfa": { "data": { - "code": "Двофакторний ідентифікаційний код" + "code": "Код двофакторної ідентифікації" }, "description": "Відкрийте **{mfa_module_name}** на своєму пристрої, щоб переглянути свій двофакторний код автентифікації та підтвердити свою особу:" } @@ -2766,8 +3360,8 @@ "working": "Будь ласка, зачекайте" }, "initializing": "Ініціалізація", - "logging_in_with": "Вхід з **{authProviderName}**.", - "pick_auth_provider": "Або увійти з" + "logging_in_with": "Провайдер аутентифікації: ** {authProviderName} **.", + "pick_auth_provider": "Або увійти за допомогою" }, "page-demo": { "cards": { @@ -2783,13 +3377,13 @@ "labels": { "activity": "Діяльність", "air": "Повітря", - "commute_home": "Їхати додому", + "commute_home": "Поїздка додому", "entertainment": "Розваги", "hdmi_input": "HDMI-вхід", "hdmi_switcher": "HDMI-перемикач", "information": "Інформація", - "lights": "Фари", - "morning_commute": "Їхати на роботу", + "lights": "Освітлення", + "morning_commute": "Поїздка на роботу", "total_tv_time": "Сумарний час перегляду", "turn_tv_off": "Вимкнути телевізор", "volume": "Гучність" @@ -2799,7 +3393,7 @@ "hallway": "Коридор", "kitchen": "Кухня", "left": "Ліворуч", - "master_bedroom": "Головна спальня", + "master_bedroom": "Спальня", "mirror": "Дзеркало", "patio": "Зона відпочинку", "right": "Праворуч", @@ -2807,7 +3401,7 @@ "upstairs": "Нагорі" }, "unit": { - "minutes_abbr": "хв", + "minutes_abbr": "хв.", "watching": "спостерігати" } } @@ -2817,20 +3411,20 @@ "core-config": { "button_detect": "Виявити", "finish": "Далі", - "intro": "Привіт {name}, Ласкаво просимо до Home Assistant. Як би ви хотіли назвати свій дім?", - "intro_location": "Ми хотіли б знати, де ви живете. Ця інформація допоможе нам відображати інформацію та налаштування, базуючись положенні сонця. Ці дані ніколи не передаються за межі вашої локальної мережі.", + "intro": "Привіт, {name}, Ласкаво просимо до Home Assistant. Як би ви хотіли назвати свій дім?", + "intro_location": "Ми хотіли б знати, де ви живете. Це допоможе нам правильно відображати інформацію і дозволить вам налаштовувати автоматизації на основі даних про світанок і захід сонця. Ці дані ніколи не будуть передані за межі локальної мережі.", "intro_location_detect": "Ми можемо допомогти вам заповнити цю інформацію, зробивши одноразовий запит до зовнішньої служби.", "location_name": "Назва інсталяції Home Assistant", "location_name_default": "Головна" }, "integration": { "finish": "Завершити", - "intro": "Пристрої та послуги в Home Assistant, які вимагають інтеграції з зовнішніми джерелами. Ви можете їх налаштувати зараз або зробити це пізніше на екрані конфігурації.", + "intro": "Пристрої та служби представлені в Home Assistant як інтеграції. Ви можете їх налаштувати зараз або зробити це пізніше в розділі налаштувань.", "more_integrations": "Більше" }, - "intro": "Ви готові розбудити свій будинок, повернути вашу конфіденційність і приєднатися до світової спільноти майстрів?", + "intro": "Чи готові Ви розбудити свій будинок, повернути свою конфіденційність і приєднатися до всесвітньої спільноти?", "restore": { - "description": "Крім того, ви можете відновити з попереднього знімка.", + "description": "Відновлення попереднього стану з образу файлової системи (snapshot)", "hide_log": "Приховати повний журнал", "in_progress": "Триває відновлення", "show_log": "Показати повний журнал" @@ -2848,39 +3442,43 @@ "required_fields": "Заповніть усі необхідні поля" }, "intro": "Почнемо зі створення облікового запису користувача.", - "required_field": "Необхідні" + "required_field": "Обов'язкове поле" } }, "profile": { "advanced_mode": { - "description": "Home Assistant за замовчуванням приховує розширені функції та параметри. Ви можете зробити ці функції доступними, перемкнувши цей перемикач. Це налаштування, орієнтоване на користувачів, і не впливає на інших користувачів, які використовують Home Assistant.", + "description": "Home Assistant за замовчуванням приховує розширені функції та параметри. Ви можете зробити ці функції доступними, перемкнувши цей перемикач. Це налаштування орієнтоване на поточного користувача, і не впливає на інших користувачів, які використовують Home Assistant.", "link_promo": "Дізнатися більше", "title": "Розширений режим" }, "change_password": { "confirm_new_password": "Підтвердьте новий пароль", "current_password": "Поточний пароль", - "error_required": "Необхідно", + "error_new_is_old": "Новий пароль повинен відрізнятися від поточного", + "error_new_mismatch": "Введений новий пароль не збігається", + "error_required": "Обов'язкове поле", "header": "Змінити пароль", "new_password": "Новий пароль", - "submit": "Відправити" + "submit": "Відправити", + "success": "Пароль успішно змінений" }, "current_user": "Ви ввійшли як {fullName}.", "customize_sidebar": { "button": "Редагувати", "description": "Ви також можете натиснути і утримувати заголовок бічної панелі, щоб активувати режим редагування.", - "header": "Змінення порядку та приховання елементів на бічній панелі" + "header": "Змінити елементи бічної панелі" }, "dashboard": { "description": "Виберіть інформаційну панель за замовчуванням для цього пристрою.", "dropdown_label": "Панель", - "header": "Панель" + "header": "Панель інтерфейсу користувача Lovelace" }, "enable_shortcuts": { + "description": "Комбінації клавіш для виконання різних дій в інтерфейсі користувача.", "header": "Гарячі клавіші" }, "force_narrow": { - "description": "Це дозволить приховати бічну панель за замовчуванням, як і для мобільних пристроїв.", + "description": "Це дозволить приховати бічну панель за замовчуванням, як для мобільних пристроїв.", "header": "Завжди приховувати бічну панель" }, "is_owner": "Ви є власником.", @@ -2897,17 +3495,17 @@ "create": "Створити токен", "create_failed": "Не вдалося створити токен доступу.", "created": "Створено {date}", - "created_at": "Створено в {date}", + "created_at": "Створено {date}", "delete_failed": "Не вдалося видалити токен доступу.", - "description": "Створюйте довгоіснуючі токени доступу, щоб ваші сценарії могли взаємодіяти з Home Assistant. Кожен токен буде дійсним протягом 10 років. Наступні довгоживучі токени доступу наразі активні.", + "description": "Створіть довгострокові токени доступу, щоб Ваші скрипти могли взаємодіяти з Home Assistant. Кожен токен буде дійсний протягом 10 років з моменту створення. Нижче Ви можете переглянути довгострокові токени доступу, які в даний час активні.", "empty_state": "У вас немає довгоіснуючих токенів доступу.", "header": "Токени довготермінового доступу", - "last_used": "Останнє використання в {date} з {location}", + "last_used": "Останнє використання {date} з {location}", "learn_auth_requests": "Дізнайтеся, як зробити аутентифіковані запити.", "name": "Назва", "not_used": "Ніколи не використовувався", - "prompt_copy_token": "Скопіюйте ваш токен доступу. Знову він не буде показаний.", - "prompt_name": "Назва" + "prompt_copy_token": "Скопіюйте Ваш токен доступу. Він більше не буде показаний.", + "prompt_name": "Назва токена" }, "mfa_setup": { "close": "Закрити", @@ -2920,31 +3518,33 @@ "confirm_disable": "Ви впевнені, що хочете вимкнути {name} ?", "disable": "Вимкнути", "enable": "Увімкнути", - "header": "Багатофакторна перевірка справжності модулів" + "header": "Модулі багатофакторної аутентифікації" }, "push_notifications": { "add_device_prompt": { - "input_label": "Ім'я пристрою" + "input_label": "Ім'я пристрою", + "title": "Як слід назвати цей пристрій?" }, - "description": "Надіслати сповіщення на цей пристрій.", + "description": "Надсилати сповіщення на цей пристрій.", "error_load_platform": "Налаштувати notify.html5.", - "error_use_https": "Потрібно ввімкнути SSL для інтерфейсу.", - "header": "Push-Повідомлення", + "error_use_https": "Потрібно увімкнути SSL для веб-інтерфейсу.", + "header": "Push-сповіщення", "link_promo": "Дізнатися більше", - "push_notifications": "Push-повідомлення" + "push_notifications": "Push-сповіщення" }, "refresh_tokens": { - "confirm_delete": "Ви впевнені, що хочете видалити токен оновлення для {name} ?", - "created_at": "Створений в {date}", + "confirm_delete": "Ви впевнені, що хочете видалити токен оновлення для {name}?", + "created_at": "Створений {date}", "current_token_tooltip": "Неможливо видалити поточний токен оновлення", "delete_failed": "Не вдалося видалити токен оновлення.", - "description": "Кожен токен оновлення відображає сеанс входу в систему. Токени оновлення автоматично видалятимуться, коли ви натиснете вийти. Наступні токени оновлення доступні для вашого облікового запису.", + "description": "Кожен токен оновлення означає виконаний вхід в систему. Токен оновлення поточного сеансу користувача буде автоматично видалений при натисканні кнопки виходу з системи. Нижче Ви можете переглянути токени поновлення, які в даний час активні для Вашого облікового запису.", "header": "Токени оновлення", - "last_used": "Останнє використання в {date} з {location}", + "last_used": "Останнє використання {date} з {location}", "not_used": "Ніколи не використовувався", "token_title": "Оновити токен для {clientId}" }, "suspend": { + "description": "Закрити з'єднання з сервером, якщо вікно було приховано в протягом п'яти і більше хвилин", "header": "Автоматично закривати з'єднання" }, "themes": { @@ -2962,10 +3562,13 @@ "reset": "Скинути" }, "vibrate": { - "description": "Увімкнення або вимкнення вібрації на цьому пристрої під час керування пристроями.", + "description": "Отримувати тактильний відгук при управлінні пристроями", "header": "Вібрувати" } }, + "shopping_list": { + "start_conversation": "Почати діалог" + }, "shopping-list": { "add_item": "Додати елемент", "clear_completed": "Очистити позначені елементи", @@ -2973,9 +3576,9 @@ } }, "sidebar": { - "done": "Готово.", - "external_app_configuration": "Конфігурація застосунку", - "sidebar_toggle": "Переключити бічну панель" + "done": "Готово", + "external_app_configuration": "Конфігурація додатку", + "sidebar_toggle": "Перемикач в бічній панелі" } } } \ No newline at end of file From 916a5c1a6b6d8055c0510cd5c5a26d7a10fdb3b3 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 00:31:42 +0100 Subject: [PATCH 004/115] Make it clearer that we are looking for the YAML card config --- .github/ISSUE_TEMPLATE/BUG_REPORT.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.md b/.github/ISSUE_TEMPLATE/BUG_REPORT.md index b4b130f671..d39c915ccd 100644 --- a/.github/ISSUE_TEMPLATE/BUG_REPORT.md +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.md @@ -74,12 +74,12 @@ DO NOT DELETE ANY TEXT from this template! Otherwise, your issue may be closed w ``` -## Problem-relevant configuration +## Problem-relevant frontend configuration ```yaml @@ -89,7 +89,7 @@ DO NOT DELETE ANY TEXT from this template! Otherwise, your issue may be closed w ## Javascript errors shown in your browser console/inspector From 2113ea675efe087a2c414836a701730ba48ec6d9 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 09:17:17 +0100 Subject: [PATCH 005/115] Prevent relative time text wrapping in more-info-sun (#8051) --- src/dialogs/more-info/controls/more-info-sun.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/dialogs/more-info/controls/more-info-sun.ts b/src/dialogs/more-info/controls/more-info-sun.ts index c5e26348e7..b480045643 100644 --- a/src/dialogs/more-info/controls/more-info-sun.ts +++ b/src/dialogs/more-info/controls/more-info-sun.ts @@ -80,6 +80,7 @@ class MoreInfoSun extends LitElement { } ha-relative-time { display: inline-block; + white-space: nowrap; } ha-relative-time::first-letter { text-transform: lowercase; From 7f840e75df59f59aa3f48177ac027771671ed53d Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 09:18:08 +0100 Subject: [PATCH 006/115] Add EN fallback text for dismiss button (#8068) --- src/state/disconnect-toast-mixin.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/state/disconnect-toast-mixin.ts b/src/state/disconnect-toast-mixin.ts index a579d3b5d6..8751e47824 100644 --- a/src/state/disconnect-toast-mixin.ts +++ b/src/state/disconnect-toast-mixin.ts @@ -33,7 +33,8 @@ export default >(superClass: T) => duration: 0, dismissable: false, action: { - text: this.hass!.localize("ui.notification_toast.dismiss"), + text: + this.hass!.localize("ui.notification_toast.dismiss") || "Dismiss", action: () => {}, }, }); From 775e93d54b606f23214f53acb8dc3de372e6592b Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 09:24:51 +0100 Subject: [PATCH 007/115] Ensure consistent number display for gauge (#8080) --- src/panels/lovelace/cards/hui-gauge-card.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/panels/lovelace/cards/hui-gauge-card.ts b/src/panels/lovelace/cards/hui-gauge-card.ts index 47be53b049..cecfa156a6 100644 --- a/src/panels/lovelace/cards/hui-gauge-card.ts +++ b/src/panels/lovelace/cards/hui-gauge-card.ts @@ -122,12 +122,14 @@ class HuiGaugeCard extends LitElement implements LovelaceCard { `; } + // Use `stateObj.state` as value to keep formatting (e.g trailing zeros) + // for consistent value display across gauge, entity, entity-row, etc. return html` Date: Mon, 4 Jan 2021 09:58:07 +0100 Subject: [PATCH 008/115] Show actual error path/key in YAML card editor (#8076) --- src/panels/lovelace/common/structs/handle-errors.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/panels/lovelace/common/structs/handle-errors.ts b/src/panels/lovelace/common/structs/handle-errors.ts index 7205025fc6..b97ae217b1 100644 --- a/src/panels/lovelace/common/structs/handle-errors.ts +++ b/src/panels/lovelace/common/structs/handle-errors.ts @@ -8,7 +8,7 @@ export const handleStructError = (err: Error): string[] => { for (const failure of err.failures()) { if (failure.type === "never") { errors.push( - `Key "${failure.path[0]}" is not supported by the UI editor.` + `Key "${failure.path.join(".")}" is not supported by the UI editor.` ); } else { errors.push( From e6d38f453965e2853955113dd1676a8f5b14903f Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 10:04:14 +0100 Subject: [PATCH 009/115] Fix incorrect date selection ranges for history and logbook (#8045) --- src/panels/history/ha-panel-history.ts | 28 ++++++++++---------------- src/panels/logbook/ha-panel-logbook.ts | 28 ++++++++++---------------- 2 files changed, 22 insertions(+), 34 deletions(-) diff --git a/src/panels/history/ha-panel-history.ts b/src/panels/history/ha-panel-history.ts index 566aa3c0da..dcfa327285 100644 --- a/src/panels/history/ha-panel-history.ts +++ b/src/panels/history/ha-panel-history.ts @@ -119,27 +119,21 @@ class HaPanelHistory extends LitElement { todayEnd.setDate(todayEnd.getDate() + 1); todayEnd.setMilliseconds(todayEnd.getMilliseconds() - 1); - const todayCopy = new Date(today); - - const yesterday = new Date(todayCopy.setDate(today.getDate() - 1)); - const yesterdayEnd = new Date(yesterday); - yesterdayEnd.setDate(yesterdayEnd.getDate() + 1); + const yesterday = new Date(today); + yesterday.setDate(today.getDate() - 1); + const yesterdayEnd = new Date(today); yesterdayEnd.setMilliseconds(yesterdayEnd.getMilliseconds() - 1); - const thisWeekStart = new Date( - todayCopy.setDate(today.getDate() - today.getDay()) - ); - const thisWeekEnd = new Date( - todayCopy.setDate(thisWeekStart.getDate() + 7) - ); + const thisWeekStart = new Date(today); + thisWeekStart.setDate(today.getDate() - today.getDay()); + const thisWeekEnd = new Date(thisWeekStart); + thisWeekEnd.setDate(thisWeekStart.getDate() + 7); thisWeekEnd.setMilliseconds(thisWeekEnd.getMilliseconds() - 1); - const lastWeekStart = new Date( - todayCopy.setDate(today.getDate() - today.getDay() - 7) - ); - const lastWeekEnd = new Date( - todayCopy.setDate(lastWeekStart.getDate() + 7) - ); + const lastWeekStart = new Date(today); + lastWeekStart.setDate(today.getDate() - today.getDay() - 7); + const lastWeekEnd = new Date(lastWeekStart); + lastWeekEnd.setDate(lastWeekStart.getDate() + 7); lastWeekEnd.setMilliseconds(lastWeekEnd.getMilliseconds() - 1); this._ranges = { diff --git a/src/panels/logbook/ha-panel-logbook.ts b/src/panels/logbook/ha-panel-logbook.ts index 87e1b1f519..f9054ff86e 100644 --- a/src/panels/logbook/ha-panel-logbook.ts +++ b/src/panels/logbook/ha-panel-logbook.ts @@ -147,27 +147,21 @@ export class HaPanelLogbook extends LitElement { todayEnd.setDate(todayEnd.getDate() + 1); todayEnd.setMilliseconds(todayEnd.getMilliseconds() - 1); - const todayCopy = new Date(today); - - const yesterday = new Date(todayCopy.setDate(today.getDate() - 1)); - const yesterdayEnd = new Date(yesterday); - yesterdayEnd.setDate(yesterdayEnd.getDate() + 1); + const yesterday = new Date(today); + yesterday.setDate(today.getDate() - 1); + const yesterdayEnd = new Date(today); yesterdayEnd.setMilliseconds(yesterdayEnd.getMilliseconds() - 1); - const thisWeekStart = new Date( - todayCopy.setDate(today.getDate() - today.getDay()) - ); - const thisWeekEnd = new Date( - todayCopy.setDate(thisWeekStart.getDate() + 7) - ); + const thisWeekStart = new Date(today); + thisWeekStart.setDate(today.getDate() - today.getDay()); + const thisWeekEnd = new Date(thisWeekStart); + thisWeekEnd.setDate(thisWeekStart.getDate() + 7); thisWeekEnd.setMilliseconds(thisWeekEnd.getMilliseconds() - 1); - const lastWeekStart = new Date( - todayCopy.setDate(today.getDate() - today.getDay() - 7) - ); - const lastWeekEnd = new Date( - todayCopy.setDate(lastWeekStart.getDate() + 7) - ); + const lastWeekStart = new Date(today); + lastWeekStart.setDate(today.getDate() - today.getDay() - 7); + const lastWeekEnd = new Date(lastWeekStart); + lastWeekEnd.setDate(lastWeekStart.getDate() + 7); lastWeekEnd.setMilliseconds(lastWeekEnd.getMilliseconds() - 1); this._ranges = { From dcb2605de434849084f103444780bcbb399e50f3 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 10:28:25 +0100 Subject: [PATCH 010/115] Add Bengali language (#8014) --- src/translations/translationMetadata.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/translations/translationMetadata.json b/src/translations/translationMetadata.json index 80d5db1223..285d9265d8 100644 --- a/src/translations/translationMetadata.json +++ b/src/translations/translationMetadata.json @@ -9,6 +9,9 @@ "bg": { "nativeName": "Български" }, + "bn": { + "nativeName": "বাংলা" + }, "bs": { "nativeName": "Bosanski" }, From d5a77ef3cd7029934d367ed1f7b4af434e265b97 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 10:53:40 +0100 Subject: [PATCH 011/115] Treat zero as String in number selector (#8070) --- src/panels/config/automation/blueprint-automation-editor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/panels/config/automation/blueprint-automation-editor.ts b/src/panels/config/automation/blueprint-automation-editor.ts index 570d4cee7b..6755816afe 100644 --- a/src/panels/config/automation/blueprint-automation-editor.ts +++ b/src/panels/config/automation/blueprint-automation-editor.ts @@ -165,7 +165,7 @@ export class HaBlueprintAutomationEditor extends LitElement { .selector=${value.selector} .key=${key} .value=${(this.config.use_blueprint.input && - this.config.use_blueprint.input[key]) || + this.config.use_blueprint.input[key]) ?? value?.default} @value-changed=${this._inputChanged} >` From fab68055bf8501512a80017f59ded5f48957f4b8 Mon Sep 17 00:00:00 2001 From: Charles Garwood Date: Mon, 4 Jan 2021 04:57:25 -0500 Subject: [PATCH 012/115] OZW Panel: Don't show an empty wakeup card (#8064) --- .../ozw/ozw-node-dashboard.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/panels/config/integrations/integration-panels/ozw/ozw-node-dashboard.ts b/src/panels/config/integrations/integration-panels/ozw/ozw-node-dashboard.ts index 38f94c906f..20f49cf0bb 100644 --- a/src/panels/config/integrations/integration-panels/ozw/ozw-node-dashboard.ts +++ b/src/panels/config/integrations/integration-panels/ozw/ozw-node-dashboard.ts @@ -141,11 +141,15 @@ class OZWNodeDashboard extends LitElement { ${this._metadata.metadata.ResetHelp} - -
- ${this._metadata.metadata.WakeupHelp} -
-
+ ${this._metadata.metadata.WakeupHelp + ? html` + +
+ ${this._metadata.metadata.WakeupHelp} +
+
+ ` + : ``} ` : ``} ` @@ -199,6 +203,10 @@ class OZWNodeDashboard extends LitElement { margin-top: 24px; } + .content:last-child { + margin-bottom: 24px; + } + .sectionHeader { position: relative; padding-right: 40px; From 6fb206853c32acbf8fa6100348ff48ecac9f6930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ab=C3=ADlio=20Costa?= Date: Mon, 4 Jan 2021 13:03:12 +0000 Subject: [PATCH 013/115] Switch header sizes for ZHA pairing status card (#8078) Since the top title shows the result of the previous step ("Interview Complete", "Configuration Complete", etc), while the second title shows the current step ("Configuring", "Initializing", etc), having the top title bigger would draw attention to it. So a user could see "Configuration Complete" and assume pairing is done. This change makes the second title bigger than the top one, so that the user focus on the step that is in progress. --- .../zha/zha-device-pairing-status-card.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/panels/config/integrations/integration-panels/zha/zha-device-pairing-status-card.ts b/src/panels/config/integrations/integration-panels/zha/zha-device-pairing-status-card.ts index c6b4181e85..907bb2a024 100644 --- a/src/panels/config/integrations/integration-panels/zha/zha-device-pairing-status-card.ts +++ b/src/panels/config/integrations/integration-panels/zha/zha-device-pairing-status-card.ts @@ -49,19 +49,17 @@ class ZHADevicePairingStatusCard extends LitElement { class="discovered ${classMap({ initialized: this.device.pairing_status === INITIALIZED, })}" - >
-

+ >
+

${this.hass!.localize( `ui.panel.config.zha.device_pairing_card.${this.device.pairing_status}` )} -

-

+

+

${this.hass!.localize( `ui.panel.config.zha.device_pairing_card.${this.device.pairing_status}_status_text` )} -

+

${[INTERVIEW_COMPLETE, CONFIGURED].includes( From 05057ade0524234f256c75b66db355576595a9af Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 14:04:54 +0100 Subject: [PATCH 014/115] Catch navigator.clipboard errors (#7942) Co-authored-by: Bram Kragten --- src/common/util/copy-clipboard.ts | 23 ++++++++----- .../config/automation/ha-automation-editor.ts | 7 ++-- src/panels/config/info/system-health-card.ts | 8 +++-- .../config/logs/dialog-system-log-detail.ts | 33 ++++--------------- src/panels/config/script/ha-script-editor.ts | 7 ++-- src/translations/en.json | 3 +- 6 files changed, 38 insertions(+), 43 deletions(-) diff --git a/src/common/util/copy-clipboard.ts b/src/common/util/copy-clipboard.ts index 3c89e40982..1708858c85 100644 --- a/src/common/util/copy-clipboard.ts +++ b/src/common/util/copy-clipboard.ts @@ -1,12 +1,17 @@ -export const copyToClipboard = (str) => { +export const copyToClipboard = async (str) => { if (navigator.clipboard) { - navigator.clipboard.writeText(str); - } else { - const el = document.createElement("textarea"); - el.value = str; - document.body.appendChild(el); - el.select(); - document.execCommand("copy"); - document.body.removeChild(el); + try { + await navigator.clipboard.writeText(str); + return; + } catch { + // just continue with the fallback coding below + } } + + const el = document.createElement("textarea"); + el.value = str; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + document.body.removeChild(el); }; diff --git a/src/panels/config/automation/ha-automation-editor.ts b/src/panels/config/automation/ha-automation-editor.ts index fed4eb04a5..996daed173 100644 --- a/src/panels/config/automation/ha-automation-editor.ts +++ b/src/panels/config/automation/ha-automation-editor.ts @@ -395,9 +395,12 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) { return cleanConfig; } - private async _copyYaml() { + private async _copyYaml(): Promise { if (this._editor?.yaml) { - copyToClipboard(this._editor.yaml); + await copyToClipboard(this._editor.yaml); + showToast(this, { + message: this.hass.localize("ui.common.copied_clipboard"), + }); } } diff --git a/src/panels/config/info/system-health-card.ts b/src/panels/config/info/system-health-card.ts index 95947cce0d..44b3d4d3e3 100644 --- a/src/panels/config/info/system-health-card.ts +++ b/src/panels/config/info/system-health-card.ts @@ -197,7 +197,7 @@ class SystemHealthCard extends LitElement { }); } - private _copyInfo(ev: CustomEvent): void { + private async _copyInfo(ev: CustomEvent): Promise { const github = ev.detail.index === 1; let haContent: string | undefined; const domainParts: string[] = []; @@ -250,13 +250,15 @@ class SystemHealthCard extends LitElement { } } - copyToClipboard( + await copyToClipboard( `${github ? "## " : ""}System Health\n${haContent}\n\n${domainParts.join( "\n\n" )}` ); - showToast(this, { message: this.hass.localize("ui.common.copied") }); + showToast(this, { + message: this.hass.localize("ui.common.copied_clipboard"), + }); } static get styles(): CSSResult { diff --git a/src/panels/config/logs/dialog-system-log-detail.ts b/src/panels/config/logs/dialog-system-log-detail.ts index 320657f8c4..e3acd3f5f1 100644 --- a/src/panels/config/logs/dialog-system-log-detail.ts +++ b/src/panels/config/logs/dialog-system-log-detail.ts @@ -2,7 +2,6 @@ import "../../../components/ha-header-bar"; import "@material/mwc-icon-button/mwc-icon-button"; import { mdiContentCopy, mdiClose } from "@mdi/js"; import "@polymer/paper-tooltip/paper-tooltip"; -import type { PaperTooltipElement } from "@polymer/paper-tooltip/paper-tooltip"; import { css, CSSResult, @@ -10,10 +9,10 @@ import { internalProperty, LitElement, property, - query, TemplateResult, } from "lit-element"; import { fireEvent } from "../../../common/dom/fire_event"; +import { copyToClipboard } from "../../../common/util/copy-clipboard"; import "../../../components/ha-dialog"; import "../../../components/ha-svg-icon"; import { @@ -27,6 +26,7 @@ import { haStyleDialog } from "../../../resources/styles"; import type { HomeAssistant } from "../../../types"; import type { SystemLogDetailDialogParams } from "./show-dialog-system-log-detail"; import { formatSystemLogTime } from "./util"; +import { showToast } from "../../../util/toast"; class DialogSystemLogDetail extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; @@ -35,8 +35,6 @@ class DialogSystemLogDetail extends LitElement { @internalProperty() private _manifest?: IntegrationManifest; - @query("paper-tooltip") private _toolTip?: PaperTooltipElement; - public async showDialog(params: SystemLogDetailDialogParams): Promise { this._params = params; this._manifest = undefined; @@ -83,15 +81,6 @@ class DialogSystemLogDetail extends LitElement { - ${this.hass.localize("ui.common.copied")}

@@ -162,23 +151,15 @@ class DialogSystemLogDetail extends LitElement { } } - private _copyLog(): void { + private async _copyLog(): Promise { const copyElement = this.shadowRoot?.querySelector( ".contents" ) as HTMLElement; - const selection = window.getSelection()!; - const range = document.createRange(); - - range.selectNodeContents(copyElement); - selection.removeAllRanges(); - selection.addRange(range); - - document.execCommand("copy"); - window.getSelection()!.removeAllRanges(); - - this._toolTip!.show(); - setTimeout(() => this._toolTip?.hide(), 3000); + await copyToClipboard(copyElement.innerText); + showToast(this, { + message: this.hass.localize("ui.common.copied_clipboard"), + }); } static get styles(): CSSResult[] { diff --git a/src/panels/config/script/ha-script-editor.ts b/src/panels/config/script/ha-script-editor.ts index 8683d5d31f..76c0f886b0 100644 --- a/src/panels/config/script/ha-script-editor.ts +++ b/src/panels/config/script/ha-script-editor.ts @@ -544,9 +544,12 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) { return this._config; } - private async _copyYaml() { + private async _copyYaml(): Promise { if (this._editor?.yaml) { - copyToClipboard(this._editor.yaml); + await copyToClipboard(this._editor.yaml); + showToast(this, { + message: this.hass.localize("ui.common.copied_clipboard"), + }); } } diff --git a/src/translations/en.json b/src/translations/en.json index 31afc3d882..3dab7355de 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -291,7 +291,8 @@ "successfully_saved": "Successfully saved", "successfully_deleted": "Successfully deleted", "error_required": "Required", - "copied": "Copied" + "copied": "Copied", + "copied_clipboard": "Copied to clipboard" }, "components": { "logbook": { From 4a61779aba2ab73e23e103cc47bb84b5cb266a9f Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 15:01:25 +0100 Subject: [PATCH 015/115] Ensure YAML editor gets updated during action change / deletion (#8024) Co-authored-by: Bram Kragten --- .../config/automation/action/ha-automation-action-row.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/panels/config/automation/action/ha-automation-action-row.ts b/src/panels/config/automation/action/ha-automation-action-row.ts index 4cc20c8c04..9644803d3d 100644 --- a/src/panels/config/automation/action/ha-automation-action-row.ts +++ b/src/panels/config/automation/action/ha-automation-action-row.ts @@ -15,12 +15,14 @@ import { LitElement, property, PropertyValues, + query, } from "lit-element"; import { dynamicElement } from "../../../../common/dom/dynamic-element-directive"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/ha-button-menu"; import "../../../../components/ha-card"; import "../../../../components/ha-svg-icon"; +import type { HaYamlEditor } from "../../../../components/ha-yaml-editor"; import type { Action } from "../../../../data/script"; import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box"; import { haStyle } from "../../../../resources/styles"; @@ -103,6 +105,8 @@ export default class HaAutomationActionRow extends LitElement { @internalProperty() private _yamlMode = false; + @query("ha-yaml-editor") private _yamlEditor?: HaYamlEditor; + protected updated(changedProperties: PropertyValues) { if (!changedProperties.has("action")) { return; @@ -111,6 +115,10 @@ export default class HaAutomationActionRow extends LitElement { if (!this._uiModeAvailable && !this._yamlMode) { this._yamlMode = true; } + + if (this._yamlMode && this._yamlEditor) { + this._yamlEditor.setValue(this.action); + } } protected render() { From 0208b50ac7169105ea164784792f9f8b85048909 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 18:02:01 +0100 Subject: [PATCH 016/115] Disable counter buttons if entity is unavailable (#8084) --- .../more-info/controls/more-info-counter.ts | 18 +++++++++++++----- .../more-info/controls/more-info-person.ts | 2 +- .../more-info/controls/more-info-timer.ts | 3 +-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/dialogs/more-info/controls/more-info-counter.ts b/src/dialogs/more-info/controls/more-info-counter.ts index 6439386425..64353f0407 100644 --- a/src/dialogs/more-info/controls/more-info-counter.ts +++ b/src/dialogs/more-info/controls/more-info-counter.ts @@ -10,6 +10,7 @@ import { TemplateResult, } from "lit-element"; import { HomeAssistant } from "../../../types"; +import { UNAVAILABLE_STATES } from "../../../data/entity"; @customElement("more-info-counter") class MoreInfoCounter extends LitElement { @@ -22,21 +23,29 @@ class MoreInfoCounter extends LitElement { return html``; } + const disabled = UNAVAILABLE_STATES.includes(this.stateObj!.state); + return html`

${this.hass!.localize("ui.card.counter.actions.increment")} ${this.hass!.localize("ui.card.counter.actions.decrement")} - + ${this.hass!.localize("ui.card.counter.actions.reset")}
@@ -53,8 +62,7 @@ class MoreInfoCounter extends LitElement { static get styles(): CSSResult { return css` .actions { - margin: 0; - padding-top: 20px; + margin: 8px 0; display: flex; flex-wrap: wrap; justify-content: center; diff --git a/src/dialogs/more-info/controls/more-info-person.ts b/src/dialogs/more-info/controls/more-info-person.ts index 84fa6a733b..4caa2ea3d3 100644 --- a/src/dialogs/more-info/controls/more-info-person.ts +++ b/src/dialogs/more-info/controls/more-info-person.ts @@ -75,7 +75,7 @@ class MoreInfoPerson extends LitElement { justify-content: space-between; } .actions { - margin: 36px 0 8px 0; + margin: 8px 0; text-align: right; } ha-map { diff --git a/src/dialogs/more-info/controls/more-info-timer.ts b/src/dialogs/more-info/controls/more-info-timer.ts index 3ffa9c5b16..80f8819009 100644 --- a/src/dialogs/more-info/controls/more-info-timer.ts +++ b/src/dialogs/more-info/controls/more-info-timer.ts @@ -76,8 +76,7 @@ class MoreInfoTimer extends LitElement { static get styles(): CSSResult { return css` .actions { - margin: 0; - padding-top: 20px; + margin: 8px 0; display: flex; flex-wrap: wrap; justify-content: center; From a0de209a55b833b22deb02ecf27d4daeeb690d08 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 18:05:30 +0100 Subject: [PATCH 017/115] Aligned gallery more-info with hui-cards (#7931) --- gallery/src/components/demo-more-info.js | 47 ++++++++++++----------- gallery/src/components/demo-more-infos.js | 45 +++++++++++++++++----- 2 files changed, 61 insertions(+), 31 deletions(-) diff --git a/gallery/src/components/demo-more-info.js b/gallery/src/components/demo-more-info.js index 77e8161f6c..49605c3a16 100644 --- a/gallery/src/components/demo-more-info.js +++ b/gallery/src/components/demo-more-info.js @@ -9,30 +9,29 @@ class DemoMoreInfo extends PolymerElement { static get template() { return html` - - +
+
+ + - - - + + +
+ +
`; } diff --git a/gallery/src/components/demo-more-infos.js b/gallery/src/components/demo-more-infos.js index f1de5f0908..55b7e84777 100644 --- a/gallery/src/components/demo-more-infos.js +++ b/gallery/src/components/demo-more-infos.js @@ -3,12 +3,18 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; /* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../src/components/ha-switch"; +import "../../../src/components/ha-formfield"; import "./demo-more-info"; +import { applyThemesOnElement } from "../../../src/common/dom/apply_themes_on_element"; class DemoMoreInfos extends PolymerElement { static get template() { return html`
- Show entity + + + + + + +
-
- +
+
+ +
`; } @@ -51,6 +68,16 @@ class DemoMoreInfos extends PolymerElement { }, }; } + + _showConfigToggled(ev) { + this._showConfig = ev.target.checked; + } + + _darkThemeToggled(ev) { + applyThemesOnElement(this.$.container, { themes: {} }, "default", { + dark: ev.target.checked, + }); + } } customElements.define("demo-more-infos", DemoMoreInfos); From a3fdfe0e15cbd5ea50bce55f4f663e6d23a44e31 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 18:06:47 +0100 Subject: [PATCH 018/115] Add additional entities to gallery more-info-light (#7930) --- gallery/src/demos/demo-more-info-light.ts | 34 +++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/gallery/src/demos/demo-more-info-light.ts b/gallery/src/demos/demo-more-info-light.ts index 70b77560d9..6cad59bfc5 100644 --- a/gallery/src/demos/demo-more-info-light.ts +++ b/gallery/src/demos/demo-more-info-light.ts @@ -2,7 +2,15 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; /* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../src/components/ha-card"; -import { SUPPORT_BRIGHTNESS } from "../../../src/data/light"; +import { + SUPPORT_BRIGHTNESS, + SUPPORT_COLOR_TEMP, + SUPPORT_EFFECT, + SUPPORT_FLASH, + SUPPORT_COLOR, + SUPPORT_TRANSITION, + SUPPORT_WHITE_VALUE, +} from "../../../src/data/light"; import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-more-infos"; @@ -14,9 +22,31 @@ const ENTITIES = [ }), getEntity("light", "kitchen_light", "on", { friendly_name: "Brightness Light", - brightness: 80, + brightness: 200, supported_features: SUPPORT_BRIGHTNESS, }), + getEntity("light", "color_temperature_light", "on", { + friendly_name: "White Color Temperature Light", + brightness: 128, + color_temp: 75, + min_mireds: 30, + max_mireds: 150, + supported_features: SUPPORT_BRIGHTNESS + SUPPORT_COLOR_TEMP, + }), + getEntity("light", "color_effectslight", "on", { + friendly_name: "Color Effets Light", + brightness: 255, + hs_color: [30, 100], + white_value: 36, + supported_features: + SUPPORT_BRIGHTNESS + + SUPPORT_EFFECT + + SUPPORT_FLASH + + SUPPORT_COLOR + + SUPPORT_TRANSITION + + SUPPORT_WHITE_VALUE, + effect_list: ["random", "colorloop"], + }), ]; class DemoMoreInfoLight extends PolymerElement { From 2c2226dfd67719e574f19cafd7e77847c9745b5b Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 19:51:30 +0100 Subject: [PATCH 019/115] Slightly increase max attribute value width (#8085) --- src/components/ha-attributes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ha-attributes.ts b/src/components/ha-attributes.ts index 593d1bcb0e..a851f4bc47 100644 --- a/src/components/ha-attributes.ts +++ b/src/components/ha-attributes.ts @@ -63,7 +63,7 @@ class HaAttributes extends LitElement { justify-content: space-between; } .data-entry .value { - max-width: 50%; + max-width: 60%; overflow-wrap: break-word; text-align: right; } From 13b69bff1b812e682da9a0f50e14abdcef2aab58 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 20:55:43 +0100 Subject: [PATCH 020/115] Translate timestamp-display errors + tiny tweaks (#8086) * Translate timestamp-display errors + tiny tweaks * Adjust translation key --- src/panels/lovelace/components/hui-timestamp-display.ts | 8 ++++++-- src/panels/lovelace/create-element/create-row-element.ts | 2 +- src/panels/lovelace/entity-rows/hui-sensor-entity-row.ts | 2 +- src/translations/en.json | 6 ++++++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/panels/lovelace/components/hui-timestamp-display.ts b/src/panels/lovelace/components/hui-timestamp-display.ts index 4aaa8a25eb..20583e94a6 100644 --- a/src/panels/lovelace/components/hui-timestamp-display.ts +++ b/src/panels/lovelace/components/hui-timestamp-display.ts @@ -57,7 +57,9 @@ class HuiTimestampDisplay extends LitElement { } if (isNaN(this.ts.getTime())) { - return html` Invalid date `; + return html`${this.hass.localize( + "ui.panel.lovelace.components.timestamp-display.invalid" + )}`; } const format = this._format; @@ -68,7 +70,9 @@ class HuiTimestampDisplay extends LitElement { if (format in FORMATS) { return html` ${FORMATS[format](this.ts, this.hass.language)} `; } - return html` Invalid format `; + return html`${this.hass.localize( + "ui.panel.lovelace.components.timestamp-display.invalid_format" + )}`; } protected updated(changedProperties: PropertyValues): void { diff --git a/src/panels/lovelace/create-element/create-row-element.ts b/src/panels/lovelace/create-element/create-row-element.ts index f697b89adf..b7e54b81b1 100644 --- a/src/panels/lovelace/create-element/create-row-element.ts +++ b/src/panels/lovelace/create-element/create-row-element.ts @@ -71,7 +71,7 @@ const DOMAIN_TO_ELEMENT_TYPE = { switch: "toggle", vacuum: "toggle", // Temporary. Once climate is rewritten, - // water heater should get it's own row. + // water heater should get its own row. water_heater: "climate", input_datetime: "input-datetime", weather: "weather", diff --git a/src/panels/lovelace/entity-rows/hui-sensor-entity-row.ts b/src/panels/lovelace/entity-rows/hui-sensor-entity-row.ts index 52c644788d..68a736caa7 100644 --- a/src/panels/lovelace/entity-rows/hui-sensor-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-sensor-entity-row.ts @@ -25,7 +25,7 @@ import { handleAction } from "../common/handle-action"; import { UNAVAILABLE_STATES } from "../../../data/entity"; interface SensorEntityConfig extends EntitiesCardEntityConfig { - format?: "relative" | "date" | "time" | "datetime"; + format?: "relative" | "total" | "date" | "time" | "datetime"; } @customElement("hui-sensor-entity-row") diff --git a/src/translations/en.json b/src/translations/en.json index 3dab7355de..9411c14584 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -2834,6 +2834,12 @@ "changed_toast": { "message": "The Lovelace UI configuration for this dashboard was updated. Refresh to see changes?" }, + "components": { + "timestamp-display": { + "invalid": "Invalid timestamp", + "invalid_format": "Invalid display format" + } + }, "reload_lovelace": "Reload UI" }, "mailbox": { From 42f0101440da1a632489634f0a34d843ccd06aa5 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 4 Jan 2021 22:10:58 +0100 Subject: [PATCH 021/115] Add gallery demo for plant card (#7989) --- gallery/src/data/plants.ts | 72 +++++++++++++++++++++++ gallery/src/demos/demo-hui-glance-card.ts | 4 +- gallery/src/demos/demo-hui-plant-card.ts | 55 +++++++++++++++++ 3 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 gallery/src/data/plants.ts create mode 100644 gallery/src/demos/demo-hui-plant-card.ts diff --git a/gallery/src/data/plants.ts b/gallery/src/data/plants.ts new file mode 100644 index 0000000000..362afaac78 --- /dev/null +++ b/gallery/src/data/plants.ts @@ -0,0 +1,72 @@ +import { getEntity } from "../../../src/fake_data/entity"; + +export const createPlantEntities = () => [ + getEntity("plant", "lemon_tree", "ok", { + problem: "none", + sensors: { + moisture: "sensor.lemon_tree_moisture", + battery: "sensor.lemon_tree_battery", + temperature: "sensor.lemon_tree_temperature", + conductivity: "sensor.lemon_tree_conductivity", + brightness: "sensor.lemon_tree_brightness", + }, + unit_of_measurement_dict: { + temperature: "°C", + moisture: "%", + brightness: "lx", + battery: "%", + conductivity: "μS/cm", + }, + moisture: 54, + battery: 95, + temperature: 15.6, + conductivity: 1, + brightness: 12, + max_brightness: 20, + friendly_name: "Lemon Tree", + }), + getEntity("plant", "apple_tree", "ok", { + problem: "brightness", + sensors: { + moisture: "sensor.apple_tree_moisture", + battery: "sensor.apple_tree_battery", + temperature: "sensor.apple_tree_temperature", + conductivity: "sensor.apple_tree_conductivity", + brightness: "sensor.apple_tree_brightness", + }, + unit_of_measurement_dict: { + temperature: "°C", + moisture: "%", + brightness: "lx", + battery: "%", + conductivity: "μS/cm", + }, + moisture: 54, + battery: 2, + temperature: 15.6, + conductivity: 1, + brightness: 25, + max_brightness: 20, + friendly_name: "Apple Tree", + }), + getEntity("plant", "sunflowers", "ok", { + problem: "moisture, temperature, conductivity", + sensors: { + moisture: "sensor.sunflowers_moisture", + temperature: "sensor.sunflowers_temperature", + conductivity: "sensor.sunflowers_conductivity", + brightness: "sensor.sunflowers_brightness", + }, + unit_of_measurement_dict: { + temperature: "°C", + moisture: "%", + brightness: "lx", + conductivity: "μS/cm", + }, + moisture: 54, + temperature: 15.6, + conductivity: 1, + brightness: 25, + entity_picture: "/images/sunflowers.jpg", + }), +]; diff --git a/gallery/src/demos/demo-hui-glance-card.ts b/gallery/src/demos/demo-hui-glance-card.ts index 5455232a3d..f28c4ef7b4 100644 --- a/gallery/src/demos/demo-hui-glance-card.ts +++ b/gallery/src/demos/demo-hui-glance-card.ts @@ -218,7 +218,7 @@ const CONFIGS = [ }, ]; -class DemoPicEntity extends PolymerElement { +class DemoGlanceEntity extends PolymerElement { static get template() { return html` `; } @@ -240,4 +240,4 @@ class DemoPicEntity extends PolymerElement { } } -customElements.define("demo-hui-glance-card", DemoPicEntity); +customElements.define("demo-hui-glance-card", DemoGlanceEntity); diff --git a/gallery/src/demos/demo-hui-plant-card.ts b/gallery/src/demos/demo-hui-plant-card.ts new file mode 100644 index 0000000000..7df7f1c9f2 --- /dev/null +++ b/gallery/src/demos/demo-hui-plant-card.ts @@ -0,0 +1,55 @@ +import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ +import { PolymerElement } from "@polymer/polymer/polymer-element"; +import { provideHass } from "../../../src/fake_data/provide_hass"; +import "../components/demo-cards"; +import { createPlantEntities } from "../data/plants"; + +const CONFIGS = [ + { + heading: "Basic example", + config: ` +- type: plant-status + entity: plant.lemon_tree + `, + }, + { + heading: "Problem (too bright) + low battery", + config: ` +- type: plant-status + entity: plant.apple_tree + `, + }, + { + heading: "With picture + multiple problems", + config: ` +- type: plant-status + entity: plant.sunflowers + name: Sunflowers Name Overwrite + `, + }, +]; + +class DemoPlantEntity extends PolymerElement { + static get template() { + return html``; + } + + static get properties() { + return { + _configs: { + type: Object, + value: CONFIGS, + }, + }; + } + + public ready() { + super.ready(); + const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); + hass.addEntities(createPlantEntities()); + } +} + +customElements.define("demo-hui-plant-card", DemoPlantEntity); From 1667973a6647f8b8b860c0aa52058e75a494c9f8 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Tue, 5 Jan 2021 10:50:40 +0100 Subject: [PATCH 022/115] Improve spacing in entity rows + secondary ellipsis (#8028) --- src/panels/lovelace/components/hui-generic-entity-row.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/panels/lovelace/components/hui-generic-entity-row.ts b/src/panels/lovelace/components/hui-generic-entity-row.ts index d8abefe0da..8bf4b1abbd 100644 --- a/src/panels/lovelace/components/hui-generic-entity-row.ts +++ b/src/panels/lovelace/components/hui-generic-entity-row.ts @@ -164,7 +164,8 @@ class HuiGenericEntityRow extends LitElement { } .info { margin-left: 16px; - flex: 1 0 60px; + margin-right: 8px; + flex: 1 0 30%; } .info, .info > * { @@ -181,7 +182,6 @@ class HuiGenericEntityRow extends LitElement { } .secondary, ha-relative-time { - display: block; color: var(--secondary-text-color); } state-badge { From 2fdc746392e9d77596ab71b506bc58cd9b6a7c0c Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Tue, 5 Jan 2021 11:02:47 +0100 Subject: [PATCH 023/115] Add support for "all" as entity ID in action "service" (#7954) --- .../automation/action/ha-automation-action-row.ts | 2 +- .../action/types/ha-automation-action-service.ts | 4 ++-- .../lovelace/common/structs/is-entity-id.ts | 15 ++++++++++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/panels/config/automation/action/ha-automation-action-row.ts b/src/panels/config/automation/action/ha-automation-action-row.ts index 9644803d3d..f28278e134 100644 --- a/src/panels/config/automation/action/ha-automation-action-row.ts +++ b/src/panels/config/automation/action/ha-automation-action-row.ts @@ -195,7 +195,7 @@ export default class HaAutomationActionRow extends LitElement {
    ${this._warnings.map((warning) => html`
  • ${warning}
  • `)}
- You can still edit your config in yaml. + You can still edit your config in YAML.
` : ""} ${yamlMode diff --git a/src/panels/config/automation/action/types/ha-automation-action-service.ts b/src/panels/config/automation/action/types/ha-automation-action-service.ts index 55c80675eb..cc5df3e369 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-service.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-service.ts @@ -19,12 +19,12 @@ import type { HaYamlEditor } from "../../../../../components/ha-yaml-editor"; import { ServiceAction } from "../../../../../data/script"; import type { PolymerChangedEvent } from "../../../../../polymer-types"; import type { HomeAssistant } from "../../../../../types"; -import { EntityId } from "../../../../lovelace/common/structs/is-entity-id"; +import { EntityIdOrAll } from "../../../../lovelace/common/structs/is-entity-id"; import { ActionElement, handleChangeEvent } from "../ha-automation-action-row"; const actionStruct = object({ service: optional(string()), - entity_id: optional(EntityId), + entity_id: optional(EntityIdOrAll), data: optional(any()), }); diff --git a/src/panels/lovelace/common/structs/is-entity-id.ts b/src/panels/lovelace/common/structs/is-entity-id.ts index 26931ab19c..f88e466880 100644 --- a/src/panels/lovelace/common/structs/is-entity-id.ts +++ b/src/panels/lovelace/common/structs/is-entity-id.ts @@ -7,7 +7,7 @@ const isEntityId = (value: unknown, context: StructContext): StructResult => { if (!value.includes(".")) { return [ context.fail({ - type: "entity id should be in the format 'domain.entity'", + type: "Entity ID should be in the format 'domain.entity'", }), ]; } @@ -15,3 +15,16 @@ const isEntityId = (value: unknown, context: StructContext): StructResult => { }; export const EntityId = struct("entity-id", isEntityId); + +const isEntityIdOrAll = ( + value: unknown, + context: StructContext +): StructResult => { + if (typeof value === "string" && value === "all") { + return true; + } + + return isEntityId(value, context); +}; + +export const EntityIdOrAll = struct("entity-id-all", isEntityIdOrAll); From 5e2ee1a16cf570b933a3aacc499433866fdaa93d Mon Sep 17 00:00:00 2001 From: Shane Qi Date: Tue, 5 Jan 2021 04:24:41 -0600 Subject: [PATCH 024/115] Added Drag & Drop Reordering to Shopping List Card. (#7296) --- src/data/shopping-list.ts | 9 + .../lovelace/cards/hui-shopping-list-card.ts | 154 +++++++++++++++--- src/translations/en.json | 4 +- 3 files changed, 141 insertions(+), 26 deletions(-) diff --git a/src/data/shopping-list.ts b/src/data/shopping-list.ts index d3dbdd8327..1036cde3f1 100644 --- a/src/data/shopping-list.ts +++ b/src/data/shopping-list.ts @@ -38,3 +38,12 @@ export const addItem = ( type: "shopping_list/items/add", name, }); + +export const reorderItems = ( + hass: HomeAssistant, + itemIds: [string] +): Promise => + hass.callWS({ + type: "shopping_list/items/reorder", + item_ids: itemIds, + }); diff --git a/src/panels/lovelace/cards/hui-shopping-list-card.ts b/src/panels/lovelace/cards/hui-shopping-list-card.ts index 88132f288c..921b6fdcd5 100644 --- a/src/panels/lovelace/cards/hui-shopping-list-card.ts +++ b/src/panels/lovelace/cards/hui-shopping-list-card.ts @@ -11,9 +11,12 @@ import { property, PropertyValues, TemplateResult, + query, } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; import { repeat } from "lit-html/directives/repeat"; +import { guard } from "lit-html/directives/guard"; +import { mdiDrag, mdiSort, mdiPlus, mdiNotificationClearAll } from "@mdi/js"; import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; import "../../../components/ha-card"; import "../../../components/ha-icon"; @@ -23,12 +26,15 @@ import { fetchItems, ShoppingListItem, updateItem, + reorderItems, } from "../../../data/shopping-list"; import { SubscribeMixin } from "../../../mixins/subscribe-mixin"; import { HomeAssistant } from "../../../types"; import { LovelaceCard, LovelaceCardEditor } from "../types"; import { SensorCardConfig, ShoppingListCardConfig } from "./types"; +let Sortable; + @customElement("hui-shopping-list-card") class HuiShoppingListCard extends SubscribeMixin(LitElement) implements LovelaceCard { @@ -49,6 +55,14 @@ class HuiShoppingListCard extends SubscribeMixin(LitElement) @internalProperty() private _checkedItems?: ShoppingListItem[]; + @internalProperty() private _reordering = false; + + @internalProperty() private _renderEmptySortable = false; + + private _sortable?; + + @query("#sortable") private _sortableEl?: HTMLElement; + public getCardSize(): number { return (this._config ? (this._config.title ? 2 : 0) : 0) + 3; } @@ -101,15 +115,15 @@ class HuiShoppingListCard extends SubscribeMixin(LitElement) })} >
- - + + +
- ${repeat( - this._uncheckedItems!, - (item) => item.id, - (item) => - html` -
- - + ${this._reordering + ? html` +
+ ${guard([this._uncheckedItems, this._renderEmptySortable], () => + this._renderEmptySortable + ? "" + : this._renderItems(this._uncheckedItems!) + )}
` - )} + : this._renderItems(this._uncheckedItems!)} ${this._checkedItems!.length > 0 ? html`
@@ -149,16 +162,16 @@ class HuiShoppingListCard extends SubscribeMixin(LitElement) "ui.panel.lovelace.cards.shopping-list.checked_items" )} - - +
${repeat( this._checkedItems!, @@ -187,6 +200,44 @@ class HuiShoppingListCard extends SubscribeMixin(LitElement) `; } + private _renderItems(items: ShoppingListItem[]) { + return html` + ${repeat( + items, + (item) => item.id, + (item) => + html` +
+ + + ${this._reordering + ? html` + + + ` + : ""} +
+ ` + )} + `; + } + private async _fetchData(): Promise { if (!this.hass) { return; @@ -248,6 +299,54 @@ class HuiShoppingListCard extends SubscribeMixin(LitElement) } } + private async _toggleReorder() { + if (!Sortable) { + const sortableImport = await import( + "sortablejs/modular/sortable.core.esm" + ); + Sortable = sortableImport.Sortable; + } + this._reordering = !this._reordering; + await this.updateComplete; + if (this._reordering) { + this._createSortable(); + } else { + this._sortable?.destroy(); + this._sortable = undefined; + } + } + + private _createSortable() { + const sortableEl = this._sortableEl; + this._sortable = new Sortable(sortableEl, { + animation: 150, + fallbackClass: "sortable-fallback", + dataIdAttr: "item-id", + handle: "ha-svg-icon", + onEnd: async (evt) => { + // Since this is `onEnd` event, it's possible that + // an item wa dragged away and was put back to its original position. + if (evt.oldIndex !== evt.newIndex) { + reorderItems(this.hass!, this._sortable.toArray()).catch(() => + this._fetchData() + ); + // Move the shopping list item in memory. + this._uncheckedItems!.splice( + evt.newIndex, + 0, + this._uncheckedItems!.splice(evt.oldIndex, 1)[0] + ); + } + this._renderEmptySortable = true; + await this.updateComplete; + while (sortableEl?.lastElementChild) { + sortableEl.removeChild(sortableEl.lastElementChild); + } + this._renderEmptySortable = false; + }, + }); + } + static get styles(): CSSResult { return css` ha-card { @@ -278,6 +377,11 @@ class HuiShoppingListCard extends SubscribeMixin(LitElement) cursor: pointer; } + .reorderButton { + padding-left: 16px; + cursor: pointer; + } + paper-checkbox { padding-left: 4px; padding-right: 20px; diff --git a/src/translations/en.json b/src/translations/en.json index 9411c14584..9d18749495 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -2401,7 +2401,9 @@ "shopping-list": { "checked_items": "Checked items", "clear_items": "Clear checked items", - "add_item": "Add item" + "add_item": "Add item", + "reorder_items": "Reorder items", + "drag_and_drop": "Drag and drop" }, "picture-elements": { "hold": "Hold:", From 88da9bb91b8bab0d71a6e3ffbc6238eae823279d Mon Sep 17 00:00:00 2001 From: Siemon Geeroms Date: Tue, 5 Jan 2021 11:38:46 +0100 Subject: [PATCH 025/115] Allow to show modal dialogs in iFrame panels (#7971) --- src/panels/iframe/ha-panel-iframe.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/panels/iframe/ha-panel-iframe.js b/src/panels/iframe/ha-panel-iframe.js index 28d220de25..eee67cf102 100644 --- a/src/panels/iframe/ha-panel-iframe.js +++ b/src/panels/iframe/ha-panel-iframe.js @@ -24,7 +24,7 @@ class HaPanelIframe extends PolymerElement {