From 9ae8bd238b5c96f96c1cc46fc40dc5b8222d7607 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 1 Oct 2020 11:24:13 -0500 Subject: [PATCH 001/155] Fix reversal in power icon (#7188) --- src/common/entity/binary_sensor_icon.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/entity/binary_sensor_icon.ts b/src/common/entity/binary_sensor_icon.ts index 1affd4016f..1e0c5c5c7a 100644 --- a/src/common/entity/binary_sensor_icon.ts +++ b/src/common/entity/binary_sensor_icon.ts @@ -18,7 +18,7 @@ export const binarySensorIcon = (state?: string, stateObj?: HassEntity) => { case "garage_door": return is_off ? "hass:garage" : "hass:garage-open"; case "power": - return is_off ? "hass:power-plug" : "hass:power-plug-off"; + return is_off ? "hass:power-plug-off" : "hass:power-plug"; case "gas": case "problem": case "safety": From bfb5ee794e0e3aecd6aec17196f603340a7fb337 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Fri, 2 Oct 2020 00:32:24 +0000 Subject: [PATCH 002/155] [ci skip] Translation update --- translations/frontend/ca.json | 50 ++++++- translations/frontend/cs.json | 24 +++- translations/frontend/el.json | 46 +++++- translations/frontend/es.json | 50 ++++++- translations/frontend/et.json | 50 ++++++- translations/frontend/fr.json | 5 +- translations/frontend/hu.json | 5 + translations/frontend/it.json | 98 +++++++++++-- translations/frontend/ja.json | 222 ++++++++++++++++++++++++++++- translations/frontend/lb.json | 72 +++++++++- translations/frontend/nb.json | 50 ++++++- translations/frontend/pl.json | 8 ++ translations/frontend/pt.json | 77 +++++++++- translations/frontend/ru.json | 25 +++- translations/frontend/tr.json | 13 +- translations/frontend/zh-Hans.json | 80 +++++++++-- translations/frontend/zh-Hant.json | 50 ++++++- 17 files changed, 865 insertions(+), 60 deletions(-) diff --git a/translations/frontend/ca.json b/translations/frontend/ca.json index 7271018fdc..9ab6cf9d08 100644 --- a/translations/frontend/ca.json +++ b/translations/frontend/ca.json @@ -571,7 +571,34 @@ "no_history_found": "No s'ha trobat cap historial d'estats." }, "logbook": { - "entries_not_found": "No s'han trobat entrades al registre." + "by": "per", + "by_service": "pel servei", + "entries_not_found": "No s'han trobat entrades al registre.", + "messages": { + "became_unavailable": "no està disponible", + "changed_to_state": "a canviat a {state}", + "cleared_device_class": "s'ha esborrat (no s'ha detectat cap {device_class})", + "detected_device_class": "s'ha detectat {device_class}", + "rose": "rosa", + "set": "establert", + "turned_off": "s'ha apagat", + "turned_on": "s'ha engegat", + "was_at_home": "és a casa", + "was_at_state": "és {state}", + "was_away": "és a fora", + "was_closed": "s'ha tancat", + "was_connected": "s'ha connectat", + "was_disconnected": "s'ha desconnectat", + "was_locked": "s'ha bloquejat", + "was_low": "és baix/a", + "was_normal": "és normal", + "was_opened": "s'ha obert", + "was_plugged_in": "s'ha endollat", + "was_safe": "és segur", + "was_unlocked": "s'ha desbloquejat", + "was_unplugged": "s'ha desendollat", + "was_unsafe": "és insegur" + } }, "media-browser": { "audio_not_supported": "El teu navegador no és compatible amb l'element d'àudio.", @@ -684,7 +711,8 @@ "unavailable": "Aquesta entitat no està disponible actualment.", "update": "Actualitza" }, - "no_unique_id": "Aquesta entitat no té un ID únic, per tant, la seva configuració no pot ser gestionada des de la interfície d'usuari.", + "faq": "documentació", + "no_unique_id": "Aquesta entitat no té un ID únic, per tant, la seva configuració no pot ser gestionada des de la interfície d'usuari. Consulta {faq_link} per a més detalls.", "related": "Relacionat", "settings": "Configuració" }, @@ -1865,7 +1893,8 @@ }, "select_instance": { "header": "Selecciona una instància d'OpenZWave", - "introduction": "Tens més d'una instància d'OpenZWave en funcionament. Quina instància vols gestionar?" + "introduction": "Tens més d'una instància d'OpenZWave en funcionament. Quina instància vols gestionar?", + "none_found": "No s'ha pogut trobar cap instància d'OpenZWave. Si creus que això és incorrecte, comprova les configuracions d'OpenZWave i MQTT i assegurat que Home Assistant pugui comunicar-se amb el teu broker MQTT." }, "services": { "add_node": "Afegeix node", @@ -1880,6 +1909,9 @@ "create_person": "Crea persona", "description": "Gestiona les persones a qui Home Assistant fa seguiment", "detail": { + "admin": "Administrador", + "allow_login": "Permet l'inici de sessió de la persona", + "confirm_delete_user": "Estàs segur que vols eliminar el compte d'usuari de {name}? Encara li podràs fer seguiment, però no podrà tornar a iniciar sessió.", "create": "Crea", "delete": "Elimina", "device_tracker_intro": "Selecciona els dispositius que pertanyen a aquesta persona.", @@ -2229,7 +2261,7 @@ "create": "Crea", "delete": "Elimina", "icon": "Icona", - "icon_error_msg": "El nom de la icona ha de tenir el format prefix:nom_icona, per exemple: mdi: home", + "icon_error_msg": "La icona ha de tenir el format \"prefix:nom_icona\", per exemple: \"mdi:home\"", "latitude": "Latitud", "longitude": "Longitud", "name": "Nom", @@ -2527,6 +2559,7 @@ "entities": { "description": "La targeta entitats és la més habitual. Agrupa diferents tipus d'entitats en una llista.", "edit_special_row": "Edita la fila mitjançant l'editor de codi", + "entity_row_editor": "Editor de files d'entitats", "entity_row": { "attribute": "Atribut", "button": "Botó", @@ -2539,6 +2572,15 @@ "weblink": "Enllaç web" }, "name": "Entitats", + "secondary_info_values": { + "brightness": "Brillantor", + "entity-id": "ID de l'entitat", + "last-changed": "Últim canvi", + "last-triggered": "Disparada per última vegada", + "none": "Sense informació secundària", + "position": "Posició", + "tilt-position": "Inclinació" + }, "show_header_toggle": "Mostra commutació a la capçalera?", "special_row": "fila especial", "toggle": "Commuta les entitats." diff --git a/translations/frontend/cs.json b/translations/frontend/cs.json index 94150355db..abdace240e 100644 --- a/translations/frontend/cs.json +++ b/translations/frontend/cs.json @@ -571,7 +571,11 @@ "no_history_found": "Historie stavu chybí." }, "logbook": { - "entries_not_found": "Nenalezeny žádné záznamy." + "entries_not_found": "Nenalezeny žádné záznamy.", + "messages": { + "turned_off": "vypnuto", + "turned_on": "zapnuto" + } }, "media-browser": { "audio_not_supported": "Váš prohlížeč nepodporuje element \"audio\".", @@ -684,7 +688,8 @@ "unavailable": "Tato entita není momentálně k dispozici.", "update": "Aktualizovat" }, - "no_unique_id": "Tato entita nemá jedinečné ID, proto její nastavení nelze spravovat z uživatelského rozhraní.", + "faq": "dokumentace", + "no_unique_id": "Tato entita nemá jedinečné ID, proto její nastavení nelze spravovat z uživatelského rozhraní. Další podrobnosti naleznete na stránce {faq_link}.", "related": "Související", "settings": "Nastavení" }, @@ -1880,6 +1885,9 @@ "create_person": "Vytvořit osobu", "description": "Správa osob, které Home Assistant sleduje", "detail": { + "admin": "Administrátor", + "allow_login": "Povolit osobě se přihlásit", + "confirm_delete_user": "Opravdu chcete smazat uživatelský účet pro {name} ? Stále můžete uživatele sledovat, ale daná osoba se již nebude moci přihlásit.", "create": "Vytvořit", "delete": "Smazat", "device_tracker_intro": "Vyberte zařízení, která patří této osobě.", @@ -2229,7 +2237,7 @@ "create": "Vytvořit", "delete": "Smazat", "icon": "Ikona", - "icon_error_msg": "Ikona by měla být ve formátu předpona:jménoIcony, například: mdi:home", + "icon_error_msg": "Ikona by měla být ve formátu \"předpona:jménoIkony\", například: \"mdi:home\"", "latitude": "Zeměpisná šířka", "longitude": "Zeměpisná délka", "name": "Název", @@ -2527,6 +2535,7 @@ "entities": { "description": "Karta Entity je nejběžnějším typem karty. Seskupuje položky do seznamů.", "edit_special_row": "Upravte řádek pomocí editoru kódu", + "entity_row_editor": "Editor řádku entity", "entity_row": { "attribute": "Atribut", "button": "Tlačítko", @@ -2539,6 +2548,15 @@ "weblink": "Webový odkaz" }, "name": "Entity", + "secondary_info_values": { + "brightness": "Jas", + "entity-id": "ID entity", + "last-changed": "Naposledy změněno", + "last-triggered": "Naposledy spuštěno", + "none": "Žádné doplňující informace", + "position": "Pozice", + "tilt-position": "Náklon" + }, "show_header_toggle": "Zobrazit přepínač záhlaví?", "special_row": "speciální řádek", "toggle": "Přepnout entity." diff --git a/translations/frontend/el.json b/translations/frontend/el.json index e6338a473c..bfc46667eb 100644 --- a/translations/frontend/el.json +++ b/translations/frontend/el.json @@ -571,7 +571,34 @@ "no_history_found": "Δεν έχει βρεθεί ιστορικό κατάστασης." }, "logbook": { - "entries_not_found": "Δεν βρέθηκαν καταχωρήσεις ημερολογίου." + "by": "ανά", + "by_service": "ανά υπηρεσία", + "entries_not_found": "Δεν βρέθηκαν καταχωρήσεις ημερολογίου.", + "messages": { + "became_unavailable": "μετετράπη σε μη διαθέσιμο", + "changed_to_state": "άλλαξε σε {state}", + "cleared_device_class": "διαγράφηκε (δεν εντοπίστηκε {device_class} )", + "detected_device_class": "εντοπίστηκε {device_class}", + "rose": "αυξήθηκε", + "set": "ορίστηκε", + "turned_off": "απενεργοποιήθηκε", + "turned_on": "ενεργοποιήθηκε", + "was_at_home": "ήταν στο σπίτι", + "was_at_state": "ήταν σε {κατάσταση}", + "was_away": "ήταν μακριά", + "was_closed": "ήταν κλειστό", + "was_connected": "ήταν συνδεδεμένο", + "was_disconnected": "ήταν αποσυνδεδεμένο", + "was_locked": "ήταν κλειδωμένο", + "was_low": "ήταν χαμηλό", + "was_normal": "ήταν φυσιολογικό", + "was_opened": "ήταν ανοιχτό", + "was_plugged_in": "ήταν συνδεδεμένο", + "was_safe": "ήταν ασφαλές", + "was_unlocked": "ήταν ξεκλείδωτο", + "was_unplugged": "ήταν αποσυνδεδεμένο", + "was_unsafe": "δεν ήταν ασφαλές" + } }, "media-browser": { "audio_not_supported": "Το πρόγραμμα περιήγησής σας δεν υποστηρίζει το στοιχείο ήχου.", @@ -684,6 +711,7 @@ "unavailable": "Αυτή η οντότητα δεν είναι προς το παρόν διαθέσιμη.", "update": "Ενημέρωση" }, + "faq": "τεκμηρίωση", "no_unique_id": "Αυτή η οντότητα δεν έχει μοναδικό αναγνωριστικό, επομένως δεν είναι δυνατή η διαχείριση των ρυθμίσεών της από το περιβάλλον χρήστη.", "related": "Σχετίζεται με", "settings": "Ρυθμίσεις" @@ -1865,7 +1893,8 @@ }, "select_instance": { "header": "Επιλέξτε ένα στιγμιότυπο OpenZWave", - "introduction": "Έχετε περισσότερα από ένα στιγμιότυπα OpenZWave σε ενέργεια. Ποιό στιγμιότυπο θέλετε να διαχειριστείτε;" + "introduction": "Έχετε περισσότερα από ένα στιγμιότυπα OpenZWave σε ενέργεια. Ποιό στιγμιότυπο θέλετε να διαχειριστείτε;", + "none_found": "Δεν ήταν δυνατή η εύρεση μιας παρουσίας OpenZWave. Εάν πιστεύετε ότι αυτό είναι λανθασμένο, ελέγξτε τις ρυθμίσεις OpenZWave και MQTT και βεβαιωθείτε ότι το Home Assistant μπορεί να επικοινωνήσει με τον MQTT broker." }, "services": { "add_node": "Προσθήκη κόμβου", @@ -1880,6 +1909,9 @@ "create_person": "Δημιουργία ατόμου", "description": "Διαχειριστείτε τα άτομα που παρακολουθεί το Home Assistant", "detail": { + "admin": "Διαχειριστής", + "allow_login": "Να επιτρέπεται στο άτομο η σύνδεση", + "confirm_delete_user": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το λογαριασμό χρήστη για το {name}; Μπορείτε ακόμα να παρακολουθείτε το χρήστη, αλλά το άτομο δεν θα μπορεί πλέον να συνδεθεί.", "create": "Δημιουργία", "delete": "Διαγραφή", "device_tracker_intro": "Επιλέξτε τις συσκευές που ανήκουν σε αυτό το άτομο.", @@ -2527,6 +2559,7 @@ "entities": { "description": "Η καρτέλα Οντότητες είναι ο πιο συνηθισμένος τύπος κάρτας. Ομαδοποιεί τα στοιχεία σε λίστες.", "edit_special_row": "Επεξεργασία σειράς χρησιμοποιώντας τον επεξεργαστή κώδικα", + "entity_row_editor": "Πρόγραμμα επεξεργασίας γραμμής οντότητας", "entity_row": { "attribute": "Χαρακτηριστικό", "button": "Κουμπί", @@ -2539,6 +2572,15 @@ "weblink": "Σύνδεσμος Ιστού" }, "name": "Οντότητες", + "secondary_info_values": { + "brightness": "Φωτεινότητα", + "entity-id": "Αναγνωριστικό οντότητας", + "last-changed": "Τελευταία αλλαγή", + "last-triggered": "Τελευταία ενεργοποίηση", + "none": "Δεν υπάρχουν δευτερεύουσες πληροφορίες", + "position": "Θέση", + "tilt-position": "Θέση κλίσης" + }, "show_header_toggle": "Εμφάνιση εναλλαγής κεφαλίδων;", "special_row": "ειδική σειρά", "toggle": "Εναλλαγή οντοτήτων." diff --git a/translations/frontend/es.json b/translations/frontend/es.json index 6c568faebb..5ed8774b61 100644 --- a/translations/frontend/es.json +++ b/translations/frontend/es.json @@ -571,7 +571,34 @@ "no_history_found": "No se encontró historial de estado." }, "logbook": { - "entries_not_found": "No se han encontrado entradas en el registro." + "by": "por", + "by_service": "por el servicio", + "entries_not_found": "No se han encontrado entradas en el registro.", + "messages": { + "became_unavailable": "dejó de estar disponible", + "changed_to_state": "cambiado a {state}", + "cleared_device_class": "despejado (no se detecta {device_class})", + "detected_device_class": "detectado {device_class}", + "rose": "aumentó", + "set": "Establecer", + "turned_off": "apagado", + "turned_on": "encendido", + "was_at_home": "estaba en casa", + "was_at_state": "estaba en {state}", + "was_away": "estaba ausente", + "was_closed": "fue cerrado", + "was_connected": "fue conectado", + "was_disconnected": "fue desconectado", + "was_locked": "fue cerrado", + "was_low": "era bajo", + "was_normal": "era normal", + "was_opened": "fue abierto", + "was_plugged_in": "fue enchufado", + "was_safe": "era seguro", + "was_unlocked": "fue desbloqueado", + "was_unplugged": "fue desenchufado", + "was_unsafe": "era inseguro" + } }, "media-browser": { "audio_not_supported": "Tu navegador no es compatible con el elemento de audio.", @@ -684,7 +711,8 @@ "unavailable": "Esta entidad no está disponible actualmente.", "update": "Actualizar" }, - "no_unique_id": "Esta entidad no tiene una ID única, por lo que su configuración no se puede administrar desde la IU.", + "faq": "documentación", + "no_unique_id": "Esta entidad no tiene una ID única, por lo que su configuración no se puede administrar desde la IU. Consulta {faq_link} para más detalles.", "related": "Relacionado", "settings": "Configuración" }, @@ -1865,7 +1893,8 @@ }, "select_instance": { "header": "Selecciona una instancia de OpenZWave", - "introduction": "Tienes más de una instancia de OpenZWave en ejecución. ¿Qué instancia te gustaría gestionar?" + "introduction": "Tienes más de una instancia de OpenZWave en ejecución. ¿Qué instancia te gustaría gestionar?", + "none_found": "No pudimos encontrar una instancia de OpenZWave. Si crees que esto es incorrecto, verifica tus configuraciones de OpenZWave y MQTT y asegúrate de que Home Assistant pueda comunicarse con tu broker MQTT." }, "services": { "add_node": "Añadir Nodo", @@ -1880,6 +1909,9 @@ "create_person": "Crear persona", "description": "Administra las personas a las que rastrea Home Assistant.", "detail": { + "admin": "Administrador", + "allow_login": "Permitir que la persona inicie sesión", + "confirm_delete_user": "¿Estás seguro de que deseas eliminar la cuenta de usuario de {name} ? Aún puedes rastrear al usuario, pero la persona ya no podrá iniciar sesión.", "create": "Crear", "delete": "Eliminar", "device_tracker_intro": "Seleccione los dispositivos que pertenecen a esta persona.", @@ -2229,7 +2261,7 @@ "create": "Crear", "delete": "Eliminar", "icon": "Icono", - "icon_error_msg": "El icono debe estar en el formato prefijo:nombre_del_icono, por ejemplo: mdi:home", + "icon_error_msg": "El icono debe estar en el formato \"prefijo:nombre_del_icono\", por ejemplo: \"mdi:home\"", "latitude": "Latitud", "longitude": "Longitud", "name": "Nombre", @@ -2527,6 +2559,7 @@ "entities": { "description": "La tarjeta Entidades es el tipo de tarjeta más común. Agrupa los elementos en listas.", "edit_special_row": "Editar fila usando el editor de código", + "entity_row_editor": "Editor de filas de entidades", "entity_row": { "attribute": "Atributo", "button": "Botón", @@ -2539,6 +2572,15 @@ "weblink": "Enlace web" }, "name": "Entidades", + "secondary_info_values": { + "brightness": "Brillo", + "entity-id": "ID de entidad", + "last-changed": "Último cambio", + "last-triggered": "Última activación", + "none": "Sin información secundaria", + "position": "Posición", + "tilt-position": "Posición de inclinación" + }, "show_header_toggle": "¿Mostrar interruptor en encabezado?", "special_row": "fila especial", "toggle": "Alternar entidades." diff --git a/translations/frontend/et.json b/translations/frontend/et.json index 7c8c5452ed..a3b5dbf62c 100644 --- a/translations/frontend/et.json +++ b/translations/frontend/et.json @@ -571,7 +571,34 @@ "no_history_found": "Oleku ajalugu ei leitud" }, "logbook": { - "entries_not_found": "Logiraamatu kandeid ei leitud." + "by": "poolt", + "by_service": "teenuse poolt", + "entries_not_found": "Logiraamatu kandeid ei leitud.", + "messages": { + "became_unavailable": "muutus kättesaamatuks", + "changed_to_state": "muutus olekusse {state}", + "cleared_device_class": "kustutatud ( {device_class} ei leitud)", + "detected_device_class": "tuvastati {device_class}", + "rose": "tõusis", + "set": "määratud", + "turned_off": "lülitus välja", + "turned_on": "lülitus sisse", + "was_at_home": "oli kodus", + "was_at_state": "oli olekus {state}", + "was_away": "oli ära", + "was_closed": "sulgus", + "was_connected": "ühendus", + "was_disconnected": "ühendati lahti", + "was_locked": "lukustati", + "was_low": "oli madal", + "was_normal": "oli normaalne", + "was_opened": "avanes", + "was_plugged_in": "ühendus", + "was_safe": "oli turvatud", + "was_unlocked": "avanes", + "was_unplugged": "oli lahti ühendatud", + "was_unsafe": "oli turvamata" + } }, "media-browser": { "audio_not_supported": "Teie brauser ei toeta helielementi.", @@ -684,7 +711,8 @@ "unavailable": "See olem pole praegu saadaval.", "update": "Uuenda" }, - "no_unique_id": "Sellel olemil pole unikaalset ID-d, seetõttu ei saa selle seadeid kasutajaliidesest hallata.", + "faq": "dokumentatsioon", + "no_unique_id": "Sellel olemil puudub unikaalne ID-d. Seetõttu ei saa selle seadeid kasutajaliidesest hallata. Lisainfot vaata {faq_link}.", "related": "Seotud", "settings": "Seaded" }, @@ -1865,7 +1893,8 @@ }, "select_instance": { "header": "Valige OpenZWave'i eksemplar", - "introduction": "Teil töötab rohkem kui üks OpenZWave'i eksemplar. Millist juhtumit soovite hallata?" + "introduction": "Teil töötab rohkem kui üks OpenZWave'i eksemplar. Millist juhtumit soovite hallata?", + "none_found": "Ei leitud OpenZWave'i eksemplare. Kui arvate, et see on vale, kontrollige oma OpenZWave'i ja MQTT seadistusi ning veenduge, et Home Assistant saaks teie MQTT vahendajaga suhelda." }, "services": { "add_node": "Lisa sõlm", @@ -1880,6 +1909,9 @@ "create_person": "Loo isik", "description": "Halda isikuid keda Home Assistant jälgib.", "detail": { + "admin": "Administraator", + "allow_login": "Luba isikul sisse logida", + "confirm_delete_user": "Kas kustutada kasutaja {name} ? Kasutajat saate endiselt jälgida kuid kasutaja ei saa enam sisse logida.", "create": "Loo", "delete": "Kustuta", "device_tracker_intro": "Vali seadmed, mis kuuluvad sellele isikule.", @@ -2229,7 +2261,7 @@ "create": "Loo", "delete": "Kustuta", "icon": "Ikoon", - "icon_error_msg": "Ikoon peaks olema formaadis prefiks:ikooninimi, näiteks: mdi:home", + "icon_error_msg": "Ikoon peaks olema formaadis \"prefiks:ikooninimi\". Näiteks: mdi:home", "latitude": "Laius", "longitude": "Pikkus", "name": "Nimi", @@ -2527,6 +2559,7 @@ "entities": { "description": "Olemite kaart on kõige levinum kaarditüüp. See rühmitabolemid loenditeks.", "edit_special_row": "Redigeeri rida koodiredaktori abil", + "entity_row_editor": "Olemirea redaktor", "entity_row": { "attribute": "Atribuut", "button": "Nupp", @@ -2539,6 +2572,15 @@ "weblink": "Veebilink" }, "name": "Olemid", + "secondary_info_values": { + "brightness": "Heledus", + "entity-id": "Olemi ID", + "last-changed": "Viimati muudetud", + "last-triggered": "Viimati vallandunud", + "none": "Teisene teave puudub", + "position": "Asend", + "tilt-position": "Kalle" + }, "show_header_toggle": "Kas näidata päise vahetamist?", "special_row": "eriline rida", "toggle": "Vaheta olemeid." diff --git a/translations/frontend/fr.json b/translations/frontend/fr.json index 774a8ac61c..470d12cb8b 100644 --- a/translations/frontend/fr.json +++ b/translations/frontend/fr.json @@ -571,7 +571,10 @@ "no_history_found": "Aucun historique des valeurs trouvé." }, "logbook": { - "entries_not_found": "Aucune entrée trouvée dans le journal." + "entries_not_found": "Aucune entrée trouvée dans le journal.", + "messages": { + "rose": "aube" + } }, "media-browser": { "audio_not_supported": "Votre navigateur ne prend pas en charge l'élément audio.", diff --git a/translations/frontend/hu.json b/translations/frontend/hu.json index 0b50127989..09db4f713f 100644 --- a/translations/frontend/hu.json +++ b/translations/frontend/hu.json @@ -2740,6 +2740,11 @@ "header": "Kapcsolat automatikus bontása" }, "themes": { + "dark_mode": { + "auto": "Automatikus", + "dark": "Sötét", + "light": "Világos" + }, "dropdown_label": "Téma", "error_no_theme": "Nincsenek elérhető témák.", "header": "Téma", diff --git a/translations/frontend/it.json b/translations/frontend/it.json index 7cdbad2241..bf392d7e33 100644 --- a/translations/frontend/it.json +++ b/translations/frontend/it.json @@ -571,7 +571,34 @@ "no_history_found": "Nessuno storico trovato." }, "logbook": { - "entries_not_found": "Non sono state trovate voci nel registro." + "by": "da", + "by_service": "dal servizio", + "entries_not_found": "Non sono state trovate voci nel registro.", + "messages": { + "became_unavailable": "non è più disponibile", + "changed_to_state": "cambiato in {state}", + "cleared_device_class": "cancellato (nessun {device_class} rilevato)", + "detected_device_class": "rilevato {device_class}", + "rose": "alzato", + "set": "impostato", + "turned_off": "spento", + "turned_on": "acceso", + "was_at_home": "era a casa", + "was_at_state": "era a {state}", + "was_away": "era lontano", + "was_closed": "era chiuso", + "was_connected": "era connesso", + "was_disconnected": "era disconnesso", + "was_locked": "era bloccato", + "was_low": "era basso", + "was_normal": "era normale", + "was_opened": "era aperto", + "was_plugged_in": "è stato collegato", + "was_safe": "era sicuro", + "was_unlocked": "era sbloccato", + "was_unplugged": "è stato scollegato", + "was_unsafe": "non era sicuro" + } }, "media-browser": { "audio_not_supported": "Il tuo browser non supporta l'elemento audio.", @@ -684,7 +711,8 @@ "unavailable": "Questa entità non è attualmente disponibile.", "update": "Aggiorna" }, - "no_unique_id": "Questa entità non ha un ID univoco, pertanto le sue impostazioni non possono essere gestite dall'Interfaccia Utente.", + "faq": "documentazione", + "no_unique_id": "Questa entità non ha un ID univoco, pertanto le sue impostazioni non possono essere gestite dall'Interfaccia Utente. Vedere {faq_link} per maggiori dettagli.", "related": "Relazionato", "settings": "Impostazioni" }, @@ -741,6 +769,7 @@ "dismiss": "Chiudi finestra di dialogo", "edit": "Modifica entità", "history": "Storico", + "last_updated": "Ultimo aggiornamento", "person": { "create_zone": "Crea zona dalla posizione corrente" }, @@ -1040,7 +1069,16 @@ "before": "Prima", "label": "Tempo", "type_input": "Valore di un aiutante data/ora", - "type_value": "Tempo fisso" + "type_value": "Tempo fisso", + "weekdays": { + "fri": "Venerdì", + "mon": "Lunedi", + "sat": "Sabato", + "sun": "Domenica", + "thu": "Giovedì", + "tue": "Martedì", + "wed": "Mercoledì" + } }, "zone": { "entity": "Entità con posizione", @@ -1855,7 +1893,8 @@ }, "select_instance": { "header": "Seleziona un'istanza OpenZWave", - "introduction": "Hai più di un'istanza OpenZWave in esecuzione. Quale istanza vorresti gestire?" + "introduction": "Hai più di un'istanza OpenZWave in esecuzione. Quale istanza vorresti gestire?", + "none_found": "Non siamo riusciti a trovare un'istanza di OpenZWave. Se ritieni che ciò non sia corretto, controlla le tue impostazioni di OpenZWave e MQTT e assicurati che Home Assistant possa comunicare con il tuo broker MQTT." }, "services": { "add_node": "Aggiungi Nodo", @@ -1870,6 +1909,9 @@ "create_person": "Crea persona", "description": "Gestisci le persone tracciate da Home Assistant", "detail": { + "admin": "Amministratore", + "allow_login": "Consenti alla persona di accedere", + "confirm_delete_user": "Sei sicuro di voler eliminare l'account utente per {name}? Puoi ancora tenere traccia dell'utente, ma la persona non sarà più in grado di accedere.", "create": "Crea", "delete": "Elimina", "device_tracker_intro": "Seleziona i dispositivi che appartengono a questa persona.", @@ -1886,7 +1928,7 @@ }, "introduction": "Qui è possibile definire ogni persona di interesse in Home Assistant.", "no_persons_created_yet": "Sembra che tu non abbia ancora creato nessuna persona.", - "note_about_persons_configured_in_yaml": "Nota: le persone configurate tramite configuration.yaml non possono essere modificate tramite l'interfaccia utente." + "note_about_persons_configured_in_yaml": "Nota: le persone configurate tramite configuration.yaml non possono essere modificate tramite l'Interfaccia Utente." }, "scene": { "activated": "Scena attivata {name}.", @@ -2003,7 +2045,7 @@ "introduction": "Alcune parti di Home Assistant possono essere ricaricate senza richiedere un riavvio. Premendo su Ricarica si rimuoverà la loro Configurazione YAML attuale e si caricherà la versione aggiornata.", "min_max": "Ricaricare le entità min/max", "mqtt": "Ricarica le entità mqtt", - "person": "Ricarica le persone", + "person": "Ricaricare le persone", "ping": "Ricarica le entità del sensore binario ping", "reload": "Ricarica {domain}", "rest": "Ricarica le entità di rest e i servizi di notifica", @@ -2214,12 +2256,12 @@ "configured_in_yaml": "Le zone configurate tramite configuration.yaml non possono essere modificate tramite l'interfaccia utente.", "confirm_delete": "Sei sicuro di voler cancellare questa zona?", "create_zone": "Crea zona", - "description": "Gestisci le zone in cui vuoi rintracciare le persone", + "description": "Gestire le zone in cui si desidera tenere traccia delle persone", "detail": { "create": "Crea", "delete": "Elimina", "icon": "Icona", - "icon_error_msg": "L'icona dovrebbe essere nel formato prefisso:nome_icona, ad esempio: mdi:home", + "icon_error_msg": "L'icona deve essere nel formato \"prefisso:nome_icona\", ad esempio: \"mdi:home\"", "latitude": "Latitudine", "longitude": "Logitudine", "name": "Nome", @@ -2463,6 +2505,20 @@ "refresh": "Aggiorna" }, "editor": { + "action-editor": { + "actions": { + "call-service": "Chiama il Servizio", + "default_action": "Azione predefinita", + "more-info": "Ulteriori informazioni", + "navigate": "Navigare", + "none": "Nessuna Azione", + "toggle": "Commutatore", + "url": "Url" + }, + "editor_service_data": "I dati di servizio possono essere inseriti solo nell'editor del codice", + "navigation_path": "Percorso di navigazione", + "url_path": "Percorso Url" + }, "card": { "alarm-panel": { "available_states": "Stati disponibili", @@ -2470,12 +2526,20 @@ "name": "Pannello di allarme" }, "button": { + "default_action_help": "L'azione predefinita dipende dalle capacità dell'entità, verrà attivata o disattivata o verranno mostrate più informazioni.", "description": "La scheda Pulsante consente di aggiungere pulsanti per eseguire attività.", "name": "Pulsante" }, "calendar": { + "calendar_entities": "Entità Calendario", "description": "La scheda Calendario mostra un calendario che include le visualizzazioni per giorno, settimana ed elenco", - "name": "Calendario" + "inital_view": "Vista iniziale", + "name": "Calendario", + "views": { + "dayGridDay": "Giorno", + "dayGridMonth": "Mese", + "listWeek": "Elenco" + } }, "conditional": { "card": "Scheda", @@ -2495,6 +2559,7 @@ "entities": { "description": "La scheda Entità è il tipo di scheda più comune. Raggruppa gli elementi in elenchi.", "edit_special_row": "Modificare la riga utilizzando l'editor di codice", + "entity_row_editor": "Editor di riga dell'entità", "entity_row": { "attribute": "Attributo", "button": "Pulsante", @@ -2507,6 +2572,15 @@ "weblink": "Collegamento Web" }, "name": "Entità", + "secondary_info_values": { + "brightness": "Luminosità", + "entity-id": "ID Entità", + "last-changed": "Ultima modifica", + "last-triggered": "Ultima attivazione", + "none": "Nessuna informazione secondaria", + "position": "Posizione", + "tilt-position": "Posizione di inclinazione" + }, "show_header_toggle": "Mostrare l'interruttore dell'intestazione?", "special_row": "riga speciale", "toggle": "Attiva/disattiva entità." @@ -2960,6 +3034,12 @@ "more_integrations": "Di Più" }, "intro": "Sei pronto per risvegliare la tua casa, reclamare la tua privacy e far parte di una comunità mondiale di smanettoni?", + "restore": { + "description": "In alternativa è possibile ripristinare da un'istantanea precedente.", + "hide_log": "Nascondi il registro completo", + "in_progress": "Ripristino in corso", + "show_log": "Mostra il registro completo" + }, "user": { "create_account": "Crea un Account", "data": { diff --git a/translations/frontend/ja.json b/translations/frontend/ja.json index e0f701aaf7..73ea24640b 100644 --- a/translations/frontend/ja.json +++ b/translations/frontend/ja.json @@ -19,6 +19,7 @@ "logbook": "ログブック", "mailbox": "メールボックス", "map": "地図", + "media_browser": "メディアブラウザ", "profile": "プロファイル", "shopping_list": "買い物リスト", "states": "状態" @@ -481,9 +482,11 @@ "wnw": "西北西", "wsw": "西南西" }, + "day": "日", "forecast": "天気予報", "high": "高", - "low": "低" + "low": "低", + "night": "夜" } }, "common": { @@ -491,6 +494,8 @@ "back": "戻る", "cancel": "キャンセル", "close": "閉じる", + "continue": "続行", + "copied": "コピー", "delete": "削除", "error_required": "必須", "loading": "読込中", @@ -537,6 +542,10 @@ "toggle": "切り替え" }, "entity": { + "entity-attribute-picker": { + "attribute": "属性", + "show_attributes": "属性を表示" + }, "entity-picker": { "clear": "消去", "entity": "エンティティ", @@ -547,8 +556,62 @@ "loading_history": "状態履歴を読込中...", "no_history_found": "状態履歴がありません。" }, + "logbook": { + "by": "by", + "by_service": "サービス別", + "entries_not_found": "ログブックのエントリが見つかりません。", + "messages": { + "became_unavailable": "利用できなくなりました", + "changed_to_state": "{state}に変更されました", + "cleared_device_class": "クリアされました( {device_class}検出されませんでした)", + "detected_device_class": "{device_class} が検出されました", + "rose": "ローズ", + "set": "セット", + "turned_off": "終了しました", + "turned_on": "オンになりました", + "was_at_home": "家にいた", + "was_at_state": "{state}でした", + "was_away": "離れていた", + "was_closed": "閉鎖されました", + "was_connected": "接続されました", + "was_disconnected": "切断されました", + "was_locked": "ロックされました", + "was_low": "低かった", + "was_normal": "正常でした", + "was_opened": "開かれました", + "was_plugged_in": "接続されました", + "was_safe": "安全でした", + "was_unlocked": "ロックが解除されました", + "was_unplugged": "プラグが抜かれました", + "was_unsafe": "安全ではなかった" + } + }, "media-browser": { + "audio_not_supported": "お使いのブラウザはオーディオをサポートしていません。", + "choose_player": "プレーヤーを選択", "choose-source": "ソースを選択", + "class": { + "album": "アルバム", + "app": "アプリ", + "artist": "アーティスト", + "channel": "チャネル", + "composer": "作曲者", + "contributing_artist": "アーティスト", + "directory": "ライブラリ", + "episode": "エピソード", + "game": "ゲーム", + "genre": "ジャンル", + "image": "画像", + "movie": "Movie", + "music": "Music", + "playlist": "プレイリスト", + "podcast": "ポッドキャスト", + "season": "シーズン", + "track": "トラック", + "tv_show": "テレビ番組", + "url": "URL", + "video": "ビデオ" + }, "content-type": { "album": "アルバム", "artist": "アーティスト", @@ -556,12 +619,22 @@ "playlist": "プレイリスト", "server": "サーバー" }, + "documentation": "ドキュメント", + "learn_adding_local_media": "メディアの追加の詳細については、{ドキュメント}を参照してください。", + "local_media_files": "ビデオ、オーディオ、画像ファイルをメディアディレクトリに配置して、ブラウザやサポートされているメディアプレーヤーで参照して再生できるようにします。", + "media_browsing_error": "メディア参照エラー", + "media_not_supported": "ブラウザ メディア プレーヤーはこの種類のメディアをサポートしていません", "media-player-browser": "メディアプレーヤーブラウザ", "no_items": "アイテムなし", + "no_local_media_found": "ローカルメディアが見つかりません", + "no_media_folder": "メディアディレクトリをまだ作成していないようです。", "pick": "選択", "pick-media": "メディアを選択", "play": "再生", - "play-media": "メディアを再生" + "play-media": "メディアを再生", + "setup_local_help": "ローカルメディアの設定方法については、 {documentation}を確認してください。", + "video_not_supported": "お使いのブラウザはビデオをサポートしていません。", + "web-browser": "Webブラウザ" }, "picture-upload": { "label": "画像", @@ -603,6 +676,7 @@ "update": "更新" }, "domain_toggler": { + "reset_entities": "エンティティをリセット", "title": "ドメインを切り替え" }, "entity_registry": { @@ -622,6 +696,7 @@ "unavailable": "このエンティティは現在利用できません。", "update": "更新" }, + "faq": "ドキュメント", "no_unique_id": "このエンティティには一意のIDがないため、その設定はUIから管理できません。", "related": "関連", "settings": "設定" @@ -674,8 +749,12 @@ "crop": "収納" }, "more_info_control": { + "controls": "コントロール", + "details": "詳細", "dismiss": "ダイアログを閉じる", "edit": "エンティティを編集", + "history": "履歴", + "last_updated": "最終更新", "person": { "create_zone": "現在地からゾーンを作成" }, @@ -903,7 +982,13 @@ "label": "サービスの呼び出し", "service_data": "サービスのデータ" }, + "wait_for_trigger": { + "continue_timeout": "タイムアウト時に続行", + "label": "トリガーを待つ", + "timeout": "タイムアウト (オプション)" + }, "wait_template": { + "continue_timeout": "タイムアウト時に続行", "label": "待つ", "timeout": "タイムアウト(オプション)", "wait_template": "待機テンプレート" @@ -967,7 +1052,18 @@ "time": { "after": "後", "before": "前", - "label": "時間" + "label": "時間", + "type_input": "日付/時刻ヘルパーの値", + "type_value": "定刻", + "weekdays": { + "fri": "金曜日", + "mon": "月曜日", + "sat": "土曜日", + "sun": "日曜日", + "thu": "木曜日", + "tue": "火曜日", + "wed": "水曜日" + } }, "zone": { "entity": "場所に対応するエンティティ", @@ -1055,6 +1151,7 @@ "value_template": "バリューテンプレート(オプショナル)" }, "state": { + "attribute": "属性(オプション)", "for": "のために", "from": "変化前", "label": "状態", @@ -1082,7 +1179,9 @@ }, "time": { "at": "時期", - "label": "時刻" + "label": "時刻", + "type_input": "日付/時刻ヘルパーの値", + "type_value": "定刻" }, "webhook": { "label": "Webhook", @@ -1105,6 +1204,8 @@ "add_automation": "オートメーションの追加", "delete_automation": "オートメーションを削除", "delete_confirm": "このオートメーションを削除してもよろしいですか?", + "duplicate": "複製", + "duplicate_automation": "重複したオートメーション", "edit_automation": "オートメーションを編集", "header": "オートメーションエディター", "headers": { @@ -1186,8 +1287,14 @@ }, "alexa": { "banner": "この UI を介して公開されるエンティティの編集は、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" }, @@ -1225,8 +1332,14 @@ "google": { "banner": "この UI を介して公開されるエンティティの編集は、configuration.yaml でエンティティ フィルターを構成しているため無効になります。", "disable_2FA": "多要素認証を無効にする", + "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" @@ -1493,6 +1606,7 @@ }, "integrations": { "add_integration": "インテグレーションを追加", + "attention": "注意が必要", "caption": "インテグレーション", "config_entry": { "area": "{area}", @@ -1516,6 +1630,7 @@ "reload_restart_confirm": "ホームアシスタントを再起動してこのインテグレーションの再読み込みを完了してください。\n", "rename": "名前を変更", "restart_confirm": "ホーム アシスタントを再起動して、この統合の削除を完了します。", + "services": "{count} {count, plural,\n one {サービス}\n other {サービス}\n}", "settings_button": "{integration} の設定を編集", "system_options": "システムオプション", "system_options_button": "{integration} のシステムオプション", @@ -1562,6 +1677,7 @@ "none_found_detail": "別の検索基準をためしてみます。", "note_about_integrations": "まだすべての統合をUI経由で設定できるわけではありません。", "note_about_website_reference": "より多くが利用可能です", + "reconfigure": "再構成", "rename_dialog": "このコンフィグレーションエントリーの名前を変更", "rename_input_label": "エントリー名", "search": "インテグレーションを検索" @@ -1735,8 +1851,21 @@ "versions": "ファームウェアおよびコマンドクラスのバージョンに関する情報の取得", "wakeup": "ウェイクアップ キューとメッセージのサポートのセットアップ" }, + "node": { + "button": "ノードの詳細", + "not_found": "ノードが見つかりません" + }, + "nodes_table": { + "failed": "失敗しました", + "id": "ID", + "manufacturer": "メーカー", + "model": "モデル", + "query_stage": "クエリステージ", + "zwave_plus": "Z-Wave Plus" + }, "refresh_node": { "battery_note": "ノードがバッテリ駆動の場合は、必ずスリープ解除してから続行してください。", + "button": "ノードの更新", "complete": "ノードの更新が完了しました", "description": "これにより、OpenZWaveはノードに再インタビューし、ノードのコマンドクラス、機能、および値を更新するように指示します。", "node_status": "ノードの状態", @@ -1749,7 +1878,8 @@ }, "select_instance": { "header": "OpenZWaveインスタンスを選択", - "introduction": "複数のOpenZWaveインスタンスが実行されています。どのインスタンスを管理しますか?" + "introduction": "複数のOpenZWaveインスタンスが実行されています。どのインスタンスを管理しますか?", + "none_found": "OpenZWaveインスタンスが見つかりませんでした。これが正しくないと思われる場合は、OpenZWaveとMQTTの設定を確認し、HomeAssistantがMQTTブローカーと通信できることを確認してください。" }, "services": { "add_node": "ノードを追加", @@ -1764,6 +1894,9 @@ "create_person": "人を作成", "description": "Home Assistant を追跡している人の管理。", "detail": { + "admin": "管理者", + "allow_login": "ユーザーにログインを許可する", + "confirm_delete_user": "{name}ユーザーアカウントを削除してもよろしいですか?ユーザーを追跡することはできますが、ユーザーはログインできなくなります。", "create": "作成", "delete": "削除", "device_tracker_intro": "このユーザーに属するデバイスを選択します。", @@ -1896,12 +2029,17 @@ "input_text": "入力テキストを再読み込み", "introduction": "Home Assistant の一部は、再起動を必要とせずに再読込できます。再読込を押すと、現在の設定をアンロードし、新しい設定を読み込みます。", "min_max": "最小/最大エンティティを再読み込み", + "mqtt": "mqtt エンティティの再読み込み", "person": "人の再読込", "ping": "ping バイナリ センサー エンティティの再読み込み", + "reload": "{ドメイン} の再読み込み", "rest": "残りのエンティティの再読み込み", + "rpi_gpio": "Raspberry PiGPIOエンティティの再読み込み", "scene": "シーンの再読込", "script": "スクリプトの再読込", + "smtp": "SMTP 通知サービスの再読み込み", "statistics": "静的エンティティの再読み込み", + "telegram": "テレグラム通知サービスの再読み込み", "template": "テンプレート エンティティの再読み込み", "trend": "トレンドエンティティを再読み込み", "universal": "ユニバーサル メディア プレーヤー エンティティの再読み込み", @@ -2272,9 +2410,14 @@ "title": "状態" }, "templates": { + "all_listeners": "このテンプレートは、すべての状態変更イベントをリッスンします。", "description": "テンプレートは、いくつかのホームアシスタント固有の拡張機能を持つJinja2テンプレートエンジンを使用してレンダリングされます。", + "domain": "ドメイン", "editor": "テンプレートエディター", + "entity": "エンティティ", "jinja_documentation": "Jinja2テンプレートのドキュメント", + "listeners": "このテンプレートは、次の状態変更イベントをリッスンします。", + "no_listeners": "このテンプレートは、状態が変更されたイベントが聞こえないため、自動的に更新されません。", "reset": "デモ テンプレートにリセット", "template_extensions": "ホーム アシスタント テンプレートの拡張機能", "title": "テンプレート", @@ -2347,6 +2490,20 @@ "refresh": "更新" }, "editor": { + "action-editor": { + "actions": { + "call-service": "サービスの呼び出し", + "default_action": "デフォルトアクション", + "more-info": "詳細", + "navigate": "ナビゲート", + "none": "アクションなし", + "toggle": "トグル", + "url": "URL" + }, + "editor_service_data": "サービス データはコード エディターでのみ入力できます。", + "navigation_path": "ナビゲーションパス", + "url_path": "URLパス" + }, "card": { "alarm-panel": { "available_states": "利用可能な状態", @@ -2354,12 +2511,20 @@ "name": "アラームパネル" }, "button": { + "default_action_help": "既定のアクションは、エンティティの機能に依存し、切り替えるか、より多くの情報が表示されます。", "description": "ボタン カードを使用すると、タスクを実行するためのボタンを追加できます。", "name": "ボタン" }, "calendar": { + "calendar_entities": "カレンダーエンティティ", "description": "カレンダーカードには、日、週、リストビューを含むカレンダーが表示されます", - "name": "カレンダー" + "inital_view": "初期ビュー", + "name": "カレンダー", + "views": { + "dayGridDay": "日", + "dayGridMonth": "月", + "listWeek": "リスト" + } }, "conditional": { "card": "カード", @@ -2378,8 +2543,31 @@ }, "entities": { "description": "エンティティ カードは、最も一般的な種類のカードです。アイテムをリストにまとめます。", + "edit_special_row": "コードエディタを使用して編集する", + "entity_row_editor": "エンティティエディタ", + "entity_row": { + "attribute": "属性", + "button": "ボタン", + "buttons": "ボタン", + "call-service": "サービスの呼び出し", + "cast": "キャスト", + "conditional": "条件付き", + "divider": "仕切り", + "section": "セクション", + "weblink": "ウェブリンク" + }, "name": "エンティティ", + "secondary_info_values": { + "brightness": "明るさ", + "entity-id": "エンティティ ID", + "last-changed": "最終変更", + "last-triggered": "最後にトリガーされた", + "none": "セカンダリ情報なし", + "position": "ポジション", + "tilt-position": "チルト位置" + }, "show_header_toggle": "ヘッダー切り替えを表示しますか?", + "special_row": "特別", "toggle": "エンティテを切り替え" }, "entity-filter": { @@ -2500,7 +2688,8 @@ "description": "センサーカードは、時間の経過に伴う変化を視覚化するオプションのグラフを使用して、センサーの状態をすばやく提供します。", "graph_detail": "グラフの詳細", "graph_type": "グラフの種類", - "name": "センサー" + "name": "センサー", + "show_more_detail": "詳細を表示" }, "shopping-list": { "description": "ショッピングリストカードを使用すると、ショッピングリストのアイテムを追加、編集、チェックオフ、およびクリアができます。", @@ -2522,7 +2711,11 @@ } }, "cardpicker": { + "by_card": "カード別", + "by_entity": "エンティティ別", "custom_card": "カスタム", + "domain": "ドメイン", + "entity": "エンティティ", "no_description": "説明がありません。" }, "edit_card": { @@ -2536,6 +2729,7 @@ "options": "その他のオプション", "pick_card": "どのカードを追加しますか?", "pick_card_view_title": "{name}ビューにどのカードを追加しますか?", + "search_cards": "カードを検索", "show_code_editor": "コードエディタを表示", "show_visual_editor": "ビジュアルエディターを表示", "toggle_editor": "エディターの切り替え", @@ -2825,6 +3019,12 @@ "more_integrations": "もっと見る" }, "intro": "あなたはあなたの家を目覚めさせ、あなたのプライバシーを取り戻し、ティンカーの世界的なコミュニティに参加する準備ができていますか?", + "restore": { + "description": "以前のスナップショットから復元することもできます。", + "hide_log": "ログ全体を非表示", + "in_progress": "復元中", + "show_log": "ログ全体を表示" + }, "user": { "create_account": "アカウントの作成", "data": { @@ -2856,6 +3056,11 @@ "submit": "送信" }, "current_user": "現在、 {fullName}としてログインしています。", + "customize_sidebar": { + "button": "編集", + "description": "サイドバーのヘッダーを長押しして編集モードを有効にすることもできます。", + "header": "サイドバーから順序を変更し、アイテムを非表示にする" + }, "dashboard": { "description": "このデバイスのデフォルトのダッシュボードを選択してください。", "dropdown_label": "ダッシュボード", @@ -2878,6 +3083,7 @@ "confirm_delete": "{name} のアクセス トークンを削除しますか?", "create": "トークンの作成", "create_failed": "アクセス トークンを作成できませんでした。", + "created": "{日付} に作成されました", "created_at": "{日付} に作成されました", "delete_failed": "アクセス トークンを削除できませんでした。", "description": "スクリプトがホーム アシスタント インスタンスと対話できるように、長期間使用できるアクセス トークンを作成します。各トークンは作成から10年間有効です。次の長期アクセス トークンは現在アクティブです。", @@ -2885,6 +3091,7 @@ "header": "長期間有効なアクセストークン", "last_used": "{location} から {date} で最後に使用されました", "learn_auth_requests": "認証された要求を作成する方法について説明します。", + "name": "名前", "not_used": "一度も使用されていない", "prompt_copy_token": "アクセス トークンをコピーします。再び表示されません。", "prompt_name": "名前?" @@ -2951,6 +3158,7 @@ } }, "sidebar": { + "done": "完了", "external_app_configuration": "アプリの構成", "sidebar_toggle": "サイドバーの切り替え" } diff --git a/translations/frontend/lb.json b/translations/frontend/lb.json index e619602385..fb802a99f8 100644 --- a/translations/frontend/lb.json +++ b/translations/frontend/lb.json @@ -571,7 +571,34 @@ "no_history_found": "Keen Status Verlaaf fonnt" }, "logbook": { - "entries_not_found": "Keng Logbicher Entrée fonnt" + "by": "vun", + "by_service": "no Service", + "entries_not_found": "Keng Logbicher Entrée fonnt", + "messages": { + "became_unavailable": "ass onereechbar ginn.", + "changed_to_state": "geännert op {state}", + "cleared_device_class": "geläscht (keng {device_class} détektéiert)", + "detected_device_class": "{device_class} détektéiert", + "rose": "gehuewen", + "set": "Setzen", + "turned_off": "ausgeschalt", + "turned_on": "ugeschalt", + "was_at_home": "war doheem", + "was_at_state": "war {state}", + "was_away": "war Ënnerwee", + "was_closed": "war zou", + "was_connected": "war connectéiert", + "was_disconnected": "war déconnectéiert", + "was_locked": "war gespaart", + "was_low": "war niddereg", + "was_normal": "war normal", + "was_opened": "war opgemaach", + "was_plugged_in": "war ugeschloss", + "was_safe": "war sécher", + "was_unlocked": "war net gespaart", + "was_unplugged": "war net ugeschloss", + "was_unsafe": "war onsécher" + } }, "media-browser": { "audio_not_supported": "Däin Browser ënnerstëtzt dësen Audio Element net.", @@ -684,6 +711,7 @@ "unavailable": "Dës Entitéit ass net erreechbar fir de Moment.", "update": "Aktualiséieren" }, + "faq": "Dokumentatioun", "no_unique_id": "Dës Entitéit huet keng eenzegaarteg ID, dofir kënnen hir Astellungen net am Benotzer Interface geréiert ginn.", "related": "Relatioun", "settings": "Astellungen" @@ -741,6 +769,7 @@ "dismiss": "Dialog ofbriechen", "edit": "Entitéit änneren", "history": "Verlaf", + "last_updated": "Läscht mise à jour", "person": { "create_zone": "Zone erstellen vun der aktueller Positioun" }, @@ -1446,6 +1475,7 @@ "caption": "Apparater", "confirm_delete": "Sécher fir dësen Appara ze läsche?", "confirm_rename_entity_ids": "Wëllt Dir och d'Entitéiten-ID vun Ären Entitéiten ëmbenennen?", + "confirm_rename_entity_ids_warning": "Dëst ännert keng Konfiguratioun (wéi Automatisatisme, Skripte, Szene, Lovelace) déi aktuell dës Entitéite benotzt, du muss se selwer aktualiséieren.", "data_table": { "area": "Beräich", "battery": "Batterie", @@ -1611,6 +1641,7 @@ "options": "Optiounen", "reload": "Nei lueden", "reload_confirm": "Integratioun gouf frësch gelueden", + "reload_restart_confirm": "Start Home Assistant nei fir dës Integratioun fäerdeg ze lueden", "rename": "Ëmbenennen", "restart_confirm": "Start Home Assistant nei fir dës Integratioun ze läschen", "settings_button": "Astellungen ännere fir {integration}", @@ -1811,6 +1842,7 @@ }, "network": { "header": "Verwaltung vum Netzwierk", + "introduction": "Netzwierk wäit Funktioune verwalten", "node_count": "{count} nodes" }, "node_query_stages": { @@ -1856,7 +1888,8 @@ }, "select_instance": { "header": "Eng OpenZWave Instanz auswielen", - "introduction": "Du hues méi wéi eng OpenZWave Instanz laafen. Wéieng Instanz wëlls du verwalten?" + "introduction": "Du hues méi wéi eng OpenZWave Instanz laafen. Wéieng Instanz wëlls du verwalten?", + "none_found": "Keng OpenZWave Instanz fonnt. Falls dëst inkorrekt ass, iwwerpréif deng OpenZWave an MQTT Astellungen an stell sécher dass den Home Assistant mat dengem MQTT Broker kommunizéiere kann." }, "services": { "add_node": "Node dobäisetzen", @@ -1871,6 +1904,9 @@ "create_person": "Persoun erstellen", "description": "Verwalt d'Persoune déi vum Home Assistant suivéiert ginn.", "detail": { + "admin": "Administrator", + "allow_login": "Login erlaabt fir Persoun", + "confirm_delete_user": "Sécher fir de Benotzer Kont fir {name} ze läschen? Du kanns dann nach ëmmer den Benotzer suivéieren, mee déi Persoun kann sech dann net méi verbannen.", "create": "Erstellen", "delete": "Läschen", "device_tracker_intro": "Wiel d'Apparater aus déi zu dëser Persoun gehéieren.", @@ -2014,6 +2050,7 @@ "telegram": "Telegram Notifikatioun's Servicer frësch lueden", "template": "Modell Entitéite frësch lueden", "trend": "Trend Entitéite frësch lueden", + "universal": "Universal Medie Spiller Entitéite frësch lueden", "zone": "Zone frësch lueden" }, "server_management": { @@ -2037,6 +2074,7 @@ "add_tag": "Tag dobäisetzen", "automation_title": "Tag {name} gouf gescannt", "caption": "Tags", + "create_automation": "Erstell Automatisme mam Tag", "description": "Tags verwalten", "detail": { "create": "Erstellen", @@ -2046,6 +2084,7 @@ "name": "Numm", "new_tag": "Neien tag", "tag_id": "Tag id", + "tag_id_placeholder": "Automatesch erstallt falls eidel geloss", "update": "Aktualiséieren" }, "edit": "Änneren", @@ -2459,6 +2498,19 @@ "refresh": "Frësch lueden" }, "editor": { + "action-editor": { + "actions": { + "call-service": "Service ruffen", + "default_action": "Standard Aktioun", + "more-info": "Méi Informatiounen", + "navigate": "Navigéieren", + "none": "Keng Aktioun", + "toggle": "Ëmschalten", + "url": "Url" + }, + "navigation_path": "Nagiatioun's Pad", + "url_path": "URL Pad" + }, "card": { "alarm-panel": { "available_states": "Verfügbar Zoustänn", @@ -2466,6 +2518,7 @@ "name": "Alarm Zentral" }, "button": { + "default_action_help": "D'Standardaktioun hänkt vun de Fäegkeete vun der Entitéit of, et gëtt entweder ëmgeschalt oder \"méi Info\" gëtt ugewisen.", "description": "Knäppchen Kaart erlaabt et Knäppchen mat Aktioune unzeweisen.", "name": "Knäppchen" }, @@ -2510,6 +2563,15 @@ "weblink": "Web Link" }, "name": "Entitéiten", + "secondary_info_values": { + "brightness": "Hellegkeet", + "entity-id": "Entitéit ID", + "last-changed": "Läscht Ännerung", + "last-triggered": "Läscht ausgeléist", + "none": "Keng Sekundär Informatioun", + "position": "Positioun", + "tilt-position": "Kippstellung" + }, "show_header_toggle": "Titel Schalter uweisen?", "special_row": "Spezial Réih", "toggle": "Entitéiten ëmschalten" @@ -2963,6 +3025,12 @@ "more_integrations": "Méi" }, "intro": "Sidd Dir prett fir Äert Heem interessant ze maachen, Är Privatsphär ze garantéieren an enger weltwäiter Gemeinschaft bei ze trieden?", + "restore": { + "description": "Alternativ kanns Du aus engem fréiere Snapshot restauréieren.", + "hide_log": "Komplette Log verstoppen", + "in_progress": "Restauratioun en cours", + "show_log": "Komplette Log uweisen" + }, "user": { "create_account": "Kont erstellen", "data": { diff --git a/translations/frontend/nb.json b/translations/frontend/nb.json index 748c170b82..f535d71973 100644 --- a/translations/frontend/nb.json +++ b/translations/frontend/nb.json @@ -571,7 +571,34 @@ "no_history_found": "Ingen statushistorikk funnet." }, "logbook": { - "entries_not_found": "Ingen loggbokoppføringer funnet." + "by": "av", + "by_service": "etter tjeneste", + "entries_not_found": "Ingen loggbokoppføringer funnet.", + "messages": { + "became_unavailable": "ble utilgjengelig", + "changed_to_state": "endret til {state}", + "cleared_device_class": "fjernet (ingen {device_class} oppdaget)", + "detected_device_class": "oppdaget {device_class}", + "rose": "rose", + "set": "Angi", + "turned_off": "slått av", + "turned_on": "slått på", + "was_at_home": "var hjemme", + "was_at_state": "var på {state}", + "was_away": "var borte", + "was_closed": "var stengt", + "was_connected": "var koblet til", + "was_disconnected": "ble koblet fra", + "was_locked": "var låst", + "was_low": "var lav", + "was_normal": "var normalt", + "was_opened": "var åpnet", + "was_plugged_in": "ble koblet til", + "was_safe": "var trygg", + "was_unlocked": "ble låst opp", + "was_unplugged": "ble koblet fra", + "was_unsafe": "var utrygt" + } }, "media-browser": { "audio_not_supported": "Nettleseren din støtter ikke lydelementet.", @@ -684,7 +711,8 @@ "unavailable": "Denne entiteten er ikke tilgjengelig for øyeblikket.", "update": "Oppdater" }, - "no_unique_id": "Denne entiteten har ikke en unik ID og derfor kan ikke innstillingene administreres fra brukergrensesnittet.", + "faq": "dokumentasjon", + "no_unique_id": "Denne enheten har ikke en unik ID, og innstillingene kan derfor ikke administreres fra brukergrensesnittet. Se {faq_link} for mer informasjon.", "related": "Relaterte", "settings": "Innstillinger" }, @@ -1865,7 +1893,8 @@ }, "select_instance": { "header": "Velg en OpenZWave-forekomst", - "introduction": "Du har mer enn én OpenZWave-forekomst som kjører. Hvilken forekomst vil du administrere?" + "introduction": "Du har mer enn én OpenZWave-forekomst som kjører. Hvilken forekomst vil du administrere?", + "none_found": "Vi kunne ikke finne en OpenZWave-forekomst. Hvis du mener dette er feil, sjekk OpenZWave- og MQTT-oppsettene og sørg for at Home Assistant kan kommunisere med MQTT-megleren din." }, "services": { "add_node": "Legg til node", @@ -1880,6 +1909,9 @@ "create_person": "Opprett person", "description": "Administrere personene som Home Assistant sporer", "detail": { + "admin": "Administrator", + "allow_login": "Tillat person å logge inn", + "confirm_delete_user": "Er du sikker på at du vil slette brukerkontoen for {name}? Du kan fortsatt spore brukeren, men personen vil ikke lenger kunne logge inn.", "create": "Opprett", "delete": "Slett", "device_tracker_intro": "Velg enhetene som tilhører denne personen.", @@ -2229,7 +2261,7 @@ "create": "Opprett", "delete": "Slett", "icon": "Ikon", - "icon_error_msg": "Ikonet skal være i formatets prefiks:iconname, for eksempel: mdi:home", + "icon_error_msg": "Ikonet skal være i formatet '' prefiks: iconname '', for eksempel: '' mdi: home ''", "latitude": "Breddegrad", "longitude": "Lengdegrad", "name": "Navn", @@ -2527,6 +2559,7 @@ "entities": { "description": "Entities card er den vanligste typen kort. Den grupperer elementer i lister.", "edit_special_row": "Rediger rad ved hjelp av kodeditoren", + "entity_row_editor": "Redigeringsprogram for enhetsrad", "entity_row": { "attribute": "Attributt", "button": "Knapp", @@ -2539,6 +2572,15 @@ "weblink": "Weblink" }, "name": "Entiteter", + "secondary_info_values": { + "brightness": "Lysstyrke", + "entity-id": "Entitets-ID", + "last-changed": "Sist endret", + "last-triggered": "Sist utløst", + "none": "Ingen sekundær info", + "position": "Posisjon", + "tilt-position": "Vippeposisjon" + }, "show_header_toggle": "Vis kortbryter?", "special_row": "spesiell rad", "toggle": "Aktivér/deaktivér entiteter." diff --git a/translations/frontend/pl.json b/translations/frontend/pl.json index d3ce0ba5aa..53465e5e86 100644 --- a/translations/frontend/pl.json +++ b/translations/frontend/pl.json @@ -684,6 +684,7 @@ "unavailable": "Ta encja nie jest obecnie dostępna.", "update": "AKTUALIZUJ" }, + "faq": "dokumentacja", "no_unique_id": "Ten encja nie ma unikalnego identyfikatora, dlatego z poziomu interfejsu użytkownika nie można zarządzać jej ustawieniami.", "related": "Powiązane", "settings": "Ustawienia" @@ -1880,6 +1881,7 @@ "create_person": "Utwórz osobę", "description": "Zarządzaj osobami, które śledzi Home Assistant", "detail": { + "admin": "Administrator", "create": "Utwórz", "delete": "Usuń", "device_tracker_intro": "Wybierz urządzenia należące do tej osoby.", @@ -2539,6 +2541,12 @@ "weblink": "Łącze internetowe" }, "name": "Encje", + "secondary_info_values": { + "brightness": "Jasność", + "entity-id": "Identyfikator encji", + "last-changed": "Ostatnia zmiana", + "position": "Pozycja" + }, "show_header_toggle": "Pokaż przełącznik w nagłówku", "special_row": "wiersz specjalny", "toggle": "Przełącz encje" diff --git a/translations/frontend/pt.json b/translations/frontend/pt.json index 21e2449220..99f3efd6b9 100644 --- a/translations/frontend/pt.json +++ b/translations/frontend/pt.json @@ -571,7 +571,34 @@ "no_history_found": "Nenhum histórico de estado encontrado." }, "logbook": { - "entries_not_found": "Não foram encontradas entradas no Log." + "by": "por", + "by_service": "pelo serviço", + "entries_not_found": "Não foram encontradas entradas no Log.", + "messages": { + "became_unavailable": "ficou indisponível", + "changed_to_state": "alterado para {state}", + "cleared_device_class": "Vazio (nenhuma {device_class} detetada)", + "detected_device_class": "detetado {device_class}", + "rose": "rosa", + "set": "definir", + "turned_off": "desligado", + "turned_on": "ligado", + "was_at_home": "estava em casa", + "was_at_state": "estava em {state}", + "was_away": "estava fora", + "was_closed": "foi fechado", + "was_connected": "foi conectado", + "was_disconnected": "foi desconectado", + "was_locked": "foi trancado", + "was_low": "estava baixo", + "was_normal": "estava normal", + "was_opened": "foi aberto", + "was_plugged_in": "foi conectado", + "was_safe": "estava seguro", + "was_unlocked": "foi destrancado", + "was_unplugged": "foi desconectado", + "was_unsafe": "estava inseguro" + } }, "media-browser": { "audio_not_supported": "O seu navegador não suporta o elemento de áudio.", @@ -684,7 +711,8 @@ "unavailable": "Esta entidade não está atualmente disponível.", "update": "Atualizar" }, - "no_unique_id": "Esta entidade não tem uma identificação única, portanto suas configurações não podem ser geridas a partir da IU.", + "faq": "Documentação", + "no_unique_id": "Esta entidade não tem uma identificação única, portanto suas configurações não podem ser geridas a partir da UI. Para mais informações, ver {faq_link}.", "related": "Relacionadas", "settings": "Definições" }, @@ -741,6 +769,7 @@ "dismiss": "Descartar diálogo", "edit": "Editar entidade", "history": "Histórico", + "last_updated": "Última atualização", "person": { "create_zone": "Criar zona a partir da localização atual" }, @@ -1864,7 +1893,8 @@ }, "select_instance": { "header": "Selecione uma instância OpenZWave", - "introduction": "Tem mais do que uma instância Openzwave em execução. Que instância deseja gerir?" + "introduction": "Tem mais do que uma instância Openzwave em execução. Que instância deseja gerir?", + "none_found": "Não conseguimos encontrar uma instância OpenZWave. Se você acredita que isso está incorreto, verifique as configurações do OpenZWave e do MQTT e certifique-se de que o Home Assistant possa se comunicar com o seu corretor MQTT." }, "services": { "add_node": "Adicionar nó", @@ -1879,6 +1909,9 @@ "create_person": "Criar pessoa", "description": "Gerir as pessoas que o Home Assistant segue.", "detail": { + "admin": "Administrador", + "allow_login": "Permitir login", + "confirm_delete_user": "Tem a certeza que quer apagar a conta de utilizador do {name}? Ainda poderá rastrear o utilizador, mas a pessoa não poderá mais efetuar o login.", "create": "Criar", "delete": "Apagar", "device_tracker_intro": "Selecione os dispositivos que pertencem a esta pessoa.", @@ -2228,7 +2261,7 @@ "create": "Criar", "delete": "Eliminar", "icon": "Ícone", - "icon_error_msg": "O ícone deve estar no prefixo do formato: iconname, por exemplo: mdi: home", + "icon_error_msg": "O ícone deve estar no formato \"prefixo:nome do icon\", por exemplo: \"mdi:home\"", "latitude": "Latitude", "longitude": "Longitude", "name": "Nome", @@ -2472,6 +2505,20 @@ "refresh": "Atualizar" }, "editor": { + "action-editor": { + "actions": { + "call-service": "Chamar serviço", + "default_action": "Ação por defeito", + "more-info": "Mais informações", + "navigate": "Navegar", + "none": "Nenhuma Ação", + "toggle": "Alternar", + "url": "Url" + }, + "editor_service_data": "Os dados de serviço só podem ser inseridos no editor de código", + "navigation_path": "URL de navegação", + "url_path": "URL" + }, "card": { "alarm-panel": { "available_states": "Estados Disponíveis", @@ -2479,15 +2526,19 @@ "name": "Painel de alarme" }, "button": { + "default_action_help": "A ação padrão depende dos recursos da entidade, ela será alternada ou mais informações serão mostradas.", "description": "O Cartão de Botões permite-lhe adicionar botões para realizar tarefas.", "name": "Botão" }, "calendar": { + "calendar_entities": "Entidades do calendário", "description": "O cartão do Calendário exibe um calendário incluindo dia, semana e visualizações de lista", + "inital_view": "Vista Inicial", "name": "Calendário", "views": { "dayGridDay": "Dia", - "dayGridMonth": "Mês" + "dayGridMonth": "Mês", + "listWeek": "Lista" } }, "conditional": { @@ -2508,6 +2559,7 @@ "entities": { "description": "O cartão de entidades é o tipo mais comum de cartão. Ele agrupa itens em listas.", "edit_special_row": "Editar linha usando o editor de código", + "entity_row_editor": "Editor de Linha de Entidade", "entity_row": { "attribute": "Atributo", "button": "Botão", @@ -2520,6 +2572,15 @@ "weblink": "Ligação Web" }, "name": "Entidades", + "secondary_info_values": { + "brightness": "Brilho", + "entity-id": "ID da entidade", + "last-changed": "Última modificação", + "last-triggered": "Acionado pela última vez", + "none": "Sem informações secundárias", + "position": "Posição", + "tilt-position": "Posição de Inclinação" + }, "show_header_toggle": "Show Header Toggle?", "special_row": "linha especial", "toggle": "Alternar entidades." @@ -2973,6 +3034,12 @@ "more_integrations": "Mais" }, "intro": "Está pronto para despertar a sua casa, reclamar a sua privacidade e juntar-se a uma comunidade mundial de tecnólogos?", + "restore": { + "description": "Em alternativa, pode restaurar a partir de um snapshot anterior.", + "hide_log": "Ocultar log completo", + "in_progress": "Restauração em curso", + "show_log": "Mostrar log completo" + }, "user": { "create_account": "Criar conta", "data": { diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index 1927fdd5ae..790c3fef55 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -571,7 +571,14 @@ "no_history_found": "История не найдена." }, "logbook": { - "entries_not_found": "В журнале нет записей." + "by": "пользователем", + "by_service": "службой", + "entries_not_found": "В журнале нет записей.", + "messages": { + "changed_to_state": "изменяет состояние на {state}", + "turned_off": "выключается", + "turned_on": "включается" + } }, "media-browser": { "audio_not_supported": "Ваш браузер не поддерживает аудио.", @@ -1865,7 +1872,8 @@ }, "select_instance": { "header": "Выберите экземпляр OpenZWave", - "introduction": "У Вас работает более одного экземпляра OpenZWave. Каким экземпляром Вы хотите управлять?" + "introduction": "У Вас работает более одного экземпляра OpenZWave. Каким экземпляром Вы хотите управлять?", + "none_found": "Не удалось найти экземпляр OpenZWave. Проверьте настройки OpenZWave и MQTT и убедитесь, что Home Assistant может связываться с Вашим брокером MQTT." }, "services": { "add_node": "Добавить узел", @@ -1880,6 +1888,9 @@ "create_person": "Добавить персону", "description": "Люди, которых может отслеживать Home Assistant", "detail": { + "admin": "Администратор", + "allow_login": "Разрешить вход в систему", + "confirm_delete_user": "Вы уверены, что хотите удалить учётную запись пользователя {name}? Отслеживание будет работать как прежде, но вход в систему для него будет закрыт.", "create": "Создать", "delete": "Удалить", "device_tracker_intro": "Выберите устройства, отслеживающие этого человека.", @@ -2527,6 +2538,7 @@ "entities": { "description": "Самая распространённая карточка. Она группирует объекты в виде списка.", "edit_special_row": "Редактировать строку с помощью текстового редактора", + "entity_row_editor": "Редактор строки объекта", "entity_row": { "attribute": "Атрибут", "button": "Кнопка", @@ -2539,6 +2551,15 @@ "weblink": "Ссылка на веб-страницу" }, "name": "Объекты", + "secondary_info_values": { + "brightness": "Яркость", + "entity-id": "ID объекта", + "last-changed": "Последнее изменение", + "last-triggered": "Последний запуск", + "none": "Нет дополнительной информации", + "position": "Положение", + "tilt-position": "Положение наклона" + }, "show_header_toggle": "Переключатель в заголовке", "special_row": "(специальная строка)", "toggle": "Переключить объекты" diff --git a/translations/frontend/tr.json b/translations/frontend/tr.json index 6d987bf2fd..e85c19fe12 100644 --- a/translations/frontend/tr.json +++ b/translations/frontend/tr.json @@ -556,7 +556,12 @@ "no_history_found": "Durum geçmişi bulunamadı." }, "logbook": { - "entries_not_found": "Kayıt defteri girişi bulunamadı." + "entries_not_found": "Kayıt defteri girişi bulunamadı.", + "messages": { + "rose": "gül", + "was_closed": "kapatıldı", + "was_opened": "açıldı" + } }, "media-browser": { "choose_player": "Medya oynatıcı seçin", @@ -633,6 +638,7 @@ "unavailable": "Bu varlık şu anda kullanılamıyor.", "update": "Güncelle" }, + "faq": "dokümantasyon", "no_unique_id": "Bu varlığın benzersiz bir kimliği yok, bu nedenle ayarları kullanıcı arayüzünden yönetilemiyor.", "related": "İlgili", "settings": "Ayarlar" @@ -2243,6 +2249,11 @@ "weblink": "Web Bağlantısı" }, "name": "Varlıklar", + "secondary_info_values": { + "last-changed": "Son değiştirilen", + "last-triggered": "Son Tetiklenen", + "position": "Pozisyon" + }, "show_header_toggle": "Başlık Değiştirme Gösterilsin mi?", "special_row": "özel satır", "toggle": "Varlıklarageçiş." diff --git a/translations/frontend/zh-Hans.json b/translations/frontend/zh-Hans.json index 21ea2eaa9f..2977d7cdbf 100644 --- a/translations/frontend/zh-Hans.json +++ b/translations/frontend/zh-Hans.json @@ -571,7 +571,34 @@ "no_history_found": "没有找到历史状态。" }, "logbook": { - "entries_not_found": "未找到日志条目。" + "by": ", 通过", + "by_service": ", 通过服务", + "entries_not_found": "未找到日志条目。", + "messages": { + "became_unavailable": "变为不可用", + "changed_to_state": "变为 {state}", + "cleared_device_class": "未检测到 {device_class}", + "detected_device_class": "检测到 {device_class}", + "rose": "升起", + "set": "落下", + "turned_off": "已关闭", + "turned_on": "已开启", + "was_at_home": "在家", + "was_at_state": "处于 {state}", + "was_away": "离开", + "was_closed": "已关闭", + "was_connected": "已连接", + "was_disconnected": "已断开", + "was_locked": "已锁定", + "was_low": "较低", + "was_normal": "正常", + "was_opened": "已打开", + "was_plugged_in": "已插入", + "was_safe": "安全", + "was_unlocked": "已解锁", + "was_unplugged": "已拔出", + "was_unsafe": "危险" + } }, "media-browser": { "audio_not_supported": "您的浏览器不支持音频元素。", @@ -684,7 +711,8 @@ "unavailable": "该实体暂不可用。", "update": "更新" }, - "no_unique_id": "该实体没有唯一的 ID,因此无法由 UI 管理其设置。", + "faq": "文档", + "no_unique_id": "该实体没有唯一的 ID,因此无法由 UI 管理其设置。请参阅 {faq_link} 以详细了解。", "related": "关联", "settings": "设置" }, @@ -741,6 +769,7 @@ "dismiss": "关闭对话框", "edit": "编辑实体", "history": "历史", + "last_updated": "上次更新", "person": { "create_zone": "从当前位置创建地点" }, @@ -1278,7 +1307,7 @@ "expose_entity": "使实体可发现", "exposed": "{selected} 个可发现", "exposed_entities": "公开的实体", - "follow_domain": "关注域", + "follow_domain": "跟随域设置", "manage_domains": "管理域", "not_exposed": "{selected} 个不可发现", "not_exposed_entities": "不可发现的实体", @@ -1323,7 +1352,7 @@ "expose_entity": "使实体可发现", "exposed": "{selected} 个可发现", "exposed_entities": "公开的实体", - "follow_domain": "关注域", + "follow_domain": "跟随域设置", "manage_domains": "管理域", "not_exposed": "{selected} 个不可发现", "not_exposed_entities": "不可发现的实体", @@ -1864,7 +1893,8 @@ }, "select_instance": { "header": "选择一个 OpenZWave 实例", - "introduction": "有多个 OpenZWave 实例正在运行。您要管理哪个实例?" + "introduction": "有多个 OpenZWave 实例正在运行。您要管理哪个实例?", + "none_found": "无法找到 OpenZWave 实例。如有疑问,请检查 OpenZWave 和 MQTT 设置,确保 Home Assistant 可以与 MQTT broker 通信。" }, "services": { "add_node": "添加节点", @@ -1879,6 +1909,9 @@ "create_person": "创建人员", "description": "管理 Home Assistant 跟踪的人员", "detail": { + "admin": "管理员", + "allow_login": "允许人员登录", + "confirm_delete_user": "您确定要删除用户 {name} 的帐户吗?您仍然可以跟踪该用户,但他将不能再登录。", "create": "创建", "delete": "删除", "device_tracker_intro": "选择属于此人的设备。", @@ -2228,7 +2261,7 @@ "create": "创建", "delete": "删除", "icon": "图标", - "icon_error_msg": "图标的格式应为 prefix:iconname,例如:mdi:home", + "icon_error_msg": "图标的格式应为“prefix:iconname”,例如:“mdi:home”", "latitude": "纬度", "longitude": "经度", "name": "名称", @@ -2472,6 +2505,20 @@ "refresh": "刷新" }, "editor": { + "action-editor": { + "actions": { + "call-service": "调用服务", + "default_action": "默认动作", + "more-info": "更多信息", + "navigate": "导航", + "none": "没有动作", + "toggle": "切换", + "url": "网址" + }, + "editor_service_data": "服务数据只能在代码编辑器中输入", + "navigation_path": "导航路径", + "url_path": "网址路径" + }, "card": { "alarm-panel": { "available_states": "可用状态", @@ -2479,6 +2526,7 @@ "name": "报警面板" }, "button": { + "default_action_help": "默认动作取决于实体的功能,可能会切换状态或显示更多信息。", "description": "“按钮”卡片用于添加按钮来执行任务。", "name": "按钮" }, @@ -2511,6 +2559,7 @@ "entities": { "description": "“实体”卡片是最常见的卡片。它将项目汇聚成列表。", "edit_special_row": "使用代码编辑器编辑行", + "entity_row_editor": "实体行编辑器", "entity_row": { "attribute": "属性", "button": "按钮", @@ -2523,6 +2572,15 @@ "weblink": "网页链接" }, "name": "实体", + "secondary_info_values": { + "brightness": "亮度", + "entity-id": "实体 ID", + "last-changed": "上次变化", + "last-triggered": "上次触发", + "none": "无次要信息", + "position": "位置", + "tilt-position": "倾斜位置" + }, "show_header_toggle": "显示标题旁的开关?", "special_row": "特殊行", "toggle": "切换实体。" @@ -2684,7 +2742,7 @@ "header": "卡片配置", "move": "移动", "options": "更多选项", - "pick_card": "请选择要添加的卡片。", + "pick_card": "您想添加哪张卡片?", "pick_card_view_title": "您想将哪张卡片添加到 {name} 视图?", "search_cards": "搜索卡片", "show_code_editor": "显示代码编辑器", @@ -2790,7 +2848,7 @@ "domain": "域", "entity": "实体", "entity_id": "实体 ID", - "last_changed": "最后更改", + "last_changed": "上次变化", "no_data": "没有未使用的实体", "search": "搜索实体", "select_to_add": "选择要添加到卡片中的实体,然后单击添加卡片按钮。", @@ -2976,6 +3034,12 @@ "more_integrations": "更多" }, "intro": "准备好唤醒你的家、找回你的隐私,并加入世界级的极客社区了吗?", + "restore": { + "description": "或者,您也可以从以前的快照还原。", + "hide_log": "隐藏完整日志", + "in_progress": "正在还原", + "show_log": "显示完整日志" + }, "user": { "create_account": "创建帐户", "data": { diff --git a/translations/frontend/zh-Hant.json b/translations/frontend/zh-Hant.json index 6663723d5b..6504b05bca 100644 --- a/translations/frontend/zh-Hant.json +++ b/translations/frontend/zh-Hant.json @@ -571,7 +571,34 @@ "no_history_found": "找不到狀態歷史。" }, "logbook": { - "entries_not_found": "找不到實體日誌。" + "by": "由", + "by_service": "由服務", + "entries_not_found": "找不到實體日誌。", + "messages": { + "became_unavailable": "變成不可用", + "changed_to_state": "變更為{state}", + "cleared_device_class": "安全(無{device_class}偵測)", + "detected_device_class": "偵測到{device_class}", + "rose": "升高", + "set": "設定", + "turned_off": "關閉", + "turned_on": "開啟", + "was_at_home": "狀態在家", + "was_at_state": "狀態{state}", + "was_away": "狀態離家", + "was_closed": "狀態關閉", + "was_connected": "狀態連線", + "was_disconnected": "狀態斷線", + "was_locked": "狀態上鎖", + "was_low": "狀態過低", + "was_normal": "狀態正常", + "was_opened": "狀態開啟", + "was_plugged_in": "狀態插上", + "was_safe": "狀態安全", + "was_unlocked": "狀態解鎖", + "was_unplugged": "狀態拔下", + "was_unsafe": "狀態不安全" + } }, "media-browser": { "audio_not_supported": "瀏覽器不支援音效元件。", @@ -684,7 +711,8 @@ "unavailable": "該實體目前不可用。", "update": "更新" }, - "no_unique_id": "此實體不包含唯一 ID、因此無法由 UI 進行管理設定。", + "faq": "相關文件", + "no_unique_id": "此實體不包含唯一 ID、因此無法由 UI 進行管理設定。請參閱{faq_link}以獲得更詳細資訊。", "related": "相關", "settings": "設定" }, @@ -1865,7 +1893,8 @@ }, "select_instance": { "header": "選擇 OpenZWave 設備", - "introduction": "超過一個以上的 OpenZWave 設備執行中,要管理哪個設備?" + "introduction": "超過一個以上的 OpenZWave 設備執行中,要管理哪個設備?", + "none_found": "找不到 Openzwave 設備。假如您認為有問題,請再確認 Openzwave 與 MQTT 設定、並確定 Home Assistant 能夠與 MQTT Broker 進行通訊。" }, "services": { "add_node": "新增節點", @@ -1880,6 +1909,9 @@ "create_person": "新增人員", "description": "管理 Home Assistant 追蹤人員", "detail": { + "admin": "管理員", + "allow_login": "允許人員登入", + "confirm_delete_user": "確定要刪除帳號{name}使用者?依舊可以追蹤使用者,但人員將無法進行登入。", "create": "新增", "delete": "刪除", "device_tracker_intro": "選擇此人員所擁有的設備。", @@ -2229,7 +2261,7 @@ "create": "新增", "delete": "刪除", "icon": "圖示", - "icon_error_msg": "圖示格式為 prefix:iconname、例如:mdi:home", + "icon_error_msg": "圖示格式為 ''prefix:iconname''、例如:''mdi:home''", "latitude": "緯度", "longitude": "經度", "name": "名稱", @@ -2527,6 +2559,7 @@ "entities": { "description": "實體列表面板為最常用的面板。將實體分組為列表使用。", "edit_special_row": "使用編碼編輯器編輯", + "entity_row_editor": "實體編輯器", "entity_row": { "attribute": "屬性", "button": "按鈕", @@ -2539,6 +2572,15 @@ "weblink": "網站連結" }, "name": "實體", + "secondary_info_values": { + "brightness": "亮度", + "entity-id": "實體 ID", + "last-changed": "上次變更", + "last-triggered": "上次觸發", + "none": "無次要資訊", + "position": "位置", + "tilt-position": "標題位置" + }, "show_header_toggle": "於頁首顯示開關?", "special_row": "特殊列", "toggle": "切換實體。" From 93d1b9a2d5f562e42dc19b6608f5c86fb0162bc4 Mon Sep 17 00:00:00 2001 From: Zack Barett Date: Fri, 2 Oct 2020 03:12:55 -0500 Subject: [PATCH 003/155] Fix entities Card toggle (#7192) --- src/panels/lovelace/cards/hui-entities-card.ts | 2 +- .../lovelace/components/hui-entities-toggle.ts | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/panels/lovelace/cards/hui-entities-card.ts b/src/panels/lovelace/cards/hui-entities-card.ts index 2ef80eaa7f..81080552d6 100644 --- a/src/panels/lovelace/cards/hui-entities-card.ts +++ b/src/panels/lovelace/cards/hui-entities-card.ts @@ -204,7 +204,7 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard { "type" in conf + (conf) => !("type" in conf) ) as EntityConfig[]).map((conf) => conf.entity)} > `} diff --git a/src/panels/lovelace/components/hui-entities-toggle.ts b/src/panels/lovelace/components/hui-entities-toggle.ts index 35fe8910b5..b1d56f8626 100644 --- a/src/panels/lovelace/components/hui-entities-toggle.ts +++ b/src/panels/lovelace/components/hui-entities-toggle.ts @@ -3,9 +3,9 @@ import { CSSResult, customElement, html, + internalProperty, LitElement, property, - internalProperty, PropertyValues, TemplateResult, } from "lit-element"; @@ -18,9 +18,9 @@ import { turnOnOffEntities } from "../common/entity/turn-on-off-entities"; @customElement("hui-entities-toggle") class HuiEntitiesToggle extends LitElement { - @property() public entities?: string[]; + @property({ type: Array }) public entities?: string[]; - @property() protected hass?: HomeAssistant; + @property({ attribute: false }) protected hass?: HomeAssistant; @internalProperty() private _toggleEntities?: string[]; @@ -36,7 +36,7 @@ class HuiEntitiesToggle extends LitElement { } protected render(): TemplateResult { - if (!this._toggleEntities) { + if (!this._toggleEntities?.length) { return html``; } @@ -45,11 +45,11 @@ class HuiEntitiesToggle extends LitElement { aria-label=${this.hass!.localize( "ui.panel.lovelace.card.entities.toggle" )} - .checked="${this._toggleEntities!.some((entityId) => { + .checked=${this._toggleEntities!.some((entityId) => { const stateObj = this.hass!.states[entityId]; return stateObj && stateObj.state === "on"; - })}" - @change="${this._callService}" + })} + @change=${this._callService} > `; } From cbdfaccdb2183c96b4af79316560e60c9c4ccf41 Mon Sep 17 00:00:00 2001 From: Zack Barett Date: Fri, 2 Oct 2020 07:57:42 -0500 Subject: [PATCH 004/155] Logbook: Fix for no state obj (#7191) --- src/data/logbook.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/data/logbook.ts b/src/data/logbook.ts index 5d66e4ce14..74d2231f4a 100644 --- a/src/data/logbook.ts +++ b/src/data/logbook.ts @@ -44,11 +44,12 @@ export const getLogbookData = async ( ); for (const entry of logbookData) { - if (entry.state) { + const stateObj = hass!.states[entry.entity_id!]; + if (entry.state && stateObj) { entry.message = getLogbookMessage( hass, entry.state, - hass!.states[entry.entity_id!], + stateObj, computeDomain(entry.entity_id!) ); } From 2ecf7bca97293188664fb2cd755ea68826457f63 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Fri, 2 Oct 2020 15:09:27 +0200 Subject: [PATCH 005/155] Set hass when creating card (#7187) --- cast/src/receiver/layout/hc-lovelace.ts | 3 +-- src/panels/lovelace/views/hui-view.ts | 23 +++++++++++++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/cast/src/receiver/layout/hc-lovelace.ts b/cast/src/receiver/layout/hc-lovelace.ts index 0151f39073..3812da11d0 100644 --- a/cast/src/receiver/layout/hc-lovelace.ts +++ b/cast/src/receiver/layout/hc-lovelace.ts @@ -49,7 +49,6 @@ class HcLovelace extends LitElement { .hass=${this.hass} .lovelace=${lovelace} .index=${index} - columns="2" > `; } @@ -67,7 +66,7 @@ class HcLovelace extends LitElement { if (configBackground) { (this.shadowRoot!.querySelector( - "hui-view, hui-panel-view" + "hui-view" ) as HTMLElement)!.style.setProperty( "--lovelace-background", configBackground diff --git a/src/panels/lovelace/views/hui-view.ts b/src/panels/lovelace/views/hui-view.ts index de0bae5ea6..3a8dcbcd04 100644 --- a/src/panels/lovelace/views/hui-view.ts +++ b/src/panels/lovelace/views/hui-view.ts @@ -164,14 +164,12 @@ export class HUIView extends UpdatingElement { return; } - const elements: HUIView["_badges"] = []; const badges = processConfigEntities(config.badges as any); - badges.forEach((badge) => { + this._badges = badges.map((badge) => { const element = createBadgeElement(badge); element.hass = this.hass; - elements.push(element); + return element; }); - this._badges = elements; } private _createCards(config: LovelaceViewConfig): void { @@ -180,9 +178,11 @@ export class HUIView extends UpdatingElement { return; } - this._cards = config.cards.map((cardConfig) => - this.createCardElement(cardConfig) - ); + this._cards = config.cards.map((cardConfig) => { + const element = this.createCardElement(cardConfig); + element.hass = this.hass; + return element; + }); } private _rebuildCard( @@ -190,6 +190,7 @@ export class HUIView extends UpdatingElement { config: LovelaceCardConfig ): void { const newCardEl = this.createCardElement(config); + newCardEl.hass = this.hass; if (cardElToReplace.parentElement) { cardElToReplace.parentElement!.replaceChild(newCardEl, cardElToReplace); } @@ -203,7 +204,13 @@ export class HUIView extends UpdatingElement { config: LovelaceBadgeConfig ): void { const newBadgeEl = this.createBadgeElement(config); - badgeElToReplace.parentElement!.replaceChild(newBadgeEl, badgeElToReplace); + newBadgeEl.hass = this.hass; + if (badgeElToReplace.parentElement) { + badgeElToReplace.parentElement!.replaceChild( + newBadgeEl, + badgeElToReplace + ); + } this._badges = this._cards!.map((curBadgeEl) => curBadgeEl === badgeElToReplace ? newBadgeEl : curBadgeEl ); From 72aa9a3b62240b5d2ebf6c05cecef0bb13f199b7 Mon Sep 17 00:00:00 2001 From: Tomasz Date: Fri, 2 Oct 2020 15:12:54 +0200 Subject: [PATCH 006/155] use ha-svg-icon in more-info-weather (#7196) --- .../more-info/controls/more-info-weather.ts | 72 ++++++++++++------- 1 file changed, 47 insertions(+), 25 deletions(-) diff --git a/src/dialogs/more-info/controls/more-info-weather.ts b/src/dialogs/more-info/controls/more-info-weather.ts index 8d7a4ca5f3..9403fefc4b 100644 --- a/src/dialogs/more-info/controls/more-info-weather.ts +++ b/src/dialogs/more-info/controls/more-info-weather.ts @@ -1,3 +1,4 @@ +import "../../../components/ha-svg-icon"; import { HassEntity } from "home-assistant-js-websocket"; import { css, @@ -9,7 +10,28 @@ import { } from "lit-element"; import { html, TemplateResult } from "lit-html"; import { HomeAssistant } from "../../../types"; -import "../../../components/ha-icon"; + +import { + mdiAlertCircleOutline, + mdiEye, + mdiGauge, + mdiThermometer, + mdiWaterPercent, + mdiWeatherCloudy, + mdiWeatherFog, + mdiWeatherHail, + mdiWeatherLightning, + mdiWeatherLightningRainy, + mdiWeatherNight, + mdiWeatherPartlyCloudy, + mdiWeatherPouring, + mdiWeatherRainy, + mdiWeatherSnowy, + mdiWeatherSnowyRainy, + mdiWeatherSunny, + mdiWeatherWindy, + mdiWeatherWindyVariant, +} from "@mdi/js"; const cardinalDirections = [ "N", @@ -32,21 +54,21 @@ const cardinalDirections = [ ]; const weatherIcons = { - "clear-night": "hass:weather-night", - cloudy: "hass:weather-cloudy", - exceptional: "hass:alert-circle-outline", - fog: "hass:weather-fog", - hail: "hass:weather-hail", - lightning: "hass:weather-lightning", - "lightning-rainy": "hass:weather-lightning-rainy", - partlycloudy: "hass:weather-partly-cloudy", - pouring: "hass:weather-pouring", - rainy: "hass:weather-rainy", - snowy: "hass:weather-snowy", - "snowy-rainy": "hass:weather-snowy-rainy", - sunny: "hass:weather-sunny", - windy: "hass:weather-windy", - "windy-variant": "hass:weather-windy-variant", + "clear-night": mdiWeatherNight, + cloudy: mdiWeatherCloudy, + exceptional: mdiAlertCircleOutline, + fog: mdiWeatherFog, + hail: mdiWeatherHail, + lightning: mdiWeatherLightning, + "lightning-rainy": mdiWeatherLightningRainy, + partlycloudy: mdiWeatherPartlyCloudy, + pouring: mdiWeatherPouring, + rainy: mdiWeatherRainy, + snowy: mdiWeatherSnowy, + "snowy-rainy": mdiWeatherSnowyRainy, + sunny: mdiWeatherSunny, + windy: mdiWeatherWindy, + "windy-variant": mdiWeatherWindyVariant, }; @customElement("more-info-weather") @@ -79,7 +101,7 @@ class MoreInfoWeather extends LitElement { return html`
- +
${this.hass.localize("ui.card.weather.attributes.temperature")}
@@ -90,7 +112,7 @@ class MoreInfoWeather extends LitElement { ${this._showValue(this.stateObj.attributes.pressure) ? html`
- +
${this.hass.localize("ui.card.weather.attributes.air_pressure")}
@@ -104,7 +126,7 @@ class MoreInfoWeather extends LitElement { ${this._showValue(this.stateObj.attributes.humidity) ? html`
- +
${this.hass.localize("ui.card.weather.attributes.humidity")}
@@ -115,7 +137,7 @@ class MoreInfoWeather extends LitElement { ${this._showValue(this.stateObj.attributes.wind_speed) ? html`
- +
${this.hass.localize("ui.card.weather.attributes.wind_speed")}
@@ -131,7 +153,7 @@ class MoreInfoWeather extends LitElement { ${this._showValue(this.stateObj.attributes.visibility) ? html`
- +
${this.hass.localize("ui.card.weather.attributes.visibility")}
@@ -151,9 +173,9 @@ class MoreInfoWeather extends LitElement {
${item.condition ? html` - + ` : ""} ${!this._showValue(item.templow) @@ -193,7 +215,7 @@ class MoreInfoWeather extends LitElement { static get styles(): CSSResult { return css` - ha-icon { + ha-svg-icon { color: var(--paper-item-icon-color); } .section { From 601c9090048e7a7cf64b56a5c2448e6a113af38c Mon Sep 17 00:00:00 2001 From: Zack Barett Date: Fri, 2 Oct 2020 11:29:29 -0500 Subject: [PATCH 007/155] Warning Element: Fix Overflow in Entity Row (#7193) --- src/panels/lovelace/components/hui-warning.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/panels/lovelace/components/hui-warning.ts b/src/panels/lovelace/components/hui-warning.ts index 5dac061e58..05732f51b1 100644 --- a/src/panels/lovelace/components/hui-warning.ts +++ b/src/panels/lovelace/components/hui-warning.ts @@ -1,3 +1,4 @@ +import { STATE_NOT_RUNNING } from "home-assistant-js-websocket"; import { css, CSSResult, @@ -7,7 +8,6 @@ import { TemplateResult, } from "lit-element"; import { HomeAssistant } from "../../../types"; -import { STATE_NOT_RUNNING } from "home-assistant-js-websocket"; export const createEntityNotFoundWarning = ( hass: HomeAssistant, @@ -35,6 +35,7 @@ export class HuiWarning extends LitElement { color: black; background-color: #fce588; padding: 8px; + word-break: break-word; } `; } From 29c900465401091b289b430fb00f27b07512817e Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Sat, 3 Oct 2020 00:32:26 +0000 Subject: [PATCH 008/155] [ci skip] Translation update --- translations/frontend/cs.json | 31 ++++++++++-- translations/frontend/de.json | 15 +++++- translations/frontend/et.json | 4 +- translations/frontend/lb.json | 6 +++ translations/frontend/pl.json | 36 +++++++++++-- translations/frontend/ru.json | 22 +++++++- translations/frontend/sv.json | 95 ++++++++++++++++++++++++++++++----- 7 files changed, 185 insertions(+), 24 deletions(-) diff --git a/translations/frontend/cs.json b/translations/frontend/cs.json index abdace240e..4206ab9bd2 100644 --- a/translations/frontend/cs.json +++ b/translations/frontend/cs.json @@ -571,10 +571,32 @@ "no_history_found": "Historie stavu chybí." }, "logbook": { + "by_service": "službou", "entries_not_found": "Nenalezeny žádné záznamy.", "messages": { + "became_unavailable": "stalo se nedostupným", + "changed_to_state": "změněno na {state}", + "cleared_device_class": "zrušeno (nebylo zjištěno {device_class})", + "detected_device_class": "zjištěno {device_class}", + "rose": "vzrostlo", + "set": "nastaveno", "turned_off": "vypnuto", - "turned_on": "zapnuto" + "turned_on": "zapnuto", + "was_at_home": "byl doma", + "was_at_state": "bylo v {state}", + "was_away": "byl pryč", + "was_closed": "bylo zavřeno", + "was_connected": "bylo připojeno", + "was_disconnected": "bylo odpojeno", + "was_locked": "bylo uzamčeno", + "was_low": "bylo nízké", + "was_normal": "bylo normální", + "was_opened": "bylo otevřeno", + "was_plugged_in": "bylo zapojeno", + "was_safe": "bylo v bezpečí", + "was_unlocked": "bylo odemčeno", + "was_unplugged": "bylo odpojeno", + "was_unsafe": "bylo v nebezpečí" } }, "media-browser": { @@ -1870,7 +1892,8 @@ }, "select_instance": { "header": "Vyberte instanci OpenZWave", - "introduction": "Máte více než jednu instanci OpenZWave. Kterou instanci chcete spravovat?" + "introduction": "Máte více než jednu instanci OpenZWave. Kterou instanci chcete spravovat?", + "none_found": "Instance OpenZWave nebyla nalezena. Pokud se domníváte, že to není správně, zkontrolujte nastavení OpenZWave a MQTT a zajistěte, aby Home Assistant mohl komunikovat s vaším MQTT." }, "services": { "add_node": "Přidat uzel", @@ -2387,8 +2410,8 @@ "alert_entity_field": "Entita je povinné pole", "attributes": "Atributy", "current_entities": "Současné entity", - "description1": "Nastavte zobrazení zařízení v Home Assistant", - "description2": "Toto nebude komunikovat se skutečným zařízením.", + "description1": "Nastavte stav zařízení v Home Assistant.", + "description2": "Stav skutečného zařízení se nezmění.", "entity": "Entita", "filter_attributes": "Filtrovat atributy", "filter_entities": "Filtrovat entity", diff --git a/translations/frontend/de.json b/translations/frontend/de.json index 6ee4183171..8359512006 100644 --- a/translations/frontend/de.json +++ b/translations/frontend/de.json @@ -568,7 +568,11 @@ "no_history_found": "Kein Zustandsverlauf gefunden." }, "logbook": { - "entries_not_found": "Keine Logbucheinträge gefunden." + "entries_not_found": "Keine Logbucheinträge gefunden.", + "messages": { + "turned_off": "ausgeschaltet", + "turned_on": "eingeschaltet" + } }, "media-browser": { "audio_not_supported": "Ihr Browser unterstützt das Audioelement nicht.", @@ -665,6 +669,7 @@ "unavailable": "Diese Entität ist derzeit nicht verfügbar.", "update": "Aktualisieren" }, + "faq": "Dokumentation", "no_unique_id": "Diese Entität hat keine eindeutige ID, daher können die Einstellungen nicht über die UI verwaltet werden.", "related": "Verwandte", "settings": "Einstellungen" @@ -1770,6 +1775,7 @@ "create_person": "Person erstellen", "description": "Verwalte die Personen, die Home Assistant verfolgt.", "detail": { + "confirm_delete_user": "Bist Du sicher, dass Du das Benutzerkonto von {name} löschen möchtest? Du kannst das Benutzerkonto immer noch verfolgen, aber es kann nicht mehr zum Anmelden verwendet werden.", "create": "Erstellen", "delete": "Löschen", "device_tracker_intro": "Wähle die Geräte, die dieser Person gehören.", @@ -2386,6 +2392,13 @@ "call-service": "Dienst ausführen" }, "name": "Elemente", + "secondary_info_values": { + "brightness": "Helligkeit", + "entity-id": "Entitäts-ID", + "last-changed": "Zuletzt geändert", + "last-triggered": "Zuletzt ausgelöst", + "position": "Position" + }, "show_header_toggle": "Schalter anzeigen?", "toggle": "Entitäten umschalten" }, diff --git a/translations/frontend/et.json b/translations/frontend/et.json index a3b5dbf62c..881f567114 100644 --- a/translations/frontend/et.json +++ b/translations/frontend/et.json @@ -593,10 +593,10 @@ "was_low": "oli madal", "was_normal": "oli normaalne", "was_opened": "avanes", - "was_plugged_in": "ühendus", + "was_plugged_in": "ühendati", "was_safe": "oli turvatud", "was_unlocked": "avanes", - "was_unplugged": "oli lahti ühendatud", + "was_unplugged": "eemaldati", "was_unsafe": "oli turvamata" } }, diff --git a/translations/frontend/lb.json b/translations/frontend/lb.json index fb802a99f8..b93dab6b7c 100644 --- a/translations/frontend/lb.json +++ b/translations/frontend/lb.json @@ -1456,6 +1456,7 @@ } }, "devices": { + "add_prompt": "Nach keen {name} gouf mat dësem Apparat dobäigesat. Du kanns een dobäisetzen mat engem Klick op de + Knäppchen hei uewen.", "automation": { "actions": { "caption": "Wann eppes ausgeléist gëtt" @@ -1871,6 +1872,7 @@ "id": "ID", "manufacturer": "Hiersteller", "model": "Modell", + "query_stage": "Ofroo Stage", "zwave_plus": "Z-Wave Plus" }, "refresh_node": { @@ -2032,6 +2034,8 @@ "heading": "YAML Konfiguratioun frësch lueden", "history_stats": "Verlaf Statiskik Entitéite frësch lueden", "homekit": "Homekit frësch lueden", + "input_boolean": "Agab Boolean frësch lueden", + "input_datetime": "Agab Datum frësch lueden", "input_number": "Agab Zuelen frësch lueden", "input_select": "Agab Auswiel frësch lueden", "input_text": "Agab Text frësch lueden", @@ -2508,6 +2512,7 @@ "toggle": "Ëmschalten", "url": "Url" }, + "editor_service_data": "Service Data kann ee nëmmen am Code Editor aginn", "navigation_path": "Nagiatioun's Pad", "url_path": "URL Pad" }, @@ -2551,6 +2556,7 @@ "entities": { "description": "D'Entitéite Kaart ass déi am meeschten allgemengen Zort Kaart. Si gruppéiert Entitéite gemeinsam a Lëschten.", "edit_special_row": "Änner Zeil mam Code Editor", + "entity_row_editor": "Entitéite Réih Editor", "entity_row": { "attribute": "Attribut", "button": "Knäppchen", diff --git a/translations/frontend/pl.json b/translations/frontend/pl.json index 53465e5e86..c28aad8135 100644 --- a/translations/frontend/pl.json +++ b/translations/frontend/pl.json @@ -571,7 +571,28 @@ "no_history_found": "Nie znaleziono historii." }, "logbook": { - "entries_not_found": "Nie znaleziono wpisów w dzienniku." + "by": "przez", + "by_service": "przez usługę", + "entries_not_found": "Nie znaleziono wpisów w dzienniku.", + "messages": { + "became_unavailable": "jest niedostępny(-a)", + "changed_to_state": "zmienił(-a) się na {state}", + "cleared_device_class": "brak (nie {device_class} ruchu)", + "detected_device_class": "{device_class} ruch", + "rose": "podniosło się", + "turned_off": "wyłączony(-a)", + "turned_on": "włączony(-a)", + "was_closed": "zostały(-o) zamknięte(-a)", + "was_connected": "został podłączony", + "was_disconnected": "został odłączony", + "was_locked": "został zamknięty", + "was_low": "był niski", + "was_normal": "był normalny", + "was_opened": "zostały(-o) otwarte(-a)", + "was_plugged_in": "został(-a) podłączony(-a)", + "was_unlocked": "został otwarty", + "was_unplugged": "został(-a) odłączony(-a)" + } }, "media-browser": { "audio_not_supported": "Twoja przeglądarka nie obsługuje elementu audio.", @@ -685,7 +706,7 @@ "update": "AKTUALIZUJ" }, "faq": "dokumentacja", - "no_unique_id": "Ten encja nie ma unikalnego identyfikatora, dlatego z poziomu interfejsu użytkownika nie można zarządzać jej ustawieniami.", + "no_unique_id": "Ta encja nie ma unikalnego identyfikatora, dlatego z poziomu interfejsu użytkownika nie można zarządzać jej ustawieniami. Więcej szczegółów znajdziesz w {faq_link}.", "related": "Powiązane", "settings": "Ustawienia" }, @@ -1866,7 +1887,8 @@ }, "select_instance": { "header": "Wybierz instancję OpenZWave", - "introduction": "Masz uruchomionych więcej niż jedną instancję OpenZWave. Którą instancją chcesz zarządzać?" + "introduction": "Masz uruchomionych więcej niż jedną instancję OpenZWave. Którą instancją chcesz zarządzać?", + "none_found": "Nie mogliśmy znaleźć instancji OpenZWave. Jeśli uważasz, że to nieprawda, sprawdź ustawienia OpenZWave oraz MQTT i upewnij się, że Home Assistant może komunikować się z Twoim brokerem MQTT." }, "services": { "add_node": "Dodaj węzeł", @@ -1882,6 +1904,8 @@ "description": "Zarządzaj osobami, które śledzi Home Assistant", "detail": { "admin": "Administrator", + "allow_login": "Zezwalaj osobie na logowanie", + "confirm_delete_user": "Czy na pewno chcesz usunąć konto użytkownika {name}? Nadal możesz śledzić tego użytkownika, ale osoba ta nie będzie już mogła się zalogować.", "create": "Utwórz", "delete": "Usuń", "device_tracker_intro": "Wybierz urządzenia należące do tej osoby.", @@ -2529,6 +2553,7 @@ "entities": { "description": "Karta encji jest najbardziej popularnym rodzajem karty. Grupuje ona encje w listy.", "edit_special_row": "Edytuj wiersz za pomocą edytora kodu", + "entity_row_editor": "Edytor wiersza encji", "entity_row": { "attribute": "Atrybut", "button": "Przycisk", @@ -2545,7 +2570,10 @@ "brightness": "Jasność", "entity-id": "Identyfikator encji", "last-changed": "Ostatnia zmiana", - "position": "Pozycja" + "last-triggered": "Ostatnie uruchomienie", + "none": "Brak dodatkowych informacji", + "position": "Pozycja", + "tilt-position": "Pochylenie" }, "show_header_toggle": "Pokaż przełącznik w nagłówku", "special_row": "wiersz specjalny", diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index 790c3fef55..da18b13c98 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -576,8 +576,27 @@ "entries_not_found": "В журнале нет записей.", "messages": { "changed_to_state": "изменяет состояние на {state}", + "cleared_device_class": "не обнаруживает {device_class}", + "detected_device_class": "обнаруживает {device_class}", + "rose": "всходит", + "set": "заходит", "turned_off": "выключается", - "turned_on": "включается" + "turned_on": "включается", + "was_at_home": "дома", + "was_at_state": "{state}", + "was_away": "не дома", + "was_closed": "закрывается", + "was_connected": "подключается", + "was_disconnected": "отключается", + "was_locked": "блокируется", + "was_low": "регистрирует низкий заряд", + "was_normal": "регистрирует нормальный заряд", + "was_opened": "открывается", + "was_plugged_in": "подключается", + "was_safe": "регистрирует безопасность", + "was_unlocked": "разблокируется", + "was_unplugged": "отключается", + "was_unsafe": "не регистрирует безопасность" } }, "media-browser": { @@ -691,6 +710,7 @@ "unavailable": "Этот объект в настоящее время недоступен.", "update": "Обновить" }, + "faq": "документация", "no_unique_id": "У этого объекта нет уникального идентификатора, поэтому его настройками нельзя управлять из пользовательского интерфейса.", "related": "Зависимости", "settings": "Настройки" diff --git a/translations/frontend/sv.json b/translations/frontend/sv.json index 71b825b1c9..25b97c24fc 100644 --- a/translations/frontend/sv.json +++ b/translations/frontend/sv.json @@ -496,9 +496,11 @@ "wnw": "VNV", "wsw": "VSV" }, + "day": "Dag", "forecast": "Prognos", "high": "Hög", - "low": "Låg" + "low": "Låg", + "night": "Natt" } }, "common": { @@ -569,7 +571,23 @@ "no_history_found": "Ingen historik hittad." }, "logbook": { - "entries_not_found": "Inga inlägg i loggboken hittades" + "entries_not_found": "Inga inlägg i loggboken hittades", + "messages": { + "became_unavailable": "blev otillgänglig", + "changed_to_state": "ändrades till", + "turned_off": "Slogs av", + "turned_on": "Slogs på", + "was_away": "var borta", + "was_closed": "var stängd", + "was_connected": "var ansluten", + "was_disconnected": "var frånkopplad", + "was_locked": "var låst", + "was_low": "var låg", + "was_opened": "var öppen", + "was_plugged_in": "var inkopplad", + "was_unlocked": "var olåst", + "was_unplugged": "var urkopplad" + } }, "media-browser": { "choose_player": "Välj spelare", @@ -680,6 +698,7 @@ "unavailable": "Den här entiteten är för närvarande inte tillgänglig.", "update": "Uppdatera" }, + "faq": "dokumentation", "no_unique_id": "Den här entiteten har inget unikt ID, därför kan den inte hanteras från användargränssnittet.", "related": "Relaterade", "settings": "Inställningar" @@ -737,6 +756,7 @@ "dismiss": "Avfärda", "edit": "Redigera entitet", "history": "Historik", + "last_updated": "Senast uppdaterad", "person": { "create_zone": "Skapa zon från aktuell plats" }, @@ -1036,7 +1056,16 @@ "before": "Före", "label": "Tid", "type_input": "Värde för en datum-/tidhjälpare", - "type_value": "Satt tid" + "type_value": "Satt tid", + "weekdays": { + "fri": "fredag", + "mon": "måndag", + "sat": "lördag", + "sun": "söndag", + "thu": "torsdag", + "tue": "tisdag", + "wed": "onsdag" + } }, "zone": { "entity": "Entitet med position", @@ -1138,7 +1167,7 @@ "sunset": "Solnedgång" }, "tag": { - "label": "Etikett" + "label": "Tagg" }, "template": { "label": "Mall", @@ -1837,7 +1866,8 @@ }, "select_instance": { "header": "Välj en OpenZWave-instans", - "introduction": "Du har mer än en OpenZWave-instans som körs. Vilken instans vill du hantera?" + "introduction": "Du har mer än en OpenZWave-instans som körs. Vilken instans vill du hantera?", + "none_found": "Vi kunde inte hitta en OpenZWave-instans. Om du tror detta är fel, kontrollera dina OpenZWave- och MQTT-inställningar och se till att Home Assistant kan kommunicera med din MQTT-broker." }, "services": { "add_node": "Lägg till nod", @@ -1852,6 +1882,9 @@ "create_person": "Skapa person", "description": "Hantera personer som Home Assistant spårar", "detail": { + "admin": "Adminstratör", + "allow_login": "Tillåt person att logga in", + "confirm_delete_user": "Vill du verkligen bort användarkontot för {name}? Du kan fortfarande spåra användaren men personen kommer inte längre att kunna logga in.", "create": "Skapa", "delete": "Ta bort", "device_tracker_intro": "Välj de enheter som tillhör till den här personen.", @@ -1983,6 +2016,7 @@ "rpi_gpio": "Ladda om Raspberry Pi GPIO-entiteter", "scene": "Ladda om scenarier", "script": "Ladda om skript", + "smtp": "Ladda om smtp-aviseringstjänster", "template": "Ladda om mallar för entiteter", "zone": "Ladda om zoner" }, @@ -2004,11 +2038,11 @@ } }, "tags": { - "add_tag": "Lägg till etikett", + "add_tag": "Lägg till tagg", "automation_title": "Taggen {name} är skannad", - "caption": "Etiketter", + "caption": "Taggar", "create_automation": "Skapa automatisering med tagg", - "description": "Hantera etiketter", + "description": "Hantera taggar", "detail": { "create": "Skapa", "create_and_write": "Skapa och redigera", @@ -2016,7 +2050,7 @@ "description": "Beskrivning", "name": "Namn", "new_tag": "Ny tagg", - "tag_id": "Etikett-ID", + "tag_id": "Tagg-ID", "tag_id_placeholder": "Autogenereras när det lämnas tomt", "update": "Uppdatera" }, @@ -2026,7 +2060,7 @@ "name": "Namn" }, "never_scanned": "Aldrig skannad", - "no_tags": "Inga etiketter", + "no_tags": "Inga taggar", "write": "Redigera" }, "users": { @@ -2431,6 +2465,14 @@ "refresh": "Uppdatera" }, "editor": { + "action-editor": { + "actions": { + "default_action": "Standardåtgärd", + "toggle": "Växla", + "url": "URL" + }, + "url_path": "Sökväg till url" + }, "card": { "alarm-panel": { "available_states": "Tillgängliga tillstånd", @@ -2443,7 +2485,12 @@ }, "calendar": { "description": "Kalenderkortet visar en kalender med dag-, vecka- och listvyer", - "name": "Kalender" + "name": "Kalender", + "views": { + "dayGridDay": "Dag", + "dayGridMonth": "Månad", + "listWeek": "Lista" + } }, "conditional": { "card": "Kort", @@ -2462,7 +2509,24 @@ }, "entities": { "description": "Entitetskortet är den vanligaste korttypen. Det grupperar objekt i listor.", + "entity_row": { + "attribute": "Attribut", + "button": "Knapp", + "buttons": "Knappar", + "call-service": "Anropa tjänst", + "cast": "Cast", + "conditional": "Villkorlig", + "section": "Sektion", + "weblink": "Webbadress" + }, "name": "Enheter", + "secondary_info_values": { + "brightness": "Ljusstyrka", + "entity-id": "Entitets-ID", + "last-changed": "Senast ändrad", + "last-triggered": "Senast utlöst", + "position": "Position" + }, "show_header_toggle": "Visa rubrikväljare?", "toggle": "Växla entiteter." }, @@ -2584,7 +2648,8 @@ "description": "Sensorkortet ger dig en snabb överblick över dina sensortillstånd med en valfri graf för att visualisera förändring över tid.", "graph_detail": "Detalj på kurva", "graph_type": "Typ av kurva", - "name": "Sensor" + "name": "Sensor", + "show_more_detail": "Visa fler detaljer" }, "shopping-list": { "description": "Shopping List-kortet gör att du kan lägga till, redigera, checka av och rensa objekt från din inköpslista.", @@ -2914,6 +2979,12 @@ "more_integrations": "Mer" }, "intro": "Är du redo att väcka ditt hem, återta din integritet och gå med i en världsomspännande gemenskap av hemmafixare?", + "restore": { + "description": "Alternativt kan du återställa från en tidigare snapshot.", + "hide_log": "Dölj fullständig logg", + "in_progress": "Återställning pågår", + "show_log": "Visa fullständig logg" + }, "user": { "create_account": "Skapa konto", "data": { From 7776b3766b64f2a0565f01236424339623b865f5 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Sun, 4 Oct 2020 00:32:25 +0000 Subject: [PATCH 009/155] [ci skip] Translation update --- translations/frontend/fi.json | 4 + translations/frontend/fr.json | 67 +++++++- translations/frontend/pl.json | 4 + translations/frontend/ru.json | 6 +- translations/frontend/sk.json | 266 ++++++++++++++++++++++++++++- translations/frontend/zh-Hans.json | 44 ++--- 6 files changed, 355 insertions(+), 36 deletions(-) diff --git a/translations/frontend/fi.json b/translations/frontend/fi.json index 4440fd3f83..ef1cbd13eb 100644 --- a/translations/frontend/fi.json +++ b/translations/frontend/fi.json @@ -1793,6 +1793,7 @@ "create_person": "Luo henkilö", "description": "Hallitse henkilöitä, joita Home Assistant seuraa", "detail": { + "confirm_delete_user": "Haluatko varmasti poistaa käyttäjän {name}? Voit edelleen seurata käyttäjää, mutta henkilö ei voi enää kirjautua sisään.", "create": "Luo", "delete": "Poista", "device_tracker_intro": "Valitse tälle henkilölle kuuluvat laitteet.", @@ -2394,6 +2395,9 @@ "weblink": "Nettilinkki" }, "name": "Kohteet", + "secondary_info_values": { + "brightness": "Kirkkaus" + }, "show_header_toggle": "Näytä otsikkokytkin?", "toggle": "Ota kohteet käyttöön tai poista käytöstä" }, diff --git a/translations/frontend/fr.json b/translations/frontend/fr.json index 470d12cb8b..b65b8bc2c6 100644 --- a/translations/frontend/fr.json +++ b/translations/frontend/fr.json @@ -571,9 +571,19 @@ "no_history_found": "Aucun historique des valeurs trouvé." }, "logbook": { + "by": "par", + "by_service": "par le service", "entries_not_found": "Aucune entrée trouvée dans le journal.", "messages": { - "rose": "aube" + "became_unavailable": "est devenu indisponible", + "changed_to_state": "changé en {state}.", + "cleared_device_class": "effacé (no {device_class} detected)", + "detected_device_class": "détecté {device_class}", + "rose": "aube", + "turned_off": "éteint", + "turned_on": "activé", + "was_away": "était absent", + "was_safe": "était sûr" } }, "media-browser": { @@ -687,6 +697,7 @@ "unavailable": "Cette entité n'est pas disponible actuellement.", "update": "Mise à jour" }, + "faq": "documentation", "no_unique_id": "Cette entité n'a pas d'identifiant unique, ses paramètres ne peuvent donc pas être gérés à partir de l'interface utilisateur.", "related": "Liées", "settings": "Réglages" @@ -744,6 +755,7 @@ "dismiss": "Fermer la fenêtre de dialogue", "edit": "Modifier l'entité", "history": "Historique", + "last_updated": "Dernière mise à jour", "person": { "create_zone": "Créer une zone à partir de l'emplacement actuel" }, @@ -1043,7 +1055,16 @@ "before": "Avant", "label": "Heure", "type_input": "Valeur d'une aide de date/heure", - "type_value": "Temps fixe" + "type_value": "Temps fixe", + "weekdays": { + "fri": "Vendredi", + "mon": "Lundi", + "sat": "samedi", + "sun": "dimanche", + "thu": "Jeudi", + "tue": "Mardi", + "wed": "Mercredi" + } }, "zone": { "entity": "Entité avec localisation", @@ -1858,7 +1879,8 @@ }, "select_instance": { "header": "Sélectionnez une instance OpenZWave", - "introduction": "Vous avez plus d'une instance OpenZWave en cours d'exécution. Quelle instance souhaitez-vous gérer ?" + "introduction": "Vous avez plus d'une instance OpenZWave en cours d'exécution. Quelle instance souhaitez-vous gérer ?", + "none_found": "Nous n'avons pas trouvé d'instance d'OpenZWave. Si vous pensez c'est incorrect, vérifiez vos configurations OpenZWave et MQTT et assurez-vous que Home Assistant peut communiquer avec votre serveur MQTT." }, "services": { "add_node": "Ajouter un nœud", @@ -1873,6 +1895,9 @@ "create_person": "Créer une personne", "description": "Gérer les personnes suivies par Home Assistant.", "detail": { + "admin": "Administrateur", + "allow_login": "Autoriser la personne à se connecter", + "confirm_delete_user": "Êtes-vous sûr de vouloir supprimer le compte utilisateur de {name} ? Vous pouvez toujours suivre l'utilisateur, mais la personne ne pourra plus se connecter.", "create": "Créer", "delete": "Supprimer", "device_tracker_intro": "Sélectionnez les appareils appartenant à cette personne.", @@ -2466,6 +2491,19 @@ "refresh": "Rafraîchir" }, "editor": { + "action-editor": { + "actions": { + "call-service": "Appeler le service", + "default_action": "Actions par défaut", + "more-info": "Plus d’infos", + "navigate": "Naviguer", + "none": "Pas d'action", + "toggle": "Interrupteur", + "url": "Url" + }, + "editor_service_data": "Les informations sur les services ne peuvent être saisies que dans l'éditeur de code\n", + "url_path": "Chemin de l'url" + }, "card": { "alarm-panel": { "available_states": "États disponibles", @@ -2473,14 +2511,19 @@ "name": "Panneau d'alarme" }, "button": { + "default_action_help": "L'action par défaut dépend des capacités de l'entité, elle sera soit activée/désactivée, soit plus d'informations seront affichées.", "description": "La carte Bouton vous permet d'ajouter des boutons pour effectuer des tâches.", "name": "Bouton" }, "calendar": { + "calendar_entities": "Calendrier", "description": "La carte Calendrier affiche un calendrier comprenant des vues par jour, par semaine et par liste", + "inital_view": "Vue initiale", "name": "Calendrier", "views": { - "listWeek": "Français" + "dayGridDay": "Jour", + "dayGridMonth": "Mois", + "listWeek": "liste" } }, "conditional": { @@ -2501,6 +2544,7 @@ "entities": { "description": "La carte Entités est le type de carte le plus courant. Il regroupe les éléments dans des listes.", "edit_special_row": "Modifier la ligne à l'aide de l'éditeur de code", + "entity_row_editor": "Modifier à l'aide de l'éditeur de code", "entity_row": { "attribute": "Attribut", "button": "Bouton", @@ -2513,6 +2557,15 @@ "weblink": "Lien Web" }, "name": "Entités", + "secondary_info_values": { + "brightness": "Luminosité", + "entity-id": "ID de l'entité", + "last-changed": "Dernière modification", + "last-triggered": "Dernier déclenchement", + "none": "Pas d'informations secondaires", + "position": "Position", + "tilt-position": "position d'inclinaison" + }, "show_header_toggle": "Afficher le bouton d'en-tête ?", "special_row": "ligne spéciale", "toggle": "Basculer les entités." @@ -2966,6 +3019,12 @@ "more_integrations": "Plus" }, "intro": "Êtes-vous prêt à réveiller votre maison, à récupérer votre vie privée et à rejoindre une communauté mondiale de bricoleurs?", + "restore": { + "description": "Vous pouvez également restaurer à partir d'un snapshot précédent.", + "hide_log": "Masquer le journal", + "in_progress": "Restauration en cours", + "show_log": "Afficher le journal" + }, "user": { "create_account": "Créer un compte", "data": { diff --git a/translations/frontend/pl.json b/translations/frontend/pl.json index c28aad8135..0fa6c91ba8 100644 --- a/translations/frontend/pl.json +++ b/translations/frontend/pl.json @@ -580,8 +580,12 @@ "cleared_device_class": "brak (nie {device_class} ruchu)", "detected_device_class": "{device_class} ruch", "rose": "podniosło się", + "set": "ustaw", "turned_off": "wyłączony(-a)", "turned_on": "włączony(-a)", + "was_at_home": "był w domu", + "was_at_state": "był w {state}", + "was_away": "był poza domem", "was_closed": "zostały(-o) zamknięte(-a)", "was_connected": "został podłączony", "was_disconnected": "został odłączony", diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index da18b13c98..bb3a9bd7ad 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -710,8 +710,8 @@ "unavailable": "Этот объект в настоящее время недоступен.", "update": "Обновить" }, - "faq": "документация", - "no_unique_id": "У этого объекта нет уникального идентификатора, поэтому его настройками нельзя управлять из пользовательского интерфейса.", + "faq": "документацией", + "no_unique_id": "У этого объекта нет уникального идентификатора, поэтому его настройками нельзя управлять из пользовательского интерфейса. Ознакомьтесь с {faq_link} для получения более подробной информации.", "related": "Зависимости", "settings": "Настройки" }, @@ -2260,7 +2260,7 @@ "create": "Создать", "delete": "Удалить", "icon": "Значок", - "icon_error_msg": "Параметр должен быть в формате 'prefix:iconname' (например: 'mdi:home')", + "icon_error_msg": "Параметр должен быть в формате \"prefix:iconname\" (например: \"mdi:home\")", "latitude": "Широта", "longitude": "Долгота", "name": "Название", diff --git a/translations/frontend/sk.json b/translations/frontend/sk.json index 9e3bacaab7..af449bda90 100644 --- a/translations/frontend/sk.json +++ b/translations/frontend/sk.json @@ -19,6 +19,7 @@ "logbook": "Denník", "mailbox": "Poštová schránka", "map": "Mapa", + "media_browser": "Prehliadač médií", "profile": "Profil", "shopping_list": "Nákupný zoznam", "states": "Prehľad" @@ -476,7 +477,9 @@ "wnw": "ZSZ", "wsw": "ZJZ" }, - "forecast": "Predpoveď" + "day": "Deň", + "forecast": "Predpoveď", + "night": "Noc" } }, "common": { @@ -485,6 +488,7 @@ "cancel": "Zrušiť", "close": "Zavrieť", "continue": "Pokračovať", + "copied": "Skopírované", "delete": "Odstrániť", "loading": "Načítava sa", "next": "Ďalej", @@ -524,6 +528,10 @@ "toggle": "Prepínač" }, "entity": { + "entity-attribute-picker": { + "attribute": "Atribút", + "show_attributes": "Zobraziť atribúty" + }, "entity-picker": { "clear": "Vyčistiť", "entity": "Entita", @@ -534,11 +542,78 @@ "loading_history": "Načítavam históriu stavov", "no_history_found": "Nenašla sa žiadna história stavov" }, + "logbook": { + "entries_not_found": "Nenašli sa žiadne záznamy v denníku.", + "messages": { + "became_unavailable": "sa stal nedostupným", + "changed_to_state": "zmenené na {state}", + "turned_off": "vypnuté", + "turned_on": "zapnuté", + "was_at_home": "bol doma", + "was_away": "bol preč", + "was_closed": "boli zavreté", + "was_connected": "bol pripojený", + "was_disconnected": "bol odpojený", + "was_locked": "bol zamknutý", + "was_opened": "boli otvorené", + "was_plugged_in": "bol zapojený", + "was_unlocked": "bol odomknutý", + "was_unplugged": "bol odpojený" + } + }, "media-browser": { + "audio_not_supported": "Váš prehliadač nepodporuje zvukový prvok.", "choose_player": "Vyberte prehrávač", + "choose-source": "Vybrať zdroj", + "class": { + "album": "Album", + "app": "App", + "artist": "Umelec", + "channel": "Kanál", + "composer": "Skladateľ", + "contributing_artist": "Prispievajúci umelec", + "directory": "Knižnica", + "episode": "Epizóda", + "game": "Hra", + "genre": "Žáner", + "image": "Obrázok", + "movie": "Film", + "music": "Hudba", + "playlist": "Zoznam k prehratiu", + "podcast": "Podcast", + "season": "Sezóna", + "track": "Sledovať", + "tv_show": "Televízna relácia", + "url": "Url", + "video": "Video" + }, + "content-type": { + "album": "Album", + "artist": "Umelec", + "library": "Knižnica", + "playlist": "Zoznam k prehratiu", + "server": "Server" + }, + "documentation": "dokumentácia", + "learn_adding_local_media": "Ďalšie informácie o pridávaní médií nájdete v dokumentácii {documentation}.", + "local_media_files": "Umiestnite videosúbory, zvukové a obrazové súbory do mediálneho adresára, aby ste ich mohli prehľadávať a prehrávať v prehliadači alebo v podporovaných prehrávačoch médií.", + "media_browsing_error": "Chyba prehľadávania médií", + "media_not_supported": "Prehrávač médií prehliadača nepodporuje tento typ médií", "media_player": "Prehrávač médií", + "media-player-browser": "Prehliadač prehrávača médií", + "no_items": "Žiadne položky", + "no_local_media_found": "Nenašli sa žiadne lokálne médiá", + "no_media_folder": "Zdá sa, že ste ešte nevytvorili adresár médií.", + "pick-media": "Vybrať médiá", + "play-media": "Prehrať médiá", + "setup_local_help": "Informácie o nastavení lokálnych médií nájdete v dokumentácii {documentation}.", + "video_not_supported": "Váš prehliadač nepodporuje video prvok.", "web-browser": "Webový prehliadač" }, + "picture-upload": { + "label": "Obrázok", + "unsupported_format": "Nepodporovaný formát, vyberte obrázok JPEG, PNG alebo GIF." + }, "related-items": { "area": "Oblasť", "automation": "Súčasťou nasledujúcich automatizácií", @@ -590,6 +665,7 @@ "unavailable": "Táto entita nie je momentálne k dispozícii.", "update": "AKTUALIZOVAŤ" }, + "faq": "dokumentácia", "no_unique_id": "Táto entita nemá jedinečné ID, preto jej nastavenia nemožno spravovať z používateľského rozhrania (UI).", "related": "Súvisiace", "settings": "Nastavenia" @@ -638,10 +714,16 @@ "required_error_msg": "Toto pole je povinné", "yaml_not_editable": "Nastavenia tejto entity nie je možné upravovať z UI. Iba entity nastavené z UI sú konfigurovateľné z UI." }, + "image_cropper": { + "crop": "Orezať" + }, "more_info_control": { + "controls": "Ovládacie prvky", + "details": "Podrobnosti", "dismiss": "Zrušiť dialógové okno", "edit": "Upraviť entitu", "history": "História", + "last_updated": "Posledná aktualizácia", "person": { "create_zone": "Vytvoriť zónu z aktuálnej polohy" }, @@ -838,6 +920,11 @@ "label": "Zavolať službu", "service_data": "Dáta služby" }, + "wait_for_trigger": { + "continue_timeout": "Pokračovať po vypršaní času", + "label": "Počkať na spúšťač", + "timeout": "Timeout (voliteľne)" + }, "wait_template": { "label": "Čakať", "timeout": "Časový limit (voliteľné)", @@ -898,7 +985,17 @@ "time": { "after": "Po", "before": "Pred", - "label": "Čas" + "label": "Čas", + "type_value": "Pevný čas", + "weekdays": { + "fri": "Piatok", + "mon": "Pondelok", + "sat": "Sobota", + "sun": "Nedeľa", + "thu": "Štvrtok", + "tue": "Utorok", + "wed": "Streda" + } }, "zone": { "entity": "Entita s umiestnením", @@ -980,6 +1077,7 @@ "value_template": "Šablóna hodnoty (voliteľné)" }, "state": { + "attribute": "Atribút (voliteľný)", "for": "Trvanie stavu", "from": "Z", "label": "Stav", @@ -1004,7 +1102,8 @@ }, "time": { "at": "Čas o", - "label": "Čas" + "label": "Čas", + "type_value": "Pevný čas" }, "webhook": { "label": "Webhook", @@ -1027,6 +1126,8 @@ "add_automation": "Pridať automatizáciu", "delete_automation": "Odstrániť automatizáciu", "delete_confirm": "Naozaj chcete odstrániť túto automatizáciu?", + "duplicate": "Duplikovať", + "duplicate_automation": "Duplikovať automatizáciu", "edit_automation": "Upraviť automatizáciu", "header": "Editor automatizácií", "headers": { @@ -1136,7 +1237,10 @@ "google": { "banner": "Úprava týchto entít cez toto používateľské rozhranie je zakázaná, pretože ste nakonfigurovali filtre entít v súbore Configuration.yaml.", "expose": "Sprístupniť pre Google Assistant", + "exposed": "{selected} vystavená", "exposed_entities": "Zverejnené entity", + "follow_domain": "Sledovanie domény", + "not_exposed": "{selected} nevystavená", "not_exposed_entities": "Nezverejnené entity", "sync_to_google": "Synchronizujú sa zmeny v službe Google.", "title": "Google Assistant" @@ -1231,6 +1335,7 @@ } }, "devices": { + "add_prompt": "Pomocou tohto zariadenia zatiaľ nebolo pridané žiadne {name} . Jeden môžete pridať kliknutím na tlačidlo + vyššie.", "automation": { "actions": { "caption": "Keď sa niečo spustí..." @@ -1316,6 +1421,7 @@ "confirm_text": "Entity je možné odstrániť, iba ak ich integrácia už neposkytuje.", "confirm_title": "Chcete odstrániť {number} entity?" }, + "search": "Vyhľadať entity", "selected": "{number} vybrané", "status": { "ok": "Ok", @@ -1375,6 +1481,7 @@ }, "integrations": { "add_integration": "Pridať integráciu", + "attention": "Vyžaduje sa pozornosť", "caption": "Integrácie", "config_entry": { "area": "V {area}", @@ -1391,6 +1498,8 @@ "no_device": "Entity bez zariadení", "no_devices": "Táto integrácia nemá žiadne zariadenia.", "options": "Možnosti", + "reload": "Znova načítať", + "reload_confirm": "Integrácia bola opätovne načítaná", "rename": "Premenovať", "restart_confirm": "Ak chcete dokončiť odstránenie tejto integrácie, reštartujte Home Assistant", "settings_button": "Upraviť nastavenia pre {integration}", @@ -1436,7 +1545,9 @@ "none_found": "Nenašli sa žiadne integrácie", "none_found_detail": "Upravte kritériá vyhľadávania.", "note_about_integrations": "Nie všetky integrácie je možné nakonfigurovať pomocou používateľského rozhrania.", - "note_about_website_reference": "Viac informácií je k dispozícii na" + "note_about_website_reference": "Viac informácií je k dispozícii na", + "reconfigure": "Prekonfigurovať", + "search": "Vyhľadať integrácie" }, "introduction": "Tu je možné konfigurovať vaše komponenty a Home Assistant. Aktuálne sa z používateľského rozhrania nedá konfigurovať všetko, ale pracujeme na tom.", "logs": { @@ -1542,8 +1653,59 @@ "topic": "téma" }, "ozw": { + "button": "Konfigurovať", + "common": { + "controller": "Radič", + "instance": "Inštancia", + "network": "Sieť" + }, + "network_status": { + "details": { + "driverallnodesqueried": "Všetky uzly boli dotazované", + "driverallnodesqueriedsomedead": "Všetky uzly boli dotazované. Niektoré uzly boli nájdené mŕtve", + "driverawakenodesqueries": "Všetky bdelé uzly boli dotazované", + "driverfailed": "Nepodarilo sa pripojiť k radiču Z-Wave", + "driverready": "Inicializácia radiča Z-Wave", + "driverremoved": "Ovládač bol odstránený", + "driverreset": "Ovládač bol resetovaný", + "ready": "Pripravené na pripojenie", + "stopped": "OpenZWave zastavené" + }, + "offline": "Offline", + "online": "Online", + "starting": "Štartuje", + "unknown": "Neznámy" + }, + "network": { + "header": "Správa siete", + "introduction": "Spravovať funkcie v celej sieti.", + "node_count": "{count} uzlov" + }, + "node": { + "button": "Podrobnosti uzla", + "not_found": "Uzol sa nenašiel" + }, "nodes_table": { - "id": "ID" + "failed": "Zlyhalo", + "id": "ID", + "manufacturer": "Výrobca", + "model": "Model", + "query_stage": "Fáza dopytu", + "zwave_plus": "Z-Wave Plus" + }, + "refresh_node": { + "button": "Obnoviť uzol", + "node_status": "Stav uzla", + "refreshing_description": "Obnovujú sa informácie o uzle...", + "start_refresh_button": "Spustiť obnovenie", + "step": "Krok" + }, + "select_instance": { + "introduction": "Máte spustených viac ako jednu inštanciu OpenZWave. Ktorú inštanciu chcete spravovať?" + }, + "services": { + "add_node": "Pridať uzol", + "remove_node": "Odstrániť uzol" } }, "person": { @@ -1554,6 +1716,8 @@ "create_person": "Vytvoriť osobu", "description": "Spravujte osoby, ktoré Home Assistant sleduje.", "detail": { + "allow_login": "Povoliť osobe prihlásiť sa", + "confirm_delete_user": "Naozaj chcete odstrániť používateľský účet pre {name} ? Stále môžete sledovať používateľa, ale osoba sa už nebude môcť prihlásiť.", "create": "Vytvoriť", "delete": "Odstrániť", "device_tracker_intro": "Vyberte zariadenia, ktoré patria tejto osobe.", @@ -1664,12 +1828,25 @@ "reloading": { "automation": "Znovu načítať automatizácie", "core": "Znovu načítať polohu a jadro", + "filesize": "Znova načítať entity veľkosti súboru", + "generic_thermostat": "Znova načítať entity generického termostatu", "group": "Znovu načítať skupiny", "heading": "Načítavanie novej konfigurácie", + "history_stats": "Znova načítať entity štatistiky histórie", + "homekit": "Znova načítať HomeKit", "introduction": "Niektoré časti aplikácie Home Assistant sa môžu načítať bez nutnosti reštartovania. Opätovným načítaním sa zahodí aktuálna konfigurácia a načíta sa nová.", + "min_max": "Znova načítať min/max entity", + "mqtt": "Opätovné načítanie entít mqtt", "person": "Znovu načítať osoby", + "ping": "Znova načítať entity binárneho snímača ping", + "reload": "Znova načítať {domain}", + "rpi_gpio": "Opätovné načítanie entít GPIO Raspberry Pi", "scene": "Znovu načítať scény", "script": "Znovu načítať skripty", + "smtp": "Opätovné načítanie informačnej služby smtp", + "telegram": "Opätovné načítanie telegram notifikačných služieb", + "template": "Znova načítať entity šablóny", + "trend": "Znova načítať entity trendov", "zone": "Znovu načítať zóny" }, "server_management": { @@ -1689,6 +1866,14 @@ } } }, + "tags": { + "add_tag": "Pridať značku", + "caption": "Značky", + "description": "Správa značiek", + "never_scanned": "Nikdy neskenované", + "no_tags": "Žiadne značky", + "write": "Zapísať" + }, "users": { "add_user": { "caption": "Pridať používateľa", @@ -1715,7 +1900,7 @@ "name": "Názov", "new_password": "Nové heslo", "owner": "Vlastník", - "password_changed": "Heslo je zmenené!", + "password_changed": "Heslo bolo úspešne zmenené", "system_generated": "Systémom vytvorený", "system_generated_users_not_editable": "Nie je možné aktualizovať používateľov generovaných systémom.", "system_generated_users_not_removable": "Nie je možné odstrániť používateľov generovaných systémom.", @@ -1963,8 +2148,13 @@ "title": "Stavy" }, "templates": { + "all_listeners": "Táto šablóna počúva všetky udalosti zmenené stavom.", "description": "Šablóny sa vykresľujú pomocou nástroja šablóny Jinja2 s niektorými špecifickými rozšíreniami pre Home Assistant.", + "domain": "Doména", "editor": "Editor šablóna", + "entity": "Entita", + "listeners": "Táto šablóna počúva nasledujúce udalosti zmenené stavom:", + "no_listeners": "Táto šablóna nepočúva žiadne udalosti zmenené stavom a neaktualizuje sa automaticky.", "template_extensions": "Rozšírenia šablóny Home Assistant", "title": "Šablóny" } @@ -2035,13 +2225,38 @@ "refresh": "Obnoviť" }, "editor": { + "action-editor": { + "actions": { + "call-service": "Zavolať službu", + "default_action": "Predvolená akcia", + "more-info": "Viac informácií", + "navigate": "Navigovať", + "none": "Žiadna akcia", + "toggle": "Prepnúť" + }, + "editor_service_data": "Servisné údaje je možné zadávať iba v editore kódov", + "navigation_path": "Navigačná cesta", + "url_path": "Cesta adresy URL" + }, "card": { "alarm-panel": { "name": "Ovládací panel alarmu" }, "button": { + "default_action_help": "Predvolená akcia závisí od schopností entity, bude buď prepnutá, alebo sa zobrazí viac informácií.", "name": "Tlačidlo" }, + "calendar": { + "calendar_entities": "Entity kalendára", + "description": "Na karte Kalendár sa zobrazuje kalendár vrátane zobrazení dňa, týždňa a zoznamu", + "inital_view": "Počiatočné zobrazenie", + "name": "Kalendár", + "views": { + "dayGridDay": "Deň", + "dayGridMonth": "Mesiac", + "listWeek": "Zoznam" + } + }, "conditional": { "card": "Karta", "conditions": "Podmienky", @@ -2052,7 +2267,25 @@ "required": "Požadované" }, "entities": { + "entity_row_editor": "Editor riadkov entít", + "entity_row": { + "attribute": "Atribút", + "button": "Tlačidlo", + "buttons": "Tlačidlá", + "cast": "Obsadenie", + "conditional": "Podmienené", + "divider": "Delič", + "section": "Sekcia", + "weblink": "Internetový odkaz" + }, "name": "Entity", + "secondary_info_values": { + "brightness": "Jas", + "last-changed": "Posledná zmena", + "last-triggered": "Naposledy spustené", + "none": "Žiadne sekundárne informácie", + "position": "Pozícia" + }, "show_header_toggle": "Zobraziť prepínač hlavičky?", "toggle": "Prepnúť entity." }, @@ -2161,7 +2394,8 @@ "description": "Karta Senzor poskytuje rýchly prehľad o stave senzorov s voliteľným grafom na vizualizáciu zmien v priebehu času.", "graph_detail": "Detail grafu", "graph_type": "Typ grafu", - "name": "Snímač" + "name": "Snímač", + "show_more_detail": "Zobraziť viac podrobností" }, "shopping-list": { "description": "Karta Nákupný zoznam umožňuje pridávať, upravovať, odškrtávať a vymazávať položky z nákupného zoznamu.", @@ -2183,7 +2417,11 @@ } }, "cardpicker": { + "by_card": "Podľa karty", + "by_entity": "Podľa entity", "custom_card": "Vlastná karta", + "domain": "Doména", + "entity": "Entita", "no_description": "Popis nie je k dispozícii." }, "edit_card": { @@ -2476,6 +2714,12 @@ "more_integrations": "Viac" }, "intro": "Ste pripravení prebudiť váš domov, získať vaše súkromie a pripojiť sa k celosvetovej komunite bastličov?", + "restore": { + "description": "Prípadne môžete obnoviť z predchádzajúcej snímky.", + "hide_log": "Skryť celý denník", + "in_progress": "Prebieha obnovenie", + "show_log": "Zobraziť celý denník" + }, "user": { "create_account": "Vytvoriť účet", "data": { @@ -2507,6 +2751,11 @@ "submit": "Odoslať" }, "current_user": "Momentálne ste prihlásení ako {fullName}.", + "customize_sidebar": { + "button": "Upraviť", + "description": "Režim úprav môžete aktivovať aj stlačením a podržaním hlavičky bočného panela.", + "header": "Zmena poradia a skrytie položiek z bočného panela" + }, "dashboard": { "description": "Vyberte predvolený dashboard pre toto zariadenie.", "dropdown_label": "Dashboard", @@ -2529,6 +2778,7 @@ "confirm_delete": "Naozaj chcete odstrániť prístupový token pre {name}?", "create": "Vytvoriť Token", "create_failed": "Nepodarilo sa vytvoriť prístupový token.", + "created": "Vytvorené {date}", "created_at": "Vytvorený {date}", "delete_failed": "Nepodarilo sa odstrániť prístupový token.", "description": "Vytvorte prístupové tokeny s dlhou životnosťou, ktoré umožnia vašim skriptom komunikovať s vašou inštanciou Home Assistant. Každý token bude platný 10 rokov od vytvorenia. Nasledujúce prístupové tokeny s dlhou životnosťou sú v súčasnosti aktívne.", @@ -2536,6 +2786,7 @@ "header": "Prístupové tokeny s dlhou životnosťou", "last_used": "Naposledy použitý {date} z {location}", "learn_auth_requests": "Zistite, ako vytvárať overené požiadavky.", + "name": "Názov", "not_used": "Nikdy nebol použitý", "prompt_copy_token": "Skopírujte svoj nový prístupový token. Znova sa nezobrazí.", "prompt_name": "Názov?" @@ -2598,6 +2849,7 @@ } }, "sidebar": { + "done": "Hotovo", "external_app_configuration": "Konfigurácia aplikácie", "sidebar_toggle": "Prepínač bočného panela" } diff --git a/translations/frontend/zh-Hans.json b/translations/frontend/zh-Hans.json index 2977d7cdbf..0f12988b31 100644 --- a/translations/frontend/zh-Hans.json +++ b/translations/frontend/zh-Hans.json @@ -575,7 +575,7 @@ "by_service": ", 通过服务", "entries_not_found": "未找到日志条目。", "messages": { - "became_unavailable": "变为不可用", + "became_unavailable": "不再可用", "changed_to_state": "变为 {state}", "cleared_device_class": "未检测到 {device_class}", "detected_device_class": "检测到 {device_class}", @@ -614,7 +614,7 @@ "directory": "媒体库", "episode": "分集", "game": "游戏", - "genre": "体裁", + "genre": "流派", "image": "图片", "movie": "电影", "music": "音乐", @@ -845,7 +845,7 @@ "remove": "您确定要删除此设备吗?" }, "device_signature": "Zigbee 设备签名", - "last_seen": "上次看到", + "last_seen": "上次发现", "manuf": "制造商:{manufacturer}", "no_area": "没有区域", "power_source": "电源", @@ -2157,7 +2157,7 @@ }, "add": { "caption": "添加设备", - "description": "将设备添加到Zigbee网络" + "description": "将设备添加到 Zigbee 网络" }, "button": "配置", "caption": "ZHA", @@ -2181,7 +2181,7 @@ "clusters": { "header": "集群", "help_cluster_dropdown": "选择一个集群以查看属性和命令。", - "introduction": "集群是Zigbee功能的构建基础,它们将功能分成逻辑单元。 有客户端和服务器类型,由属性和命令组成。" + "introduction": "集群是 Zigbee 功能的构建基础,它们将功能分成逻辑单元。 有客户端和服务器类型,由属性和命令组成。" }, "common": { "add_devices": "添加设备", @@ -2198,8 +2198,8 @@ "bind_button_help": "将选定的群组绑定到所选的设备集群。", "bind_button_label": "绑定群组", "cluster_selection_help": "选择要绑定到所选组的集群。", - "group_picker_help": "选择一个组来进行绑定。", - "group_picker_label": "可绑定的组", + "group_picker_help": "选择一个群组来进行绑定。", + "group_picker_label": "可绑定的群组", "header": "群组绑定", "introduction": "绑定和取消绑定群组。", "unbind_button_help": "从选定的设备集群中取消绑定选定的群组。", @@ -2211,29 +2211,29 @@ "caption": "群组", "create": "创建群组", "create_group": "Zigbee 家庭自动化 - 新增群组", - "create_group_details": "输入所需的详细信息以创建新的zigbee组", + "create_group_details": "输入所需的详细信息以创建新的 zigbee 群组", "creating_group": "创建群组中", - "description": "管理 Zigbee 组", - "group_details": "以下是所选Zigbee组的所有详细信息。", - "group_id": "组号", + "description": "管理 Zigbee 群组", + "group_details": "以下是所选 Zigbee 群组的所有详细信息。", + "group_id": "群组 ID", "group_info": "群组信息", "group_name_placeholder": "群组名", "group_not_found": "找不到群组!", "group-header": "Zigbee 家庭自动化 - 群组资讯", - "groups": "组", + "groups": "群组", "groups-header": "Zigbee 家庭自动化 - 群组管理", "header": "Zigbee 家庭自动化 - 群组管理", - "introduction": "创建和修改zigbee组", - "manage_groups": "管理Zigbee组", + "introduction": "创建和修改 Zigbee 群组", + "manage_groups": "管理 Zigbee 群组", "members": "成员", "remove_groups": "删除群组", "remove_members": "删除成员", "removing_groups": "删除群组中", "removing_members": "删除成员中", - "zha_zigbee_groups": "ZHA Zigbee组" + "zha_zigbee_groups": "ZHA Zigbee 群组" }, "header": "配置 Zigbee 家庭自动化", - "introduction": "在这里可以配置ZHA组件。 目前尚未支持在UI中进行所有的配置,但我们正在努力啦。", + "introduction": "您可以在此配置 ZHA 及组件。目前并非所有配置都能通过前端 UI 完成,但是我们在努力实现中。", "network_management": { "header": "网络管理", "introduction": "影响整个网络的命令" @@ -2245,8 +2245,8 @@ "header": "设备管理", "help_node_dropdown": "选择一个设备以查看每个设备的选项。", "hint_battery_devices": "注意:在睡眠(电池供电)设备执行命令时,它们必须处于唤醒状态。通常,您可以通过触发睡眠设备来唤醒它。", - "hint_wakeup": "小米传感器等某些设备具有唤醒按钮,您可以每隔约5秒按一下此按钮,以在与设备交互时保持设备处于唤醒状态。", - "introduction": "运行影响单个设备的ZHA命令。选择设备以查看可用命令列表。" + "hint_wakeup": "小米传感器等某些设备具有唤醒按钮,您可以每隔约 5 秒按一下此按钮,以便在与设备交互时保持设备唤醒。", + "introduction": "运行影响单个设备的 ZHA 命令。请选择设备以查看可用命令列表。" }, "title": "Zigbee 家庭自动化" }, @@ -2283,14 +2283,14 @@ "button": "配置", "caption": "Z-Wave", "common": { - "index": "指数", + "index": "索引", "instance": "实例", "unknown": "未知", "value": "值", "wakeup_interval": "唤醒时间间隔" }, "description": "管理 Z-Wave 网络", - "learn_more": "了解有关Z-Wave的更多信息", + "learn_more": "详细了解 Z-Wave", "network_management": { "header": "Z-Wave 网络管理", "introduction": "运行影响 Z-Wave 网络的命令。大多数命令无法反馈是否执行成功,但您可以尝试检查 OZW 日志来确认。" @@ -2335,8 +2335,8 @@ "set_protection": "设置保护" }, "ozw_log": { - "header": "OZW日志", - "introduction": "查看日志。最小值为0(加载整个日志),最大值为1000。加载将显示静态日志,并且尾部将使用日志的最后指定的行数自动更新。", + "header": "OZW 日志", + "introduction": "查看日志。最小值为 0(加载整个日志),最大值为 1000。加载将显示静态日志,并且结尾将根据最后指定的日志行数自动更新。", "last_log_lines": "最后日志行数", "load": "加载", "tail": "末尾" From 98734591693f61c0b2f3657e79d9ffa9425f4764 Mon Sep 17 00:00:00 2001 From: Ryan Meek <25127328+maykar@users.noreply.github.com> Date: Sun, 4 Oct 2020 16:15:14 -0400 Subject: [PATCH 010/155] Styling fixes for hui-masonry-view (#7226) --- src/panels/lovelace/views/hui-masonry-view.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/panels/lovelace/views/hui-masonry-view.ts b/src/panels/lovelace/views/hui-masonry-view.ts index f31c903894..4f8547c93e 100644 --- a/src/panels/lovelace/views/hui-masonry-view.ts +++ b/src/panels/lovelace/views/hui-masonry-view.ts @@ -261,7 +261,9 @@ export class MasonryView extends LitElement implements LovelaceViewElement { :host { display: block; background: var(--lovelace-background); + padding-top: 4px; height: 100%; + box-sizing: border-box; } #badges { From 369c56db73b88ec09870fed7f1106eb83b9b3a82 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Mon, 5 Oct 2020 00:32:49 +0000 Subject: [PATCH 011/155] [ci skip] Translation update --- translations/frontend/bg.json | 99 ++++++++++++++++++++++++++++-- translations/frontend/de.json | 28 ++++++++- translations/frontend/fr.json | 19 +++++- translations/frontend/ja.json | 1 + translations/frontend/ko.json | 38 ++++++------ translations/frontend/nl.json | 82 +++++++++++++++++++++++-- translations/frontend/ru.json | 5 +- translations/frontend/uk.json | 3 + translations/frontend/zh-Hans.json | 2 +- 9 files changed, 239 insertions(+), 38 deletions(-) diff --git a/translations/frontend/bg.json b/translations/frontend/bg.json index 68302a4647..1a6b9b4031 100644 --- a/translations/frontend/bg.json +++ b/translations/frontend/bg.json @@ -465,7 +465,8 @@ }, "components": { "device-picker": { - "device": "Устройство" + "device": "Устройство", + "show_devices": "Показване на устройства" }, "entity": { "entity-attribute-picker": { @@ -481,7 +482,13 @@ "no_history_found": "Не е намерена история за състоянието" }, "logbook": { - "entries_not_found": "Липсват логове в дневника" + "entries_not_found": "Липсват логове в дневника", + "messages": { + "became_unavailable": "стана недостъпен", + "changed_to_state": "променен на {състояние}", + "turned_off": "Изключи", + "turned_on": "Включи" + } }, "media-browser": { "audio_not_supported": "Браузърът не поддържа този аудио елемент.", @@ -522,15 +529,23 @@ "delete": "Изтриване", "update": "Актуализация" }, + "faq": "документация", "no_unique_id": "Този обект няма уникален идентификатор, затова неговите настройки не могат да бъдат управлявани от потребителския интерфейс." }, "helper_settings": { + "generic": { + "name": "Име" + }, "input_number": { + "max": "Максимална стойност", + "min": "Минимална стойност", "step": "Размер на стъпката" }, "input_text": { "max": "Максимална дължина", - "min": "Минимална дължина" + "min": "Минимална дължина", + "password": "Парола", + "text": "Текст" }, "platform_not_loaded": "{platform} интеграцията не е заредена. Моля, добавете я във вашата конфигурация като добавите 'default_config:' или ''{platform}:''.", "yaml_not_editable": "Настройките на този обект не могат да бъдат редактирани. Могат да се конфигурират само обектите, създадени от потребителския интерфейс." @@ -849,11 +864,20 @@ "config_documentation": "Документация за конфигурацията" }, "google": { - "config_documentation": "Документация за конфигурацията" + "config_documentation": "Документация за конфигурацията", + "devices_pin": "ПИН код за Устройства за защита", + "enter_pin_hint": "Въведете ПИН за използване на устройства за защита", + "security_devices": "Устройства за защита" + }, + "webhooks": { + "disable_hook_error_msg": "Неуспешно деактивиране на webhook:", + "manage": "Управление", + "no_hooks_yet_link_integration": "webhook-базирана интеграция" } }, "alexa": { "dont_expose_entity": "Не излагай обекта", + "expose": "Откриване към Alexa", "expose_entity": "Изложи обекта", "exposed": "{избран} изложен", "follow_domain": "следван домейн", @@ -864,13 +888,26 @@ "description_features": "Контролирайте дома си, и когато не сте вкъщи, активирайте интегрирациите с Alexa и Google Assistant.", "description_login": "Влезли сте като {email}", "description_not_login": "Не сте влезли", + "dialog_certificate": { + "close": "Затвори" + }, + "dialog_cloudhook": { + "close": "Затвори", + "copied_to_clipboard": "Копирано в клипборда", + "view_documentation": "Преглед на документацията" + }, "google": { + "disable_2FA": "Деактивирайте двуфакторното удостоверяване", "dont_expose_entity": "Не излагай обекта", + "expose": "Откриване към Google Assistant", "expose_entity": "Изложи обекта", "exposed": "{избран} изложен", "follow_domain": "следван домейн", "manage_domains": "Управление на домейни", "not_exposed": "{избран} неизложен" + }, + "login": { + "learn_more_link": "Научете повече за Home Assistant Cloud" } }, "core": { @@ -909,6 +946,11 @@ "devices": { "caption": "Устройства", "confirm_delete": "Сигурни ли сте, че искате да изтриете устройството?", + "data_table": { + "area": "Област", + "battery": "Батерия", + "manufacturer": "Производител" + }, "delete": "Изтриване", "description": "Управление на свързани устройства", "entities": { @@ -1013,12 +1055,20 @@ }, "refresh_node": { "button": "Обнови възела" + }, + "select_instance": { + "none_found": "Не можахме да намерим OpenZWave инстанция. Ако смятате че не е вярно, проверете Вашите OpenZWare и MQTT и се уверете че, Home Assistant може да комуникира със MQTT брокера " } }, "person": { "caption": "Хора", "description": "Управлявайте хората, които следите от Home Assistant.", "detail": { + "admin": "Администратор", + "allow_login": "Разрешаване на потребител да се впише", + "confirm_delete_user": "Сигурен ли сте, че искате да изтриете потребителски акаунт {name}? Все още ще можете да проследявате човека, но той, повече няма да може да се вписва.", + "create": "Създаване", + "delete": "Изтрий", "device_tracker_intro": "Изберете устройствата, които принадлежат на това лице.", "device_tracker_pick": "Изберете устройство за проследяване", "device_tracker_picked": "Устройство за проследяване", @@ -1026,16 +1076,32 @@ } }, "scene": { + "activated": "Активирана сцена {name} .", + "editor": { + "devices": { + "header": "Устройства" + }, + "unsaved_confirm": "Имате незапазени промени. Сигурни ли сте, че искате да напуснете?" + }, "picker": { + "delete_confirm": "Сигурни ли сте, че искате да изтриете тази сцена?", + "delete_scene": "Изтриване на сцена", + "edit_scene": "Редактиране на сцена", + "header": "Редактор на сцени", "headers": { "name": "Име" - } + }, + "show_info_scene": "Показване на информация за сцена" } }, "script": { "caption": "Скриптове", "description": "Създаване и редактиране на скриптове", + "editor": { + "delete_script": "Изтриване на скрипт" + }, "picker": { + "edit_script": "Редактиране на скрипт", "headers": { "name": "Име" }, @@ -1091,14 +1157,19 @@ "description": "Управление на потребителите", "editor": { "activate_user": "Активиране на потребител", + "active": "Активен", "admin": "Администратор", "caption": "Преглед на потребителя", "change_password": "Смяна на парола", "deactivate_user": "Деактивиране на потребителя", "delete_user": "Изтриване на потребител", + "group": "Група", + "id": "ID", "name": "Име", "new_password": "Нова парола", + "owner": "Собственик", "password_changed": "Паролата е променена!", + "system_generated": "Генерирано от системата", "system_generated_users_not_editable": "Неуспешно обновяване на системно генерираните потребители" }, "picker": { @@ -1112,9 +1183,14 @@ "add_device_page": { "discovery_text": "Откритите устройства ще се покажат тук. Следвайте инструкциите за вашето устройство(а) и поставете устройствата в режим на сдвояване.", "header": "Zigbee Home Automation - Добавяне на устройства", + "search_again": "Потърси отново", "spinner": "Търсене на ZHA Zigbee устройства..." }, "caption": "ZHA", + "common": { + "add_devices": "Добави устройства", + "devices": "Устройства" + }, "description": "Управление на Zigbee мрежата за домашна автоматизация", "node_management": { "hint_wakeup": "Някои устройства като сензорите Xiaomi имат бутон за събуждане, който можете да натискате на интервали от ~ 5 секунди, които поддържат устройствата будни, докато взаимодействате с тях." @@ -1229,10 +1305,20 @@ "editor": { "card": { "entities": { + "entity_row_editor": "Редактор на обекти", + "secondary_info_values": { + "brightness": "Яркост", + "entity-id": "Идентификация на обект", + "last-changed": "Последна промяна", + "last-triggered": "Последно задействане", + "position": "Позиция", + "tilt-position": "Наклон" + }, "toggle": "Превключване на обекти." }, "generic": { - "state_color": "Да се оцветят ли иконите спрямо състоянието?" + "state_color": "Да се оцветят ли иконите спрямо състоянието?", + "theme": "Тема" }, "iframe": { "name": "Уеб страница" @@ -1272,6 +1358,7 @@ "delete": "Изтриване на изгледа", "edit": "Редактиране на изгледа", "header": "Конфигурация на изглед", + "tab_settings": "Настройки", "visibility": { "select_users": "Изберете кои потребители да виждат този изглед в навигацията" } diff --git a/translations/frontend/de.json b/translations/frontend/de.json index 8359512006..7b423e616b 100644 --- a/translations/frontend/de.json +++ b/translations/frontend/de.json @@ -580,14 +580,20 @@ "class": { "album": "Album", "app": "App", + "artist": "Künstler", + "composer": "Komponist", + "contributing_artist": "Mitwirkender Künstler", "directory": "Bibliothek", "episode": "Episode", "game": "Spiel", + "genre": "Genre", + "image": "Bild", "movie": "Film", "music": "Musik", "playlist": "Wiedergabeliste", "podcast": "Podcast", "season": "Episode", + "tv_show": "TV-Sendung", "url": "URL", "video": "Video" }, @@ -1019,7 +1025,16 @@ "after": "Nach", "before": "Vor", "label": "Zeit", - "type_value": "Feste Zeit" + "type_value": "Feste Zeit", + "weekdays": { + "fri": "Freitag", + "mon": "Montag", + "sat": "Samstag", + "sun": "Sonntag", + "thu": "Donnerstag", + "tue": "Dienstag", + "wed": "Mittwoch" + } }, "zone": { "entity": "Entität mit Standort", @@ -1120,6 +1135,9 @@ "sunrise": "Sonnenaufgang", "sunset": "Sonnenuntergang" }, + "tag": { + "label": "Tag" + }, "template": { "label": "Template", "value_template": "Wert-Template" @@ -1757,7 +1775,8 @@ "nodes_table": { "failed": "Fehlgeschlagen", "id": "ID", - "manufacturer": "Hersteller" + "manufacturer": "Hersteller", + "zwave_plus": "Z-Wave Plus" }, "refresh_node": { "start_refresh_button": "Aktualisierung starten" @@ -2356,6 +2375,11 @@ "refresh": "Aktualisieren" }, "editor": { + "action-editor": { + "actions": { + "call-service": "Dienst ausführen" + } + }, "card": { "alarm-panel": { "available_states": "Verfügbare Zustände", diff --git a/translations/frontend/fr.json b/translations/frontend/fr.json index b65b8bc2c6..5a82603a8b 100644 --- a/translations/frontend/fr.json +++ b/translations/frontend/fr.json @@ -580,10 +580,24 @@ "cleared_device_class": "effacé (no {device_class} detected)", "detected_device_class": "détecté {device_class}", "rose": "aube", + "set": "Défini", "turned_off": "éteint", "turned_on": "activé", + "was_at_home": "Était à la maison", + "was_at_state": "était à {state}", "was_away": "était absent", - "was_safe": "était sûr" + "was_closed": "était fermé", + "was_connected": "était connecté", + "was_disconnected": "était déconnecté", + "was_locked": "Était verrouillé", + "was_low": "était faible", + "was_normal": "était normal", + "was_opened": "était ouvert", + "was_plugged_in": "était branché", + "was_safe": "était sûr", + "was_unlocked": "Était déverrouillé", + "was_unplugged": "était débranché", + "was_unsafe": "n'était pas sûr" } }, "media-browser": { @@ -2501,7 +2515,8 @@ "toggle": "Interrupteur", "url": "Url" }, - "editor_service_data": "Les informations sur les services ne peuvent être saisies que dans l'éditeur de code\n", + "editor_service_data": "Les informations sur les services ne peuvent être saisies que dans l'éditeur de code", + "navigation_path": "Chemin de navigation", "url_path": "Chemin de l'url" }, "card": { diff --git a/translations/frontend/ja.json b/translations/frontend/ja.json index 73ea24640b..30a9cd2db5 100644 --- a/translations/frontend/ja.json +++ b/translations/frontend/ja.json @@ -624,6 +624,7 @@ "local_media_files": "ビデオ、オーディオ、画像ファイルをメディアディレクトリに配置して、ブラウザやサポートされているメディアプレーヤーで参照して再生できるようにします。", "media_browsing_error": "メディア参照エラー", "media_not_supported": "ブラウザ メディア プレーヤーはこの種類のメディアをサポートしていません", + "media_player": "メディアプレーヤー", "media-player-browser": "メディアプレーヤーブラウザ", "no_items": "アイテムなし", "no_local_media_found": "ローカルメディアが見つかりません", diff --git a/translations/frontend/ko.json b/translations/frontend/ko.json index f91306e8ef..631b87fd15 100644 --- a/translations/frontend/ko.json +++ b/translations/frontend/ko.json @@ -571,7 +571,7 @@ "no_history_found": "상태 기록 내용이 없습니다." }, "logbook": { - "entries_not_found": "로그북 항목을 찾을 수 없습니다." + "entries_not_found": "로그북 구성요소를 찾을 수 없습니다." }, "media-browser": { "audio_not_supported": "브라우저가 오디오 요소를 지원하지 않습니다.", @@ -736,11 +736,11 @@ "crop": "자르기" }, "more_info_control": { - "controls": "컨트롤", + "controls": "제어 내용", "details": "세부 정보", "dismiss": "대화창 닫기", "edit": "구성요소 편집", - "history": "히스토리", + "history": "기록 내용", "person": { "create_zone": "현재 위치로 지역 만들기" }, @@ -1264,12 +1264,12 @@ }, "alexa": { "banner": "configuration.yaml 에서 구성요소 필터를 구성했기 때문에 UI 에서 노출된 구성요소를 편집 할 수 없습니다.", - "dont_expose_entity": "구성 요소를 노출하지 마십시오", + "dont_expose_entity": "구성 요소 노출하지 않기", "expose": "Alexa 에 노출", - "expose_entity": "구성 요소를 노출하세요", + "expose_entity": "구성 요소 노출하기", "exposed": "{selected} 노출됨", "exposed_entities": "노출된 구성요소", - "follow_domain": "도메인 팔로우", + "follow_domain": "도메인 설정 따르기", "manage_domains": "도메인 관리", "not_exposed": "{selected} 노출되지 않음", "not_exposed_entities": "노출되지 않은 구성요소", @@ -1309,12 +1309,12 @@ "google": { "banner": "configuration.yaml 에서 구성요소 필터를 구성했기 때문에 UI 에서 노출된 구성요소를 편집 할 수 없습니다.", "disable_2FA": "2단계 인증 비활성화", - "dont_expose_entity": "구성 요소를 노출하지 마십시오", + "dont_expose_entity": "구성 요소 노출하지 않기", "expose": "Google 어시스턴트에 노출", - "expose_entity": "구성 요소를 노출하세요", + "expose_entity": "구성 요소 노출하기", "exposed": "{selected} 노출됨", "exposed_entities": "노출된 구성요소", - "follow_domain": "도메인 팔로우", + "follow_domain": "도메인 설정 따르기", "manage_domains": "도메인 관리", "not_exposed": "{selected} 노출되지 않음", "not_exposed_entities": "노출되지 않은 구성요소", @@ -1833,7 +1833,7 @@ "not_found": "노드를 찾을 수 없습니다." }, "nodes_table": { - "failed": "실패", + "failed": "실패함", "id": "ID", "manufacturer": "제조사", "model": "모델", @@ -2002,17 +2002,17 @@ "input_text": "문자입력 다시 읽어오기", "introduction": "Home Assistant 의 일부 구성 내용은 재시작 없이 다시 읽어 들일 수 있습니다. 다시 읽어오기를 누르면 현재 사용 중인 YAML 구성 내용을 내리고 새로운 구성 내용을 읽어 들입니다.", "min_max": "최소/최대 구성요소 다시 읽어오기", - "mqtt": "mqtt 구성 요소 새로 고침", + "mqtt": "MQTT 구성요소 다시 읽어오기", "person": "구성원 다시 읽어오기", "ping": "ping 이진 센서 구성요소 다시 읽어오기", - "reload": "{domain} 새로 고침", + "reload": "{domain} 다시 읽어오기", "rest": "REST 구성요소 및 알림 서비스 다시 읽어오기", - "rpi_gpio": "라즈베리파이 GPIO 구성 요소 새로 고침", + "rpi_gpio": "Raspberry Pi GPIO 구성요소 다시 읽어오기", "scene": "씬 다시 읽어오기", "script": "스크립트 다시 읽어오기", - "smtp": "smtp 알림 서비스새로 고침", + "smtp": "SMTP 알림 서비스 다시 읽어오기", "statistics": "통계 구성요소 다시 읽어오기", - "telegram": "텔레그램 알림 서비스 새로 고침", + "telegram": "Telegram 알림 서비스 다시 읽어오기", "template": "템플릿 구성요소 다시 읽어오기", "trend": "추세 구성요소 다시 읽어오기", "universal": "범용 미디어 플레이어 구성요소 다시 읽어오기", @@ -2040,7 +2040,7 @@ "automation_title": "{name} 태그가 검색되었습니다", "caption": "태그", "create_automation": "태그로 자동화 구성하기", - "description": "태그 관리", + "description": "태그를 관리합니다", "detail": { "create": "만들기", "create_and_write": "만들고 쓰기", @@ -2474,7 +2474,7 @@ "name": "버튼" }, "calendar": { - "description": "캘린더 카드는 일, 주 및 목록 보기를 포함한 캘린더가 표시됩니다", + "description": "캘린더 카드는 일간, 주간 및 목록 보기를 포함한 캘린더가 표시됩니다", "name": "캘린더" }, "conditional": { @@ -2652,8 +2652,8 @@ } }, "cardpicker": { - "by_card": "카드로", - "by_entity": "구성 요소로", + "by_card": "카드로 추가하기", + "by_entity": "구성요소로 추가하기", "custom_card": "사용자 정의", "domain": "도메인", "entity": "구성요소", diff --git a/translations/frontend/nl.json b/translations/frontend/nl.json index 78ee19fc2f..2cb91c3682 100644 --- a/translations/frontend/nl.json +++ b/translations/frontend/nl.json @@ -571,7 +571,26 @@ "no_history_found": "Geen geschiedenis gevonden" }, "logbook": { - "entries_not_found": "Geen logboekvermeldingen gevonden." + "entries_not_found": "Geen logboekvermeldingen gevonden.", + "messages": { + "became_unavailable": "is niet meer beschikbaar", + "changed_to_state": "gewijzigd in {state}", + "cleared_device_class": "niets gedetecteerd (geen {device_class} gedetecteerd)", + "detected_device_class": "gedetecteerd {device_class}", + "turned_off": "is uitgeschakeld", + "turned_on": "is ingeschakeld", + "was_at_home": "was thuis", + "was_closed": "gesloten", + "was_connected": "verbonden", + "was_disconnected": "verbroken", + "was_locked": "vergrendeld", + "was_opened": "geopend", + "was_plugged_in": "is aangesloten", + "was_safe": "was veilig", + "was_unlocked": "ontgrendeld", + "was_unplugged": "is niet aangesloten", + "was_unsafe": "was onveilig" + } }, "media-browser": { "audio_not_supported": "Uw browser ondersteunt het audio-element niet.", @@ -684,7 +703,8 @@ "unavailable": "Deze entiteit is momenteel niet beschikbaar.", "update": "Bijwerken" }, - "no_unique_id": "Deze entiteit heeft geen unieke ID, daarom kunnen de instellingen niet worden beheerd vanuit de gebruikersinterface.", + "faq": "documentatie", + "no_unique_id": "Deze entiteit heeft geen unieke ID, daarom kunnen de instellingen niet worden beheerd vanuit de gebruikersinterface. Zie de {faq_link} voor meer details", "related": "Gerelateerd", "settings": "instellingen" }, @@ -741,6 +761,7 @@ "dismiss": "Dialoogvenster sluiten", "edit": "Entiteit bewerken", "history": "Geschiedenis", + "last_updated": "Laatst bijgewerkt", "person": { "create_zone": "Creëer zone van huidige locatie" }, @@ -1040,7 +1061,16 @@ "before": "Voordat", "label": "Tijd", "type_input": "Waarde van een datum/tijdhelper", - "type_value": "Vaste tijd" + "type_value": "Vaste tijd", + "weekdays": { + "fri": "vrijdag", + "mon": "maandag", + "sat": "zaterdag", + "sun": "zondag", + "thu": "donderdag", + "tue": "dinsdag", + "wed": "woensdag" + } }, "zone": { "entity": "Entiteit met locatie", @@ -1855,7 +1885,8 @@ }, "select_instance": { "header": "Selecteer een OpenZWave instantie", - "introduction": "Je hebt meer dan één OpenZWave instantie lopen. Welke instantie wil je beheren?" + "introduction": "Je hebt meer dan één OpenZWave instantie lopen. Welke instantie wil je beheren?", + "none_found": "We konden geen OpenZWave-instantie vinden. Als u denkt dat dit niet klopt, controleer dan uw OpenZWave- en MQTT-instellingen en zorg ervoor dat Home Assistant kan communiceren met uw MQTT-broker." }, "services": { "add_node": "Knooppunt toevoegen", @@ -1870,6 +1901,9 @@ "create_person": "Persoon aanmaken", "description": "Beheer de personen die Home Assistant volgt.", "detail": { + "admin": "Administrator", + "allow_login": "Persoon toestaan om in te loggen", + "confirm_delete_user": "Weet u zeker dat u het gebruikersaccount voor {name} wilt verwijderen? U kunt de gebruiker nog steeds volgen, maar de persoon zal niet meer kunnen inloggen.", "create": "Aanmaken", "delete": "Verwijderen", "device_tracker_intro": "Selecteer de apparaten die bij deze persoon horen.", @@ -2219,7 +2253,7 @@ "create": "Aanmaken", "delete": "Verwijder", "icon": "Pictogram", - "icon_error_msg": "Het pictogram moet de volgende opmaak hebben voorvoegsel:pictogramnaam, bijvoorbeeld: mdi:home", + "icon_error_msg": "Het pictogram moet de volgende opmaak hebben \"voorvoegsel:pictogramnaam\", bijvoorbeeld: \"mdi:home\"", "latitude": "Breedtegraad", "longitude": "Lengtegraad", "name": "Naam", @@ -2463,6 +2497,18 @@ "refresh": "Vernieuwen" }, "editor": { + "action-editor": { + "actions": { + "call-service": "Service aanroepen", + "default_action": "Standaardactie", + "more-info": "Meer informatie", + "navigate": "Navigeer", + "none": "Geen actie", + "toggle": "Schakelaar", + "url": "Url" + }, + "editor_service_data": "Servicegegevens kunnen alleen worden ingevoerd in de code-editor" + }, "card": { "alarm-panel": { "available_states": "Beschikbare statussen", @@ -2470,12 +2516,20 @@ "name": "Alarm paneel" }, "button": { + "default_action_help": "De standaard actie is afhankelijk van de mogelijkheden van de entiteit, deze zal ofwel worden omgeschakeld of meer informatie zal worden getoond.", "description": "Met de Button-kaart kun je knoppen toevoegen om taken uit te voeren.", "name": "Knop" }, "calendar": { + "calendar_entities": "Agenda entiteiten", "description": "De kalenderkaart toont een kalender met dag-, week- en lijstweergaven", - "name": "Kalender" + "inital_view": "Eerste weergave", + "name": "Kalender", + "views": { + "dayGridDay": "Dag", + "dayGridMonth": "Maand", + "listWeek": "Lijst" + } }, "conditional": { "card": "Kaart", @@ -2495,6 +2549,7 @@ "entities": { "description": "De Entities-kaart is het meest voorkomende type kaart. Het groepeert items samen in lijsten.", "edit_special_row": "Bewerk rij met behulp van de code-editor", + "entity_row_editor": "Entiteitsrij editor", "entity_row": { "attribute": "Attribuut", "button": "Knop", @@ -2507,6 +2562,15 @@ "weblink": "Web link" }, "name": "Entiteiten", + "secondary_info_values": { + "brightness": "Helderheid", + "entity-id": "Entiteit ID", + "last-changed": "Laatst gewijzigd", + "last-triggered": "Voor het laatst uitgevoerd", + "none": "Geen secundaire informatie", + "position": "Positie", + "tilt-position": "Kantelpositie" + }, "show_header_toggle": "Titel schakelaar weergeven?", "special_row": "speciale rij", "toggle": "Entiteiten in- en uitschakelen" @@ -2960,6 +3024,12 @@ "more_integrations": "Meer" }, "intro": "Ben je klaar om je huis wakker te maken, je privacy terug te winnen en deel te nemen aan een wereldwijde gemeenschap van knutselaars?", + "restore": { + "description": "Als alternatief kunt u herstellen vanaf een eerdere snapshot", + "hide_log": "Verberg volledig logboek", + "in_progress": "Herstel in uitvoering", + "show_log": "Volledig logboek weergeven" + }, "user": { "create_account": "Account aanmaken", "data": { diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index bb3a9bd7ad..b29953081e 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -575,7 +575,8 @@ "by_service": "службой", "entries_not_found": "В журнале нет записей.", "messages": { - "changed_to_state": "изменяет состояние на {state}", + "became_unavailable": "недоступно", + "changed_to_state": "изменяется на \"{state}\"", "cleared_device_class": "не обнаруживает {device_class}", "detected_device_class": "обнаруживает {device_class}", "rose": "всходит", @@ -2576,7 +2577,7 @@ "entity-id": "ID объекта", "last-changed": "Последнее изменение", "last-triggered": "Последний запуск", - "none": "Нет дополнительной информации", + "none": "Без дополнительной информации", "position": "Положение", "tilt-position": "Положение наклона" }, diff --git a/translations/frontend/uk.json b/translations/frontend/uk.json index 4e1265ef95..b61e80293b 100644 --- a/translations/frontend/uk.json +++ b/translations/frontend/uk.json @@ -2026,6 +2026,9 @@ }, "entities": { "name": "Об'єкти", + "secondary_info_values": { + "brightness": "Яскравість" + }, "show_header_toggle": "Показати тумблер заголовка?", "toggle": "Перемкнути сутності." }, diff --git a/translations/frontend/zh-Hans.json b/translations/frontend/zh-Hans.json index 0f12988b31..af09075871 100644 --- a/translations/frontend/zh-Hans.json +++ b/translations/frontend/zh-Hans.json @@ -2233,7 +2233,7 @@ "zha_zigbee_groups": "ZHA Zigbee 群组" }, "header": "配置 Zigbee 家庭自动化", - "introduction": "您可以在此配置 ZHA 及组件。目前并非所有配置都能通过前端 UI 完成,但是我们在努力实现中。", + "introduction": "您可以在此配置 ZHA 组件。目前并非所有配置都能通过前端 UI 完成,但是我们在努力实现中。", "network_management": { "header": "网络管理", "introduction": "影响整个网络的命令" From 05630c989609f59b1cfe10d0f74d7f4213451b2f Mon Sep 17 00:00:00 2001 From: Ryan Meek <25127328+maykar@users.noreply.github.com> Date: Mon, 5 Oct 2020 04:24:23 -0400 Subject: [PATCH 012/155] Use client_id if no client_name in delete dialog (#7228) --- src/panels/profile/ha-refresh-tokens-card.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/panels/profile/ha-refresh-tokens-card.ts b/src/panels/profile/ha-refresh-tokens-card.ts index f6f1cc3277..9ec6c23e12 100644 --- a/src/panels/profile/ha-refresh-tokens-card.ts +++ b/src/panels/profile/ha-refresh-tokens-card.ts @@ -106,7 +106,7 @@ class HaRefreshTokens extends LitElement { text: this.hass.localize( "ui.panel.profile.refresh_tokens.confirm_delete", "name", - token.client_name + token.client_name || token.client_id ), })) ) { From 7e708b3bf7f923d0fbc274239e942179e87b3250 Mon Sep 17 00:00:00 2001 From: Ryan Meek <25127328+maykar@users.noreply.github.com> Date: Mon, 5 Oct 2020 06:05:57 -0400 Subject: [PATCH 013/155] Use consistent title case for headers in Supervisor (#7227) --- hassio/src/addon-store/hassio-addon-store.ts | 2 +- hassio/src/hassio-tabs.ts | 2 +- hassio/src/snapshots/hassio-snapshots.ts | 4 ++-- hassio/src/system/hassio-host-info.ts | 8 ++++---- hassio/src/system/hassio-supervisor-info.ts | 8 ++++---- hassio/src/system/hassio-supervisor-log.ts | 2 +- hassio/src/system/hassio-system-metrics.ts | 12 ++++++------ 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/hassio/src/addon-store/hassio-addon-store.ts b/hassio/src/addon-store/hassio-addon-store.ts index baf2fef515..81c761b1f8 100644 --- a/hassio/src/addon-store/hassio-addon-store.ts +++ b/hassio/src/addon-store/hassio-addon-store.ts @@ -98,7 +98,7 @@ class HassioAddonStore extends LitElement { main-page .tabs=${supervisorTabs} > - Add-on store + Add-on Store

- Create snapshot + Create Snapshot

Snapshots allow you to easily backup and restore all data of your @@ -219,7 +219,7 @@ class HassioSnapshots extends LitElement {

-

Available snapshots

+

Available Snapshots

${this._snapshots === undefined ? undefined diff --git a/hassio/src/system/hassio-host-info.ts b/hassio/src/system/hassio-host-info.ts index 94400402ae..f0f34aec2f 100644 --- a/hassio/src/system/hassio-host-info.ts +++ b/hassio/src/system/hassio-host-info.ts @@ -87,7 +87,7 @@ class HassioHostInfo extends LitElement { ${this.hostInfo.features.includes("network") ? html` - IP address + IP Address ${primaryIpAddress} @@ -103,7 +103,7 @@ class HassioHostInfo extends LitElement { - Operating system + Operating System ${this.hostInfo.operating_system} @@ -221,7 +221,7 @@ class HassioHostInfo extends LitElement { }); } catch (err) { showAlertDialog(this, { - title: "Failed to get Hardware list", + title: "Failed to get hardware list", text: extractApiErrorMessage(err), }); } @@ -324,7 +324,7 @@ class HassioHostInfo extends LitElement { private async _changeHostnameClicked(): Promise { const curHostname: string = this.hostInfo.hostname; const hostname = await showPromptDialog(this, { - title: "Change hostname", + title: "Change Hostname", inputLabel: "Please enter a new hostname:", inputType: "string", defaultValue: curHostname, diff --git a/hassio/src/system/hassio-supervisor-info.ts b/hassio/src/system/hassio-supervisor-info.ts index fcec51d607..d53597699c 100644 --- a/hassio/src/system/hassio-supervisor-info.ts +++ b/hassio/src/system/hassio-supervisor-info.ts @@ -51,7 +51,7 @@ class HassioSupervisorInfo extends LitElement { - Newest version + Newest Version ${this.supervisorInfo.version_latest} @@ -98,7 +98,7 @@ class HassioSupervisorInfo extends LitElement { ${this.supervisorInfo?.supported ? html` - Share diagnostics + Share Diagnostics
Share crash reports and diagnostic information. @@ -135,7 +135,7 @@ class HassioSupervisorInfo extends LitElement {
Reload @@ -212,7 +212,7 @@ class HassioSupervisorInfo extends LitElement { button.progress = true; const confirmed = await showConfirmationDialog(this, { - title: "Update supervisor", + title: "Update Supervisor", text: `Are you sure you want to update supervisor to version ${this.supervisorInfo.version_latest}?`, confirmText: "update", dismissText: "cancel", diff --git a/hassio/src/system/hassio-supervisor-log.ts b/hassio/src/system/hassio-supervisor-log.ts index 88528eb431..2e1e2162aa 100644 --- a/hassio/src/system/hassio-supervisor-log.ts +++ b/hassio/src/system/hassio-supervisor-log.ts @@ -76,7 +76,7 @@ class HassioSupervisorLog extends LitElement { ${this.hass.userData?.showAdvanced ? html` +
${metrics.map((metric) => this._renderMetric(metric.description, metric.value ?? 0) From da9faccada662171593e91334ba4fcaf63aa7d8f Mon Sep 17 00:00:00 2001 From: David Beitey Date: Mon, 5 Oct 2020 21:29:07 +1000 Subject: [PATCH 014/155] Allow viewport scaling (zooming) of frontend (#7180) The inclusion of the `user-scalable=no` value in the viewport meta tag prevented viewport scaling, disabling the ability to zoom the webpage. This most typically affects mobile devices, given the nature of the `` tag. Removing the restriction allows a user to zoom in to see small and fine detail in the UI -- such as zooming in on particular areas of a home security camera streams or other images, inspecting detail in state and other graphs, and so on. For users with accessibility requirements, such as low vision conditions, being able to zoom the frontend means they can enlarge UI elements to suit them (MDN explains several accessibility concerns at https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta/name#Accessibility_concerns_with_viewport_scaling) This change has no effect on users that choose not to use it (for example, only those that engage zooming such as via pinch-to-zoom on mobile devices will see the change) -- the frontend remains the same otherwise. Elements of the frontend that do use pinch-to-zoom (e.g. the Map) continue to work as expected, with pinches on that screen area being captured by the map. --- src/html/_style_base.html.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/html/_style_base.html.template b/src/html/_style_base.html.template index 21d047c1b8..0777efeb57 100644 --- a/src/html/_style_base.html.template +++ b/src/html/_style_base.html.template @@ -1,4 +1,4 @@ - + - -
- - `; - } - - static get properties() { - return { - hass: { - type: Object, - }, - - stateObj: { - type: Object, - }, - - states: { - type: Array, - computed: "computeStates(stateObj, hass)", - }, - }; - } - - static get observers() { - return ["statesChanged(stateObj, states)"]; - } - - computeStates(stateObj, hass) { - const states = []; - const entIds = stateObj.attributes.entity_id || []; - - for (let i = 0; i < entIds.length; i++) { - const state = hass.states[entIds[i]]; - - if (state) { - states.push(state); - } - } - - return states; - } - - statesChanged(stateObj, states) { - let groupDomainStateObj = false; - let groupDomain = false; - - if (states && states.length > 0) { - const baseStateObj = states.find((s) => s.state === "on") || states[0]; - groupDomain = computeStateDomain(baseStateObj); - - // Groups need to be filtered out or we'll show content of - // first child above the children of the current group - if (groupDomain !== "group") { - groupDomainStateObj = { - ...baseStateObj, - entity_id: stateObj.entity_id, - attributes: { ...baseStateObj.attributes }, - }; - - for (let i = 0; i < states.length; i++) { - if (groupDomain !== computeStateDomain(states[i])) { - groupDomainStateObj = false; - break; - } - } - } - } - - if (!groupDomainStateObj) { - const el = dom(this.$.groupedControlDetails); - if (el.lastChild) { - el.removeChild(el.lastChild); - } - } else { - dynamicContentUpdater( - this.$.groupedControlDetails, - "MORE-INFO-" + groupDomain.toUpperCase(), - { stateObj: groupDomainStateObj, hass: this.hass } - ); - } - } -} - -customElements.define("more-info-group", MoreInfoGroup); diff --git a/src/dialogs/more-info/controls/more-info-group.ts b/src/dialogs/more-info/controls/more-info-group.ts new file mode 100644 index 0000000000..788d1a2f6b --- /dev/null +++ b/src/dialogs/more-info/controls/more-info-group.ts @@ -0,0 +1,111 @@ +import { HassEntity } from "home-assistant-js-websocket"; +import { + LitElement, + property, + CSSResult, + css, + internalProperty, + PropertyValues, +} from "lit-element"; +import { html, TemplateResult } from "lit-html"; +import { dynamicElement } from "../../../common/dom/dynamic-element-directive"; +import { computeStateDomain } from "../../../common/entity/compute_state_domain"; +import "../../../state-summary/state-card-content"; +import { GroupEntity, HomeAssistant } from "../../../types"; +import { + importMoreInfoControl, + domainMoreInfoType, +} from "../state_more_info_control"; + +class MoreInfoGroup extends LitElement { + @property({ attribute: false }) public hass!: HomeAssistant; + + @property() public stateObj?: GroupEntity; + + @internalProperty() private _groupDomainStateObj?: HassEntity; + + @internalProperty() private _moreInfoType?: string; + + protected updated(changedProperties: PropertyValues) { + if ( + !this.hass || + !this.stateObj || + (!changedProperties.has("hass") && !changedProperties.has("stateObj")) + ) { + return; + } + + const states = this.stateObj.attributes.entity_id + .map((entity_id) => this.hass.states[entity_id]) + .filter((state) => state); + + if (!states.length) { + this._groupDomainStateObj = undefined; + this._moreInfoType = undefined; + return; + } + + const baseStateObj = states.find((s) => s.state === "on") || states[0]; + const groupDomain = computeStateDomain(baseStateObj); + + // Groups need to be filtered out or we'll show content of + // first child above the children of the current group + if ( + groupDomain !== "group" && + states.every((state) => groupDomain === computeStateDomain(state)) + ) { + this._groupDomainStateObj = { + ...baseStateObj, + entity_id: this.stateObj.entity_id, + attributes: { ...baseStateObj.attributes }, + }; + const type = domainMoreInfoType(groupDomain); + importMoreInfoControl(type); + this._moreInfoType = type === "hidden" ? undefined : `more-info-${type}`; + } else { + this._groupDomainStateObj = undefined; + this._moreInfoType = undefined; + } + } + + protected render(): TemplateResult { + if (!this.hass || !this.stateObj) { + return html``; + } + return html`${this._moreInfoType + ? dynamicElement(this._moreInfoType, { + hass: this.hass, + stateObj: this._groupDomainStateObj, + }) + : ""} + ${this.stateObj.attributes.entity_id.map((entity_id) => { + const state = this.hass!.states[entity_id]; + if (!state) { + return ""; + } + return html` + + `; + })}`; + } + + static get styles(): CSSResult { + return css` + state-card-content { + display: block; + margin-top: 8px; + } + `; + } +} + +customElements.define("more-info-group", MoreInfoGroup); + +declare global { + interface HTMLElementTagNameMap { + "more-info-group": MoreInfoGroup; + } +} diff --git a/src/dialogs/more-info/state_more_info_control.ts b/src/dialogs/more-info/state_more_info_control.ts index c2b97d9c59..6f8cf904ab 100644 --- a/src/dialogs/more-info/state_more_info_control.ts +++ b/src/dialogs/more-info/state_more_info_control.ts @@ -32,6 +32,10 @@ const LAZY_LOADED_MORE_INFO_CONTROL = { export const stateMoreInfoType = (stateObj: HassEntity): string => { const domain = computeStateDomain(stateObj); + return domainMoreInfoType(domain); +}; + +export const domainMoreInfoType = (domain: string): string => { if (DOMAINS_WITH_MORE_INFO.includes(domain)) { return domain; } From 874f3b32b37b8378f9905686696197efba517097 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Sat, 17 Oct 2020 22:10:52 +0200 Subject: [PATCH 100/155] Harmonize the font sizes on area and device page (#7357) --- src/panels/config/areas/ha-config-area-page.ts | 1 + src/panels/config/devices/ha-config-device-page.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/src/panels/config/areas/ha-config-area-page.ts b/src/panels/config/areas/ha-config-area-page.ts index 7f3d7cc2d1..2ec77fcfa0 100644 --- a/src/panels/config/areas/ha-config-area-page.ts +++ b/src/panels/config/areas/ha-config-area-page.ts @@ -382,6 +382,7 @@ class HaConfigAreaPage extends LitElement { paper-item { cursor: pointer; + font-size: var(--paper-font-body1_-_font-size); } a { diff --git a/src/panels/config/devices/ha-config-device-page.ts b/src/panels/config/devices/ha-config-device-page.ts index 22c2ea190a..b1655fab2e 100644 --- a/src/panels/config/devices/ha-config-device-page.ts +++ b/src/panels/config/devices/ha-config-device-page.ts @@ -716,6 +716,7 @@ export class HaConfigDevicePage extends LitElement { paper-item { cursor: pointer; + font-size: var(--paper-font-body1_-_font-size); } paper-item.no-link { From cbef9096570d7ac948a115e9bdd0441626a2a895 Mon Sep 17 00:00:00 2001 From: Daniel Martin Gonzalez Date: Sat, 17 Oct 2020 22:15:37 +0200 Subject: [PATCH 101/155] Add Counter to Helpers (#7346) Co-authored-by: Bram Kragten --- src/data/counter.ts | 51 +++++ src/panels/config/entities/const.ts | 1 + .../settings/entity-settings-helper-tab.ts | 11 + src/panels/config/helpers/const.ts | 5 +- .../config/helpers/dialog-helper-detail.ts | 3 + .../config/helpers/forms/ha-counter-form.ts | 210 ++++++++++++++++++ src/translations/en.json | 10 +- 7 files changed, 289 insertions(+), 2 deletions(-) create mode 100644 src/data/counter.ts create mode 100644 src/panels/config/helpers/forms/ha-counter-form.ts diff --git a/src/data/counter.ts b/src/data/counter.ts new file mode 100644 index 0000000000..b01bf65869 --- /dev/null +++ b/src/data/counter.ts @@ -0,0 +1,51 @@ +import { HomeAssistant } from "../types"; + +export interface Counter { + id: string; + name: string; + icon?: string; + initial?: number; + restore?: boolean; + minimum?: number; + maximum?: number; + step?: number; +} + +export interface CounterMutableParams { + name: string; + icon: string; + initial: number; + restore: boolean; + minimum: number; + maximum: number; + step: number; +} + +export const fetchCounter = (hass: HomeAssistant) => + hass.callWS({ type: "counter/list" }); + +export const createCounter = ( + hass: HomeAssistant, + values: CounterMutableParams +) => + hass.callWS({ + type: "counter/create", + ...values, + }); + +export const updateCounter = ( + hass: HomeAssistant, + id: string, + updates: Partial +) => + hass.callWS({ + type: "counter/update", + counter_id: id, + ...updates, + }); + +export const deleteCounter = (hass: HomeAssistant, id: string) => + hass.callWS({ + type: "counter/delete", + counter_id: id, + }); diff --git a/src/panels/config/entities/const.ts b/src/panels/config/entities/const.ts index bf9b0c5ad6..ca76edf359 100644 --- a/src/panels/config/entities/const.ts +++ b/src/panels/config/entities/const.ts @@ -5,4 +5,5 @@ export const PLATFORMS_WITH_SETTINGS_TAB = { input_text: "entity-settings-helper-tab", input_boolean: "entity-settings-helper-tab", input_datetime: "entity-settings-helper-tab", + counter: "entity-settings-helper-tab", }; diff --git a/src/panels/config/entities/editor-tabs/settings/entity-settings-helper-tab.ts b/src/panels/config/entities/editor-tabs/settings/entity-settings-helper-tab.ts index fbaa723ec8..09c7e268e8 100644 --- a/src/panels/config/entities/editor-tabs/settings/entity-settings-helper-tab.ts +++ b/src/panels/config/entities/editor-tabs/settings/entity-settings-helper-tab.ts @@ -42,6 +42,11 @@ import { fetchInputText, updateInputText, } from "../../../../../data/input_text"; +import { + deleteCounter, + fetchCounter, + updateCounter, +} from "../../../../../data/counter"; import { showConfirmationDialog } from "../../../../../dialogs/generic/show-dialog-box"; import type { HomeAssistant } from "../../../../../types"; import type { Helper } from "../../../helpers/const"; @@ -50,6 +55,7 @@ import "../../../helpers/forms/ha-input_datetime-form"; import "../../../helpers/forms/ha-input_number-form"; import "../../../helpers/forms/ha-input_select-form"; import "../../../helpers/forms/ha-input_text-form"; +import "../../../helpers/forms/ha-counter-form"; import "../../entity-registry-basic-editor"; import type { HaEntityRegistryBasicEditor } from "../../entity-registry-basic-editor"; import { haStyle } from "../../../../../resources/styles"; @@ -80,6 +86,11 @@ const HELPERS = { update: updateInputSelect, delete: deleteInputSelect, }, + counter: { + fetch: fetchCounter, + update: updateCounter, + delete: deleteCounter, + }, }; @customElement("entity-settings-helper-tab") diff --git a/src/panels/config/helpers/const.ts b/src/panels/config/helpers/const.ts index d273290613..22ebcab1a6 100644 --- a/src/panels/config/helpers/const.ts +++ b/src/panels/config/helpers/const.ts @@ -3,6 +3,7 @@ import { InputDateTime } from "../../../data/input_datetime"; import { InputNumber } from "../../../data/input_number"; import { InputSelect } from "../../../data/input_select"; import { InputText } from "../../../data/input_text"; +import { Counter } from "../../../data/counter"; export const HELPER_DOMAINS = [ "input_boolean", @@ -10,6 +11,7 @@ export const HELPER_DOMAINS = [ "input_number", "input_datetime", "input_select", + "counter", ]; export type Helper = @@ -17,4 +19,5 @@ export type Helper = | InputText | InputNumber | InputSelect - | InputDateTime; + | InputDateTime + | Counter; diff --git a/src/panels/config/helpers/dialog-helper-detail.ts b/src/panels/config/helpers/dialog-helper-detail.ts index a7320a5e0e..38fc564544 100644 --- a/src/panels/config/helpers/dialog-helper-detail.ts +++ b/src/panels/config/helpers/dialog-helper-detail.ts @@ -22,6 +22,7 @@ import { createInputDateTime } from "../../../data/input_datetime"; import { createInputNumber } from "../../../data/input_number"; import { createInputSelect } from "../../../data/input_select"; import { createInputText } from "../../../data/input_text"; +import { createCounter } from "../../../data/counter"; import { haStyleDialog } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; import { Helper } from "./const"; @@ -30,6 +31,7 @@ import "./forms/ha-input_datetime-form"; import "./forms/ha-input_number-form"; import "./forms/ha-input_select-form"; import "./forms/ha-input_text-form"; +import "./forms/ha-counter-form"; const HELPERS = { input_boolean: createInputBoolean, @@ -37,6 +39,7 @@ const HELPERS = { input_number: createInputNumber, input_datetime: createInputDateTime, input_select: createInputSelect, + counter: createCounter, }; @customElement("dialog-helper-detail") diff --git a/src/panels/config/helpers/forms/ha-counter-form.ts b/src/panels/config/helpers/forms/ha-counter-form.ts new file mode 100644 index 0000000000..723d9f134e --- /dev/null +++ b/src/panels/config/helpers/forms/ha-counter-form.ts @@ -0,0 +1,210 @@ +import "@polymer/paper-input/paper-input"; +import { + css, + CSSResult, + customElement, + html, + internalProperty, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../../../common/dom/fire_event"; +import "../../../../components/ha-icon-input"; +import "../../../../components/ha-switch"; +import type { HaSwitch } from "../../../../components/ha-switch"; +import { Counter } from "../../../../data/counter"; +import { haStyle } from "../../../../resources/styles"; +import { HomeAssistant } from "../../../../types"; + +@customElement("ha-counter-form") +class HaCounterForm extends LitElement { + @property({ attribute: false }) public hass!: HomeAssistant; + + @property() public new?: boolean; + + private _item?: Partial; + + @internalProperty() private _name!: string; + + @internalProperty() private _icon!: string; + + @internalProperty() private _maximum?: number; + + @internalProperty() private _minimum?: number; + + @internalProperty() private _restore?: boolean; + + @internalProperty() private _initial?: number; + + @internalProperty() private _step?: number; + + set item(item: Counter) { + this._item = item; + if (item) { + this._name = item.name || ""; + this._icon = item.icon || ""; + this._maximum = item.maximum; + this._minimum = item.minimum; + this._restore = item.restore ?? true; + this._step = item.step ?? 1; + this._initial = item.initial ?? 0; + } else { + this._name = ""; + this._icon = ""; + this._maximum = undefined; + this._minimum = undefined; + this._restore = true; + this._step = 1; + this._initial = 0; + } + } + + public focus() { + this.updateComplete.then(() => + (this.shadowRoot?.querySelector( + "[dialogInitialFocus]" + ) as HTMLElement)?.focus() + ); + } + + protected render(): TemplateResult { + if (!this.hass) { + return html``; + } + const nameInvalid = !this._name || this._name.trim() === ""; + + return html` +
+ + + + + + ${this.hass.userData?.showAdvanced + ? html` + +
+ + +
+ ${this.hass.localize( + "ui.dialogs.helper_settings.counter.restore" + )} +
+
+ ` + : ""} +
+ `; + } + + private _valueChanged(ev: CustomEvent) { + if (!this.new && !this._item) { + return; + } + ev.stopPropagation(); + const target = ev.target as any; + const configValue = target.configValue; + const value = + target.type === "number" + ? Number(ev.detail.value) + : target.localName === "ha-switch" + ? (ev.target as HaSwitch).checked + : ev.detail.value; + if (this[`_${configValue}`] === value) { + return; + } + const newValue = { ...this._item }; + if (value === undefined || value === "") { + delete newValue[configValue]; + } else { + newValue[configValue] = value; + } + fireEvent(this, "value-changed", { + value: newValue, + }); + } + + static get styles(): CSSResult[] { + return [ + haStyle, + css` + .form { + color: var(--primary-text-color); + } + .row { + margin-top: 12px; + margin-bottom: 12px; + color: var(--primary-text-color); + display: flex; + align-items: center; + } + .row div { + margin-left: 16px; + } + `, + ]; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-counter-form": HaCounterForm; + } +} diff --git a/src/translations/en.json b/src/translations/en.json index 419d8f1ae0..1491539715 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -601,6 +601,13 @@ "add_option": "Add option", "no_options": "There are no options yet.", "add": "Add" + }, + "counter": { + "minimum": "Minimum value", + "maximum": "Maximum value", + "initial": "Initial value", + "restore": "Restore the last known value when Home Assistant starts", + "step": "Step size" } }, "options_flow": { @@ -784,7 +791,8 @@ "input_number": "Number", "input_select": "Dropdown", "input_boolean": "Toggle", - "input_datetime": "Date and/or time" + "input_datetime": "Date and/or time", + "counter": "Counter" }, "picker": { "headers": { From 534d1f5055d5f9ff43655fa4651d5dc8ea720df2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Sat, 17 Oct 2020 22:18:17 +0200 Subject: [PATCH 102/155] Add dialog and links for unsupported supervisor installation (#7332) --- hassio/src/system/hassio-supervisor-info.ts | 74 +++++++++++++++++---- src/data/hassio/resolution.ts | 15 +++++ 2 files changed, 77 insertions(+), 12 deletions(-) create mode 100644 src/data/hassio/resolution.ts diff --git a/hassio/src/system/hassio-supervisor-info.ts b/hassio/src/system/hassio-supervisor-info.ts index d53597699c..ad9fb4e417 100644 --- a/hassio/src/system/hassio-supervisor-info.ts +++ b/hassio/src/system/hassio-supervisor-info.ts @@ -11,14 +11,16 @@ import "../../../src/components/buttons/ha-progress-button"; import "../../../src/components/ha-card"; import "../../../src/components/ha-settings-row"; import "../../../src/components/ha-switch"; +import { extractApiErrorMessage } from "../../../src/data/hassio/common"; import { HassioHostInfo as HassioHostInfoType } from "../../../src/data/hassio/host"; +import { fetchHassioResolution } from "../../../src/data/hassio/resolution"; import { + fetchHassioSupervisorInfo, HassioSupervisorInfo as HassioSupervisorInfoType, reloadSupervisor, setSupervisorOption, SupervisorOptions, updateSupervisor, - fetchHassioSupervisorInfo, } from "../../../src/data/hassio/supervisor"; import { showAlertDialog, @@ -26,8 +28,35 @@ import { } from "../../../src/dialogs/generic/show-dialog-box"; import { haStyle } from "../../../src/resources/styles"; import { HomeAssistant } from "../../../src/types"; +import { documentationUrl } from "../../../src/util/documentation-url"; import { hassioStyle } from "../resources/hassio-style"; -import { extractApiErrorMessage } from "../../../src/data/hassio/common"; + +const ISSUES = { + container: { + title: "Containers known to cause issues", + url: "/more-info/unsupported/container", + }, + dbus: { title: "DBUS", url: "/more-info/unsupported/dbus" }, + docker_configuration: { + title: "Docker Configuration", + url: "/more-info/unsupported/docker_configuration", + }, + docker_version: { + title: "Docker Version", + url: "/more-info/unsupported/docker_version", + }, + lxc: { title: "LXC", url: "/more-info/unsupported/lxc" }, + network_manager: { + title: "Network Manager", + url: "/more-info/unsupported/network_manager", + }, + os: { title: "Operating System", url: "/more-info/unsupported/os" }, + privileged: { + title: "Supervisor is not privileged", + url: "/more-info/unsupported/privileged", + }, + systemd: { title: "Systemd", url: "/more-info/unsupported/systemd" }, +}; @customElement("hassio-supervisor-info") class HassioSupervisorInfo extends LitElement { @@ -118,18 +147,13 @@ class HassioSupervisorInfo extends LitElement { ` : html`
You are running an unsupported installation. - - Learn More - + Learn more +
`}
@@ -249,6 +273,32 @@ class HassioSupervisorInfo extends LitElement { }); } + private async _unsupportedDialog(): Promise { + const resolution = await fetchHassioResolution(this.hass); + await showAlertDialog(this, { + title: "You are running an unsupported installation", + text: html`Below is a list of issues found with your installation, click + on the links to learn how you can resolve the issues.

+ `, + }); + } + private async _toggleDiagnostics(): Promise { try { const data: SupervisorOptions = { diff --git a/src/data/hassio/resolution.ts b/src/data/hassio/resolution.ts new file mode 100644 index 0000000000..8f85943de3 --- /dev/null +++ b/src/data/hassio/resolution.ts @@ -0,0 +1,15 @@ +import { HomeAssistant } from "../../types"; +import { hassioApiResultExtractor, HassioResponse } from "./common"; + +export interface HassioResolution { + unsupported: string[]; +} + +export const fetchHassioResolution = async (hass: HomeAssistant) => { + return hassioApiResultExtractor( + await hass.callApi>( + "GET", + "hassio/resolution/info" + ) + ); +}; From eb036a12d999c73e962822afc0a735e16e033940 Mon Sep 17 00:00:00 2001 From: Villhellm Date: Sat, 17 Oct 2020 13:21:03 -0700 Subject: [PATCH 103/155] add help button to tags config panel (#7278) * add help button to tags config panel * Update src/panels/config/tags/ha-config-tags.ts Co-authored-by: Bram Kragten Co-authored-by: Bram Kragten --- src/panels/config/tags/ha-config-tags.ts | 40 ++++++++++++++++++++++-- src/translations/en.json | 1 + 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/panels/config/tags/ha-config-tags.ts b/src/panels/config/tags/ha-config-tags.ts index a3566f83f8..a2b2d52d07 100644 --- a/src/panels/config/tags/ha-config-tags.ts +++ b/src/panels/config/tags/ha-config-tags.ts @@ -1,5 +1,6 @@ import "@material/mwc-fab"; -import { mdiCog, mdiContentDuplicate, mdiPlus, mdiRobot } from "@mdi/js"; +import "@material/mwc-icon-button"; +import { mdiCog, mdiContentDuplicate, mdiPlus, mdiRobot, mdiHelpCircle } from "@mdi/js"; import { customElement, html, @@ -23,7 +24,7 @@ import { updateTag, UpdateTagParams, } from "../../../data/tag"; -import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box"; +import { showConfirmationDialog, showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; import { getExternalConfig } from "../../../external_app/external_config"; import "../../../layouts/hass-tabs-subpage-data-table"; import { SubscribeMixin } from "../../../mixins/subscribe-mixin"; @@ -31,6 +32,7 @@ import { HomeAssistant, Route } from "../../../types"; import { configSections } from "../ha-panel-config"; import { showTagDetailDialog } from "./show-dialog-tag-detail"; import "./tag-image"; +import { documentationUrl } from "../../../util/documentation-url"; export interface TagRowData extends Tag { last_scanned_datetime: Date | null; @@ -193,6 +195,9 @@ export class HaConfigTags extends SubscribeMixin(LitElement) { .noDataText=${this.hass.localize("ui.panel.config.tags.no_tags")} hasFab > + + + + ${this.hass.localize( + "ui.panel.config.tags.detail.usage", + "companion_link", + html`${this.hass!.localize( + "ui.panel.config.tags.detail.companion_apps" + )}` + )} +

+

+ + ${this.hass.localize("ui.panel.config.tags.learn_more")} + +

+ `, + }); + } + private async _fetchTags() { this._tags = await fetchTags(this.hass); } diff --git a/src/translations/en.json b/src/translations/en.json index 1491539715..dd8cbd7bbc 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -758,6 +758,7 @@ "tags": { "caption": "Tags", "description": "Manage tags", + "learn_more": "Learn more about tags", "no_tags": "No tags", "add_tag": "Add tag", "write": "Write", From 6e130cc0208fdcb97c627d590e2d82c9f14b19a7 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Sat, 17 Oct 2020 22:28:40 +0200 Subject: [PATCH 104/155] Properly wrap integration title / device names (#7355) --- src/panels/config/integrations/ha-integration-card.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/panels/config/integrations/ha-integration-card.ts b/src/panels/config/integrations/ha-integration-card.ts index e52b318d82..2ee72b8bac 100644 --- a/src/panels/config/integrations/ha-integration-card.ts +++ b/src/panels/config/integrations/ha-integration-card.ts @@ -495,7 +495,6 @@ export class HaIntegrationCard extends LitElement { max-height: 100%; max-width: 90%; } - .none-found { margin: auto; text-align: center; @@ -510,6 +509,14 @@ export class HaIntegrationCard extends LitElement { margin-top: 0; min-height: 24px; } + h3 { + word-wrap: break-word; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; + overflow: hidden; + text-overflow: ellipsis; + } ha-button-menu { color: var(--secondary-text-color); --mdc-menu-min-width: 200px; From 713e0579f8ccc73d1ea6c287d45a61372e5f39b7 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Sat, 17 Oct 2020 22:46:34 +0200 Subject: [PATCH 105/155] Entity registry settings: Remove "Override" string + use domain icon as fallback (#7320) --- src/panels/config/entities/entity-registry-settings.ts | 7 ++++++- src/translations/en.json | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/panels/config/entities/entity-registry-settings.ts b/src/panels/config/entities/entity-registry-settings.ts index 5ac897dc78..e6b7ea577d 100644 --- a/src/panels/config/entities/entity-registry-settings.ts +++ b/src/panels/config/entities/entity-registry-settings.ts @@ -27,6 +27,7 @@ import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box import type { PolymerChangedEvent } from "../../../polymer-types"; import { haStyle } from "../../../resources/styles"; import type { HomeAssistant } from "../../../types"; +import { domainIcon } from "../../../common/entity/domain_icon"; @customElement("entity-registry-settings") export class EntityRegistrySettings extends LitElement { @@ -93,7 +94,11 @@ export class EntityRegistrySettings extends LitElement { .value=${this._icon} @value-changed=${this._iconChanged} .label=${this.hass.localize("ui.dialogs.entity_registry.editor.icon")} - .placeholder=${this.entry.original_icon} + .placeholder=${this.entry.original_icon || + domainIcon( + computeDomain(this.entry.entity_id), + this.hass.states[this.entry.entity_id] + )} .disabled=${this._submitting} .errorMessage=${this.hass.localize( "ui.dialogs.entity_registry.editor.icon_error" diff --git a/src/translations/en.json b/src/translations/en.json index dd8cbd7bbc..fc62990841 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -551,8 +551,8 @@ "no_unique_id": "This entity does not have a unique ID, therefore its settings cannot be managed from the UI. See the {faq_link} for more detail.", "faq": "documentation", "editor": { - "name": "Name Override", - "icon": "Icon Override", + "name": "Name", + "icon": "Icon", "icon_error": "Icons should be in the format 'prefix:iconname', e.g. 'mdi:home'", "entity_id": "Entity ID", "unavailable": "This entity is not currently available.", From 7e769d0e143c37a5d4df0c39391b3d741e353172 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Sat, 17 Oct 2020 23:22:56 +0200 Subject: [PATCH 106/155] Make use

for header (#7373) Co-authored-by: Zack Barett --- cast/src/launcher/layout/hc-layout.ts | 4 ++-- hassio/src/addon-view/info/hassio-addon-info.ts | 2 +- src/components/ha-card.ts | 9 ++++++--- src/panels/config/devices/ha-config-device-page.ts | 12 ++++++------ src/panels/config/scene/ha-scene-editor.ts | 4 ++-- src/panels/lovelace/cards/hui-entities-card.ts | 4 ++-- src/panels/lovelace/cards/hui-stack-card.ts | 2 +- 7 files changed, 20 insertions(+), 17 deletions(-) diff --git a/cast/src/launcher/layout/hc-layout.ts b/cast/src/launcher/layout/hc-layout.ts index f9d82223b2..1c7a850a30 100644 --- a/cast/src/launcher/layout/hc-layout.ts +++ b/cast/src/launcher/layout/hc-layout.ts @@ -30,7 +30,7 @@ class HcLayout extends LitElement {
-
+

Home Assistant Cast${this.subtitle ? ` – ${this.subtitle}` : ""} ${this.auth ? html` @@ -44,7 +44,7 @@ class HcLayout extends LitElement {

` : ""} -
+

diff --git a/hassio/src/addon-view/info/hassio-addon-info.ts b/hassio/src/addon-view/info/hassio-addon-info.ts index 1309e7d5a1..27bd3ed6ca 100644 --- a/hassio/src/addon-view/info/hassio-addon-info.ts +++ b/hassio/src/addon-view/info/hassio-addon-info.ts @@ -178,7 +178,7 @@ class HassioAddonInfo extends LitElement { ${!this.addon.protected ? html` -
Warning: Protection mode is disabled!
+

Warning: Protection mode is disabled!

Protection mode on this add-on is disabled! This gives the add-on full access to the entire system, which adds security risks, and could damage your system when used incorrectly. Only disable the protection mode if you know, need AND trust the source of this add-on.
diff --git a/src/components/ha-card.ts b/src/components/ha-card.ts index cf215968c4..157d663bfe 100644 --- a/src/components/ha-card.ts +++ b/src/components/ha-card.ts @@ -50,9 +50,12 @@ export class HaCard extends LitElement { font-family: var(--ha-card-header-font-family, inherit); font-size: var(--ha-card-header-font-size, 24px); letter-spacing: -0.012em; - line-height: 32px; - padding: 24px 16px 16px; + line-height: 48px; + padding: 12px 16px 16px; display: block; + margin-block-start: 0px; + margin-block-end: 0px; + font-weight: normal; } :host ::slotted(.card-content:not(:first-child)), @@ -75,7 +78,7 @@ export class HaCard extends LitElement { protected render(): TemplateResult { return html` ${this.header - ? html`
${this.header}
` + ? html`

${this.header}

` : html``} `; diff --git a/src/panels/config/devices/ha-config-device-page.ts b/src/panels/config/devices/ha-config-device-page.ts index b1655fab2e..34d25caf7b 100644 --- a/src/panels/config/devices/ha-config-device-page.ts +++ b/src/panels/config/devices/ha-config-device-page.ts @@ -259,7 +259,7 @@ export class HaConfigDevicePage extends LitElement { isComponentLoaded(this.hass, "automation") ? html` -
+

${this.hass.localize( "ui.panel.config.devices.automation.automations" )} @@ -270,7 +270,7 @@ export class HaConfigDevicePage extends LitElement { )} icon="hass:plus-circle" > -

+ ${this._related?.automation?.length ? this._related.automation.map((automation) => { const state = this.hass.states[automation]; @@ -328,7 +328,7 @@ export class HaConfigDevicePage extends LitElement { isComponentLoaded(this.hass, "scene") && entities.length ? html` -
+

${this.hass.localize( "ui.panel.config.devices.scene.scenes" )} @@ -340,7 +340,7 @@ export class HaConfigDevicePage extends LitElement { )} icon="hass:plus-circle" > -

+ ${ this._related?.scene?.length @@ -402,7 +402,7 @@ export class HaConfigDevicePage extends LitElement { isComponentLoaded(this.hass, "script") ? html` -
+

${this.hass.localize( "ui.panel.config.devices.script.scripts" )} @@ -413,7 +413,7 @@ export class HaConfigDevicePage extends LitElement { )} icon="hass:plus-circle" > -

+ ${this._related?.script?.length ? this._related.script.map((script) => { const state = this.hass.states[script]; diff --git a/src/panels/config/scene/ha-scene-editor.ts b/src/panels/config/scene/ha-scene-editor.ts index 5c3526ff2d..480a3343ee 100644 --- a/src/panels/config/scene/ha-scene-editor.ts +++ b/src/panels/config/scene/ha-scene-editor.ts @@ -268,7 +268,7 @@ export class HaSceneEditor extends SubscribeMixin( (device) => html` -
+

${device.name} -

+ ${device.entities.map((entityId) => { const entityStateObj = this.hass.states[entityId]; if (!entityStateObj) { diff --git a/src/panels/lovelace/cards/hui-entities-card.ts b/src/panels/lovelace/cards/hui-entities-card.ts index cc9332790d..d23d32cce8 100644 --- a/src/panels/lovelace/cards/hui-entities-card.ts +++ b/src/panels/lovelace/cards/hui-entities-card.ts @@ -186,7 +186,7 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard { ${!this._config.title && !this._showHeaderToggle && !this._config.icon ? "" : html` -
+

${this._config.icon ? html` @@ -208,7 +208,7 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard { ) as EntityConfig[]).map((conf) => conf.entity)} > `} -
+

`}
${this._configEntities!.map((entityConf) => diff --git a/src/panels/lovelace/cards/hui-stack-card.ts b/src/panels/lovelace/cards/hui-stack-card.ts index d4126bbf3b..dfe7a0ec6f 100644 --- a/src/panels/lovelace/cards/hui-stack-card.ts +++ b/src/panels/lovelace/cards/hui-stack-card.ts @@ -75,7 +75,7 @@ export abstract class HuiStackCard extends LitElement implements LovelaceCard { return html` ${this._config.title - ? html`
${this._config.title}
` + ? html`

${this._config.title}

` : ""}
${this._cards}
`; From 3277a4e8c3565a9c1230ce705cc10c90f9180153 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Sat, 17 Oct 2020 23:34:11 +0200 Subject: [PATCH 107/155] Minor tweaks for when media player has no items (#7374) --- src/components/media-player/ha-media-player-browse.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/media-player/ha-media-player-browse.ts b/src/components/media-player/ha-media-player-browse.ts index 32146ec822..8c17267fc4 100644 --- a/src/components/media-player/ha-media-player-browse.ts +++ b/src/components/media-player/ha-media-player-browse.ts @@ -378,6 +378,7 @@ export class HaMediaPlayerBrowse extends LitElement { : html`
${this.hass.localize("ui.components.media-browser.no_items")} +
${currentItem.media_content_id === "media-source://media_source/local/." ? html`
${this.hass.localize( @@ -398,7 +399,7 @@ export class HaMediaPlayerBrowse extends LitElement {
${this.hass.localize( "ui.components.media-browser.local_media_files" - )}.` + )}` : ""}
`} From a7998b30c6d84d2164491b9872e17c350bca11b6 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Sat, 17 Oct 2020 23:43:00 +0200 Subject: [PATCH 108/155] Fix hls player (#7362) --- src/components/ha-hls-player.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/ha-hls-player.ts b/src/components/ha-hls-player.ts index 53e95ebd3f..5b84c8d4e2 100644 --- a/src/components/ha-hls-player.ts +++ b/src/components/ha-hls-player.ts @@ -38,7 +38,8 @@ class HaHLSPlayer extends LitElement { @property({ type: Boolean, attribute: "allow-exoplayer" }) public allowExoPlayer = false; - @query("video", true) private _videoEl!: HTMLVideoElement; + // don't cache this, as we remove it on disconnects + @query("video") private _videoEl!: HTMLVideoElement; @internalProperty() private _attached = false; @@ -155,7 +156,7 @@ class HaHLSPlayer extends LitElement { private _resizeExoPlayer = () => { if (!this._videoEl) { - return; + return; } const rect = this._videoEl.getBoundingClientRect(); this.hass!.auth.external!.fireMessage({ From e603893d77accac999c9e4e45bac87796619b6a2 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Sun, 18 Oct 2020 00:28:05 +0200 Subject: [PATCH 109/155] Fix navigation links for "script/edit" (#7363) --- src/panels/config/areas/ha-config-area-page.ts | 6 +----- src/panels/config/devices/ha-config-device-page.ts | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/panels/config/areas/ha-config-area-page.ts b/src/panels/config/areas/ha-config-area-page.ts index 2ec77fcfa0..ec0085aacd 100644 --- a/src/panels/config/areas/ha-config-area-page.ts +++ b/src/panels/config/areas/ha-config-area-page.ts @@ -261,11 +261,7 @@ class HaConfigAreaPage extends LitElement { return state ? html` diff --git a/src/panels/config/devices/ha-config-device-page.ts b/src/panels/config/devices/ha-config-device-page.ts index 34d25caf7b..927012efe0 100644 --- a/src/panels/config/devices/ha-config-device-page.ts +++ b/src/panels/config/devices/ha-config-device-page.ts @@ -420,11 +420,7 @@ export class HaConfigDevicePage extends LitElement { return state ? html` From 16984d18bbe23a7ea2258a616d495d9c90942874 Mon Sep 17 00:00:00 2001 From: Donnie Date: Sat, 17 Oct 2020 15:48:48 -0700 Subject: [PATCH 110/155] Refactor quick bar to use a common interface for future commands and easier sorting (#7368) --- src/dialogs/quick-bar/ha-quick-bar.ts | 211 +++++++++----------------- 1 file changed, 70 insertions(+), 141 deletions(-) diff --git a/src/dialogs/quick-bar/ha-quick-bar.ts b/src/dialogs/quick-bar/ha-quick-bar.ts index 7036b8ce68..072e0e642f 100644 --- a/src/dialogs/quick-bar/ha-quick-bar.ts +++ b/src/dialogs/quick-bar/ha-quick-bar.ts @@ -15,7 +15,7 @@ import { import { fireEvent } from "../../common/dom/fire_event"; import "../../components/ha-dialog"; import { haStyleDialog } from "../../resources/styles"; -import { HomeAssistant, ServiceCallRequest } from "../../types"; +import { HomeAssistant } from "../../types"; import { PolymerChangedEvent } from "../../polymer-types"; import { fuzzySequentialMatch } from "../../common/string/sequence_matching"; import { componentsWithService } from "../../common/config/components_with_service"; @@ -23,21 +23,27 @@ import { domainIcon } from "../../common/entity/domain_icon"; import { computeDomain } from "../../common/entity/compute_domain"; import { domainToName } from "../../data/integration"; import { QuickBarParams } from "./show-dialog-quick-bar"; -import { HassEntity } from "home-assistant-js-websocket"; import { compare } from "../../common/string/compare"; import { SingleSelectedEvent } from "@material/mwc-list/mwc-list-foundation"; +import { computeStateName } from "../../common/entity/compute_state_name"; -interface CommandItem extends ServiceCallRequest { +interface QuickBarItem { text: string; + altText?: string; + icon: string; + action(data?: any): void; + score?: number; } @customElement("ha-quick-bar") export class QuickBar extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; - @internalProperty() private _commandItems: CommandItem[] = []; + @internalProperty() private _commandItems: QuickBarItem[] = []; - @internalProperty() private _entities: HassEntity[] = []; + @internalProperty() private _entityItems: QuickBarItem[] = []; + + @internalProperty() private _items: QuickBarItem[] = []; @internalProperty() private _itemFilter = ""; @@ -57,9 +63,7 @@ export class QuickBar extends LitElement { this._commandMode = params.commandMode || false; this._opened = true; this._commandItems = this._generateCommandItems(); - this._entities = Object.keys(this.hass.states).map( - (entity_id) => this.hass.states[entity_id] - ); + this._entityItems = this._generateEntityItems(); } public closeDialog() { @@ -91,84 +95,46 @@ export class QuickBar extends LitElement { @keydown=${this._handleInputKeyDown} @focus=${this._resetActivatedIndex} > - ${this._commandMode - ? this.renderCommandsList() - : this.renderEntityList()} + + ${this._items.map( + (item, index) => html` + + + ${item.text} + ${item.altText + ? html` ${item.altText} ` + : null} + ${this._commandTriggered === index + ? html`` + : null} + + ` + )} + `; } - protected renderCommandsList() { - const items = this._filterCommandItems( - this._commandItems, - this._itemFilter - ); + private async processItemAndCloseDialog(ev: SingleSelectedEvent) { + const index = ev.detail.index; + const item = (ev.target as any).items[index].item; - return html` - - ${items.map( - (item, index) => html` - - - ${item.text} - ${this._commandTriggered === index - ? html`` - : null} - - ` - )} - - `; - } + this._commandTriggered = index; - protected renderEntityList() { - const entities = this._filterEntityItems(this._itemFilter); - - return html` - - ${entities.map((entity, index) => { - const domain = computeDomain(entity.entity_id); - return html` - - - ${entity.attributes?.friendly_name - ? html` - - ${entity.attributes?.friendly_name} - - ${entity.entity_id} - ` - : html` - - ${entity.entity_id} - - `} - - `; - })} - - `; + await item.action(); + this.closeDialog(); } private _resetActivatedIndex() { @@ -213,9 +179,23 @@ export class QuickBar extends LitElement { this._commandMode = false; this._itemFilter = newFilter; } + + this._items = (this._commandMode ? this._commandItems : this._entityItems) + .filter(({ text, altText }) => { + const values = [text]; + if (altText) { + values.push(altText); + } + return fuzzySequentialMatch(this._itemFilter, values); + }) + .sort((itemA, itemB) => compare(itemA.text, itemB.text)); } - private _generateCommandItems(): CommandItem[] { + private _generateCommandItems(): QuickBarItem[] { + return [...this._generateReloadCommands()]; + } + + private _generateReloadCommands(): QuickBarItem[] { const reloadableDomains = componentsWithService(this.hass, "reload").sort(); return reloadableDomains.map((domain) => ({ @@ -226,69 +206,18 @@ export class QuickBar extends LitElement { "domain", domainToName(this.hass.localize, domain) ), - domain, - service: "reload", + icon: domainIcon(domain), + action: () => this.hass.callService(domain, "reload"), })); } - private _filterCommandItems( - items: CommandItem[], - filter: string - ): CommandItem[] { - return items - .filter(({ text }) => - fuzzySequentialMatch(filter.toLowerCase(), [text.toLowerCase()]) - ) - .sort((itemA, itemB) => compare(itemA.text, itemB.text)); - } - - private _filterEntityItems(filter: string): HassEntity[] { - return this._entities - .filter(({ entity_id, attributes: { friendly_name } }) => { - const values = [entity_id]; - if (friendly_name) { - values.push(friendly_name); - } - return fuzzySequentialMatch(filter.toLowerCase(), values); - }) - .sort((entityA, entityB) => - compare(entityA.entity_id, entityB.entity_id) - ); - } - - private async _processCommand(ev: SingleSelectedEvent) { - const index = ev.detail.index; - const item = (ev.target as any).items[index].item; - - this._commandTriggered = index; - - this._runCommandAndCloseDialog({ - domain: item.domain, - service: item.service, - serviceData: item.serviceData, - }); - } - - private async _runCommandAndCloseDialog(request?: ServiceCallRequest) { - if (!request) { - return; - } - - this.hass - .callService(request.domain, request.service, request.serviceData) - .then(() => this.closeDialog()); - } - - private _entityMoreInfo(ev: SingleSelectedEvent) { - const index = ev.detail.index; - const entityId = (ev.target as any).items[index].entityId; - - this._launchMoreInfoDialog(entityId); - } - - private _launchMoreInfoDialog(entityId) { - fireEvent(this, "hass-more-info", { entityId }); - this.closeDialog(); + private _generateEntityItems(): QuickBarItem[] { + return Object.keys(this.hass.states).map((entityId) => ({ + text: computeStateName(this.hass.states[entityId]), + altText: entityId, + icon: domainIcon(computeDomain(entityId), this.hass.states[entityId]), + action: () => fireEvent(this, "hass-more-info", { entityId }), + })); } static get styles() { From b1f3192b95d3d5154b6d20322565fee6e2745205 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Sun, 18 Oct 2020 00:32:21 +0000 Subject: [PATCH 111/155] [ci skip] Translation update --- translations/frontend/ca.json | 2 +- translations/frontend/cs.json | 3 ++- translations/frontend/de.json | 35 +++++++++++++++++++++++++++++++++-- translations/frontend/en.json | 13 +++++++++++-- translations/frontend/et.json | 2 +- translations/frontend/ru.json | 6 +++--- 6 files changed, 51 insertions(+), 10 deletions(-) diff --git a/translations/frontend/ca.json b/translations/frontend/ca.json index f6872dd058..0eedce4e5c 100644 --- a/translations/frontend/ca.json +++ b/translations/frontend/ca.json @@ -931,7 +931,7 @@ "notification_drawer": { "click_to_configure": "Prem el botó per configurar {entity}", "close": "Tanca", - "dismiss_all": "Descartar-ho tot", + "dismiss_all": "Descarta-ho tot", "empty": "No hi ha notificacions", "title": "Notificacions" }, diff --git a/translations/frontend/cs.json b/translations/frontend/cs.json index 0e8d0c206f..608c231518 100644 --- a/translations/frontend/cs.json +++ b/translations/frontend/cs.json @@ -571,6 +571,7 @@ "no_history_found": "Historie stavu chybí." }, "logbook": { + "by": "přes", "by_service": "službou", "entries_not_found": "Nenalezeny žádné záznamy.", "messages": { @@ -2445,7 +2446,7 @@ "data": "Data události (YAML, volitelné)", "description": "Spustit událost na sběrnici událostí.", "documentation": "Dokumentace událostí.", - "event_fired": "Událost {type} spuštěna!", + "event_fired": "Událost {name} spuštěna!", "fire_event": "Spustit událost", "listen_to_events": "Naslouchat událostem", "listening_to": "Naslouchám", diff --git a/translations/frontend/de.json b/translations/frontend/de.json index aba306eb37..db42891d55 100644 --- a/translations/frontend/de.json +++ b/translations/frontend/de.json @@ -423,6 +423,8 @@ "browse_media": "Medien durchsuchen", "media_next_track": "Weiter", "media_play": "Abspielen", + "media_play_pause": "Spielen/Pause", + "media_previous_track": "Vorheriger Titel", "sound_mode": "Sound-Modus", "source": "Quelle", "text_to_speak": "Text zum Sprechen", @@ -576,6 +578,7 @@ "became_unavailable": "nicht mehr verfügbar", "changed_to_state": "wechselte zu {state}", "detected_device_class": "erkannt {device_class}", + "rose": "gestiegen", "set": "einstellen", "turned_off": "ausgeschaltet", "turned_on": "eingeschaltet", @@ -635,10 +638,14 @@ "media_browsing_error": "Fehler beim Durchsuchen der Medien", "media_not_supported": "Der Browser Media Player unterstützt diese Art von Medien nicht", "media_player": "Media Player", + "media-player-browser": "Medien-Browser", "no_items": "Keine Einträge", "no_local_media_found": "Keine lokalen Medien gefunden", "no_media_folder": "Es sieht so aus, als hätten Sie noch kein Medienverzeichnis erstellt.", + "pick": "Auswählen", + "pick-media": "Medien auswählen", "play": "Abspielen", + "play-media": "Medien abspielen", "setup_local_help": "Lese die {documentation} über die Einrichtung lokaler Medien.", "video_not_supported": "Ihr Browser unterstützt das Videoelement nicht.", "web-browser": "Webbrowser" @@ -667,9 +674,23 @@ "week": "{count} {count, plural,\none {Woche}\nother {Wochen}\n}" }, "future": "In {time}", + "future_duration": { + "day": "In {count} {count, plural,\n one {Tag}\n other {Tagen}\n}", + "hour": "In {count} {count, plural,\n one {Stunde}\n other {Stunden}\n}", + "minute": "In {count} {count, plural,\n one {Minute}\n other {Minuten}\n}", + "second": "In {count} {count, plural,\n one {Sekunde}\n other {Sekunden}\n}", + "week": "In {count} {count, plural,\n one {Woche}\n other {Wochen}\n}" + }, "just_now": "Gerade jetzt", "never": "Noch nie", - "past": "Vor {time}" + "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}" + } }, "service-picker": { "service": "Dienst" @@ -823,6 +844,7 @@ "automation": "Automationen neu laden", "filesize": "Dateigröße-Entitäten neu laden", "filter": "Filter-Entitäten neu laden", + "homekit": "HomeKit neu laden", "input_boolean": "Input-Booleans neu laden", "input_datetime": "Input-Datum/Zeit neu laden", "input_number": "Input-Numern neu laden", @@ -833,6 +855,8 @@ "reload": "{domain} neu laden", "scene": "Szenen neu laden", "script": "Skripte neu laden", + "smtp": "SMTP-Benachrichtigungsdienst neu laden", + "telegram": "Telegram-Benachrichtigungsdienst neu laden", "template": "Templates neu laden", "zone": "Zonen neu laden" } @@ -893,6 +917,7 @@ "notification_drawer": { "click_to_configure": "Klicke auf die Schaltfläche, um {entity} zu konfigurieren", "close": "Schließen", + "dismiss_all": "Alle schließen", "empty": "Keine Benachrichtigungen", "title": "Benachrichtigungen" }, @@ -1012,7 +1037,9 @@ "service_data": "Dienstdaten" }, "wait_for_trigger": { - "label": "Auf Auslöser warten" + "continue_timeout": "Bei Zeitüberschreitung fortfahren", + "label": "Auf Auslöser warten", + "timeout": "Zeitüberschreitung (optional)" }, "wait_template": { "continue_timeout": "Bei Timeout fortsetzen", @@ -1542,6 +1569,7 @@ }, "filter": { "filter": "Filter", + "hidden_entities": "{number} versteckte {number, plural,\n one {Entität}\n other {Entitäten}\n}", "show_all": "Alle anzeigen", "show_disabled": "Anzeigen deaktivierter Entitäten", "show_readonly": "Anzeigen schreibgeschützter Entitäten", @@ -1656,6 +1684,7 @@ "reload_restart_confirm": "Home Assistant neustarten, um das Neuladen dieser Integration abzuschließen", "rename": "Umbenennen", "restart_confirm": "Starte Home Assistant neu, um das Entfernen dieser Integration abzuschließen", + "services": "{count} {count, plural,\n one {Dienst}\n other {Dienste}\n}", "settings_button": "Einstellungen für {integration} bearbeiten", "system_options": "Systemoptionen", "system_options_button": "Systemoptionen für {integration}", @@ -2592,6 +2621,7 @@ "show_name": "Namen anzeigen?", "show_state": "Status anzeigen?", "state": "Zustand", + "state_color": "Symbole basierend auf dem Status einfärben?", "tap_action": "Tipp-Aktion", "theme": "Aussehen", "title": "Titel", @@ -2781,6 +2811,7 @@ "yaml_mode": "Du verwendest den YAML-Modus für dieses Dashboard. Dies bedeutet, dass Du Deine Lovelace-Konfiguration nicht über die Benutzeroberfläche ändern kannst. Wenn du dieses Dashboard über die Benutzeroberfläche verwalten möchtest, entferne \"mode: yaml\" aus Deiner Lovelace-Konfiguration in \"configuration.yaml\"." }, "select_view": { + "dashboard_label": "Dashboard", "header": "Wähle eine Ansicht" }, "suggest_card": { diff --git a/translations/frontend/en.json b/translations/frontend/en.json index 1e4aaa1d36..b034a22764 100644 --- a/translations/frontend/en.json +++ b/translations/frontend/en.json @@ -718,9 +718,9 @@ "enabled_description": "Disabled entities will not be added to Home Assistant.", "enabled_label": "Enable entity", "entity_id": "Entity ID", - "icon": "Icon Override", + "icon": "Icon", "icon_error": "Icons should be in the format 'prefix:iconname', e.g. 'mdi:home'", - "name": "Name Override", + "name": "Name", "note": "Note: This might not work yet with all integrations.", "unavailable": "This entity is not currently available.", "update": "Update" @@ -737,6 +737,13 @@ "ok": "OK" }, "helper_settings": { + "counter": { + "initial": "Initial value", + "maximum": "Maximum value", + "minimum": "Minimum value", + "restore": "Restore the last known value when Home Assistant starts", + "step": "Step size" + }, "generic": { "icon": "Icon", "name": "Name" @@ -1644,6 +1651,7 @@ "no_helpers": "Looks like you don't have any helpers yet!" }, "types": { + "counter": "Counter", "input_boolean": "Toggle", "input_datetime": "Date and/or time", "input_number": "Number", @@ -2163,6 +2171,7 @@ "last_scanned": "Last scanned", "name": "Name" }, + "learn_more": "Learn more about tags", "never_scanned": "Never scanned", "no_tags": "No tags", "write": "Write" diff --git a/translations/frontend/et.json b/translations/frontend/et.json index 27e0105e9d..27a6857d85 100644 --- a/translations/frontend/et.json +++ b/translations/frontend/et.json @@ -592,7 +592,7 @@ "was_locked": "lukustati", "was_low": "oli madal", "was_normal": "oli normaalne", - "was_opened": "avanes", + "was_opened": "avati", "was_plugged_in": "ühendati", "was_safe": "oli turvatud", "was_unlocked": "avanes", diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index b4d4253d97..1a4091f7a4 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -2643,7 +2643,7 @@ "last-triggered": "Последний запуск", "none": "Без дополнительной информации", "position": "Положение", - "tilt-position": "Положение наклона" + "tilt-position": "Наклон" }, "show_header_toggle": "Переключатель в заголовке", "special_row": "(специальная строка)", @@ -2711,7 +2711,7 @@ }, "horizontal-stack": { "description": "Позволяет сгруппировать несколько карточек так, чтобы они всегда находились рядом друг с другом в пределах одного столбца.", - "name": "Горизонтальный массив" + "name": "Горизонтальный стек" }, "humidifier": { "description": "Позволяет контролировать увлажнитель воздуха, изменять влажность и режим работы.", @@ -2781,7 +2781,7 @@ }, "vertical-stack": { "description": "Позволяет сгруппировать несколько карточек так, чтобы они всегда находились в одном столбце.", - "name": "Вертикальный массив" + "name": "Вертикальный стек" }, "weather-forecast": { "description": "Отображает погоду. Может быть полезна на устройствах, размещаемых на стене.", From 7dac7d757e721f572b8771c558b2599d0463e861 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Mon, 19 Oct 2020 00:32:45 +0000 Subject: [PATCH 112/155] [ci skip] Translation update --- translations/frontend/ca.json | 15 ++++-- translations/frontend/cs.json | 13 +++++- translations/frontend/de.json | 33 ++++++++----- translations/frontend/et.json | 9 ++++ translations/frontend/ja.json | 10 ++++ translations/frontend/nb.json | 75 +++++++++++++++++------------- translations/frontend/pl.json | 9 ++++ translations/frontend/ru.json | 9 ++++ translations/frontend/zh-Hans.json | 17 +++++-- translations/frontend/zh-Hant.json | 13 +++++- 10 files changed, 147 insertions(+), 56 deletions(-) diff --git a/translations/frontend/ca.json b/translations/frontend/ca.json index 0eedce4e5c..f53d9baea3 100644 --- a/translations/frontend/ca.json +++ b/translations/frontend/ca.json @@ -718,9 +718,9 @@ "enabled_description": "Les entitats desactivades no s'afegiran a Home Assistant.", "enabled_label": "Activa l'entitat", "entity_id": "ID de l'entitat", - "icon": "Sustitució d'icona", + "icon": "Icona", "icon_error": "Els icones han de tenir el format 'prefix:nom_icona', per exemple: 'mdi:home'", - "name": "Substitució de Nom", + "name": "Nom", "note": "Nota: podria no funcionar amb alguna de les integracions.", "unavailable": "Aquesta entitat no està disponible actualment.", "update": "Actualitza" @@ -737,6 +737,13 @@ "ok": "OK" }, "helper_settings": { + "counter": { + "initial": "Valor inicial", + "maximum": "Valor màxim", + "minimum": "Valor mínim", + "restore": "Restaura l'últim valor conegut quan Home Assistant s'iniciï.", + "step": "Mida del pas" + }, "generic": { "icon": "Icona", "name": "Nom" @@ -1644,6 +1651,7 @@ "no_helpers": "Sembla que encara no tens ajudants." }, "types": { + "counter": "Comptador", "input_boolean": "Interruptor", "input_datetime": "Data i/o hora", "input_number": "Número", @@ -2142,7 +2150,7 @@ "tags": { "add_tag": "Afegeix etiqueta", "automation_title": "S'escanegi l'etiqueta {name}", - "caption": "Etiquetes (NFC/RFID)", + "caption": "Etiquetes", "create_automation": "Crea una automatització amb una etiqueta", "description": "Gestiona les etiquetes", "detail": { @@ -2163,6 +2171,7 @@ "last_scanned": "Últim escaneig", "name": "Nom" }, + "learn_more": "Més informació sobre les etiquetes", "never_scanned": "Mai escanejat", "no_tags": "Sense etiquetes", "write": "Escriu" diff --git a/translations/frontend/cs.json b/translations/frontend/cs.json index 608c231518..06c29a55c9 100644 --- a/translations/frontend/cs.json +++ b/translations/frontend/cs.json @@ -718,9 +718,9 @@ "enabled_description": "Zakázané entity nebudou přidány do Home Assistant.", "enabled_label": "Povolit entitu", "entity_id": "Entity ID", - "icon": "Nahrazení ikony", + "icon": "Ikona", "icon_error": "Ikony by měly být ve formátu 'prefix:nazevikony', např. 'mdi:home'", - "name": "Přepsání názvu", + "name": "Jméno", "note": "Poznámka: U všech integrací to ještě nemusí fungovat.", "unavailable": "Tato entita není momentálně k dispozici.", "update": "Aktualizovat" @@ -737,6 +737,13 @@ "ok": "OK" }, "helper_settings": { + "counter": { + "initial": "Počáteční hodnota", + "maximum": "Maximální hodnota", + "minimum": "Minimální hodnota", + "restore": "Obnovit poslední známou hodnotu při spuštění Home Assistant", + "step": "Velikost kroku" + }, "generic": { "icon": "Ikona", "name": "Název" @@ -1644,6 +1651,7 @@ "no_helpers": "Vypadá to, že ještě nemáte žádné pomocníky!" }, "types": { + "counter": "Počítadlo", "input_boolean": "Přepínač", "input_datetime": "Datum a/nebo čas", "input_number": "Číslo", @@ -2163,6 +2171,7 @@ "last_scanned": "Naposledy naskenováno", "name": "Název" }, + "learn_more": "Další informace o značkách", "never_scanned": "Nikdy naskenováno", "no_tags": "Žádné značky", "write": "Zapsat" diff --git a/translations/frontend/de.json b/translations/frontend/de.json index db42891d55..c281e3e391 100644 --- a/translations/frontend/de.json +++ b/translations/frontend/de.json @@ -717,9 +717,9 @@ "enabled_description": "Deaktivierte Entitäten werden nicht zu Home Assistant hinzugefügt.", "enabled_label": "Entität aktivieren", "entity_id": "Entitäts-ID", - "icon": "Symbol Überschreiben", + "icon": "Symbol", "icon_error": "Symbole sollten das Format 'Präfix:iconname' haben, z. B. 'mdi:home'", - "name": "Namen überschreiben", + "name": "Namen", "note": "Hinweis: Dies funktioniert möglicherweise noch nicht bei allen Integrationen.", "unavailable": "Diese Entität ist derzeit nicht verfügbar.", "update": "Aktualisieren" @@ -736,6 +736,13 @@ "ok": "OK" }, "helper_settings": { + "counter": { + "initial": "Anfangswert", + "maximum": "Maximaler Wert", + "minimum": "Minimaler Wert", + "restore": "Den letzten bekannten Wert wiederherstellen, wenn Home Assistant startet", + "step": "Schrittgröße" + }, "generic": { "icon": "Symbol", "name": "Name" @@ -948,7 +955,7 @@ "confirmation_text": "Alle Geräte in diesem Bereich werden nicht mehr zugewiesen sein.", "confirmation_title": "Möchtest du diesen Bereich wirklich löschen?" }, - "description": "Die Bereiche deines Zuhause verwalten", + "description": "Bereiche in deinem Zuhause verwalten", "editor": { "area_id": "Bereich-ID", "create": "Erstellen", @@ -1525,7 +1532,7 @@ "no_devices": "keine Geräte" }, "delete": "Löschen", - "description": "Verwalte verbundene Geräte", + "description": "Verbundene Geräte verwalten", "device_info": "Geräteinformationen", "device_not_found": "Gerät nicht gefunden.", "entities": { @@ -1626,6 +1633,7 @@ "no_helpers": "Sieht so aus, als hättest du noch keine Helfer!" }, "types": { + "counter": "Zähler", "input_boolean": "Umschalten", "input_datetime": "Datum und/oder Uhrzeit", "input_number": "Nummer", @@ -1860,7 +1868,7 @@ "driverremoved": "Der Treiber wurde entfernt", "driverreset": "Der Treiber wurde zurückgesetzt", "ready": "Bereit zum Verbinden", - "started": "Verbindung mit MQTT hergestellt", + "started": "Verbunden mit MQTT", "starting": "Verbinde zu MQTT" }, "offline": "Offline", @@ -1901,11 +1909,11 @@ "confirm_delete": "Möchtest du diese Person wirklich löschen?", "confirm_delete2": "Alle Geräte, die zu dieser Person gehören, werden nicht mehr zugeordnet.", "create_person": "Person erstellen", - "description": "Verwalte die Personen, die Home Assistant verfolgt.", + "description": "Verwalte die Personen, denen Home Assistant folgt.", "detail": { "admin": "Administrator", "allow_login": "Erlauben Sie dieser Person, sich einzuloggen.", - "confirm_delete_user": "Bist Du sicher, dass Du das Benutzerkonto von {name} löschen möchtest? Du kannst das Benutzerkonto immer noch verfolgen, aber es kann nicht mehr zum Anmelden verwendet werden.", + "confirm_delete_user": "Bist Du sicher, dass Du das Benutzerkonto von {name} löschen möchtest? Du kannst der Person immer noch folgen, aber sie kann sich nicht mehr anmelden.", "create": "Erstellen", "delete": "Löschen", "device_tracker_intro": "Wähle die Geräte, die dieser Person gehören.", @@ -2092,6 +2100,7 @@ "last_scanned": "Zuletzt gescannt", "name": "Name" }, + "learn_more": "Erfahre mehr über NFC Tags", "never_scanned": "Nie gescannt", "no_tags": "Keine NFC Tags", "write": "Schreiben" @@ -2206,7 +2215,7 @@ "create_group": "Zigbee Home Automation - Gruppe erstellen", "create_group_details": "Gib die erforderlichen Details ein, um eine neue Zigbee-Gruppe zu erstellen", "creating_group": "Erstelle Gruppe", - "description": "Verwalten von Zigbee-Gruppen", + "description": "Zigbee-Gruppen verwalten", "group_details": "Hier sind alle Details der ausgewählten Zigbee Gruppe.", "group_id": "Gruppen-ID", "group_info": "Gruppen Information", @@ -2249,7 +2258,7 @@ "configured_in_yaml": "Zonen, die über configuration.yaml konfiguriert wurden, können nicht über die Benutzeroberfläche bearbeitet werden.", "confirm_delete": "Möchtest du diesen Bereich wirklich löschen?", "create_zone": "Zone erstellen", - "description": "Verwalte die Zonen, in denen du Personen verfolgen möchtest.", + "description": "Verwalte die Zonen, in denen du Personen folgen möchtest.", "detail": { "create": "Erstellen", "delete": "Löschen", @@ -2681,11 +2690,11 @@ }, "picture-glance": { "description": "Die Bild Glance-Karte zeigt ein Bild und die entsprechenden Entitätszustände als Symbol. Die Entitäten auf der rechten Seite ermöglichen das Umschalten von Aktionen, andere zeigen den Dialog mit weiteren Informationen an.", - "name": "Picture Glance" + "name": "Bild Glance" }, "picture": { "description": "Mit der Bildkarte kannst du ein Bild festlegen, das für die Navigation zu verschiedenen Pfaden in deiner Benutzeroberfläche oder zum Aufrufen eines Dienstes verwendet werden soll.", - "name": "Picture" + "name": "Bild" }, "plant-status": { "description": "Die Pflanzenstatuskarte ist für alle liebenswerten Botaniker da draußen.", @@ -3067,7 +3076,7 @@ "new_password": "Neues Passwort", "submit": "Absenden" }, - "current_user": "Sie sind derzeit als {fullName} angemeldet.", + "current_user": "Du bist derzeit als {fullName} angemeldet.", "customize_sidebar": { "button": "Bearbeiten", "description": "Du kannst auch die Kopfzeile der Seitenleiste gedrückt halten, um den Bearbeitungsmodus zu aktivieren.", diff --git a/translations/frontend/et.json b/translations/frontend/et.json index 27a6857d85..16e4c39585 100644 --- a/translations/frontend/et.json +++ b/translations/frontend/et.json @@ -737,6 +737,13 @@ "ok": "OK" }, "helper_settings": { + "counter": { + "initial": "Algne väärtus", + "maximum": "Maksimaalne väärtus", + "minimum": "Minimaalne väärtus", + "restore": "Taasta viimane teadaolev väärtus kui Home Assistant käivitub", + "step": "Loenduri samm" + }, "generic": { "icon": "Ikoon", "name": "Nimi" @@ -1644,6 +1651,7 @@ "no_helpers": "Tundub, et teil pole veel ühtegi abistajat!" }, "types": { + "counter": "Loendur", "input_boolean": "Lülita", "input_datetime": "Kuupäev ja / või kellaaeg", "input_number": "Arvväärtus", @@ -2163,6 +2171,7 @@ "last_scanned": "Viimati skaneeritud", "name": "Nimi" }, + "learn_more": "Lisateave märgiste kohta", "never_scanned": "TAGe pole skaneeritud", "no_tags": "TAGe pole", "write": "Salvesta TAG" diff --git a/translations/frontend/ja.json b/translations/frontend/ja.json index a489fcd699..331d32df1e 100644 --- a/translations/frontend/ja.json +++ b/translations/frontend/ja.json @@ -723,6 +723,13 @@ "ok": "OK" }, "helper_settings": { + "counter": { + "initial": "初期値", + "maximum": "最大値", + "minimum": "最小値", + "restore": "ホーム アシスタントの起動時に、最後の値を復元します", + "step": "ステップサイズ" + }, "generic": { "icon": "アイコン", "name": "名前" @@ -917,6 +924,7 @@ "notification_drawer": { "click_to_configure": "ボタンをクリックして{entity}を設定します", "close": "閉じる", + "dismiss_all": "すべて却下する", "empty": "通知はありません", "title": "通知" }, @@ -1629,6 +1637,7 @@ "no_helpers": "まだヘルパーがいないようです!" }, "types": { + "counter": "カウンター", "input_boolean": "切り替え", "input_datetime": "日付・時刻", "input_number": "数", @@ -2148,6 +2157,7 @@ "last_scanned": "最後にスキャンされた", "name": "名前" }, + "learn_more": "タグの詳細", "never_scanned": "最後にスキャンされた", "no_tags": "タグなし", "write": "書き込み" diff --git a/translations/frontend/nb.json b/translations/frontend/nb.json index dc3c374428..aec85dc059 100644 --- a/translations/frontend/nb.json +++ b/translations/frontend/nb.json @@ -66,14 +66,14 @@ }, "state_badge": { "alarm_control_panel": { - "armed": "Påslått", - "armed_away": "Påslått", - "armed_custom_bypass": "Påslått", - "armed_home": "Påslått", - "armed_night": "Påslått", - "arming": "Slår på", - "disarmed": "Deaktiver", - "disarming": "Slå av", + "armed": "Aktivert", + "armed_away": "Aktivert", + "armed_custom_bypass": "Aktivert", + "armed_home": "Aktivert", + "armed_night": "Aktivert", + "arming": "Aktivererer", + "disarmed": "Deaktivere", + "disarming": "Deaktivere", "pending": "Venter", "triggered": "Utløs" }, @@ -94,14 +94,14 @@ }, "state": { "alarm_control_panel": { - "armed": "Armert", - "armed_away": "Armert borte", - "armed_custom_bypass": "Armert tilpasset unntak", - "armed_home": "Armert hjemme", - "armed_night": "Armert natt", - "arming": "Armerer", - "disarmed": "Avslått", - "disarming": "Skrur av", + "armed": "Aktivert", + "armed_away": "Aktivert borte", + "armed_custom_bypass": "Aktivert tilpasset unntak", + "armed_home": "Aktivert hjemme", + "armed_night": "Aktivert natt", + "arming": "Aktivererer", + "disarmed": "Dekativert", + "disarming": "Deaktiverer", "pending": "Venter", "triggered": "Utløst" }, @@ -350,13 +350,13 @@ }, "card": { "alarm_control_panel": { - "arm_away": "Armer borte", + "arm_away": "Aktiver borte", "arm_custom_bypass": "Tilpasset bypass", - "arm_home": "Armer hjemme", + "arm_home": "Aktiver hjemme", "arm_night": "Aktiver natt", "clear_code": "Tøm", "code": "Kode", - "disarm": "Deaktiver" + "disarm": "Deaktivere" }, "automation": { "last_triggered": "Sist utløst", @@ -368,21 +368,21 @@ "climate": { "aux_heat": "Aux varme", "away_mode": "Bortemodus", - "cooling": "{name} kjøling", + "cooling": "{name} kjøler", "current_temperature": "{name} nåværende temperatur", "currently": "Er nå", "fan_mode": "Viftemodus", - "heating": "{name} oppvarming", + "heating": "{name} varmer", "high": "høy", "low": "lav", "on_off": "På / av", "operation": "Operasjon", - "preset_mode": "", + "preset_mode": "Forhåndsinnstilling", "swing_mode": "Svingmodus", - "target_humidity": "Ønsket luftfuktighet", - "target_temperature": "Ønsket temperatur", - "target_temperature_entity": "{name} måltemperatur", - "target_temperature_mode": "{name} måltemperatur {mode}" + "target_humidity": "Satt luftfuktighet", + "target_temperature": "Satt temperatur", + "target_temperature_entity": "{name} satt temperatur", + "target_temperature_mode": "{name} satt temperatur {mode}" }, "counter": { "actions": { @@ -737,6 +737,13 @@ "ok": "" }, "helper_settings": { + "counter": { + "initial": "Opprinnelig verdi", + "maximum": "Maksimal verdi", + "minimum": "Minimum verdi", + "restore": "Gjenopprett den sist kjente verdien når Home Assistant starter", + "step": "Trinnstørrelse" + }, "generic": { "icon": "Ikon", "name": "Navn" @@ -1644,6 +1651,7 @@ "no_helpers": "Det ser ut som om du ikke har noen hjelpere ennå!" }, "types": { + "counter": "Teller", "input_boolean": "Veksle", "input_datetime": "Dato og/eller klokkeslett", "input_number": "Nummer", @@ -1733,7 +1741,7 @@ "confirm_delete_ignore": "Dette vil få integrasjonen til å vises i de oppdagede integrasjonene dine igjen når den blir oppdaget. Dette kan kreve omstart eller ta litt tid.", "confirm_delete_ignore_title": "Slutt å ignorere {name}?", "confirm_ignore": "Er du sikker på at du ikke vil sette opp denne integrasjonen? Du kan angre ved å klikke på 'Vis ignorerte integrasjoner' i overflow-menyen øverst til høyre.", - "confirm_ignore_title": "Ignorer oppdaging av {name}?", + "confirm_ignore_title": "Ignorer automatisk oppdagelse av {name}?", "hide_ignored": "Skjul ignorerte integrasjoner", "ignore": "Ignorer", "ignored": "Ignorert", @@ -2142,7 +2150,7 @@ "tags": { "add_tag": "Legg til tag", "automation_title": "Tag {name} skannes", - "caption": "Tags", + "caption": "Tagger", "create_automation": "Opprett automatisering med tag", "description": "Administrer tagger", "detail": { @@ -2153,7 +2161,7 @@ "description": "Beskrivelse", "name": "Navn", "new_tag": "Ny tag", - "tag_id": "Tag id", + "tag_id": "Tag ID", "tag_id_placeholder": "Automatisk generert når den er tom", "update": "Oppdater", "usage": "En tag kan utløse en automasjon når den skannes, du kan bruke NFC-koder, QR-koder eller hvilken som helst annen type tag. Bruk {companion_link} til å skrive denne taggen til en programmerbar NFC-tag eller opprette en QR-kode nedenfor." @@ -2163,6 +2171,7 @@ "last_scanned": "Sist skannet", "name": "Navn" }, + "learn_more": "Lær mer om tagger", "never_scanned": "Aldri skannet", "no_tags": "Ingen tagger", "write": "Skrive" @@ -2212,7 +2221,7 @@ "zha": { "add_device_page": { "discovered_text": "Enheter vises her når de er oppdaget.", - "discovery_text": "Oppdagede enheter vises her. Følg instruksjonene for enheten(e) og sett enheten(e) i paringsmodus.", + "discovery_text": "Automatisk oppdagede enheter vises her. Følg instruksjonene for enheten(e) og sett enheten(e) i paringsmodus.", "header": "Zigbee Home Automation - Legg til enheter", "no_devices_found": "Ingen enheter ble funnet, sørg for at de er i paring-modus og hold dem våkne mens oppdagelsen kjører.", "pairing_mode": "Kontroller at enhetene er i paringsmodus. Sjekk instruksjonene til enheten om hvordan du gjør dette.", @@ -2586,7 +2595,7 @@ "card": { "alarm-panel": { "available_states": "Tilgjengelige tilstander", - "description": "Alarmpanelkortet lar deg armere og deaktivere alarmkontrollpanelets integrasjoner.", + "description": "Alarmpanelkortet lar deg aktivere og deaktivere alarm kontrollpanelets integrasjoner.", "name": "Alarmpanel" }, "button": { @@ -2776,7 +2785,7 @@ "name": "Handleliste" }, "thermostat": { - "description": "Termostatkortet gir kontroll over din klimaentitet. Lar deg endre temperaturen og modus for entiteten.", + "description": "Termostatkortet gir kontroll over din klimaentitet. Lar deg endre temperatur og modus for entiteten.", "name": "Termostat" }, "vertical-stack": { @@ -2798,7 +2807,7 @@ "no_description": "Ingen beskrivelse tilgjengelig." }, "edit_badges": { - "panel_mode": "Disse merkene vises ikke fordi denne visningen er i \"Panelmodus\"." + "panel_mode": "Disse merkene vises ikke fordi denne visningen er i \"Panelmodus\"" }, "edit_card": { "add": "Legg til kort", diff --git a/translations/frontend/pl.json b/translations/frontend/pl.json index ddfc1aaee8..0abebd3fdb 100644 --- a/translations/frontend/pl.json +++ b/translations/frontend/pl.json @@ -737,6 +737,13 @@ "ok": "OK" }, "helper_settings": { + "counter": { + "initial": "Wartość początkowa", + "maximum": "Wartość maksymalna", + "minimum": "Wartość minimalna", + "restore": "Przywróć ostatnią znaną wartość po uruchomieniu Home Assistant", + "step": "Skok" + }, "generic": { "icon": "Ikona", "name": "Nazwa" @@ -1644,6 +1651,7 @@ "no_helpers": "Wygląda na to, że jeszcze nie masz pomocników!" }, "types": { + "counter": "Licznik", "input_boolean": "Przełącznik", "input_datetime": "Data i/lub czas", "input_number": "Numer", @@ -2163,6 +2171,7 @@ "last_scanned": "Ostatnie skanowanie", "name": "Nazwa" }, + "learn_more": "Dowiedz się więcej o tagach", "never_scanned": "Nigdy nie zeskanowany", "no_tags": "Brak tagów", "write": "Zapisz" diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index 1a4091f7a4..dce7fbf187 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -737,6 +737,13 @@ "ok": "ОК" }, "helper_settings": { + "counter": { + "initial": "Начальное значение", + "maximum": "Максимальное значение", + "minimum": "Минимальное значение", + "restore": "Восстанавливать последнее известное значение при запуске Home Assistant", + "step": "Шаг" + }, "generic": { "icon": "Значок", "name": "Название" @@ -1644,6 +1651,7 @@ "no_helpers": "У Вас еще нет вспомогательных элементов." }, "types": { + "counter": "Счётчик", "input_boolean": "Переключатель", "input_datetime": "Дата и время", "input_number": "Число", @@ -2163,6 +2171,7 @@ "last_scanned": "Последнее считывание", "name": "Название" }, + "learn_more": "Узнайте больше о метках", "never_scanned": "Сканирование ещё не выполнялось", "no_tags": "Нет меток", "write": "Записать" diff --git a/translations/frontend/zh-Hans.json b/translations/frontend/zh-Hans.json index 09039b8126..a2be001051 100644 --- a/translations/frontend/zh-Hans.json +++ b/translations/frontend/zh-Hans.json @@ -718,9 +718,9 @@ "enabled_description": "已禁用的实体不再添加到 Home Assistant。", "enabled_label": "启用实体", "entity_id": "实体 ID", - "icon": "图标覆盖", + "icon": "图标", "icon_error": "图标的格式应为 prefix:iconname,例如:mdi:home", - "name": "覆盖名称", + "name": "名称", "note": "注意:这可能不适用于所有集成。", "unavailable": "该实体暂不可用。", "update": "更新" @@ -737,6 +737,13 @@ "ok": "确定" }, "helper_settings": { + "counter": { + "initial": "初始值", + "maximum": "最大值", + "minimum": "最小值", + "restore": "当 Home Assistant 启动时,还原为最近一次的值", + "step": "步长" + }, "generic": { "icon": "图标", "name": "名称" @@ -1217,7 +1224,7 @@ "above": "大于", "below": "小于", "label": "数字类状态", - "value_template": "自定义值(可选)" + "value_template": "数值模板(可选)" }, "state": { "attribute": "属性(可选)", @@ -1238,7 +1245,7 @@ }, "template": { "label": "自定义模板", - "value_template": "自定义值" + "value_template": "数值模板" }, "time_pattern": { "hours": "小时", @@ -1644,6 +1651,7 @@ "no_helpers": "您还没有辅助元素。" }, "types": { + "counter": "计数器", "input_boolean": "开关", "input_datetime": "日期/时间", "input_number": "数值", @@ -2163,6 +2171,7 @@ "last_scanned": "上次扫描", "name": "名称" }, + "learn_more": "详细了解标签", "never_scanned": "从未扫描", "no_tags": "没有标签", "write": "写入" diff --git a/translations/frontend/zh-Hant.json b/translations/frontend/zh-Hant.json index dc9ba7c9e2..16c84187d0 100644 --- a/translations/frontend/zh-Hant.json +++ b/translations/frontend/zh-Hant.json @@ -718,9 +718,9 @@ "enabled_description": "關閉的實體將不會新增至 Home Assistant。", "enabled_label": "啟用實體", "entity_id": "實體 ID", - "icon": "圖示覆寫", + "icon": "圖示", "icon_error": "圖示必須按照格式「prefix:iconname」設定,例如「mdi:home」", - "name": "名稱覆寫", + "name": "名稱", "note": "注意:可能無法適用所有整合。", "unavailable": "該實體目前不可用。", "update": "更新" @@ -737,6 +737,13 @@ "ok": "好" }, "helper_settings": { + "counter": { + "initial": "初始值", + "maximum": "最大值", + "minimum": "最小值", + "restore": "回復至上次 Home Assistant 啟動時已知值", + "step": "階段大小" + }, "generic": { "icon": "圖示", "name": "名稱" @@ -1644,6 +1651,7 @@ "no_helpers": "目前尚沒有任何 Helper!" }, "types": { + "counter": "計數器", "input_boolean": "開關", "input_datetime": "日期及/或時間", "input_number": "數字", @@ -2163,6 +2171,7 @@ "last_scanned": "最後掃描時間", "name": "名稱" }, + "learn_more": "詳細了解標籤", "never_scanned": "從未掃描", "no_tags": "無標籤", "write": "編寫" From 1ebf1c00d6239cc661ad9fc6484fab5c6d81e91d Mon Sep 17 00:00:00 2001 From: Charles Garwood Date: Mon, 19 Oct 2020 05:13:55 -0400 Subject: [PATCH 113/155] Initial OZW Node Config Panel (#7377) --- src/data/ozw.ts | 21 ++ .../integration-panels/ozw/ozw-node-config.ts | 274 ++++++++++++++++++ .../ozw/ozw-node-dashboard.ts | 4 +- .../integration-panels/ozw/ozw-node-router.ts | 25 ++ src/translations/en.json | 19 +- 5 files changed, 339 insertions(+), 4 deletions(-) create mode 100644 src/panels/config/integrations/integration-panels/ozw/ozw-node-config.ts diff --git a/src/data/ozw.ts b/src/data/ozw.ts index 80ad9882b7..0e5d73565a 100644 --- a/src/data/ozw.ts +++ b/src/data/ozw.ts @@ -63,6 +63,16 @@ export interface OZWNetworkStatistics { retries: number; } +export interface OZWDeviceConfig { + label: string; + type: string; + value: string | number; + parameter: number; + min: number; + max: number; + help: string; +} + export const nodeQueryStages = [ "ProtocolInfo", "Probe", @@ -180,6 +190,17 @@ export const fetchOZWNodeMetadata = ( node_id: node_id, }); +export const fetchOZWNodeConfig = ( + hass: HomeAssistant, + ozw_instance: number, + node_id: number +): Promise => + hass.callWS({ + type: "ozw/get_config_parameters", + ozw_instance: ozw_instance, + node_id: node_id, + }); + export const refreshNodeInfo = ( hass: HomeAssistant, ozw_instance: number, diff --git a/src/panels/config/integrations/integration-panels/ozw/ozw-node-config.ts b/src/panels/config/integrations/integration-panels/ozw/ozw-node-config.ts new file mode 100644 index 0000000000..b1017aaaa8 --- /dev/null +++ b/src/panels/config/integrations/integration-panels/ozw/ozw-node-config.ts @@ -0,0 +1,274 @@ +import "@material/mwc-button/mwc-button"; +import "@material/mwc-fab"; +import { + css, + CSSResultArray, + customElement, + html, + LitElement, + internalProperty, + property, + TemplateResult, +} from "lit-element"; +import { navigate } from "../../../../../common/navigate"; +import "../../../../../components/buttons/ha-call-service-button"; +import "../../../../../components/ha-card"; +import "../../../../../components/ha-icon-next"; +import "../../../../../layouts/hass-tabs-subpage"; +import { haStyle } from "../../../../../resources/styles"; +import type { HomeAssistant, Route } from "../../../../../types"; +import "../../../ha-config-section"; +import { + fetchOZWNodeStatus, + fetchOZWNodeMetadata, + fetchOZWNodeConfig, + OZWDevice, + OZWDeviceMetaDataResponse, + OZWDeviceConfig, +} from "../../../../../data/ozw"; +import { ERR_NOT_FOUND } from "../../../../../data/websocket_api"; +import { showOZWRefreshNodeDialog } from "./show-dialog-ozw-refresh-node"; +import { ozwNodeTabs } from "./ozw-node-router"; + +@customElement("ozw-node-config") +class OZWNodeConfig extends LitElement { + @property({ type: Object }) public hass!: HomeAssistant; + + @property({ type: Object }) public route!: Route; + + @property({ type: Boolean }) public narrow!: boolean; + + @property({ type: Boolean }) public isWide!: boolean; + + @property() public configEntryId?: string; + + @property() public ozwInstance?; + + @property() public nodeId?; + + @internalProperty() private _node?: OZWDevice; + + @internalProperty() private _metadata?: OZWDeviceMetaDataResponse; + + @internalProperty() private _config?: OZWDeviceConfig[]; + + @internalProperty() private _error?: string; + + protected firstUpdated() { + if (!this.ozwInstance) { + navigate(this, "/config/ozw/dashboard", true); + } else if (!this.nodeId) { + navigate(this, `/config/ozw/network/${this.ozwInstance}/nodes`, true); + } else { + this._fetchData(); + } + } + + protected render(): TemplateResult { + if (this._error) { + return html` + + `; + } + + return html` + + +
+ ${this.hass.localize("ui.panel.config.ozw.node_config.header")} +
+ +
+ ${this.hass.localize( + "ui.panel.config.ozw.node_config.introduction" + )} +

+ + ${this.hass.localize( + "ui.panel.config.ozw.node_config.help_source" + )} + +

+

+ Note: This panel is currently read-only. The ability to change + values will come in a later update. +

+
+ ${this._node + ? html` + +
+
+ + ${this.hass.localize( + "ui.panel.config.ozw.refresh_node.button" + )} + +
+ + + ${this._metadata?.metadata.WakeupHelp + ? html` + +
+ + ${this.hass.localize( + "ui.panel.config.ozw.node_config.wakeup_help" + )} + +

+ ${this._metadata.metadata.WakeupHelp} +

+
+
+ ` + : ``} + ${this._config + ? html` + ${this._config.map( + (item) => html` + +
+ ${item.label}
+ ${item.help} +

${item.value}

+
+
+ ` + )} + ` + : ``} + ` + : ``} + + + `; + } + + private async _fetchData() { + if (!this.ozwInstance || !this.nodeId) { + return; + } + + try { + const nodeProm = fetchOZWNodeStatus( + this.hass!, + this.ozwInstance, + this.nodeId + ); + const metadataProm = fetchOZWNodeMetadata( + this.hass!, + this.ozwInstance, + this.nodeId + ); + const configProm = fetchOZWNodeConfig( + this.hass!, + this.ozwInstance, + this.nodeId + ); + [this._node, this._metadata, this._config] = await Promise.all([ + nodeProm, + metadataProm, + configProm, + ]); + } catch (err) { + if (err.code === ERR_NOT_FOUND) { + this._error = ERR_NOT_FOUND; + return; + } + throw err; + } + } + + private async _refreshNodeClicked() { + showOZWRefreshNodeDialog(this, { + node_id: this.nodeId, + ozw_instance: this.ozwInstance, + }); + } + + static get styles(): CSSResultArray { + return [ + haStyle, + css` + .secondary { + color: var(--secondary-text-color); + font-size: 0.9em; + } + + .content { + margin-top: 24px; + } + + .sectionHeader { + position: relative; + padding-right: 40px; + } + + ha-card { + margin: 0 auto; + max-width: 600px; + } + + [hidden] { + display: none; + } + + blockquote { + display: block; + background-color: #ddd; + padding: 8px; + margin: 8px 0; + font-size: 0.9em; + } + + blockquote em { + font-size: 0.9em; + margin-top: 6px; + } + `, + ]; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ozw-node-config": OZWNodeConfig; + } +} 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 0b7283e71a..c860027551 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 @@ -26,7 +26,7 @@ import { } from "../../../../../data/ozw"; import { ERR_NOT_FOUND } from "../../../../../data/websocket_api"; import { showOZWRefreshNodeDialog } from "./show-dialog-ozw-refresh-node"; -import { ozwNetworkTabs } from "./ozw-network-router"; +import { ozwNodeTabs } from "./ozw-node-router"; @customElement("ozw-node-dashboard") class OZWNodeDashboard extends LitElement { @@ -74,7 +74,7 @@ class OZWNodeDashboard extends LitElement { .hass=${this.hass} .narrow=${this.narrow} .route=${this.route} - .tabs=${ozwNetworkTabs(this.ozwInstance)} + .tabs=${ozwNodeTabs(this.ozwInstance, this.nodeId)} >
diff --git a/src/panels/config/integrations/integration-panels/ozw/ozw-node-router.ts b/src/panels/config/integrations/integration-panels/ozw/ozw-node-router.ts index baf68ddc96..ea30bf78ff 100644 --- a/src/panels/config/integrations/integration-panels/ozw/ozw-node-router.ts +++ b/src/panels/config/integrations/integration-panels/ozw/ozw-node-router.ts @@ -1,11 +1,31 @@ +import { mdiNetwork, mdiWrench } from "@mdi/js"; import { customElement, property } from "lit-element"; import { navigate } from "../../../../../common/navigate"; import { HassRouterPage, RouterOptions, } from "../../../../../layouts/hass-router-page"; +import { PageNavigation } from "../../../../../layouts/hass-tabs-subpage"; import { HomeAssistant } from "../../../../../types"; +export const ozwNodeTabs = ( + instance: number, + node: number +): PageNavigation[] => { + return [ + { + translationKey: "ui.panel.config.ozw.navigation.node.dashboard", + path: `/config/ozw/network/${instance}/node/${node}/dashboard`, + iconPath: mdiNetwork, + }, + { + translationKey: "ui.panel.config.ozw.navigation.node.config", + path: `/config/ozw/network/${instance}/node/${node}/config`, + iconPath: mdiWrench, + }, + ]; +}; + @customElement("ozw-node-router") class OZWNodeRouter extends HassRouterPage { @property({ attribute: false }) public hass!: HomeAssistant; @@ -33,6 +53,11 @@ class OZWNodeRouter extends HassRouterPage { /* webpackChunkName: "ozw-node-dashboard" */ "./ozw-node-dashboard" ), }, + config: { + tag: "ozw-node-config", + load: () => + import(/* webpackChunkName: "ozw-node-config" */ "./ozw-node-config"), + }, }, }; diff --git a/src/translations/en.json b/src/translations/en.json index fc62990841..a206807ee7 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -1899,7 +1899,9 @@ "ozw_instance": "OpenZWave Instance", "instance": "Instance", "controller": "Controller", - "network": "Network" + "network": "Network", + "wakeup_instructions": "Wake-up Instructions", + "query_stage": "Query Stage" }, "device_info": { "zwave_info": "Z-Wave Info", @@ -1961,7 +1963,11 @@ "navigation": { "select_instance": "Select Instance", "network": "Network", - "nodes": "Nodes" + "nodes": "Nodes", + "node": { + "dashboard": "Dashboard", + "config": "Config" + } }, "select_instance": { "header": "Select an OpenZWave Instance", @@ -1985,6 +1991,15 @@ "button": "Node Details", "not_found": "Node not found" }, + "node_config": { + "header": "Node Configuration", + "introduction": "Manage the different configuration parameters for a Z-Wave node.", + "help_source": "Config parameter descriptions and help text are provided by the OpenZWave project.", + "wakeup_help": "Battery powered nodes must be awake to change their configuration. If the node is not awake, OpenZWave will attempt to update the node's configuration the next time it wakes up, which could be multiple hours (or days) later. Follow these steps to wake up your device:" + }, + "node_metadata": { + "product_manual": "Product Manual" + }, "services": { "add_node": "Add Node", "remove_node": "Remove Node" From a73754c1b51d3f8e8ce46f75a6f365617966855c Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 19 Oct 2020 11:15:12 +0200 Subject: [PATCH 114/155] Use ha-card for dev tool "Services" + visual tweaks (#7364) --- .../service/developer-tools-service.js | 115 +++++++++--------- .../state/developer-tools-state.js | 1 + .../template/developer-tools-template.ts | 8 +- src/resources/styles.ts | 2 +- 4 files changed, 64 insertions(+), 62 deletions(-) diff --git a/src/panels/developer-tools/service/developer-tools-service.js b/src/panels/developer-tools/service/developer-tools-service.js index 04b49e9c4e..71c2a91949 100644 --- a/src/panels/developer-tools/service/developer-tools-service.js +++ b/src/panels/developer-tools/service/developer-tools-service.js @@ -7,6 +7,7 @@ import "../../../components/buttons/ha-progress-button"; import "../../../components/entity/ha-entity-picker"; import "../../../components/ha-code-editor"; import "../../../components/ha-service-picker"; +import "../../../components/ha-card"; import { ENTITY_COMPONENT_DOMAINS } from "../../../data/entity"; import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; import LocalizeMixin from "../../../mixins/localize-mixin"; @@ -38,17 +39,19 @@ class HaPanelDevService extends LocalizeMixin(PolymerElement) { margin-top: 8px; } - .description { - margin-top: 24px; - white-space: pre-wrap; + ha-card { + margin-top: 12px; } - .header { - @apply --paper-font-title; + .description { + margin-top: 12px; + white-space: pre-wrap; } .attributes th { text-align: left; + background-color: var(--card-background-color); + border-bottom: 1px solid var(--primary-text-color); } :host([rtl]) .attributes th { @@ -78,10 +81,6 @@ class HaPanelDevService extends LocalizeMixin(PolymerElement) { font-family: var(--code-font-family, monospace); } - h1 { - white-space: normal; - } - td { padding: 4px; } @@ -105,7 +104,7 @@ class HaPanelDevService extends LocalizeMixin(PolymerElement) { > @@ -146,58 +145,59 @@ class HaPanelDevService extends LocalizeMixin(PolymerElement) {
- + +
+ -