From ec920093d4ecc8b9c7e10943a87fcb64c71aa96b Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 1 Oct 2020 13:54:54 +0200 Subject: [PATCH 001/242] Fix panel view and backgrounds (#7181) --- cast/src/receiver/entrypoint.ts | 2 ++ src/panels/lovelace/views/hui-masonry-view.ts | 12 +++++++++--- src/panels/lovelace/views/hui-panel-view.ts | 12 +++++++----- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/cast/src/receiver/entrypoint.ts b/cast/src/receiver/entrypoint.ts index 2807d597a7..e5c9791276 100644 --- a/cast/src/receiver/entrypoint.ts +++ b/cast/src/receiver/entrypoint.ts @@ -45,6 +45,8 @@ const showMediaPlayer = () => { style.innerHTML = ` body { --logo-image: url('https://www.home-assistant.io/images/home-assistant-logo.svg'); + --logo-repeat: no-repeat; + --playback-logo-image: url('https://www.home-assistant.io/images/home-assistant-logo.svg'); --theme-hue: 200; --progress-color: #03a9f4; --splash-image: url('https://home-assistant.io/images/cast/splash.png'); diff --git a/src/panels/lovelace/views/hui-masonry-view.ts b/src/panels/lovelace/views/hui-masonry-view.ts index 7f264f53ea..f31c903894 100644 --- a/src/panels/lovelace/views/hui-masonry-view.ts +++ b/src/panels/lovelace/views/hui-masonry-view.ts @@ -137,9 +137,9 @@ export class MasonryView extends LitElement implements LovelaceViewElement { | undefined; if ( - (changedProperties.has("lovelace") && ( - oldLovelace?.config !== this.lovelace?.config || - oldLovelace?.editMode !== this.lovelace?.editMode)) || + (changedProperties.has("lovelace") && + (oldLovelace?.config !== this.lovelace?.config || + oldLovelace?.editMode !== this.lovelace?.editMode)) || changedProperties.has("_columns") ) { this._createColumns(); @@ -258,6 +258,12 @@ export class MasonryView extends LitElement implements LovelaceViewElement { static get styles(): CSSResult { return css` + :host { + display: block; + background: var(--lovelace-background); + height: 100%; + } + #badges { margin: 8px 16px; font-size: 85%; diff --git a/src/panels/lovelace/views/hui-panel-view.ts b/src/panels/lovelace/views/hui-panel-view.ts index 91c0582f9f..e1488f0996 100644 --- a/src/panels/lovelace/views/hui-panel-view.ts +++ b/src/panels/lovelace/views/hui-panel-view.ts @@ -40,11 +40,6 @@ export class PanelView extends LitElement implements LovelaceViewElement { | HuiWarning | HuiCardOptions; - public constructor() { - super(); - this.style.setProperty("background", "var(--lovelace-background)"); - } - public setConfig(_config: LovelaceViewConfig): void {} protected updated(changedProperties: PropertyValues): void { @@ -108,6 +103,7 @@ export class PanelView extends LitElement implements LovelaceViewElement { if (!this.lovelace?.editMode) { this._card = card; + return; } const wrapper = document.createElement("hui-card-options"); @@ -133,6 +129,12 @@ export class PanelView extends LitElement implements LovelaceViewElement { static get styles(): CSSResult { return css` + :host { + display: block; + background: var(--lovelace-background); + height: 100%; + } + mwc-fab { position: sticky; float: right; From 2c827bab9ae7ea11988b591e47fa75dfdc1b6017 Mon Sep 17 00:00:00 2001 From: Zack Barett Date: Thu, 1 Oct 2020 06:55:27 -0500 Subject: [PATCH 002/242] Logbook: fix custom Icon (#7175) --- src/common/entity/binary_sensor_icon.ts | 2 +- src/data/logbook.ts | 1 + src/panels/logbook/ha-logbook.ts | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/common/entity/binary_sensor_icon.ts b/src/common/entity/binary_sensor_icon.ts index 03c3abaaab..1affd4016f 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-off" : "hass:power-on"; + return is_off ? "hass:power-plug" : "hass:power-plug-off"; case "gas": case "problem": case "safety": diff --git a/src/data/logbook.ts b/src/data/logbook.ts index cb93ee4003..5d66e4ce14 100644 --- a/src/data/logbook.ts +++ b/src/data/logbook.ts @@ -12,6 +12,7 @@ export interface LogbookEntry { name: string; message?: string; entity_id?: string; + icon?: string; domain: string; context_user_id?: string; context_event_type?: string; diff --git a/src/panels/logbook/ha-logbook.ts b/src/panels/logbook/ha-logbook.ts index 3c451a0d8d..0204f25d48 100644 --- a/src/panels/logbook/ha-logbook.ts +++ b/src/panels/logbook/ha-logbook.ts @@ -134,7 +134,8 @@ class HaLogbook extends LitElement { ${!this.noIcon ? html` Date: Thu, 1 Oct 2020 15:42:07 +0200 Subject: [PATCH 003/242] Bumped version to 20201001.0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index df64322812..b8d1a90487 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name="home-assistant-frontend", - version="20200930.0", + version="20201001.0", description="The Home Assistant frontend", url="https://github.com/home-assistant/home-assistant-polymer", author="The Home Assistant Authors", From 9ae8bd238b5c96f96c1cc46fc40dc5b8222d7607 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 1 Oct 2020 11:24:13 -0500 Subject: [PATCH 004/242] 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 005/242] [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 006/242] 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 007/242] 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 008/242] 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 009/242] 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 010/242] 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 011/242] [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 012/242] [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 013/242] 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 014/242] [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 015/242] 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 016/242] 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 017/242] 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 113/242] 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 114/242] 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 115/242] 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 116/242] 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 117/242] 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 118/242] 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 119/242] 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 120/242] 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 121/242] 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 122/242] 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 123/242] 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 124/242] [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 125/242] [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 126/242] 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 127/242] 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) {
- + +
+ - diff --git a/src/translations/en.json b/src/translations/en.json index 5b804e72ff..6323e70856 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -518,6 +518,7 @@ "details": "Details", "history": "History", "last_updated": "Last updated", + "last_changed": "Last changed", "script": { "last_action": "Last Action", "last_triggered": "Last Triggered" From 76a088e1773c1c5a8eb142174e49cc168893ab32 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 29 Oct 2020 21:28:34 +0100 Subject: [PATCH 219/242] Only show header toggle for entities card if title (#7525) --- src/panels/lovelace/cards/hui-entities-card.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/panels/lovelace/cards/hui-entities-card.ts b/src/panels/lovelace/cards/hui-entities-card.ts index d23d32cce8..7165b3b718 100644 --- a/src/panels/lovelace/cards/hui-entities-card.ts +++ b/src/panels/lovelace/cards/hui-entities-card.ts @@ -115,7 +115,7 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard { this._config = config; this._configEntities = entities; - if (config.show_header_toggle === undefined) { + if (config.title !== undefined && config.show_header_toggle === undefined) { // Default value is show toggle if we can at least toggle 2 entities. let toggleable = 0; for (const rowConf of entities) { From f1c16d6674c937b9b04ca97ce964c56b9de05f21 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 29 Oct 2020 21:28:41 +0100 Subject: [PATCH 220/242] Mock subscribe template (#7529) --- demo/src/stubs/template.ts | 7 +++++++ gallery/src/demos/demo-hui-markdown-card.ts | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/demo/src/stubs/template.ts b/demo/src/stubs/template.ts index 726926461c..0e3c1a2638 100644 --- a/demo/src/stubs/template.ts +++ b/demo/src/stubs/template.ts @@ -6,4 +6,11 @@ export const mockTemplate = (hass: MockHomeAssistant) => { body: { message: "Template dev tool does not work in the demo." }, }) ); + hass.mockWS("render_template", (msg, onChange) => { + onChange!({ + result: msg.template, + listeners: { all: false, domains: [], entities: [], time: false }, + }); + return () => {}; + }); }; diff --git a/gallery/src/demos/demo-hui-markdown-card.ts b/gallery/src/demos/demo-hui-markdown-card.ts index 07e974316e..1ae6b5f0f7 100644 --- a/gallery/src/demos/demo-hui-markdown-card.ts +++ b/gallery/src/demos/demo-hui-markdown-card.ts @@ -1,6 +1,8 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; /* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; +import { mockTemplate } from "../../../demo/src/stubs/template"; +import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; const CONFIGS = [ @@ -254,7 +256,7 @@ const CONFIGS = [ class DemoMarkdown extends PolymerElement { static get template() { - return html` `; + return html` `; } static get properties() { @@ -265,6 +267,12 @@ class DemoMarkdown extends PolymerElement { }, }; } + + public ready() { + super.ready(); + const hass = provideHass(this.$.demos); + mockTemplate(hass); + } } customElements.define("demo-hui-markdown-card", DemoMarkdown); From 13b8160d741d244b44013e456fa23323faa33051 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Fri, 30 Oct 2020 00:32:19 +0000 Subject: [PATCH 221/242] [ci skip] Translation update --- translations/frontend/ca.json | 14 +++ translations/frontend/cs.json | 4 +- translations/frontend/de.json | 4 +- translations/frontend/el.json | 36 +++++--- translations/frontend/en.json | 1 + translations/frontend/es.json | 6 +- translations/frontend/et.json | 4 +- translations/frontend/fr.json | 142 ++++++++++++++++++++++++++--- translations/frontend/hu.json | 60 ++++++------ translations/frontend/it.json | 14 +++ translations/frontend/pl.json | 28 +++--- translations/frontend/ro.json | 55 +++++++++-- translations/frontend/ru.json | 2 +- translations/frontend/zh-Hans.json | 18 +++- 14 files changed, 305 insertions(+), 83 deletions(-) diff --git a/translations/frontend/ca.json b/translations/frontend/ca.json index 2f1fc0f7e5..dd246f05aa 100644 --- a/translations/frontend/ca.json +++ b/translations/frontend/ca.json @@ -888,6 +888,11 @@ "trend": "Actualitza entitats de tendència", "universal": "Actualitza entitats del reproductor universal", "zone": "Actualitza zones" + }, + "server_control": { + "perform_action": "{action} Servidor", + "restart": "Reinicia", + "stop": "Atura" } }, "filter_placeholder": "Filtre d'entitats" @@ -1998,6 +2003,7 @@ }, "services": { "add_node": "Afegeix node", + "cancel_command": "Cancel·la ordre", "remove_node": "Elimina node" } }, @@ -3198,6 +3204,10 @@ "dropdown_label": "Panell", "header": "Panell" }, + "enable_shortcuts": { + "description": "Activa o desactiva dreceres de teclat. Poden dur a terme diverses accions a la IU.", + "header": "Dreceres de teclat" + }, "force_narrow": { "description": "Això ocultarà la barra lateral de manera similar als mòbils i tablets.", "header": "Amaga sempre la barra lateral" @@ -3242,6 +3252,10 @@ "header": "Mòduls d'autenticació amb múltiples passos" }, "push_notifications": { + "add_device_prompt": { + "input_label": "Nom del dispositiu", + "title": "Com s'ha d'anomenar aquest dispositiu?" + }, "description": "Envia notificacions a aquest dispositiu.", "error_load_platform": "Configurar notify.html5.", "error_use_https": "Requereix tenir SSL habilitat per a la interfície (frontend).", diff --git a/translations/frontend/cs.json b/translations/frontend/cs.json index 9b811c73e7..ce70af5133 100644 --- a/translations/frontend/cs.json +++ b/translations/frontend/cs.json @@ -585,7 +585,7 @@ "turned_on": "zapnuto", "was_at_home": "byl doma", "was_at_state": "bylo v {state}", - "was_away": "byl pryč", + "was_away": "bylo pryč", "was_closed": "bylo zavřeno", "was_connected": "bylo připojeno", "was_disconnected": "bylo odpojeno", @@ -2956,7 +2956,7 @@ "close": "Zavřít", "configure_ui": "Upravit Dashboard", "exit_edit_mode": "Ukončit režim úprav uživatelského rozhraní", - "help": "Pomoc", + "help": "Nápověda", "refresh": "Obnovit", "reload_resources": "Nově načíst zdroje", "start_conversation": "Zahájit konverzaci" diff --git a/translations/frontend/de.json b/translations/frontend/de.json index a089c06035..4c15b45311 100644 --- a/translations/frontend/de.json +++ b/translations/frontend/de.json @@ -883,7 +883,9 @@ "zone": "Zonen neu laden" }, "server_control": { - "perform_action": "{action} Server" + "perform_action": "{action} Server", + "restart": "Neustarten", + "stop": "Stoppen" } }, "filter_placeholder": "Entitätsfilter" diff --git a/translations/frontend/el.json b/translations/frontend/el.json index 16f5bdba84..98e88188fa 100644 --- a/translations/frontend/el.json +++ b/translations/frontend/el.json @@ -584,7 +584,7 @@ "turned_off": "απενεργοποιήθηκε", "turned_on": "ενεργοποιήθηκε", "was_at_home": "ήταν στο σπίτι", - "was_at_state": "ήταν σε {κατάσταση}", + "was_at_state": "ήταν σε {state}", "was_away": "ήταν μακριά", "was_closed": "ήταν κλειστό", "was_connected": "ήταν συνδεδεμένο", @@ -679,8 +679,8 @@ "day": "Σε {count} {count, plural,\n μία {ημέρα}\n other {ημέρες}\n}", "hour": "Σε {count} {count, plural,\n one {ώρα}\n other {ώρες}\n}", "minute": "Σε {count} {count, plural,\n one {λεπτό}\n other {λεπτά}\n}", - "second": "Σε {count} {count, πληθυντικός,\n ένα {δευτερόλεπτο}\n άλλα {δευτερόλεπτα}\n}", - "week": "Σε {count} {count, πληθυντικός,\n μία {εβδομάδα}\n άλλες {εβδομάδες}\n}" + "second": "Σε {count} {count, plural,\n one {δευτερόλεπτο}\n other {δευτερόλεπτα}\n}", + "week": "Σε {count} {count, plural,\n one {εβδομάδα}\n other {εβδομάδες}\n}" }, "just_now": "Μόλις τώρα", "never": "Ποτέ", @@ -723,9 +723,9 @@ "enabled_description": "Οι απενεργοποιημένες οντότητες δεν θα προστεθούν στον Home Assistant.", "enabled_label": "Ενεργοποίηση οντότητας", "entity_id": "Αναγνωριστικό οντότητας", - "icon": "Επιβολή Εικονιδίου", + "icon": "Εικονίδιο", "icon_error": "Το εικονίδιο πρέπει να είναι στη μορφή 'πρόθεμα:όνομα_εικόνας', για παράδειγμα: 'mdi:home'", - "name": "Επιβολή Ονόματος", + "name": "Όνομα", "note": "Σημείωση: Αυτό μπορεί να μην λειτουργεί ακόμη με όλες τις ενσωματώσεις.", "unavailable": "Αυτή η οντότητα δεν είναι προς το παρόν διαθέσιμη.", "update": "Ενημέρωση" @@ -876,7 +876,7 @@ "mqtt": "Επανααφόρτωση οντοτήτων mqtt", "person": "Επαναφόρτωση ατόμων", "ping": "Επαναφόρτωση ping οντοτήτων δυαδικών αισθητήρων", - "reload": "Επαναφόρτωση {τομέα}", + "reload": "Επαναφόρτωση {domain}", "rest": "Επαναφόρτωση οντοτήτων ανάπαυσης και ειδοποίηση υπηρεσιών", "rpi_gpio": "Επαναφόρτωση GPIO οντοτήτων του Raspberry Pi", "scene": "Επαναφόρτωση σκηνών", @@ -888,6 +888,11 @@ "trend": "Επαναφόρτωση οντοτήτων τάσης", "universal": "Επαναφόρτωση οντοτήτων αναπαραγωγής καθολικών μέσων", "zone": "Επαναφόρτωση ζωνών" + }, + "server_control": { + "perform_action": "{action} Διακομιστής", + "restart": "Επανεκκίνηση", + "stop": "Στοπ" } }, "filter_placeholder": "Φίλτρο οντοτήτων" @@ -1556,8 +1561,8 @@ "cant_edit": "Μπορείτε να επεξεργαστείτε μόνο στοιχεία που έχουν δημιουργηθεί στο UI.", "caption": "Συσκευές", "confirm_delete": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη συσκευή;", - "confirm_rename_entity_ids": "Θέλετε επίσης να μετονομάσετε τα αναγνωριστικά οντότητας των οντοτήτων σας;", - "confirm_rename_entity_ids_warning": "Αυτό δεν θα αλλάξει καμία ρύθμιση παραμέτρων (όπως αυτοματισμούς, σενάρια, σκηνές, Lovelace) που χρησιμοποιεί αυτήν τη στιγμή αυτές τις οντότητες, θα πρέπει να τις ενημερώσετε μόνοι σας.", + "confirm_rename_entity_ids": "Θέλετε επίσης να μετονομάσετε τα αναγνωριστικά των οντοτήτων σας;", + "confirm_rename_entity_ids_warning": "Αυτό δεν θα αλλάξει καμία διαμόρφωση (όπως αυτοματισμοί, σενάρια, σκηνές, πίνακες ελέγχου) που χρησιμοποιεί αυτήν τη στιγμή αυτές τις οντότητες! Θα πρέπει να τα ενημερώσετε μόνοι σας για να χρησιμοποιήσετε τα νέα αναγνωριστικά οντοτήτων!", "data_table": { "area": "Περιοχή", "battery": "Μπαταρία", @@ -1998,6 +2003,7 @@ }, "services": { "add_node": "Προσθήκη κόμβου", + "cancel_command": "Ακύρωση εντολής", "remove_node": "Κατάργηση κόμβου" } }, @@ -2149,7 +2155,7 @@ "input_text": "Επαναφόρτωση κειμένων εισόδου", "introduction": "Ορισμένα τμήματα του Home Assistant μπορούν να επαναφορτωθούν χωρίς να απαιτείται επανεκκίνηση. Πατώντας \"επαναφόρτωση\" θα ξεφορτωθεί η τρέχουσα παραμετροποίηση YAML και θα φορτωθεί η νέα.", "min_max": "Επαναφόρτωση οντοτήτων ελάχιστων / μέγιστων", - "mqtt": "Επαναφόρτωση οντοτήτων mqtt", + "mqtt": "Επανάληψη φόρτωσης μη αυτόματα ρυθμισμένων οντοτήτων mqtt", "person": "Επαναφόρτωση ατόμων", "ping": "Επαναφόρτωση οντοτήτων δυαδικών αισθητήρων ping", "reload": "Επαναφόρτωση {τομέα}", @@ -2896,7 +2902,7 @@ "migrate": { "header": "Μη συμβατή διαμόρφωση", "migrate": "Μετεγκατάσταση διαμόρφωσης", - "para_migrate": "Το Home Assistant μπορεί να προσθέσει αυτόματα αναγνωριστικά σε όλες τις κάρτες και τις προβολές σας, πατώντας το κουμπί \"Μετεγκατάσταση διαμόρφωσης\".", + "para_migrate": "To Home Assistant μπορεί να προσθέσει αυτόματα τα αναγνωριστικά σε όλες τις κάρτες και τις προβολές σας, πατώντας το κουμπί \"Μετεγκατάσταση διαμόρφωσης\".", "para_no_id": "Αυτό το στοιχείο δεν έχει αναγνωριστικό. Προσθέστε ένα αναγνωριστικό σε αυτό το στοιχείο στο 'ui-lovelace.yaml'." }, "move_card": { @@ -2940,7 +2946,7 @@ }, "view": { "panel_mode": { - "description": "Αυτό καθιστά την πρώτη κάρτα σε πλήρες πλάτος· άλλες κάρτες σε αυτήν την προβολή δε θα αποτυπωθούν.", + "description": "Αυτό καθιστά την πρώτη κάρτα σε πλήρες πλάτος. Άλλες κάρτες σε αυτήν την προβολή, καθώς και σήματα δεν θα αποδοθούν.", "title": "Λειτουργία πίνακα;", "warning_multiple_cards": "Αυτή η προβολή περιέχει περισσότερες από μία κάρτες, αλλά μια προβολή πίνακα μπορεί να εμφανίσει μόνο 1 κάρτα." } @@ -3198,6 +3204,10 @@ "dropdown_label": "Επισκόπηση", "header": "Επισκόπηση" }, + "enable_shortcuts": { + "description": "Ενεργοποίηση ή απενεργοποίηση συντομεύσεων πληκτρολογίου για την εκτέλεση διαφόρων ενεργειών στο περιβάλλον εργασίας χρήστη.", + "header": "Συντομεύσεις πληκτρολογίου" + }, "force_narrow": { "description": "Αυτό θα κρύψει την πλαϊνή μπάρα από προεπιλογή, παρόμοια με την εμπειρία κινητού.", "header": "Να αποκρύπτεται πάντα η πλαϊνή μπάρα" @@ -3242,6 +3252,10 @@ "header": "Πολυπαραγοντικά Αρθρώματα Ταυτοποίησης" }, "push_notifications": { + "add_device_prompt": { + "input_label": "Όνομα συσκευής", + "title": "Πώς πρέπει να ονομάζεται αυτή η συσκευή;" + }, "description": "Αποστολή ειδοποιήσεων σε αυτήν τη συσκευή.", "error_load_platform": "Ρυθμίστε το notify.html5.", "error_use_https": "Απαιτείται η ενεργοποίηση του SSL για το προσκήνιο.", diff --git a/translations/frontend/en.json b/translations/frontend/en.json index e188d2c7dd..3ab12ba356 100644 --- a/translations/frontend/en.json +++ b/translations/frontend/en.json @@ -798,6 +798,7 @@ "dismiss": "Dismiss dialog", "edit": "Edit entity", "history": "History", + "last_changed": "Last changed", "last_updated": "Last updated", "person": { "create_zone": "Create zone from current location" diff --git a/translations/frontend/es.json b/translations/frontend/es.json index ec0644984c..3f1d4c7959 100644 --- a/translations/frontend/es.json +++ b/translations/frontend/es.json @@ -151,7 +151,7 @@ "on": "Húmedo" }, "motion": { - "off": "Sin movimiento", + "off": "No detectado", "on": "Detectado" }, "occupancy": { @@ -577,7 +577,7 @@ "messages": { "became_unavailable": "dejó de estar disponible", "changed_to_state": "cambiado a {state}", - "cleared_device_class": "despejado (no se detecta {device_class})", + "cleared_device_class": "no detectado (no se detecta {device_class})", "detected_device_class": "detectado {device_class}", "rose": "salió", "set": "Establecer", @@ -2205,7 +2205,7 @@ "tag_id": "ID de etiqueta", "tag_id_placeholder": "Autogenerado cuando se deja vacío", "update": "Actualizar", - "usage": "Una etiqueta puede activar una automatización cuando se escanea, puedes usar etiquetas NFC, códigos QR o cualquier otro tipo de etiqueta. Utiliza nuestra {companion_link} para escribir esta etiqueta en una etiqueta NFC programable o crea un código QR a continuación." + "usage": "Una etiqueta puede activar una automatización cuando se escanea, puedes usar etiquetas NFC, códigos QR o cualquier otro tipo de etiqueta. Utiliza nuestras {companion_link} para escribir esta etiqueta en una etiqueta NFC programable o crea un código QR a continuación." }, "edit": "Editar", "headers": { diff --git a/translations/frontend/et.json b/translations/frontend/et.json index 793a225578..10eaefce62 100644 --- a/translations/frontend/et.json +++ b/translations/frontend/et.json @@ -669,7 +669,7 @@ "relative_time": { "duration": { "day": "{count} {count, plural,\n one {päev}\n other {päeva}\n}", - "hour": "{count} {count, plural,\n one {tund}\n other {tundi}\n}", + "hour": "{count} {count, plural,\n one {tund}\n other {tunni}\n}", "minute": "{count} {count, plural,\n one {minut}\n other {minutit}\n}", "second": "{count} {count, plural,\n one {sekund}\n other {sekundit}\n}", "week": "{count} {count, plural,\n one {nädal}\n other {nädalat}\n}" @@ -938,7 +938,7 @@ }, "duration": { "day": "{count} {count, plural,\n one {päev}\n other {päeva}\n}", - "hour": "{count} {count, plural,\n one {tund}\n other {tundi}\n}", + "hour": "{count} {count, plural,\n one {tund}\n other {tunni}\n}", "minute": "{count} {count, plural,\n one {minut}\n other {minutit}\n}", "second": "{count} {count, plural,\n one {sekund}\n other {sekundit}\n}", "week": "{count} {count, plural,\n one {nädal}\n other {nädalat}\n}" diff --git a/translations/frontend/fr.json b/translations/frontend/fr.json index d1b529543c..ae6298a82b 100644 --- a/translations/frontend/fr.json +++ b/translations/frontend/fr.json @@ -675,12 +675,31 @@ "week": "{count} {count, plural,\nzero {semaine}\none {semaine}\nother {semaines}\n}" }, "future": "Dans {time}", + "future_duration": { + "day": "Dans {count} {count, plural,\n one {day}\n other {days}\n}", + "hour": "Dans {count} {count, plural,\n one {hour}\n other {hours}\n}", + "minute": "Dans {count} {count, plural,\n one {minute}\n other {minutes}\n}", + "second": "Dans {count} {count, plural,\n one {second}\n other {seconds}\n}", + "week": "Dans {count} {count, plural,\n one {week}\n other {weeks}\n}" + }, "just_now": "Juste maintenant", "never": "Jamais", - "past": "Il y a {time}" + "past": "Il y a {time}", + "past_duration": { + "day": "Il y a {count} {count, plural,\n one {day}\n other {days}\n}", + "hour": "Il y a {count} {count, plural,\n one {hour}\n other {hours}\n}", + "minute": "Il y a {count} {count, plural,\n one {minute}\n other {minutes}\n}", + "second": "Il y a {count} {count, plural,\n one {second}\n other {seconds}\n}", + "week": "Il y a {count} {count, plural,\n one {week}\n other {weeks}\n}" + } }, "service-picker": { "service": "Service" + }, + "user-picker": { + "add_user": "Ajouter un utilisateur", + "no_user": "Aucun utilisateur", + "remove_user": "Supprimer l'utilisateur" } }, "dialogs": { @@ -704,9 +723,9 @@ "enabled_description": "Les entités désactivées ne seront pas ajoutées à Home Assistant.", "enabled_label": "Activer l'entité", "entity_id": "ID d'entité", - "icon": "Remplacer l'icône", + "icon": "Icône", "icon_error": "Les icônes doivent être au format «préfixe: iconname», par exemple «mdi: home»", - "name": "Remplacement de nom", + "name": "Nom", "note": "Remarque: cela peut ne pas encore fonctionner avec toutes les intégrations.", "unavailable": "Cette entité n'est pas disponible actuellement.", "update": "Mise à jour" @@ -723,6 +742,13 @@ "ok": "OK" }, "helper_settings": { + "counter": { + "initial": "Valeur initiale", + "maximum": "Valeur maximum", + "minimum": "Valeur minimum", + "restore": "Restaurer la dernière valeur connue au démarrage de Home Assistant", + "step": "Taille de pas" + }, "generic": { "icon": "Icône", "name": "Nom" @@ -758,6 +784,9 @@ }, "platform_not_loaded": "L'intégration {platform} n'est pas chargée. Veuillez l'ajouter à votre configuration en ajoutant 'default_config:' ou ''{platform}:''.", "required_error_msg": "Ce champ est requis", + "timer": { + "duration": "Durée" + }, "yaml_not_editable": "Les paramètres de cette entité ne peuvent pas être modifiés à partir de l'interface utilisateur. Seules les entités configurées à partir de l'interface utilisateur sont configurables à partir de l'interface utilisateur." }, "image_cropper": { @@ -826,6 +855,46 @@ } }, "quick-bar": { + "commands": { + "reload": { + "automation": "Recharger les automatisations", + "command_line": "Recharger les entités de ligne de commande", + "core": "Recharger les emplacements et personnalisations", + "filesize": "Recharger les entités de taille de fichier", + "filter": "Recharger les entités de filtre", + "generic": "Recharger les entités de caméra IP générique", + "generic_thermostat": "Recharger les entités de thermostat générique", + "group": "Recharger les groupes, les entités de groupe et notifier les services", + "history_stats": "Recharger les entités des statistiques historiques", + "homekit": "Recharger HomeKit", + "input_boolean": "Recharger les entrées booléennes (input boolean)", + "input_datetime": "Recharger les entrées de date et heure (input date time)", + "input_number": "Recharger les entrées numériques (input number)", + "input_select": "Recharger les listes de sélection (input select)", + "input_text": "Recharger les entrées de texte (input text)", + "min_max": "Recharger les entités min/max", + "mqtt": "Recharger les entités mqtt configurées manuellement", + "person": "Recharger les personnes", + "ping": "Recharger les entités de capteur binaire ping", + "reload": "Recharger {domain}", + "rest": "Recharger les entités REST et notifier les services", + "rpi_gpio": "Recharger les entités GPIO du Raspberry Pi", + "scene": "Recharger les scènes", + "script": "Recharger les scripts", + "smtp": "Recharger les services de notification smtp", + "statistics": "Recharger les entités de statistiques", + "telegram": "Recharger les services de notification de telegram", + "template": "Recharger les entités modèles", + "trend": "Recharger les entités de tendance", + "universal": "Recharger les entités de lecteur média universel", + "zone": "Recharger les zones" + }, + "server_control": { + "perform_action": "{action} Serveur", + "restart": "Redémarrer", + "stop": "Arrêter" + } + }, "filter_placeholder": "Filtre d'entité" }, "voice_command": { @@ -882,11 +951,13 @@ "notification_drawer": { "click_to_configure": "Cliquez sur le bouton pour configurer {entity}", "close": "Fermer", + "dismiss_all": "Tout ignorer", "empty": "Aucune notification", "title": "Notifications" }, "notification_toast": { "connection_lost": "Connexion perdue. Reconnexion en cours ...", + "dismiss": "Ignorer", "service_call_failed": "Échec d'appel du service \"{service}\".", "started": "Home Assistant a démarré !", "starting": "Home Assistant est en cours de démarrage, tout ne sera pas disponible tant qu’il n’aura pas terminé.", @@ -1091,6 +1162,7 @@ }, "unsupported_condition": "Pas d'interface utilisateur pour la condition : {condition}" }, + "copy_to_clipboard": "Copier dans le presse-papier", "default_name": "Nouvelle automatisation", "description": { "label": "Description", @@ -1139,6 +1211,9 @@ "trigger": "Déclencheur" }, "event": { + "context_user_pick": "Ajouter un utilisateur", + "context_user_picked": "Événement déclenché par l'utilisateur", + "context_users": "Limiter aux événements déclenchés par", "event_data": "Données de l'événement", "event_type": "Type d'événement", "label": "Événement :" @@ -1448,6 +1523,7 @@ "different_include": "Peut-être via un domaine, un glob ou un autre include.", "pick_attribute": "Sélectionnez un attribut à remplacer", "picker": { + "documentation": "Documentation sur la personnalisation", "entity": "Entité", "header": "Personnalisations", "introduction": "Ajuster les attributs par entité. Les personnalisations ajoutées / modifiées prendront effet immédiatement. Les personnalisations supprimées prendront effet lors de la mise à jour de l'entité." @@ -1462,24 +1538,31 @@ "add_prompt": "Aucun {name} n'a encore été ajouté à l'aide de cet appareil. Vous pouvez en ajouter un en cliquant sur le bouton + ci-dessus.", "automation": { "actions": { - "caption": "Quand quelque chose est déclenché ..." + "caption": "Quand quelque chose est déclenché ...", + "no_actions": "Aucune action", + "unknown_action": "Action inconnue" }, "automations": "Automatisations", "conditions": { - "caption": "Ne faire quelque chose que si ..." + "caption": "Ne faire quelque chose que si ...", + "no_conditions": "Aucune condition", + "unknown_condition": "Condition inconnue" }, "create": "Créer une automatisation avec l'appareil", "no_automations": "Aucune automatisation", "no_device_automations": "Aucune automatisation n'est disponible pour cet appareil.", "triggers": { - "caption": "Faire quelque chose quand ..." - } + "caption": "Faire quelque chose quand ...", + "no_triggers": "Pas de déclencheur", + "unknown_trigger": "Déclencheur inconnu" + }, + "unknown_automation": "Automatisation inconnue" }, "cant_edit": "Vous ne pouvez modifier que les éléments créés dans l'interface utilisateur.", "caption": "Appareils", "confirm_delete": "Voulez-vous vraiment supprimer cet appareil ?", "confirm_rename_entity_ids": "Voulez-vous aussi renommer les ID de vos entités?", - "confirm_rename_entity_ids_warning": "Cela ne changera aucune configuration (comme les automatismes, les scripts, les scènes, Lovelace) qui utilise actuellement ces entités, vous devrez les mettre à jour vous-même.", + "confirm_rename_entity_ids_warning": "Cela ne changera aucune configuration (comme les automatismes, les scripts, les scènes, Lovelace) qui utilisent actuellement ces entités, vous devrez les mettre à jour vous-même.", "data_table": { "area": "Zone", "battery": "Batterie", @@ -1535,6 +1618,8 @@ }, "filter": { "filter": "Filtre", + "hidden_entities": "{number} caché {number, plural,\n one {entity}\n other {entities}\n}", + "show_all": "Afficher tout", "show_disabled": "Afficher les entités désactivées", "show_readonly": "Afficher les entités en lecture seule", "show_unavailable": "Afficher les entités non disponibles" @@ -1590,11 +1675,13 @@ "no_helpers": "On dirait que vous n'avez pas encore d'aide!" }, "types": { + "counter": "Compteur", "input_boolean": "Interrupteur", "input_datetime": "Date et/ou heure", "input_number": "Nombre", "input_select": "Liste déroulante", - "input_text": "Texte" + "input_text": "Texte", + "timer": "Minuteur" } }, "info": { @@ -1813,6 +1900,8 @@ "network": "Réseau", "node_id": "ID du nœud", "ozw_instance": "Instance Z-Wave", + "query_stage": "Étape de requête", + "wakeup_instructions": "Instructions de réveil", "zwave": "Z-Wave" }, "device_info": { @@ -1822,6 +1911,10 @@ }, "navigation": { "network": "Réseau", + "node": { + "config": "Config", + "dashboard": "Tableau de bord" + }, "nodes": "Nœuds", "select_instance": "Sélectionnez une instance" }, @@ -1850,6 +1943,15 @@ "introduction": "Gérer les fonctions de niveau réseau.", "node_count": "{count} nœuds" }, + "node_config": { + "header": "Configuration du nœud", + "help_source": "Les descriptions des paramètres de configuration et le texte d'aide sont fournis par le projet OpenZWave.", + "introduction": "Gérez les différents paramètres de configuration d'un nœud Z-Wave.", + "wakeup_help": "Les nœuds alimentés par batterie doivent être éveillés pour modifier leur configuration. Si le nœud n'est pas réveillé, OpenZWave tentera de mettre à jour la configuration du nœud la prochaine fois qu'il se réveillera, ce qui pourrait être plusieurs heures (ou jours) plus tard. Suivez ces étapes pour réactiver votre appareil:" + }, + "node_metadata": { + "product_manual": "Manuel du produit" + }, "node_query_stages": { "associations": "Rafraîchissement les associations et les membres", "cacheload": "Chargement des informations à partir du fichier de cache OpenZWave. Les nœuds de batterie resteront à cette étape jusqu'à ce que le nœud se réveille.", @@ -1901,6 +2003,7 @@ }, "services": { "add_node": "Ajouter un nœud", + "cancel_command": "Annuler la commande", "remove_node": "Supprimer le nœud" } }, @@ -1930,6 +2033,7 @@ "update": "Mettre à jour" }, "introduction": "Ici, vous pouvez définir chaque personne d'intérêt dans Home Assistant.", + "learn_more": "En savoir plus sur les personnes", "no_persons_created_yet": "Il semble que vous n’avez encore créé personne.", "note_about_persons_configured_in_yaml": "Remarque: les personnes configurées via configuration.yaml ne peuvent pas être modifiées via l'interface utilisateur.", "person_not_found": "Nous n'avons pas trouvé la personne que vous tentiez de modifier.", @@ -2051,7 +2155,7 @@ "input_text": "Recharger les entrées de texte (input text)", "introduction": "Certaines parties de Home Assistant peuvent être rechargées sans nécessiter de redémarrage. Le fait de cliquer sur recharger déchargera leur configuration actuelle et chargera la nouvelle.", "min_max": "Recharger les entités min/max", - "mqtt": "Recharger les entités mqtt", + "mqtt": "Recharger les entités mqtt configurées manuellement", "person": "Recharger les personnes", "ping": "Recharger les entités de capteur binaire ping", "reload": "Recharger {domain}", @@ -2108,6 +2212,7 @@ "last_scanned": "Dernière analyse", "name": "Nom" }, + "learn_more": "En savoir plus sur les balises", "never_scanned": "Jamais scanné", "no_tags": "Aucunes balises", "write": "Écrire" @@ -2443,7 +2548,9 @@ "listeners": "Ce modèle écoute les événements de changement d'état suivants:", "no_listeners": "Ce modèle n'écoute aucun événement de changement d'état et ne sera pas mis à jour automatiquement.", "reset": "Réinitialiser au modèle de démonstration", + "result_type": "Type de résultat", "template_extensions": "Extensions de modèles de Home Assistant", + "time": "Ce modèle est mis à jour au début de chaque minute.", "title": "Modèle", "unknown_error_template": "Erreur inconnue lors du rendu du modèle" } @@ -2586,6 +2693,7 @@ "entity-id": "ID de l'entité", "last-changed": "Dernière modification", "last-triggered": "Dernier déclenchement", + "last-updated": "Dernière mise à jour", "none": "Pas d'informations secondaires", "position": "Position", "tilt-position": "position d'inclinaison" @@ -2742,6 +2850,9 @@ "entity": "Entité", "no_description": "Aucune description disponible." }, + "edit_badges": { + "panel_mode": "Ces badges ne seront pas affichés car cette vue est en \"Mode Panneau\"." + }, "edit_card": { "add": "Ajouter une action", "confirm_cancel": "Êtes-vous sûr de vouloir annuler ?", @@ -2847,7 +2958,8 @@ "exit_edit_mode": "Quitter le mode d'édition de l'interface utilisateur", "help": "Aide", "refresh": "Actualiser", - "reload_resources": "Recharger les ressources" + "reload_resources": "Recharger les ressources", + "start_conversation": "Démarrer la conversation" }, "reload_lovelace": "Recharger UI", "reload_resources": { @@ -3092,6 +3204,10 @@ "dropdown_label": "Tableau de bord", "header": "Tableau de bord" }, + "enable_shortcuts": { + "description": "Activez ou désactivez les raccourcis clavier pour effectuer diverses actions dans l'interface utilisateur.", + "header": "Raccourcis clavier" + }, "force_narrow": { "description": "Cela masquera la barre latérale par défaut, semblable à l'expérience mobile.", "header": "Toujours cacher la barre latérale" @@ -3136,6 +3252,10 @@ "header": "Modules d'authentification multi-facteurs" }, "push_notifications": { + "add_device_prompt": { + "input_label": "Nom de l'appareil", + "title": "Comment doit-on appeler cet appareil?" + }, "description": "Envoyer des notifications à cet appareil.", "error_load_platform": "Configurer notify.html5.", "error_use_https": "Nécessite l'activation SSL pour l'interface utilisateur.", diff --git a/translations/frontend/hu.json b/translations/frontend/hu.json index dadeffe9d1..69f4f62bc9 100644 --- a/translations/frontend/hu.json +++ b/translations/frontend/hu.json @@ -634,20 +634,20 @@ "server": "Szerver" }, "documentation": "dokumentáció", - "learn_adding_local_media": "További információ a média hozzáadásáról a {documentation} .", - "local_media_files": "Helyezze el a video-, audio- és képfájljait a média könyvtárba, hogy böngészhessen és lejátszhassa őket a böngészőben vagy a támogatott médialejátszókon.", + "learn_adding_local_media": "Tudj meg többet a média hozzáadásról a {documentation}ban.", + "local_media_files": "Helyezd el a videó-, hang- és képfájljaidat a média könyvtárban ahhoz, hogy tallózhasd és lejátszhasd őket a böngészőben vagy a támogatott médialejátszókon.", "media_browsing_error": "Média böngészési hiba", "media_not_supported": "A böngésző médialejátszó nem támogatja az ilyen típusú médiafájlokat", "media_player": "Médialejátszó", "media-player-browser": "Médialejátszó böngésző", "no_items": "Nincsenek elemek", "no_local_media_found": "Nem található helyi média", - "no_media_folder": "Úgy tűnik, hogy még nem hozott létre média könyvtárat.", + "no_media_folder": "Úgy tűnik, még nem hoztál létre média könyvtárat.", "pick": "Kiválasztás", "pick-media": "Média kiválasztása", "play": "Lejátszás", "play-media": "Média lejátszása", - "setup_local_help": "Ellenőrizze a {documentation} a helyi adathordozók beállításáról.", + "setup_local_help": "Ellenőrizd a {documentation}t a helyi adathordozó beállításáról.", "video_not_supported": "A böngésződ nem támogatja a video elemet.", "web-browser": "Böngésző" }, @@ -1013,7 +1013,7 @@ "delete_confirm": "Biztos, hogy ezt törölni szeretnéd?", "duplicate": "Duplikálás", "header": "Műveletek", - "introduction": "A műveleteket hajtja végre a Home Assistant, ha egy automatizálás triggerelődik. Kattints az alábbi linkre, ha többet szeretnél megtudni a műveletekről.", + "introduction": "A műveleteket hajtja végre a Home Assistant, ha egy automatizálás elindul. Kattints az alábbi linkre, ha többet szeretnél megtudni a műveletekről.", "learn_more": "Tudj meg többet a műveletekről", "name": "Művelet", "type_select": "Művelet típusa", @@ -1055,12 +1055,12 @@ "label": "Számláló" }, "until": { - "conditions": "Amíg a feltételek", - "label": "Addig" + "conditions": "Amíg nem teljesülnek a feltételek", + "label": "Amíg nem" }, "while": { - "conditions": "Míg a feltételek", - "label": "Míg" + "conditions": "Amíg teljesülnek a feltételek", + "label": "Amíg" } } }, @@ -1073,7 +1073,7 @@ }, "wait_for_trigger": { "continue_timeout": "Folytatás időtúllépéskor", - "label": "Várakozás az eseményindítóra", + "label": "Várakozás eseményindítóra", "timeout": "Időtúllépés (opcionális)" }, "wait_template": { @@ -1191,15 +1191,15 @@ "move_up": "Fel", "save": "Mentés", "triggers": { - "add": "Trigger hozzáadása", + "add": "Eseményindító hozzáadása", "delete": "Törlés", "delete_confirm": "Biztos, hogy ezt törölni szeretnéd?", "duplicate": "Duplikálás", - "header": "Triggerek", - "introduction": "Az eseményindítók (triggerek) indítják el az automatizálási szabályok feldolgozását. Több triggert is meg lehet adni egy szabályhoz. Ha egy trigger elindul, akkor a Home Assistant ellenőrzi a feltételeket - ha vannak -, majd meghívja a műveletet. Kattints az alábbi linkre, ha többet szeretnél megtudni a triggerekről.", - "learn_more": "Tudj meg többet a triggerekről", - "name": "Trigger", - "type_select": "Trigger típusa", + "header": "Eseményindítók", + "introduction": "Az eseményindítók indítják el az automatizálási szabályok feldolgozását. Több eseményindítót is meg lehet adni egy szabályhoz. Ha egy eseményindító elindul, akkor a Home Assistant ellenőrzi a feltételeket - ha vannak -, majd meghívja a műveletet.", + "learn_more": "Tudj meg többet az eseményindítókról", + "name": "Eseményindító", + "type_select": "Eseményindító típusa", "type": { "device": { "extra_fields": { @@ -1212,8 +1212,8 @@ }, "event": { "context_user_pick": "Felhasználó hozzáadása", - "context_user_picked": "Esemény elküldése", - "context_users": "Korlátozás az által kiváltott eseményekre", + "context_user_picked": "Eseményt kiváltó felhasználó", + "context_users": "Korlátozás felhasználó(k) által indított eseményekre", "event_data": "Esemény adatai", "event_type": "Esemény típusa", "label": "Esemény" @@ -1535,10 +1535,10 @@ } }, "devices": { - "add_prompt": "Az eszköz használatával még nem adtak hozzá {name} nevet. A fenti + gombra kattintva hozzá adhat egyet.", + "add_prompt": "Még nem lettek létrehozva {name} ennek az eszköznek a használatával. Hozzáadhatsz egyet a fenti + gombra kattintva.", "automation": { "actions": { - "caption": "Ha valami triggerelődik, akkor...", + "caption": "Ha egy esemény elindul, akkor...", "no_actions": "Nincsenek műveletek", "unknown_action": "Ismeretlen művelet" }, @@ -1548,7 +1548,7 @@ "no_conditions": "Nincsenek feltételek", "unknown_condition": "Ismeretlen feltétel" }, - "create": "Eszköz automatizálás létrehozása", + "create": "Automatizálás létrehozása eszközzel", "no_automations": "Nincsenek automatizálások", "no_device_automations": "Ehhez az eszközhöz nem állnak rendelkezésre automatizálások.", "triggers": { @@ -1593,7 +1593,7 @@ }, "scenes": "Jelenetek", "script": { - "create": "Szkript létrehozása eszköz alapján", + "create": "Szkript létrehozása eszközzel", "no_scripts": "Nincsenek szkriptek", "scripts": "Szkriptek" }, @@ -1925,7 +1925,7 @@ "driverawakenodesqueries": "Minden éber csomópont lekérdezésre került", "driverfailed": "Nem sikerült csatlakozni a Z-Wave vezérlőhöz", "driverready": "A Z-Wave vezérlő inicializálása", - "driverremoved": "A meghajtót eltávolították", + "driverremoved": "Az illesztőprogram el lett távolítva", "driverreset": "Az illesztőprogram vissza lett állítva", "offline": "OZWDaemon offline", "ready": "Csatlakozásra kész", @@ -2431,14 +2431,14 @@ "add_to_group": "Hozzáadás a csoporthoz", "entities": "A csomópont entitásai", "entity_info": "Entitás adatai", - "exclude_entity": "Kizárja ezt az entitást a Home Assistantból", + "exclude_entity": "Entitás kizárása a Home Assistant-ból", "group": "Csoport", "header": "Z-Wave csomópontkezelés", - "introduction": "Futtasson egyetlen csomópontot érintő Z-Wave parancsokat. Válasszon egy csomópontot az elérhető parancsok listájának megtekintéséhez.", - "max_associations": "Egyesületek száma:", + "introduction": "Futtass egyetlen csomópontot érintő Z-Wave parancsokat. Válassz egy csomópontot az elérhető parancsok listájának megtekintéséhez.", + "max_associations": "Társítások maximális száma:", "node_group_associations": "Csomópontcsoport-társítások", "node_protection": "Csomópont védelem", - "node_to_control": "A vezérlőhöz képest csomópont", + "node_to_control": "Vezérelni kívánt csomópont", "nodes": "Csomópontok", "nodes_hint": "Válassz csomópontot a csomópontonkénti opciók megtekintéséhez", "nodes_in_group": "További csomópontok ebben a csoportban:", @@ -2449,7 +2449,7 @@ "set_protection": "Védelem beállítása" }, "ozw_log": { - "header": "OZW Log", + "header": "OZW napló", "introduction": "Napló megtekintése. 0 a minimum (a teljes naplót betölti) és 1000 a maximum. A betöltés statikus naplót jelenít meg, és a vége automatikusan frissül a napló utolsó meghatározott számú sorával.", "last_log_lines": "Az utolsó naplósorok száma", "load": "Betöltés", @@ -2767,7 +2767,7 @@ "name": "Vízszintes Készlet" }, "humidifier": { - "description": "A Páratartalom kártyával a páramntesitő/párásitó berendezés entitások vezérelhetők. Lehetővé teszi a páratartalom, illetve a mód megváltoztatását.", + "description": "A Párásító kártyával a párásító berendezés entitások vezérelhetők. Lehetővé teszi a páratartalom, illetve a mód megváltoztatását.", "name": "Párásító" }, "iframe": { @@ -3205,7 +3205,7 @@ "header": "Irányítópult" }, "enable_shortcuts": { - "description": "A felhasználói felület különböző műveletekvégrehajtásához engedélyezze vagy tiltsa le a billentyűparancsokat.", + "description": "Engedélyezheted vagy letilthatod a felhasználói felület billentyűparancsait különböző műveletek végrehajtásához.", "header": "Billentyűparancsok" }, "force_narrow": { diff --git a/translations/frontend/it.json b/translations/frontend/it.json index dc1428984a..07c2e2260b 100644 --- a/translations/frontend/it.json +++ b/translations/frontend/it.json @@ -888,6 +888,11 @@ "trend": "Ricarica le entità di tendenza", "universal": "Ricarica le entità del lettore multimediale universale", "zone": "Ricarica le Zone" + }, + "server_control": { + "perform_action": "{action} Server", + "restart": "Riavvia", + "stop": "Ferma" } }, "filter_placeholder": "Filtro Entità" @@ -1998,6 +2003,7 @@ }, "services": { "add_node": "Aggiungi Nodo", + "cancel_command": "Annulla Comando", "remove_node": "Rimuovi nodo" } }, @@ -3198,6 +3204,10 @@ "dropdown_label": "Plancia", "header": "Plancia" }, + "enable_shortcuts": { + "description": "Abilita o disabilita le scorciatoie da tastiera per eseguire varie azioni nell'interfaccia utente.", + "header": "Scorciatoie da tastiera" + }, "force_narrow": { "description": "Questo nasconderà la barra laterale per impostazione predefinita, in modo simile all'esperienza mobile", "header": "Nascondi sempre la barra laterale" @@ -3242,6 +3252,10 @@ "header": "Codice di autenticazione a più fattori" }, "push_notifications": { + "add_device_prompt": { + "input_label": "Nome del dispositivo", + "title": "Come dovrebbe essere chiamato questo dispositivo?" + }, "description": "Invia notifiche a questo dispositivo.", "error_load_platform": "Configura notify.html5.", "error_use_https": "Richiede SSL abilitato per il frontend.", diff --git a/translations/frontend/pl.json b/translations/frontend/pl.json index 13655ba4cd..6a0c3bc390 100644 --- a/translations/frontend/pl.json +++ b/translations/frontend/pl.json @@ -575,29 +575,29 @@ "by_service": "przez usługę", "entries_not_found": "Nie znaleziono wpisów w dzienniku.", "messages": { - "became_unavailable": "- encja stała się niedostępna", - "changed_to_state": "- stan encji zmienił się na {state}", - "cleared_device_class": "- encja przestała wykrywać {device_class}", - "detected_device_class": "- encja wykryła {device_class}", + "became_unavailable": "encja stała się niedostępna", + "changed_to_state": "stan encji zmienił się na {state}", + "cleared_device_class": "encja przestała wykrywać", + "detected_device_class": "encja wykryła", "rose": "wzeszło", "set": "zaszło", - "turned_off": "- encja została wyłączona", - "turned_on": "- encja została włączona", - "was_at_home": "- stan encji zmienił się na \"w domu\"", - "was_at_state": "- stan encji zmienił się na {state}", - "was_away": "- stan encji zmienił się na \"poza domem\"", + "turned_off": "encja została wyłączona", + "turned_on": "encja została włączona", + "was_at_home": "stan encji zmienił się na \"w domu\"", + "was_at_state": "stan encji zmienił się na {state}", + "was_away": "stan encji zmienił się na \"poza domem\"", "was_closed": "nastąpiło zamknięcie", "was_connected": "nastąpiło podłączenie", "was_disconnected": "nastąpiło odłączenie", "was_locked": "nastąpiło zamknięcie", - "was_low": "- stan encji zmienił się na niski", - "was_normal": "- stan encji zmienił się na normalny", + "was_low": "stan encji zmienił się na niski", + "was_normal": "stan encji zmienił się na normalny", "was_opened": "nastąpiło otwarcie", "was_plugged_in": "nastąpiło podłączenie", - "was_safe": "- encja przestała wykrywać zagrożenie", + "was_safe": "encja przestała wykrywać zagrożenie", "was_unlocked": "nastąpiło otwarcie", "was_unplugged": "nastąpiło odłączenie", - "was_unsafe": "- encja wykryła zagrożenie" + "was_unsafe": "encja wykryła zagrożenie" } }, "media-browser": { @@ -1677,7 +1677,7 @@ "types": { "counter": "Licznik", "input_boolean": "Przełącznik", - "input_datetime": "Data i/lub czas", + "input_datetime": "Data/czas", "input_number": "Numer", "input_select": "Pole wyboru", "input_text": "Tekst", diff --git a/translations/frontend/ro.json b/translations/frontend/ro.json index f4d458f5c6..6bd0548b8a 100644 --- a/translations/frontend/ro.json +++ b/translations/frontend/ro.json @@ -546,7 +546,20 @@ "no_history_found": "Nici un istoric de stare nu a fost găsit." }, "logbook": { - "entries_not_found": "Nu s-au găsit intrări în jurnal." + "entries_not_found": "Nu s-au găsit intrări în jurnal.", + "messages": { + "rose": "Trandafir", + "set": "setaţi", + "turned_off": "oprit", + "turned_on": "pornit", + "was_at_home": "era acasă", + "was_at_state": "a fost în {state}", + "was_away": "a fost plecat", + "was_closed": "a fost închis", + "was_disconnected": "a fost deconectat", + "was_locked": "a fost încuiat", + "was_unlocked": "a fost deblocat" + } }, "media-browser": { "class": { @@ -591,11 +604,18 @@ "week": "{count}{count, plural,\n one { săptămână }\n other { săptămâni }\n}" }, "future": "În {time}", + "future_duration": { + "week": "În {count} {count, plural,\n one {week}\n other {weeks}\n}" + }, "never": "Niciodată", "past": "{time} în urmă" }, "service-picker": { "service": "Serviciu" + }, + "user-picker": { + "add_user": "Adăugați utilizator", + "no_user": "Niciun utilizator" } }, "dialogs": { @@ -671,6 +691,9 @@ }, "platform_not_loaded": "Integrarea {platform} nu este încărcată. Vă rugăm să-i adăugați configurația dvs. fie adăugând 'default_config:' sau ''{platform}:''.", "required_error_msg": "Acest câmp este obligatoriu", + "timer": { + "duration": "Durată" + }, "yaml_not_editable": "Setările acestei entități nu se pot edita din interfața grafica. Numai entitățile configurate in interfața grafica sunt configurabile din interfața grafica." }, "more_info_control": { @@ -965,6 +988,7 @@ }, "unsupported_condition": "Condiție neacceptată: {condition}" }, + "copy_to_clipboard": "Copiați în clipboard", "default_name": "Automatizare nouă", "description": { "label": "Descriere", @@ -1169,11 +1193,13 @@ "devices": { "automation": { "actions": { - "caption": "Când se declanșează ceva ..." + "caption": "Când se declanșează ceva ...", + "no_actions": "Fără acțiuni" }, "automations": "Automatizări", "conditions": { - "caption": "Fă ceva doar dacă ..." + "caption": "Fă ceva doar dacă ...", + "no_conditions": "Nu există condiții" }, "create": "Creează o automatizare cu dispozitivul", "no_automations": "Nu există automatizări", @@ -1238,6 +1264,8 @@ }, "filter": { "filter": "Filtru", + "hidden_entities": "{number} ascuns{number, plural,\n one {entity}\n other {entities}\n}", + "show_all": "Arata tot", "show_disabled": "Afișare entități dezactivate", "show_readonly": "Afișare entități doar în citire", "show_unavailable": "Afișare entități indisponibile" @@ -1293,7 +1321,8 @@ "input_datetime": "Data și / sau ora", "input_number": "Număr", "input_select": "Buton Dropdown", - "input_text": "Text" + "input_text": "Text", + "timer": "Temporizator" } }, "info": { @@ -1431,6 +1460,7 @@ "open": "Deschide" } }, + "description": "Gestionați-vă tablourile de bord Lovelace", "resources": { "cant_edit_yaml": "Utilizați Lovelace în modul YAML, prin urmare nu vă puteți gestiona resursele prin intermediul UI. Gestionează-le în configuration.yaml.", "caption": "Resurse", @@ -1505,7 +1535,9 @@ "device_tracker_pick": "Alegeți dispozitivul pentru a urmări", "device_tracker_picked": "Urmăriți dispozitivul", "name": "Nume" - } + }, + "learn_more": "Aflați mai multe despre persoane", + "person_not_found_title": "Persoana nu a fost găsită" }, "scene": { "activated": "Scenă activată {name}.", @@ -1922,6 +1954,7 @@ "jinja_documentation": "Șablon documentație Jinja2", "listeners": "Acest șablon ascultă următoarele evenimente modificate de stare:", "no_listeners": "Acest șablon ascultă următoarele evenimente modificate de stare:", + "result_type": "Tipul rezultatului", "template_extensions": "Șabloane de extensie pentru Home Assistant", "time": "Acest șablon se actualizează la fiecare 60 de secunde după ultimul eveniment modificat de stare.", "title": "Sabloane", @@ -2009,6 +2042,7 @@ }, "entities": { "description": "Cardul Entities este cel mai comun tip de card. Acesta grupează elementele împreună în liste.", + "edit_special_row": "Vizualizați detaliile acestui rând făcând clic pe butonul de editare", "entity_row_editor": "Editează rândul entității", "name": "Entități", "secondary_info_values": { @@ -2103,7 +2137,8 @@ }, "sensor": { "description": "Cardul Senzor vă oferă o imagine de ansamblu rapidă a stării senzorilor cu un grafic opțional pentru a vizualiza schimbarea în timp.", - "name": "Senzor" + "name": "Senzor", + "show_more_detail": "Afișați mai multe detalii" }, "shopping-list": { "description": "Cardul Listă cumpărături vă permite să adăugați, să editați, să verificați și să ștergeți elemente din lista de cumpărături.", @@ -2243,6 +2278,7 @@ "views": { "confirm_delete": "Ștergeți vizualizarea?", "confirm_delete_existing_cards": "Ștergerea acestei vizualizări va elimina și cardurile", + "confirm_delete_existing_cards_text": "Sigur doriți să ștergeți vizualizarea '' {name} ''? Vizualizarea conține {number} carduri care vor fi șterse. Această acțiune nu poate fi anulată.", "confirm_delete_text": "Sigur doriți să ștergeți vizualizarea „{name}”?" }, "warning": { @@ -2415,6 +2451,10 @@ "more_integrations": "Mai Mult" }, "intro": "Sunteți gata să vă treziți casa, să vă recuperați intimitatea și să vă alăturați unei comunități mondiale de creatori?", + "restore": { + "in_progress": "Restaurare în curs", + "show_log": "Afișați jurnalul complet" + }, "user": { "create_account": "Creează cont", "data": { @@ -2500,6 +2540,9 @@ "header": "Autentificare cu doi factori" }, "push_notifications": { + "add_device_prompt": { + "input_label": "Nume dispozitiv" + }, "description": "Trimiteți notificări către acest dispozitiv.", "error_load_platform": "Configurați notify.html5.", "error_use_https": "Necesită SSL activat pentru interfaţă.", diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index 41daa529cb..4f322dd9e5 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -571,7 +571,7 @@ "no_history_found": "История не найдена." }, "logbook": { - "by": "пользователем", + "by": "от", "by_service": "службой", "entries_not_found": "В журнале нет записей.", "messages": { diff --git a/translations/frontend/zh-Hans.json b/translations/frontend/zh-Hans.json index e344599b9d..7513de7ed8 100644 --- a/translations/frontend/zh-Hans.json +++ b/translations/frontend/zh-Hans.json @@ -873,7 +873,7 @@ "input_select": "重载多项选择器", "input_text": "重载文字输入", "min_max": "重载最小值/最大值实体", - "mqtt": "重载 mqtt 实体", + "mqtt": "重载手动配置的 mqtt 实体", "person": "重载人员", "ping": "重载 ping 二元传感器实体", "reload": "重载{domain}", @@ -888,6 +888,11 @@ "trend": "重载 trend 实体", "universal": "重载通用媒体播放器实体", "zone": "重载地点" + }, + "server_control": { + "perform_action": "{action}服务", + "restart": "重启", + "stop": "停止" } }, "filter_placeholder": "实体筛选" @@ -1998,6 +2003,7 @@ }, "services": { "add_node": "添加节点", + "cancel_command": "取消命令", "remove_node": "删除节点" } }, @@ -2149,7 +2155,7 @@ "input_text": "重载文字输入", "introduction": "Home Assistant 中的部分配置可以直接重载,而无需重启服务。点击重载按钮将重新载入新的配置。", "min_max": "重载最小值/最大值实体", - "mqtt": "重载 mqtt 实体", + "mqtt": "重载手动配置的 mqtt 实体", "person": "重载人员", "ping": "重载 ping 二元传感器实体", "reload": "重载{domain}", @@ -3198,6 +3204,10 @@ "dropdown_label": "仪表盘", "header": "仪表盘" }, + "enable_shortcuts": { + "description": "启用或禁用可在 UI 中执行各种操作的键盘快捷键。", + "header": "键盘快捷键" + }, "force_narrow": { "description": "这将默认隐藏侧边栏,体验与手机版类似。", "header": "始终隐藏侧边栏" @@ -3242,6 +3252,10 @@ "header": "多因素身份验证模块" }, "push_notifications": { + "add_device_prompt": { + "input_label": "设备名称", + "title": "如何称呼这台设备?" + }, "description": "向本设备发送通知", "error_load_platform": "请配置 notify.html5。", "error_use_https": "需要为前端启用 SSL。", From 89f359a52faac71079360225bf659cd9c68962b5 Mon Sep 17 00:00:00 2001 From: Zack Barett Date: Fri, 30 Oct 2020 08:28:51 -0500 Subject: [PATCH 222/242] Calendar: Fix background to match ha-card (#7539) --- src/panels/calendar/ha-full-calendar.ts | 15 +++++-- src/panels/calendar/ha-panel-calendar.ts | 51 +++++++++++------------- 2 files changed, 36 insertions(+), 30 deletions(-) diff --git a/src/panels/calendar/ha-full-calendar.ts b/src/panels/calendar/ha-full-calendar.ts index f568d14e46..0a4a1039cd 100644 --- a/src/panels/calendar/ha-full-calendar.ts +++ b/src/panels/calendar/ha-full-calendar.ts @@ -324,10 +324,19 @@ class HAFullCalendar extends LitElement { #calendar { flex-grow: 1; - background-color: var(--card-background-color); + background-color: var( + --ha-card-background, + var(--card-background-color, white) + ); min-height: 400px; - --fc-neutral-bg-color: var(--card-background-color); - --fc-list-event-hover-bg-color: var(--card-background-color); + --fc-neutral-bg-color: var( + --ha-card-background, + var(--card-background-color, white) + ); + --fc-list-event-hover-bg-color: var( + --ha-card-background, + var(--card-background-color, white) + ); --fc-theme-standard-border-color: var(--divider-color); --fc-border-color: var(--divider-color); } diff --git a/src/panels/calendar/ha-panel-calendar.ts b/src/panels/calendar/ha-panel-calendar.ts index 692194b06f..a81f8622fb 100644 --- a/src/panels/calendar/ha-panel-calendar.ts +++ b/src/panels/calendar/ha-panel-calendar.ts @@ -1,36 +1,33 @@ -import { - customElement, - LitElement, - property, - internalProperty, - CSSResultArray, - css, - TemplateResult, - html, - PropertyValues, -} from "lit-element"; -import { styleMap } from "lit-html/directives/style-map"; - -import "../../layouts/ha-app-layout"; -import "@polymer/app-layout/app-header/app-header"; -import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@material/mwc-checkbox"; import "@material/mwc-formfield"; - -import "../../components/ha-menu-button"; +import "@polymer/app-layout/app-header/app-header"; +import "@polymer/app-layout/app-toolbar/app-toolbar"; +import { + css, + CSSResultArray, + customElement, + html, + internalProperty, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; +import { styleMap } from "lit-html/directives/style-map"; +import { HASSDomEvent } from "../../common/dom/fire_event"; import "../../components/ha-card"; -import "./ha-full-calendar"; - +import "../../components/ha-menu-button"; +import { fetchCalendarEvents, getCalendars } from "../../data/calendar"; +import "../../layouts/ha-app-layout"; +import { haStyle } from "../../resources/styles"; import type { - HomeAssistant, - SelectedCalendar, + Calendar, CalendarEvent, CalendarViewChanged, - Calendar, + HomeAssistant, + SelectedCalendar, } from "../../types"; -import { haStyle } from "../../resources/styles"; -import { HASSDomEvent } from "../../common/dom/fire_event"; -import { getCalendars, fetchCalendarEvents } from "../../data/calendar"; +import "./ha-full-calendar"; @customElement("ha-panel-calendar") class PanelCalendar extends LitElement { @@ -179,7 +176,7 @@ class PanelCalendar extends LitElement { } :host(:not([narrow])) .content { - height: calc(100vh - var(--header-height); + height: calc(100vh - var(--header-height)); } .calendar-list { From 48ef8c86c23e35de3801ac9a53a11b7a257ca658 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 30 Oct 2020 14:30:27 +0100 Subject: [PATCH 223/242] Add unavailable entity to gauge demo (#7530) --- gallery/src/demos/demo-hui-gauge-card.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gallery/src/demos/demo-hui-gauge-card.ts b/gallery/src/demos/demo-hui-gauge-card.ts index 2963cab228..5dd0cf582b 100644 --- a/gallery/src/demos/demo-hui-gauge-card.ts +++ b/gallery/src/demos/demo-hui-gauge-card.ts @@ -8,6 +8,7 @@ import "../components/demo-cards"; const ENTITIES = [ getEntity("sensor", "brightness", "12", {}), getEntity("plant", "bonsai", "ok", {}), + getEntity("sensor", "not_working", "unavailable", {}), getEntity("sensor", "outside_humidity", "54", { unit_of_measurement: "%", }), @@ -74,6 +75,13 @@ const CONFIGS = [ entity: plant.bonsai `, }, + { + heading: "Unavailable entity", + config: ` +- type: gauge + entity: sensor.not_working + `, + }, ]; class DemoGaugeEntity extends PolymerElement { From 4bc8818145f8d4de56bf5511769be2685183a2f8 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Fri, 30 Oct 2020 08:45:51 -0500 Subject: [PATCH 224/242] Remove ha-state-icon (#7545) --- src/components/entity/ha-state-icon.js | 25 ------------------- .../integrations/ha-config-integrations.ts | 1 - .../zha/zha-clusters-data-table.ts | 1 - .../zha/zha-device-endpoint-data-table.ts | 1 - 4 files changed, 28 deletions(-) delete mode 100644 src/components/entity/ha-state-icon.js diff --git a/src/components/entity/ha-state-icon.js b/src/components/entity/ha-state-icon.js deleted file mode 100644 index 80a7ad22d1..0000000000 --- a/src/components/entity/ha-state-icon.js +++ /dev/null @@ -1,25 +0,0 @@ -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import { stateIcon } from "../../common/entity/state_icon"; -import "../ha-icon"; - -class HaStateIcon extends PolymerElement { - static get template() { - return html` `; - } - - static get properties() { - return { - stateObj: { - type: Object, - }, - }; - } - - computeIcon(stateObj) { - return stateIcon(stateObj); - } -} - -customElements.define("ha-state-icon", HaStateIcon); diff --git a/src/panels/config/integrations/ha-config-integrations.ts b/src/panels/config/integrations/ha-config-integrations.ts index 7c5e42b2bb..915cd4920e 100644 --- a/src/panels/config/integrations/ha-config-integrations.ts +++ b/src/panels/config/integrations/ha-config-integrations.ts @@ -23,7 +23,6 @@ import "../../../common/search/search-input"; import { caseInsensitiveCompare } from "../../../common/string/compare"; import { LocalizeFunc } from "../../../common/translations/localize"; import { nextRender } from "../../../common/util/render-status"; -import "../../../components/entity/ha-state-icon"; import "../../../components/ha-button-menu"; import "../../../components/ha-card"; import "../../../components/ha-svg-icon"; diff --git a/src/panels/config/integrations/integration-panels/zha/zha-clusters-data-table.ts b/src/panels/config/integrations/integration-panels/zha/zha-clusters-data-table.ts index b602ada4ba..55b6683fce 100644 --- a/src/panels/config/integrations/integration-panels/zha/zha-clusters-data-table.ts +++ b/src/panels/config/integrations/integration-panels/zha/zha-clusters-data-table.ts @@ -12,7 +12,6 @@ import type { DataTableColumnContainer, HaDataTable, } from "../../../../../components/data-table/ha-data-table"; -import "../../../../../components/entity/ha-state-icon"; import type { Cluster } from "../../../../../data/zha"; import type { HomeAssistant } from "../../../../../types"; import { formatAsPaddedHex } from "./functions"; diff --git a/src/panels/config/integrations/integration-panels/zha/zha-device-endpoint-data-table.ts b/src/panels/config/integrations/integration-panels/zha/zha-device-endpoint-data-table.ts index 9537ed3572..3644b9d497 100644 --- a/src/panels/config/integrations/integration-panels/zha/zha-device-endpoint-data-table.ts +++ b/src/panels/config/integrations/integration-panels/zha/zha-device-endpoint-data-table.ts @@ -15,7 +15,6 @@ import type { HaDataTable, DataTableRowData, } from "../../../../../components/data-table/ha-data-table"; -import "../../../../../components/entity/ha-state-icon"; import type { ZHADeviceEndpoint, ZHAEntityReference, From 9b22b1e499d52d226898c8314f196a8901655eeb Mon Sep 17 00:00:00 2001 From: dklemm Date: Fri, 30 Oct 2020 13:47:09 +0000 Subject: [PATCH 225/242] Resolve #7533 Broken styling on stack card titles (#7534) --- src/components/ha-push-notifications-toggle.js | 8 ++++++-- src/panels/lovelace/cards/hui-stack-card.ts | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/components/ha-push-notifications-toggle.js b/src/components/ha-push-notifications-toggle.js index d50e1a16af..b8bead07fc 100644 --- a/src/components/ha-push-notifications-toggle.js +++ b/src/components/ha-push-notifications-toggle.js @@ -90,8 +90,12 @@ class HaPushNotificationsToggle extends EventsMixin(PolymerElement) { } const name = await showPromptDialog(this, { - title: this.hass.localize("ui.panel.profile.push_notifications.add_device_prompt.title"), - inputLabel: this.hass.localize("ui.panel.profile.push_notifications.add_device_prompt.input_label"), + title: this.hass.localize( + "ui.panel.profile.push_notifications.add_device_prompt.title" + ), + inputLabel: this.hass.localize( + "ui.panel.profile.push_notifications.add_device_prompt.input_label" + ), }); if (name == null) { this.pushChecked = false; diff --git a/src/panels/lovelace/cards/hui-stack-card.ts b/src/panels/lovelace/cards/hui-stack-card.ts index 728cd51075..aaa73530b4 100644 --- a/src/panels/lovelace/cards/hui-stack-card.ts +++ b/src/panels/lovelace/cards/hui-stack-card.ts @@ -89,6 +89,9 @@ export abstract class HuiStackCard color: var(--ha-card-header-color, --primary-text-color); font-family: var(--ha-card-header-font-family, inherit); font-size: var(--ha-card-header-font-size, 24px); + font-weight: normal; + margin-block-start: 0px; + margin-block-end: 0px; letter-spacing: -0.012em; line-height: 32px; display: block; From 01fe5dd2f7c5f845cf6132b457ac07bb3df14a80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Fri, 30 Oct 2020 14:48:39 +0100 Subject: [PATCH 226/242] Make sure rebuilt cards show up in panel views (#7535) --- src/panels/lovelace/views/hui-panel-view.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/panels/lovelace/views/hui-panel-view.ts b/src/panels/lovelace/views/hui-panel-view.ts index 2b9c5ae1e0..e4d34a9831 100644 --- a/src/panels/lovelace/views/hui-panel-view.ts +++ b/src/panels/lovelace/views/hui-panel-view.ts @@ -52,6 +52,10 @@ export class PanelView extends LitElement implements LovelaceViewElement { ); } + if (changedProperties.has("cards")) { + this._createCard(); + } + if (!changedProperties.has("lovelace")) { return; } From facb3266c6c84d0da7a2d4df9052acdf8754af9d Mon Sep 17 00:00:00 2001 From: Zack Barett Date: Fri, 30 Oct 2020 08:55:30 -0500 Subject: [PATCH 227/242] Media Browser: Fix error handling (#7538) --- .../media-player/ha-media-player-browse.ts | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/components/media-player/ha-media-player-browse.ts b/src/components/media-player/ha-media-player-browse.ts index 8c17267fc4..93a5ca25e4 100644 --- a/src/components/media-player/ha-media-player-browse.ts +++ b/src/components/media-player/ha-media-player-browse.ts @@ -540,17 +540,20 @@ export class HaMediaPlayerBrowse extends LitElement { mediaContentType?: string ): Promise { this._loading = true; - const itemData = - this.entityId !== BROWSER_PLAYER - ? await browseMediaPlayer( - this.hass, - this.entityId, - mediaContentId, - mediaContentType - ) - : await browseLocalMediaPlayer(this.hass, mediaContentId); - - this._loading = false; + let itemData: any; + try { + itemData = + this.entityId !== BROWSER_PLAYER + ? await browseMediaPlayer( + this.hass, + this.entityId, + mediaContentId, + mediaContentType + ) + : await browseLocalMediaPlayer(this.hass, mediaContentId); + } finally { + this._loading = false; + } return itemData; } From 3dedbc545718b909c2765cb2e852b195a228e04e Mon Sep 17 00:00:00 2001 From: Rob McCann Date: Fri, 30 Oct 2020 14:36:52 +0000 Subject: [PATCH 228/242] Remove minification from translations to reduce build time by 1.5mins (#7552) --- build-scripts/gulp/translations.js | 2 - package.json | 1 - yarn.lock | 71 +----------------------------- 3 files changed, 1 insertion(+), 73 deletions(-) diff --git a/build-scripts/gulp/translations.js b/build-scripts/gulp/translations.js index 19d329a7e0..e357d38edf 100755 --- a/build-scripts/gulp/translations.js +++ b/build-scripts/gulp/translations.js @@ -7,7 +7,6 @@ const gulp = require("gulp"); const fs = require("fs"); const foreach = require("gulp-foreach"); const merge = require("gulp-merge-json"); -const minify = require("gulp-jsonminify"); const rename = require("gulp-rename"); const transform = require("gulp-json-transform"); const { mapFiles } = require("../util"); @@ -301,7 +300,6 @@ gulp.task("build-flattened-translations", function () { return flatten(data); }) ) - .pipe(minify()) .pipe( rename((filePath) => { if (filePath.dirname === "core") { diff --git a/package.json b/package.json index 483b6ea952..7fc0f96c56 100644 --- a/package.json +++ b/package.json @@ -177,7 +177,6 @@ "gulp": "^4.0.0", "gulp-foreach": "^0.1.0", "gulp-json-transform": "^0.4.6", - "gulp-jsonminify": "^1.1.0", "gulp-merge-json": "^1.3.1", "gulp-rename": "^2.0.0", "gulp-zopfli-green": "^3.0.1", diff --git a/yarn.lock b/yarn.lock index 7133eda793..128ab6a8a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3921,13 +3921,6 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-cyan@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" - integrity sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM= - dependencies: - ansi-wrap "0.1.0" - ansi-escapes@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -3952,13 +3945,6 @@ ansi-html@0.0.7: resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= -ansi-red@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" - integrity sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw= - dependencies: - ansi-wrap "0.1.0" - ansi-regex@^0.2.0, ansi-regex@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" @@ -4102,14 +4088,6 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -arr-diff@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" - integrity sha1-aHwydYFjWI/vfeezb6vklesaOZo= - dependencies: - arr-flatten "^1.0.1" - array-slice "^0.2.3" - arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -4141,11 +4119,6 @@ arr-map@^2.0.0, arr-map@^2.0.2: dependencies: make-iterator "^1.0.0" -arr-union@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" - integrity sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= - arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" @@ -4224,11 +4197,6 @@ array-reduce@~0.0.0: resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= -array-slice@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" - integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU= - array-slice@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" @@ -6563,13 +6531,6 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" -extend-shallow@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" - integrity sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= - dependencies: - kind-of "^1.1.0" - extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -7383,15 +7344,6 @@ gulp-json-transform@^0.4.6: through2 "^2.0.3" vinyl "^2.1.0" -gulp-jsonminify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/gulp-jsonminify/-/gulp-jsonminify-1.1.0.tgz#3b3c787f252ab42bbd7f355c7629665357e88d1a" - integrity sha512-nkqH5aRajfCGD8HB2yN+QSEQG0SMEpS7UyOp3HS966Og4DqUX0y8sPF5SU8uSsGLLLXbnHwyHbDkxauYO/pSpQ== - dependencies: - jsonminify "~0.2.3" - plugin-error "^0.1.2" - through2 "~0.6.5" - gulp-merge-json@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/gulp-merge-json/-/gulp-merge-json-1.3.1.tgz#38a8f69c18598085a4b33a08f4074406451e9f2a" @@ -8448,11 +8400,6 @@ jsonify@~0.0.0: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= -jsonminify@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/jsonminify/-/jsonminify-0.2.3.tgz#4b842c8a3fe5d6aa48b2f8f95a1cf9a80c019d8e" - integrity sha1-S4Qsij/l1qpIsvj5Whz5qAwBnY4= - just-debounce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea" @@ -8468,11 +8415,6 @@ killable@^1.0.1: resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== -kind-of@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" - integrity sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ= - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -10347,17 +10289,6 @@ please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: dependencies: semver-compare "^1.0.0" -plugin-error@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" - integrity sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4= - dependencies: - ansi-cyan "^0.1.1" - ansi-red "^0.1.1" - arr-diff "^1.0.1" - arr-union "^2.0.1" - extend-shallow "^1.1.2" - plugin-error@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" @@ -12190,7 +12121,7 @@ through2@^3.0.0: dependencies: readable-stream "2 || 3" -through2@~0.6.3, through2@~0.6.5: +through2@~0.6.3: version "0.6.5" resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg= From 1d9779d47cbdae10170d8296a40c87e326e1bb48 Mon Sep 17 00:00:00 2001 From: Zack Barett Date: Fri, 30 Oct 2020 11:28:19 -0500 Subject: [PATCH 229/242] Calendar Panel: Persist Calendars in Local Storage (#7540) --- src/panels/calendar/ha-panel-calendar.ts | 61 +++++++++++++----------- src/types.ts | 5 -- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/src/panels/calendar/ha-panel-calendar.ts b/src/panels/calendar/ha-panel-calendar.ts index a81f8622fb..6c26de4580 100644 --- a/src/panels/calendar/ha-panel-calendar.ts +++ b/src/panels/calendar/ha-panel-calendar.ts @@ -14,6 +14,7 @@ import { TemplateResult, } from "lit-element"; import { styleMap } from "lit-html/directives/style-map"; +import { LocalStorage } from "../../common/decorators/local-storage"; import { HASSDomEvent } from "../../common/dom/fire_event"; import "../../components/ha-card"; import "../../components/ha-menu-button"; @@ -25,7 +26,6 @@ import type { CalendarEvent, CalendarViewChanged, HomeAssistant, - SelectedCalendar, } from "../../types"; import "./ha-full-calendar"; @@ -36,20 +36,20 @@ class PanelCalendar extends LitElement { @property({ type: Boolean, reflect: true }) public narrow!: boolean; - @internalProperty() private _calendars: SelectedCalendar[] = []; + @internalProperty() private _calendars: Calendar[] = []; @internalProperty() private _events: CalendarEvent[] = []; + @LocalStorage("deSelectedCalendars", true) + private _deSelectedCalendars: string[] = []; + private _start?: Date; private _end?: Date; protected firstUpdated(changedProps: PropertyValues): void { super.firstUpdated(changedProps); - this._calendars = getCalendars(this.hass).map((calendar) => ({ - selected: true, - calendar, - })); + this._calendars = getCalendars(this.hass); } protected render(): TemplateResult { @@ -75,19 +75,22 @@ class PanelCalendar extends LitElement {
${this._calendars.map( (selCal) => - html`
- - - -
` + html` +
+ + + +
+ ` )}
selCal.selected) - .map((cal) => cal.calendar); + .filter((selCal) => !this._deSelectedCalendars.includes(selCal.entity_id)) + .map((cal) => cal); } private async _fetchEvents( @@ -121,24 +124,28 @@ class PanelCalendar extends LitElement { private async _handleToggle(ev): Promise { const results = this._calendars.map(async (cal) => { - if (ev.target.value !== cal.calendar.entity_id) { + if (ev.target.value !== cal.entity_id) { return cal; } const checked = ev.target.checked; if (checked) { - const events = await this._fetchEvents(this._start!, this._end!, [ - cal.calendar, - ]); + const events = await this._fetchEvents(this._start!, this._end!, [cal]); this._events = [...this._events, ...events]; + this._deSelectedCalendars = this._deSelectedCalendars.filter( + (deCal) => deCal !== cal.entity_id + ); } else { this._events = this._events.filter( - (event) => event.calendar !== cal.calendar.entity_id + (event) => event.calendar !== cal.entity_id ); + this._deSelectedCalendars = [ + ...this._deSelectedCalendars, + cal.entity_id, + ]; } - cal.selected = checked; return cal; }); diff --git a/src/types.ts b/src/types.ts index 5f302d4895..08f3b4625f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -127,11 +127,6 @@ export interface Calendar { backgroundColor?: string; } -export interface SelectedCalendar { - selected: boolean; - calendar: Calendar; -} - export interface CalendarEvent { summary: string; title: string; From 14db37459f18be99f70a371d55af2f5149c92133 Mon Sep 17 00:00:00 2001 From: Josh McCarty Date: Fri, 30 Oct 2020 14:58:52 -0700 Subject: [PATCH 230/242] Formats number state with selected language in compute_state_display (#7516) --- src/common/entity/compute_state_display.ts | 5 ++++- src/common/string/number-format.ts | 22 +++++++++++++++++++ .../common/entity/compute_state_display.ts | 14 ++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/common/string/number-format.ts diff --git a/src/common/entity/compute_state_display.ts b/src/common/entity/compute_state_display.ts index 2a437901ea..d588cd1688 100644 --- a/src/common/entity/compute_state_display.ts +++ b/src/common/entity/compute_state_display.ts @@ -5,6 +5,7 @@ import { formatDateTime } from "../datetime/format_date_time"; import { formatTime } from "../datetime/format_time"; import { LocalizeFunc } from "../translations/localize"; import { computeStateDomain } from "./compute_state_domain"; +import { numberFormat } from "../string/number-format"; export const computeStateDisplay = ( localize: LocalizeFunc, @@ -19,7 +20,9 @@ export const computeStateDisplay = ( } if (stateObj.attributes.unit_of_measurement) { - return `${compareState} ${stateObj.attributes.unit_of_measurement}`; + return `${numberFormat(compareState, language)} ${ + stateObj.attributes.unit_of_measurement + }`; } const domain = computeStateDomain(stateObj); diff --git a/src/common/string/number-format.ts b/src/common/string/number-format.ts new file mode 100644 index 0000000000..39d20e47a5 --- /dev/null +++ b/src/common/string/number-format.ts @@ -0,0 +1,22 @@ +/** + * Formats a number based on the specified language with thousands separator(s) and decimal character for better legibility. + * + * @param num The number to format + * @param language The language to use when formatting the number + */ +export const numberFormat = ( + num: string | number, + language: string +): string => { + // Polyfill for Number.isNaN, which is more reliable that the global isNaN() + Number.isNaN = + Number.isNaN || + function isNaN(input) { + return typeof input === "number" && isNaN(input); + }; + + if (!Number.isNaN(Number(num)) && Intl) { + return new Intl.NumberFormat(language).format(Number(num)); + } + return num.toString(); +}; diff --git a/test-mocha/common/entity/compute_state_display.ts b/test-mocha/common/entity/compute_state_display.ts index e8663c5a12..b4822774f4 100644 --- a/test-mocha/common/entity/compute_state_display.ts +++ b/test-mocha/common/entity/compute_state_display.ts @@ -64,6 +64,20 @@ describe("computeStateDisplay", () => { assert.strictEqual(computeStateDisplay(localize, stateObj, "en"), "123 m"); }); + it("Localizes and formats numeric sensor value with units", () => { + const stateObj: any = { + entity_id: "sensor.test", + state: "1234.5", + attributes: { + unit_of_measurement: "m", + }, + }; + assert.strictEqual( + computeStateDisplay(localize, stateObj, "en"), + "1,234.5 m" + ); + }); + it("Localizes unknown sensor value with units", () => { const altLocalize = (message, ...args) => { if (message === "state.sensor.unknown") { From e555b24f50d636477f8ca84b24394475b27d7525 Mon Sep 17 00:00:00 2001 From: Zack Barett Date: Fri, 30 Oct 2020 17:03:02 -0500 Subject: [PATCH 231/242] Calendar: Adds an Update Size and Makes list view start today and adds in local for first day of week (#7541) --- src/panels/calendar/ha-full-calendar.ts | 49 +++++++++++++++++-- .../lovelace/cards/hui-calendar-card.ts | 10 +++- src/types.ts | 2 +- 3 files changed, 55 insertions(+), 6 deletions(-) diff --git a/src/panels/calendar/ha-full-calendar.ts b/src/panels/calendar/ha-full-calendar.ts index 0a4a1039cd..019642fcbc 100644 --- a/src/panels/calendar/ha-full-calendar.ts +++ b/src/panels/calendar/ha-full-calendar.ts @@ -2,6 +2,7 @@ import fullcalendarStyle from "@fullcalendar/common/main.css"; import type { CalendarOptions } from "@fullcalendar/core"; import { Calendar } from "@fullcalendar/core"; +import allLocales from "@fullcalendar/core/locales-all"; import dayGridPlugin from "@fullcalendar/daygrid"; // @ts-ignore import daygridStyle from "@fullcalendar/daygrid/main.css"; @@ -44,6 +45,15 @@ declare global { } } +const getListWeekRange = (currentDate: Date): { start: Date; end: Date } => { + const startDate = new Date(currentDate.valueOf()); + const endDate = new Date(currentDate.valueOf()); + + endDate.setDate(endDate.getDate() + 7); + + return { start: startDate, end: endDate }; +}; + const defaultFullCalendarConfig: CalendarOptions = { headerToolbar: false, plugins: [dayGridPlugin, listPlugin, interactionPlugin], @@ -51,16 +61,22 @@ const defaultFullCalendarConfig: CalendarOptions = { dayMaxEventRows: true, height: "parent", eventDisplay: "list-item", + locales: allLocales, + views: { + list: { + visibleRange: getListWeekRange, + }, + }, }; const viewButtons: ToggleButton[] = [ { label: "Month View", value: "dayGridMonth", iconPath: mdiViewModule }, { label: "Week View", value: "dayGridWeek", iconPath: mdiViewWeek }, { label: "Day View", value: "dayGridDay", iconPath: mdiViewDay }, - { label: "List View", value: "listWeek", iconPath: mdiViewAgenda }, + { label: "List View", value: "list", iconPath: mdiViewAgenda }, ]; -class HAFullCalendar extends LitElement { +export class HAFullCalendar extends LitElement { public hass!: HomeAssistant; @property({ type: Boolean, reflect: true }) public narrow = false; @@ -79,6 +95,10 @@ class HAFullCalendar extends LitElement { @internalProperty() private _activeView?: FullCalendarView; + public updateSize(): void { + this.calendar?.updateSize(); + } + protected render(): TemplateResult { const viewToggleButtons = this._viewToggleButtons(this.views); @@ -186,6 +206,12 @@ class HAFullCalendar extends LitElement { this.calendar!.changeView(this._activeView); this._fireViewChanged(); } + + const oldHass = changedProps.get("hass") as HomeAssistant; + + if (oldHass && oldHass.language !== this.hass.language) { + this.calendar.setOption("locale", this.hass.language); + } } protected firstUpdated(): void { @@ -243,7 +269,7 @@ class HAFullCalendar extends LitElement { this._fireViewChanged(); } - private _handleView(ev): void { + private _handleView(ev: CustomEvent): void { this._activeView = ev.detail.value; this.calendar!.changeView(this._activeView!); this._fireViewChanged(); @@ -496,6 +522,23 @@ class HAFullCalendar extends LitElement { :host([narrow]) .fc-dayGridMonth-view .fc-scrollgrid-sync-table { overflow: hidden; } + + .fc-scroller::-webkit-scrollbar { + width: 0.4rem; + height: 0.4rem; + } + + .fc-scroller::-webkit-scrollbar-thumb { + -webkit-border-radius: 4px; + border-radius: 4px; + background: var(--scrollbar-thumb-color); + } + + .fc-scroller { + overflow-y: auto; + scrollbar-color: var(--scrollbar-thumb-color) transparent; + scrollbar-width: thin; + } `, ]; } diff --git a/src/panels/lovelace/cards/hui-calendar-card.ts b/src/panels/lovelace/cards/hui-calendar-card.ts index 9e373f2f19..1e4fbd44d9 100644 --- a/src/panels/lovelace/cards/hui-calendar-card.ts +++ b/src/panels/lovelace/cards/hui-calendar-card.ts @@ -7,6 +7,7 @@ import { LitElement, property, PropertyValues, + query, TemplateResult, } from "lit-element"; import { HA_COLOR_PALETTE } from "../../../common/const"; @@ -24,6 +25,7 @@ import type { HomeAssistant, } from "../../../types"; import "../../calendar/ha-full-calendar"; +import type { HAFullCalendar } from "../../calendar/ha-full-calendar"; import { findEntities } from "../common/find-entites"; import { installResizeObserver } from "../common/install-resize-observer"; import "../components/hui-warning"; @@ -71,6 +73,8 @@ export class HuiCalendarCard extends LitElement implements LovelaceCard { @internalProperty() private _veryNarrow = false; + @query("ha-full-calendar", true) private _calendar?: HAFullCalendar; + private _startDate?: Date; private _endDate?: Date; @@ -121,8 +125,8 @@ export class HuiCalendarCard extends LitElement implements LovelaceCard { } const views: FullCalendarView[] = this._veryNarrow - ? ["listWeek"] - : ["listWeek", "dayGridMonth", "dayGridDay"]; + ? ["list"] + : ["list", "dayGridMonth", "dayGridDay"]; return html` @@ -186,6 +190,8 @@ export class HuiCalendarCard extends LitElement implements LovelaceCard { } this._narrow = card.offsetWidth < 870; this._veryNarrow = card.offsetWidth < 350; + + this._calendar?.updateSize(); } private async _attachObserver(): Promise { diff --git a/src/types.ts b/src/types.ts index 08f3b4625f..8911fac720 100644 --- a/src/types.ts +++ b/src/types.ts @@ -148,7 +148,7 @@ export type FullCalendarView = | "dayGridMonth" | "dayGridWeek" | "dayGridDay" - | "listWeek"; + | "list"; export interface ToggleButton { label: string; From 5bfd25c8c6360904ba46491d1b8e6afbf6e42024 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Fri, 30 Oct 2020 17:04:13 -0500 Subject: [PATCH 232/242] Convert ha-climate-state to TypeScript/LitElement (#7544) Co-authored-by: Zack Barett --- src/components/ha-climate-state.js | 131 --------------------------- src/components/ha-climate-state.ts | 139 +++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+), 131 deletions(-) delete mode 100644 src/components/ha-climate-state.js create mode 100644 src/components/ha-climate-state.ts diff --git a/src/components/ha-climate-state.js b/src/components/ha-climate-state.js deleted file mode 100644 index eb961cce4c..0000000000 --- a/src/components/ha-climate-state.js +++ /dev/null @@ -1,131 +0,0 @@ -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import { CLIMATE_PRESET_NONE } from "../data/climate"; -import LocalizeMixin from "../mixins/localize-mixin"; - -/* - * @appliesMixin LocalizeMixin - */ -class HaClimateState extends LocalizeMixin(PolymerElement) { - static get template() { - return html` - - -
- -
[[computeTarget(hass, stateObj)]]
-
- - - `; - } - - static get properties() { - return { - hass: Object, - stateObj: Object, - currentStatus: { - type: String, - computed: "computeCurrentStatus(hass, stateObj)", - }, - }; - } - - computeCurrentStatus(hass, stateObj) { - if (!hass || !stateObj) return null; - if (stateObj.attributes.current_temperature != null) { - return `${stateObj.attributes.current_temperature} ${hass.config.unit_system.temperature}`; - } - if (stateObj.attributes.current_humidity != null) { - return `${stateObj.attributes.current_humidity} %`; - } - return null; - } - - computeTarget(hass, stateObj) { - if (!hass || !stateObj) return null; - // We're using "!= null" on purpose so that we match both null and undefined. - if ( - stateObj.attributes.target_temp_low != null && - stateObj.attributes.target_temp_high != null - ) { - return `${stateObj.attributes.target_temp_low}-${stateObj.attributes.target_temp_high} ${hass.config.unit_system.temperature}`; - } - if (stateObj.attributes.temperature != null) { - return `${stateObj.attributes.temperature} ${hass.config.unit_system.temperature}`; - } - if ( - stateObj.attributes.target_humidity_low != null && - stateObj.attributes.target_humidity_high != null - ) { - return `${stateObj.attributes.target_humidity_low}-${stateObj.attributes.target_humidity_high}%`; - } - if (stateObj.attributes.humidity != null) { - return `${stateObj.attributes.humidity} %`; - } - - return ""; - } - - _hasKnownState(state) { - return state !== "unknown"; - } - - _localizeState(localize, stateObj) { - const stateString = localize(`component.climate.state._.${stateObj.state}`); - return stateObj.attributes.hvac_action - ? `${localize( - `state_attributes.climate.hvac_action.${stateObj.attributes.hvac_action}` - )} (${stateString})` - : stateString; - } - - _localizePreset(localize, preset) { - return localize(`state_attributes.climate.preset_mode.${preset}`) || preset; - } - - _renderPreset(attributes) { - return ( - attributes.preset_mode && attributes.preset_mode !== CLIMATE_PRESET_NONE - ); - } -} -customElements.define("ha-climate-state", HaClimateState); diff --git a/src/components/ha-climate-state.ts b/src/components/ha-climate-state.ts new file mode 100644 index 0000000000..39ece5ee43 --- /dev/null +++ b/src/components/ha-climate-state.ts @@ -0,0 +1,139 @@ +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { HassEntity } from "home-assistant-js-websocket"; + +import { CLIMATE_PRESET_NONE } from "../data/climate"; +import type { HomeAssistant } from "../types"; + +@customElement("ha-climate-state") +class HaClimateState extends LitElement { + @property({ attribute: false }) public hass!: HomeAssistant; + + @property({ attribute: false }) public stateObj!: HassEntity; + + protected render(): TemplateResult { + const currentStatus = this._computeCurrentStatus(); + + return html`
+ ${this.stateObj.state !== "unknown" + ? html` + ${this._localizeState()} + ${this.stateObj.attributes.preset_mode && + this.stateObj.attributes.preset_mode !== CLIMATE_PRESET_NONE + ? html`- + ${this.hass.localize( + `state_attributes.climate.preset_mode.${this.stateObj.attributes.preset_mode}` + ) || this.stateObj.attributes.preset_mode}` + : ""} + ` + : ""} +
${this._computeTarget()}
+
+ + ${currentStatus + ? html`
+ ${this.hass.localize("ui.card.climate.currently")}: +
${currentStatus}
+
` + : ""}`; + } + + private _computeCurrentStatus(): string | undefined { + if (!this.hass || !this.stateObj) { + return undefined; + } + + if (this.stateObj.attributes.current_temperature != null) { + return `${this.stateObj.attributes.current_temperature} ${this.hass.config.unit_system.temperature}`; + } + + if (this.stateObj.attributes.current_humidity != null) { + return `${this.stateObj.attributes.current_humidity} %`; + } + + return undefined; + } + + private _computeTarget(): string { + if (!this.hass || !this.stateObj) { + return ""; + } + + if ( + this.stateObj.attributes.target_temp_low != null && + this.stateObj.attributes.target_temp_high != null + ) { + return `${this.stateObj.attributes.target_temp_low}-${this.stateObj.attributes.target_temp_high} ${this.hass.config.unit_system.temperature}`; + } + + if (this.stateObj.attributes.temperature != null) { + return `${this.stateObj.attributes.temperature} ${this.hass.config.unit_system.temperature}`; + } + if ( + this.stateObj.attributes.target_humidity_low != null && + this.stateObj.attributes.target_humidity_high != null + ) { + return `${this.stateObj.attributes.target_humidity_low}-${this.stateObj.attributes.target_humidity_high}%`; + } + + if (this.stateObj.attributes.humidity != null) { + return `${this.stateObj.attributes.humidity} %`; + } + + return ""; + } + + private _localizeState(): string { + const stateString = this.hass.localize( + `component.climate.state._.${this.stateObj.state}` + ); + + return this.stateObj.attributes.hvac_action + ? `${this.hass.localize( + `state_attributes.climate.hvac_action.${this.stateObj.attributes.hvac_action}` + )} (${stateString})` + : stateString; + } + + static get styles(): CSSResult { + return css` + :host { + display: flex; + flex-direction: column; + justify-content: center; + white-space: nowrap; + } + + .target { + color: var(--primary-text-color); + } + + .current { + color: var(--secondary-text-color); + } + + .state-label { + font-weight: bold; + text-transform: capitalize; + } + + .unit { + display: inline-block; + direction: ltr; + } + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-climate-state": HaClimateState; + } +} From 89e5953e89f192788edebfd83f8c00a87ed19513 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Sat, 31 Oct 2020 00:33:15 +0000 Subject: [PATCH 233/242] [ci skip] Translation update --- translations/frontend/ca.json | 5 +- translations/frontend/cs.json | 1 + translations/frontend/es.json | 1 + translations/frontend/et.json | 29 +-- translations/frontend/it.json | 9 +- translations/frontend/ja.json | 20 +- translations/frontend/nb.json | 3 +- translations/frontend/pl.json | 25 +- translations/frontend/ru.json | 1 + translations/frontend/sl.json | 365 ++++++++++++++++++++++------- translations/frontend/uk.json | 43 +++- translations/frontend/zh-Hans.json | 1 + translations/frontend/zh-Hant.json | 3 +- 13 files changed, 380 insertions(+), 126 deletions(-) diff --git a/translations/frontend/ca.json b/translations/frontend/ca.json index dd246f05aa..dd83cc294e 100644 --- a/translations/frontend/ca.json +++ b/translations/frontend/ca.json @@ -798,6 +798,7 @@ "dismiss": "Desestimar el diàleg", "edit": "Edita entitat", "history": "Historial", + "last_changed": "Darrera canvi", "last_updated": "Última actualització", "person": { "create_zone": "Crea una zona a partir de la ubicació actual" @@ -1637,7 +1638,7 @@ "button": "Elimina seleccionada/es", "confirm_partly_text": "Només pots eliminar {removable} de les {selected} entitats seleccionades. Les entitats només es poden eliminar quan la integració ja no les està proporcionant.\nA vegades pot ser que hagis de reiniciar Home Assistant per poder eliminar les entitats d'una antiga integració eliminada. Segur que vols eliminar les entitats?", "confirm_partly_title": "Només es poden eliminar {number} entitats seleccionades.", - "confirm_text": "Les hauries d'eliminar de la configuració Lovelace i de les automatitzacions si contenen aquestes entitats.", + "confirm_text": "Hauries d'eliminar aquestes entitats de les configuracions de Lovelace i de les automatitzacions que les continguin.", "confirm_title": "Vols eliminar {number} entitat/s?" }, "search": "Cerca entitats", @@ -1731,7 +1732,7 @@ "no_devices": "Aquesta integració no té dispositius.", "options": "Opcions", "reload": "Torna a carregar", - "reload_confirm": "La integració s'ha tornar a carregar", + "reload_confirm": "La integració s'ha tornat a carregar", "reload_restart_confirm": "Reinicia Home Assistant per acabar de carregar aquesta integració", "rename": "Canvia el nom", "restart_confirm": "Reinicia Home Assistant per acabar d'eliminar aquesta integració", diff --git a/translations/frontend/cs.json b/translations/frontend/cs.json index ce70af5133..51586e31f7 100644 --- a/translations/frontend/cs.json +++ b/translations/frontend/cs.json @@ -798,6 +798,7 @@ "dismiss": "Zavřít dialog", "edit": "Upravit entitu", "history": "Historie", + "last_changed": "Naposledy změněno", "last_updated": "Poslední aktualizace", "person": { "create_zone": "Vytvořit zónu z aktuálního umístění" diff --git a/translations/frontend/es.json b/translations/frontend/es.json index 3f1d4c7959..a40088b3e6 100644 --- a/translations/frontend/es.json +++ b/translations/frontend/es.json @@ -798,6 +798,7 @@ "dismiss": "Descartar diálogo", "edit": "Editar entidad", "history": "Historial", + "last_changed": "Último cambio", "last_updated": "Última actualización", "person": { "create_zone": "Crear zona a partir de la ubicación actual" diff --git a/translations/frontend/et.json b/translations/frontend/et.json index 10eaefce62..9fcce1c30b 100644 --- a/translations/frontend/et.json +++ b/translations/frontend/et.json @@ -669,28 +669,28 @@ "relative_time": { "duration": { "day": "{count} {count, plural,\n one {päev}\n other {päeva}\n}", - "hour": "{count} {count, plural,\n one {tund}\n other {tunni}\n}", + "hour": "{count} {count, plural,\n one {tund}\n other {tundi}\n}", "minute": "{count} {count, plural,\n one {minut}\n other {minutit}\n}", "second": "{count} {count, plural,\n one {sekund}\n other {sekundit}\n}", "week": "{count} {count, plural,\n one {nädal}\n other {nädalat}\n}" }, "future": "{time} pärast", "future_duration": { - "day": "{count} {count, plural,\n one {päev}\n other {päeva}\n} pärast", - "hour": "{count} {count, plural,\n one {tund}\n other {tunni}\n} pärast", - "minute": "{count} {count, plural,\n one {minut}\n other {minutit}\n} pärast", - "second": "{count} {count, plural,\n one {sekund}\n other {sekundi}\n} pärast", - "week": "{count} {count, plural,\n one {nädal}\n other {nädala}\n} pärast" + "day": "{count} {count, plural,\n one {päeva}\n other {päeva}\n} pärast", + "hour": "{count} {count, plural,\n one {tunni}\n other {tunni}\n} pärast", + "minute": "{count} {count, plural,\n one {minuti}\n other {minuti}\n} pärast", + "second": "{count} {count, plural,\n one {sekundi}\n other {sekundi}\n} pärast", + "week": "{count} {count, plural,\n one {nädala}\n other {nädala}\n} pärast" }, "just_now": "Just praegu", "never": "Iial", "past": "{time} tagasi", "past_duration": { - "day": "{count} {count, plural,\n one {päev}\n other {päeva}\n} eest", - "hour": "{count} {count, plural,\n one {tund}\n other {tunni}\n} eest", - "minute": "{count} {count, plural,\n one {minut}\n other {minuti}\n} eest", - "second": "{count} {count, plural,\n one {sekund}\n other {sekundi}\n} eest", - "week": "{count} {count, plural,\n one {nädal}\n other {nädala}\n} eest" + "day": "{count} {count, plural,\n one {päeva}\n other {päeva}\n} eest", + "hour": "{count} {count, plural,\n one {tunni}\n other {tunni}\n} eest", + "minute": "{count} {count, plural,\n one {minuti}\n other {minuti}\n} eest", + "second": "{count} {count, plural,\n one {sekundi}\n other {sekundi}\n} eest", + "week": "{count} {count, plural,\n one {nädala}\n other {nädala}\n} eest" } }, "service-picker": { @@ -798,6 +798,7 @@ "dismiss": "Loobu dialoogist", "edit": "Muuda olemit", "history": "Ajalugu", + "last_changed": "Viimati muudetud", "last_updated": "Viimati uuendatud", "person": { "create_zone": "Loo tsoon praegusest asukohast" @@ -938,7 +939,7 @@ }, "duration": { "day": "{count} {count, plural,\n one {päev}\n other {päeva}\n}", - "hour": "{count} {count, plural,\n one {tund}\n other {tunni}\n}", + "hour": "{count} {count, plural,\n one {tund}\n other {tundi}\n}", "minute": "{count} {count, plural,\n one {minut}\n other {minutit}\n}", "second": "{count} {count, plural,\n one {sekund}\n other {sekundit}\n}", "week": "{count} {count, plural,\n one {nädal}\n other {nädalat}\n}" @@ -1579,7 +1580,7 @@ "device_not_found": "Seadet ei leitud.", "entities": { "add_entities_lovelace": "Lisa Lovelace'i", - "disabled_entities": "{count} {count, plural,\n one {keelatudolem}\n other {keelatudolemit}\n}", + "disabled_entities": "{count} {count, plural,\n one {keelatud olem}\n other {keelatud olemit}\n}", "entities": "Olemid", "hide_disabled": "Peida keelatud", "none": "Sellel seadmel pole olemeid" @@ -1721,7 +1722,7 @@ "device_unavailable": "seade pole saadaval", "devices": "{count} {count, plural,\n one {seade}\n other {seadet}\n}", "documentation": "Vaata dokumentatsiooni", - "entities": "{count} {count, plural,\n one {olemid}\n other{olemit}\n}", + "entities": "{count} {count, plural,\n one {olem}\n other{olemit}\n}", "entity_unavailable": "olem pole saadaval", "firmware": "Püsivara: {version}", "hub": "Ühendatud", diff --git a/translations/frontend/it.json b/translations/frontend/it.json index 07c2e2260b..02a72f379b 100644 --- a/translations/frontend/it.json +++ b/translations/frontend/it.json @@ -577,7 +577,7 @@ "messages": { "became_unavailable": "non è più disponibile", "changed_to_state": "cambiato in {state}", - "cleared_device_class": "cancellato (nessun {device_class} rilevato)", + "cleared_device_class": "sgombro (nessun {device_class} rilevato)", "detected_device_class": "rilevato {device_class}", "rose": "sorto", "set": "impostato", @@ -798,6 +798,7 @@ "dismiss": "Chiudi finestra di dialogo", "edit": "Modifica entità", "history": "Storico", + "last_changed": "Ultima modifica", "last_updated": "Ultimo aggiornamento", "person": { "create_zone": "Crea zona dalla posizione corrente" @@ -873,7 +874,7 @@ "input_select": "Ricarica input a discesa", "input_text": "Ricarica input testuali", "min_max": "Ricarica le entità min/max", - "mqtt": "Ricarica le entità MQTT", + "mqtt": "Ricarica entità mqtt configurate manualmente", "person": "Ricarica le persone", "ping": "Ricarica le entità del sensore binario Ping", "reload": "Ricarica {domain}", @@ -2155,7 +2156,7 @@ "input_text": "Ricarica input testuali", "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": "Ricarica le entità min/max", - "mqtt": "Ricarica le entità MQTT", + "mqtt": "Ricarica entità mqtt configurate manualmente", "person": "Ricarica le persone", "ping": "Ricarica le entità del sensore binario Ping", "reload": "Ricarica {domain}", @@ -3294,7 +3295,7 @@ }, "vibrate": { "description": "Abilitare o disabilitare la vibrazione su questo dispositivo durante il controllo dei dispositivi.", - "header": "Vibrare" + "header": "Vibrazione" } }, "shopping-list": { diff --git a/translations/frontend/ja.json b/translations/frontend/ja.json index 3ab0605d66..6a40ddf9e8 100644 --- a/translations/frontend/ja.json +++ b/translations/frontend/ja.json @@ -391,7 +391,7 @@ "humidifier": { "humidity": "目標湿度", "mode": "モード", - "on_entity": "{名前} オン", + "on_entity": "{name} オン", "target_humidity_entity": "目標湿度" }, "light": { @@ -784,6 +784,7 @@ "dismiss": "ダイアログを閉じる", "edit": "エンティティを編集", "history": "履歴", + "last_changed": "最終変更日", "last_updated": "最終更新", "person": { "create_zone": "現在地からゾーンを作成" @@ -874,6 +875,11 @@ "trend": "トレンドエンティティをリロードします", "universal": "ユニバーサルメディアプレーヤーエンティティをリロードします", "zone": "ゾーンの再読込" + }, + "server_control": { + "perform_action": "{action}サーバー", + "restart": "再起動", + "stop": "停止" } }, "filter_placeholder": "エンティティフィルター" @@ -1984,6 +1990,7 @@ }, "services": { "add_node": "ノードを追加", + "cancel_command": "コマンドのキャンセル", "remove_node": "ノードを削除" } }, @@ -2170,7 +2177,7 @@ }, "tags": { "add_tag": "タグを追加する", - "automation_title": "タグ {名前} がスキャンされます", + "automation_title": "{name}タグのスキャン", "caption": "タグ", "create_automation": "タグを使用したオートメーションの作成", "description": "タグの管理", @@ -3125,7 +3132,7 @@ "core-config": { "button_detect": "検出", "finish": "次", - "intro": "こんにちは {名前}, ホーム アシスタントへようこそ.あなたの家に名前を付けますか?", + "intro": "こんにちは {name}, ホーム アシスタントへようこそ.あなたの家に名前を付けますか?", "intro_location": "どこに住んでいるか知りたいです。 この情報は、他の情報の表示および太陽の位置に関する自動化の設定に役立ちます。 これらの情報がインターネットで外部と共有されることがありません。", "intro_location_detect": "外部サービスに対してワンタイムリクエストを行うことで、この情報を入力することができます。", "location_name": "ホーム アシスタントの名前", @@ -3184,6 +3191,9 @@ "dropdown_label": "ダッシュボード", "header": "ダッシュボード" }, + "enable_shortcuts": { + "header": "キーボード ショートカット" + }, "force_narrow": { "description": "これにより、モバイルエクスペリエンスと同様に、サイドバーがデフォルトで非表示になります。", "header": "サイドバーを常に非表示にする" @@ -3228,6 +3238,10 @@ "header": "多要素認証モジュール" }, "push_notifications": { + "add_device_prompt": { + "input_label": "デバイス名", + "title": "このデバイスは何を呼び出す必要がありますか?" + }, "description": "このデバイスに通知を送信します。", "error_load_platform": "notify.html5を設定", "error_use_https": "Frontend で SSL を有効になっている必要があります。", diff --git a/translations/frontend/nb.json b/translations/frontend/nb.json index 5ca5853f6f..29d01d8cf5 100644 --- a/translations/frontend/nb.json +++ b/translations/frontend/nb.json @@ -798,6 +798,7 @@ "dismiss": "Avvis dialogboksen", "edit": "Redigér entitet", "history": "Historie", + "last_changed": "Sist endret", "last_updated": "Sist oppdatert", "person": { "create_zone": "Opprett sone fra gjeldende plassering" @@ -890,7 +891,7 @@ "zone": "Last inn soner på nytt" }, "server_control": { - "perform_action": "{action} Server", + "perform_action": "{action} server", "restart": "Omstart", "stop": "Stopp" } diff --git a/translations/frontend/pl.json b/translations/frontend/pl.json index 6a0c3bc390..e27851505a 100644 --- a/translations/frontend/pl.json +++ b/translations/frontend/pl.json @@ -576,28 +576,28 @@ "entries_not_found": "Nie znaleziono wpisów w dzienniku.", "messages": { "became_unavailable": "encja stała się niedostępna", - "changed_to_state": "stan encji zmienił się na {state}", - "cleared_device_class": "encja przestała wykrywać", - "detected_device_class": "encja wykryła", + "changed_to_state": "nastąpiła zmiana stanu na {state}", + "cleared_device_class": "brak", + "detected_device_class": "wykryto", "rose": "wzeszło", "set": "zaszło", - "turned_off": "encja została wyłączona", - "turned_on": "encja została włączona", - "was_at_home": "stan encji zmienił się na \"w domu\"", - "was_at_state": "stan encji zmienił się na {state}", - "was_away": "stan encji zmienił się na \"poza domem\"", + "turned_off": "nastąpiło wyłączenie", + "turned_on": "nastąpiło włączenie", + "was_at_home": "nastąpiła zmiana stanu na \"w domu\"", + "was_at_state": "nastąpiła zmiana stanu na {state}", + "was_away": "nastąpiła zmiana stanu na \"poza domem\"", "was_closed": "nastąpiło zamknięcie", "was_connected": "nastąpiło podłączenie", "was_disconnected": "nastąpiło odłączenie", "was_locked": "nastąpiło zamknięcie", - "was_low": "stan encji zmienił się na niski", - "was_normal": "stan encji zmienił się na normalny", + "was_low": "nastąpiła zmiana stanu na niski", + "was_normal": "nastąpiła zmiana stanu na normalny", "was_opened": "nastąpiło otwarcie", "was_plugged_in": "nastąpiło podłączenie", - "was_safe": "encja przestała wykrywać zagrożenie", + "was_safe": "brak zagrożenia", "was_unlocked": "nastąpiło otwarcie", "was_unplugged": "nastąpiło odłączenie", - "was_unsafe": "encja wykryła zagrożenie" + "was_unsafe": "wykryto zagrożenie" } }, "media-browser": { @@ -798,6 +798,7 @@ "dismiss": "Zamknij okno dialogowe", "edit": "Edytuj encję", "history": "Historia", + "last_changed": "Ostatnia zmiana", "last_updated": "Ostatnio zaktualizowano", "person": { "create_zone": "Utwórz strefę z bieżącej lokalizacji" diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index 4f322dd9e5..29b99fc5e9 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -798,6 +798,7 @@ "dismiss": "Закрыть диалог", "edit": "Изменить объект", "history": "История", + "last_changed": "Последнее изменение", "last_updated": "Последнее обновление", "person": { "create_zone": "Создать зону из текущего местоположения" diff --git a/translations/frontend/sl.json b/translations/frontend/sl.json index acac1d917f..e1f2ffde41 100644 --- a/translations/frontend/sl.json +++ b/translations/frontend/sl.json @@ -13,7 +13,7 @@ }, "panel": { "calendar": "Koledar", - "config": "Konfiguracija", + "config": "Nastavitve", "developer_tools": "Orodja za razvijalce", "history": "Zgodovina", "logbook": "Dnevnik", @@ -359,7 +359,7 @@ }, "automation": { "last_triggered": "Nazadnje sprožen", - "trigger": "Izvedi" + "trigger": "Zaženi" }, "camera": { "not_available": "Slika ni na voljo" @@ -419,9 +419,16 @@ "unlock": "Odkleni" }, "media_player": { + "browse_media": "Brskaj po vsebini", + "media_next_track": "Naslednji", + "media_play": "Predvajaj", + "media_play_pause": "Predvajanje / premor", + "media_previous_track": "Prejšnji", "sound_mode": "Zvočni način", "source": "Vir", - "text_to_speak": "Besedilo v govor" + "text_to_speak": "Besedilo v govor", + "turn_off": "Izklopi", + "turn_on": "Vklopi" }, "persistent_notification": { "dismiss": "Opusti" @@ -432,7 +439,7 @@ "script": { "cancel": "Prekliči", "cancel_multiple": "Prekliči {number}", - "execute": "Izvedi" + "execute": "Zaženi" }, "service": { "run": "Poženi" @@ -554,6 +561,54 @@ "loading_history": "Nalagam zgodovino stanj...", "no_history_found": "Ni najdene zgodovine stanj." }, + "logbook": { + "by": "od", + "by_service": "od storitve", + "entries_not_found": "Ni bilo najdenih vnosov v dnevnik.", + "messages": { + "became_unavailable": "postal nedosegljiv", + "changed_to_state": "je spremenil stanje v {state}", + "cleared_device_class": "počiščeno (no {device_class} detected)", + "detected_device_class": "zaznan {device_class}", + "rose": "zrastel", + "set": "nastavljen", + "turned_off": "ugasnjen", + "turned_on": "vključen", + "was_at_home": "je bil/a doma", + "was_away": "je bil odsoten", + "was_closed": "je bil zaprt", + "was_connected": "je bil povezan", + "was_disconnected": "je bil odklopljen", + "was_locked": "je bil zaklenjen", + "was_low": "je bila nizek", + "was_normal": "je bil normalen", + "was_opened": "je bil odprt", + "was_plugged_in": "je bil priključen", + "was_safe": "je bil varen/a", + "was_unlocked": "je bil odklenjen", + "was_unplugged": "je bil izključen", + "was_unsafe": "je bil ogrožen/a" + } + }, + "media-browser": { + "choose-source": "Izberite vir", + "content-type": { + "album": "Album", + "artist": "Ustvarjalec", + "library": "Knjižnica", + "playlist": "Seznam predvajanja", + "server": "Strežnik" + }, + "no_items": "Ni elementov", + "pick": "Izberi", + "pick-media": "Izberi vsebino", + "play": "Predvajaj", + "play-media": "Predvajaj vsebino" + }, + "picture-upload": { + "label": "Slika", + "unsupported_format": "Nepodprta oblika, izberite sliko JPEG, PNG ali GIF." + }, "related-items": { "area": "Območje", "automation": "Del naslednjih avtomatizacij", @@ -574,11 +629,17 @@ "week": "{count} {count, plural,\none {Teden}\nother {Tednov}\n}" }, "future": "Čez {time}", + "just_now": "Pravkar", "never": "Nikoli", "past": "Pred {time}" }, "service-picker": { "service": "Storitev" + }, + "user-picker": { + "add_user": "Dodaj uporabnika", + "no_user": "Brez uporabnika", + "remove_user": "Odstrani uporabnika" } }, "dialogs": { @@ -589,6 +650,7 @@ "update": "Posodobite" }, "domain_toggler": { + "reset_entities": "Ponastavi entitete", "title": "Preklopi domene" }, "entity_registry": { @@ -601,14 +663,14 @@ "enabled_description": "Onemogočeni subjekti ne bodo dodani v Home Assistant-a.", "enabled_label": "Omogoči entiteto", "entity_id": "ID subjekta", - "icon": "Preglasitev ikone", + "icon": "Ikona", "icon_error": "Ikone morajo biti v obliki \"predpona: imeIkone\", na primer \"MDI: Home\"", - "name": "Preglasitev imena", + "name": "Ime", "note": "Opomba: to morda še ne deluje z vsemi integracijami.", "unavailable": "Ta entiteta trenutno ni na voljo.", "update": "Posodobi" }, - "no_unique_id": "Ta entiteta nima edinstvenega ID-ja, zato njenih nastavitev ni mogoče upravljati iz uporabniškega vmesnika.", + "no_unique_id": "Ta entiteta nima enoličnega ID-ja, zato njenih nastavitev ni mogoče upravljati iz uporabniškega vmesnika. Za več podrobnosti glejte {faq_link} .", "related": "Povezano", "settings": "Nastavitve" }, @@ -619,6 +681,13 @@ "ok": "OK" }, "helper_settings": { + "counter": { + "initial": "Začetna vrednost", + "maximum": "Najvišja vrednost", + "minimum": "Najnižja vrednost", + "restore": "Obnovi zadnjo znano vrednost ob naslednjem zagonu Home Assistant", + "step": "Velikost koraka" + }, "generic": { "icon": "Ikona", "name": "Ime" @@ -654,11 +723,22 @@ }, "platform_not_loaded": "Integracija {platform} ni naložena. Prosimo, dodajte ga v svojo konfiguracijo tako, da dodate 'default_config: 'ali' ' {platform} :' '.", "required_error_msg": "To polje je obvezno", + "timer": { + "duration": "Trajanje" + }, "yaml_not_editable": "Nastavitev te entitete ni mogoče urejati iz uporabniškega vmesnika. Od tam se lahko konfigurirajo samo entitete, nastavljene iz uporabniškega vmesnika." }, + "image_cropper": { + "crop": "Izreži" + }, "more_info_control": { + "controls": "Kontrolniki", + "details": "Podrobnosti", "dismiss": "Opusti pogovorno okno", "edit": "Uredi entiteto", + "history": "Zgodovina", + "last_changed": "Zadnja sprememba", + "last_updated": "Zadnja posodobitev", "person": { "create_zone": "Ustvari območje iz trenutne lokacije" }, @@ -714,6 +794,29 @@ "description": "Možnosti so uspešno shranjene." } }, + "quick-bar": { + "commands": { + "reload": { + "automation": "Ponovno naloži avtomatizacije", + "homekit": "Znova naložite HomeKit", + "mqtt": "Ponovno naloži ", + "person": "Ponovno naloži osebe", + "reload": "Ponovno naloži {domain}", + "rpi_gpio": "Ponovno naloži Raspberry Pi GPIO entitete", + "scene": "Ponovno naloži scene", + "script": "Ponovno naloži skripte", + "smtp": "Ponovno naloži smtp strežnike za obvestila.", + "telegram": "Ponovno naloži telegram strežnike za obvestila.", + "zone": "Ponovno naloži območja" + }, + "server_control": { + "perform_action": "{action} strežnik", + "restart": "Ponovno zaženi", + "stop": "Zaustavi" + } + }, + "filter_placeholder": "Filter entitet" + }, "voice_command": { "did_not_hear": "Home Assistant ni slišal ničesar", "error": "Ups, prišlo je do napake", @@ -773,6 +876,7 @@ }, "notification_toast": { "connection_lost": "Povezava prekinjena. Vnovično vzpostavljanje povezave...", + "dismiss": "Opusti", "service_call_failed": "Storitve ni bilo mogoče poklicati {service}.", "started": "Home Assistant se je zagnal!", "starting": "Home Assistant se zaganja, vse ne bo na voljo, dokler se zagon ne konča.", @@ -798,7 +902,7 @@ "confirmation_text": "Vse naprave na tem območju ne bodo dodeljene.", "confirmation_title": "Ali ste prepričani, da želite izbrisati to območje?" }, - "description": "Pregled vseh območij v vašem domu.", + "description": "Upravljanje območij v vašem domu", "editor": { "area_id": "ID območja", "create": "Ustvari", @@ -820,7 +924,7 @@ }, "automation": { "caption": "Avtomatizacije", - "description": "Ustvarite in uredite avtomatizacije", + "description": "Upravljanje avtomatizacij", "editor": { "actions": { "add": "Dodaj akcijo", @@ -828,8 +932,8 @@ "delete_confirm": "Ali ste prepričani, da želite to izbrisati?", "duplicate": "Podvoji", "header": "Akcije", - "introduction": "Akcije so, kaj bo storil Home Assistant, ko se sproži avtomatizacija. \n\n [Več o dejavnostih.] (Https://home-assistant.io/docs/automation/action/)", - "learn_more": "Več o akcijah", + "introduction": "Dejanja so tisto, kar bo Home Assistant izvedel, ko se sproži avtomatizacija.", + "learn_more": "Preberite več o dejanjih", "name": "Akcija", "type_select": "Vrsta ukrepa", "type": { @@ -886,13 +990,16 @@ "label": "Kliči storitev", "service_data": "Podatki storitve" }, + "wait_for_trigger": { + "label": "Počakaj na sprožilec" + }, "wait_template": { "label": "počakajte", "timeout": "Časovna omejitev (neobvezno)", "wait_template": "Čakalna predloga" } }, - "unsupported_action": "Nepodprta akcija: {action}" + "unsupported_action": "Ni podpore za UI za dejanje: {action}" }, "alias": "Ime", "conditions": { @@ -902,7 +1009,7 @@ "duplicate": "Podvoji", "header": "Pogoji", "introduction": "Pogoji so izbirni in bodo preprečili nadaljnjo izvedbo, razen če so izpolnjeni vsi pogoji.", - "learn_more": "Več o pogojih", + "learn_more": "Preberite več o pogojih", "name": "Stanje", "type_select": "Vrsta pogoja", "type": { @@ -950,7 +1057,16 @@ "time": { "after": "Po", "before": "Pred", - "label": "Čas" + "label": "Čas", + "weekdays": { + "fri": "petek", + "mon": "ponedeljek", + "sat": "sobota", + "sun": "nedelja", + "thu": "četrtek", + "tue": "torek", + "wed": "sreda" + } }, "zone": { "entity": "Entitete z lokacijo", @@ -958,15 +1074,16 @@ "zone": "Območje" } }, - "unsupported_condition": "Nepodprti pogoj: {condition}" + "unsupported_condition": "Brez podpore za UI za pogoj: {condition}" }, + "copy_to_clipboard": "Kopiraj v odložišče", "default_name": "Nova avtomatizacija", "description": { "label": "Opis", "placeholder": "Izbirni opis" }, - "edit_ui": "Uredi z uporabniškim vmesnikom", - "edit_yaml": "Uredi z YAML-om", + "edit_ui": "Uredi v uporabniškem vmesniku", + "edit_yaml": "Uredi kot YAML", "enable_disable": "Omogoči / onemogoči avtomatizacijo", "introduction": "Uporabite avtomatizacije za oživitev vašega doma.", "load_error_not_editable": "Urejati je mogoče le avtomatizacije v automations.yaml.", @@ -993,8 +1110,8 @@ "delete_confirm": "Ali ste prepričani, da želite to izbrisati?", "duplicate": "Podvoji", "header": "Sprožilci", - "introduction": "Sprožilci so tisto, kar začne postopek obdelave avtomatizacije pravila. Za isto pravilo je mogoče določiti več sprožilcev. Ko se začne sprožilec, bo Home Assistant potrdil pogoje, če so, in poklical dejanje. \n\n [Več o sprožilcih.] (Https://home-assistant.io/docs/automation/trigger/)", - "learn_more": "Več o sprožilcih", + "introduction": "Sprožilci so tisto, kar začne obdelavo pravila avtomatizacije. Za isto pravilo je mogoče določiti več sprožilcev. Ko se sprožilec sproži, bo Home Assistant preveril morebitne pogoje in izvedel dejanje.", + "learn_more": "Preberite več o sprožilcih", "name": "Sprožilec", "type_select": "Tip sprožilca", "type": { @@ -1008,6 +1125,7 @@ "trigger": "Sprožilec" }, "event": { + "context_user_pick": "Dodaj uporabnika", "event_data": "Podatki o dogodku", "event_type": "Vrsta dogodka", "label": "Dogodek" @@ -1038,6 +1156,7 @@ "value_template": "Vrednostna predloga (neobvezno)" }, "state": { + "attribute": "Atribut (neobvezno)", "for": "Za", "from": "Od", "label": "Stanje", @@ -1050,6 +1169,9 @@ "sunrise": "Sončni vzhod", "sunset": "Sončni zahod" }, + "tag": { + "label": "Značka" + }, "template": { "label": "Predloga", "value_template": "Vrednostna predloga" @@ -1062,7 +1184,8 @@ }, "time": { "at": "Ob", - "label": "Čas" + "label": "Čas", + "type_value": "Fiksni čas" }, "webhook": { "label": "Webhook", @@ -1077,7 +1200,7 @@ "zone": "Območje" } }, - "unsupported_platform": "Nepodprta platforma: {platform}" + "unsupported_platform": "Brez podpore za UI za platformo: {platform}" }, "unsaved_confirm": "Imate neshranjene spremembe. Ste prepričani, da želite zapustiti stran?" }, @@ -1091,7 +1214,7 @@ "name": "Ime" }, "introduction": "Urejevalnik za avtomatizacijo vam omogoča ustvarjanje in urejanje avtomatizacij. Prosimo, da preberete [navodila] (https://home-assistant.io/docs/automation/editor/), da preverite, ali ste pravilno nastavili Home Assistant-a.", - "learn_more": "Več o avtomatizacijah", + "learn_more": "Preberite več o avtomatizacijah", "no_automations": "Ne moremo najti nobene avtomatizacije za urejanje", "only_editable": "Urejajo se lahko samo avtomatizacije, definirane v automations.yaml.", "pick_automation": "Izberite avtomatizacijo za urejanje", @@ -1108,7 +1231,7 @@ "enable_state_reporting": "Omogoči poročanje o stanju", "info": "Z integracijo Alexa za Home Assistant cloud boste lahko nadzirali vse svoje naprave s pomočjo katere koli naprave, ki podpira Alexa.", "info_state_reporting": "Če omogočite poročanje o stanju, bo Home Assistant amazonu poslal vse spremembe stanja izpostavljenih entitet. To vam omogoča, da vedno vidite najnovejša stanja v aplikaciji Alexa.", - "manage_entities": "Upravljajte entitete", + "manage_entities": "Upravljaj entitete", "state_reporting_error": "Stanja poročila ni mogoče {enable_disable}.", "sync_entities": "Sinhroniziranje entitet", "sync_entities_error": "Sinhroniziranje entitet ni uspelo:", @@ -1127,7 +1250,7 @@ "enter_pin_info": "Prosimo vnesite kodo pin za interakcijo z varnostnimi napravami. Varnostne naprave so vrata, garažna vrata in ključavnice. Med interakcijo s takšnimi napravami prek Googlovega pomočnika boste morali povedati / vnesti ta pin.", "info": "Z integracijo Pomočnik Google za Home Assistant cloud boste lahko nadzirali vse svoje naprave s pomočjo katere koli naprave, ki ga podpirajo.", "info_state_reporting": "Če omogočite poročanje o stanju, bo Home Assistant Googlu poslal vse spremembe stanja izpostavljenih entitet. To vam omogoča, da vedno vidite najnovejša stanja v aplikaciji Google.", - "manage_entities": "Upravljajte entitete", + "manage_entities": "Upravljaj entitete", "security_devices": "Varnostne naprave", "sync_entities": "Sinhronizirajte entitete z Googlom", "sync_entities_404_message": "Ni bilo mogoče sinhronizirati vaših entitet z Googlom, prosite Google »Hej Google, sinhroniziraj moje naprave«, da bi sinhroniziral vaše entitete.", @@ -1137,7 +1260,7 @@ "integrations_introduction": "Integracija za Home Assistant Cloud vam omogoča povezovanje s storitvami v oblaku, ne da bi vam bilo treba Home Assistant javno izpostavljati po internetu.", "integrations_introduction2": "Preverite spletno stran za ", "integrations_link_all_features": "vse razpoložljive funkcije", - "manage_account": "Upravljanje računa", + "manage_account": "Upravljaj račun", "nabu_casa_account": "Nabu Casa račun", "not_connected": "Brez povezave", "remote": { @@ -1168,6 +1291,7 @@ "banner": "Urejanje entitet, ki so izpostavljeni prek tega uporabniškega vmesnika, je onemogočeno, ker ste v config.yaml konfigurirali filtre entitet.", "expose": "Izpostavite Alexi", "exposed_entities": "Izpostavljene entitete", + "manage_domains": "Upravljaj z domenami", "not_exposed_entities": "Entitete, ki niso izpostavljene", "title": "Alexa" }, @@ -1207,6 +1331,7 @@ "disable_2FA": "Onemogočite dvofaktorsko preverjanje pristnosti", "expose": "Izpostavite Pomočniku Google", "exposed_entities": "Izpostavljene entitete", + "manage_domains": "Upravljaj z domenami", "not_exposed_entities": "Entitete, ki niso izpostavljene", "sync_to_google": "Sinhroniziranje sprememb z Googlom.", "title": "Pomočnik Google" @@ -1265,7 +1390,7 @@ "section": { "core": { "core_config": { - "edit_requires_storage": "Urejevalnik je onemogočen, ker je konfiguracija shranjena v configuration.yaml.", + "edit_requires_storage": "Urejevalnik je onemogočen, ker so nastavitve shranjene v configuration.yaml.", "elevation": "Nadmorska višina", "elevation_meters": "metrov", "external_url": "Zunanji URL", @@ -1281,7 +1406,7 @@ "unit_system_imperial": "Imperial", "unit_system_metric": "Metrično" }, - "header": "Konfiguracija in nadzor strežnika", + "header": "Nastavitve in nadzor strežnika", "introduction": "Spreminjanje konfiguracije je lahko zapleten proces. Vemo. Ta del bo poskušal narediti vaše življenje malo lažje." } } @@ -1297,7 +1422,7 @@ "different_include": "Mogoče prek domene, globusa ali drugačne vsebovanosti.", "pick_attribute": "Izberite atribut, ki ga želite preglasiti", "picker": { - "entity": "Subjekt", + "entity": "Entiteta", "header": "Prilagoditve", "introduction": "Prilagajanja atributov na entiteti. Dodane/spremenjene prilagoditve začnejo veljati takoj. Odstranjene pa po posodobitvi entitete." }, @@ -1310,23 +1435,30 @@ "devices": { "automation": { "actions": { - "caption": "Ko se nekaj sproži ..." + "caption": "Ko se nekaj sproži ...", + "no_actions": "Brez dejanj", + "unknown_action": "Neznano dejanje" }, "automations": "Avtomatizacije", "conditions": { - "caption": "Naredite nekaj, samo če ..." + "caption": "Naredite nekaj, samo če ...", + "no_conditions": "Brez pogojev", + "unknown_condition": "Neznan pogoj" }, "create": "Ustvarjanje avtomatizacije z napravo", "no_automations": "Ni avtomatizacij", "no_device_automations": "Za to napravo ni na voljo nobenih avtomatizacij.", "triggers": { - "caption": "Naredi nekaj, ko ..." + "caption": "Naredi nekaj, ko ...", + "no_triggers": "Brez sprožilcev", + "unknown_trigger": "Neznan sprožilec" } }, "cant_edit": "Urejate lahko samo elemente, ki so ustvarjeni v uporabniškem vmesniku.", "caption": "Naprave", "confirm_delete": "Ali ste prepričani, da želite odstraniti to napravo?", - "confirm_rename_entity_ids": "Ali želite preimenovati tudi ID entitete vaših entitet?", + "confirm_rename_entity_ids": "Ali želite tudi preimenovati ID-je entitet?", + "confirm_rename_entity_ids_warning": "To ne bo spremenilo nobene konfiguracije (kot so avtomatizacije, skripti, prizori, nadzorne plošče), ki trenutno uporabljajo te entitete! Sami jih boste morali posodobiti, da boste uporabili nove ID-je entitet!", "data_table": { "area": "Območje", "battery": "Baterija", @@ -1338,7 +1470,7 @@ "no_devices": "Brez naprav" }, "delete": "Izbriši", - "description": "Upravljajte povezane naprave", + "description": "Upravljanje povezanih naprav", "device_info": "Informacije o napravi", "device_not_found": "Naprave ni bilo mogoče najti", "entities": { @@ -1368,7 +1500,7 @@ }, "entities": { "caption": "Entitete", - "description": "Pregled vseh znanih entitet.", + "description": "Upravljanje znanih entitet", "picker": { "disable_selected": { "button": "Onemogoči izbrane", @@ -1402,7 +1534,7 @@ "confirm_text": "Če vsebujejo te entitete, bi jih morali odstraniti iz vašega Lovelace config-a in avtomatizacije.", "confirm_title": "Ali želite odstraniti {number} entiteto-i/e?" }, - "search": "Iskanje subjektov", + "search": "Iskanje entitet", "selected": "{številka} izbrana/ih", "status": { "disabled": "Onemogočeno", @@ -1420,7 +1552,7 @@ "header": "Konfiguriraj Home Assistant", "helpers": { "caption": "Pomočniki", - "description": "Elementi, ki lahko pomagajo graditi avtomatizacije.", + "description": "Upravljanje elementov, s katerimi si lahko pomagate pri gradnji avtomatizacij.", "dialog": { "add_helper": "Dodajte pomočnika", "add_platform": "Dodaj {platform}", @@ -1448,7 +1580,7 @@ "built_using": "Zgrajen z uporabo", "caption": "Info", "custom_uis": "Uporabniški vmesniki po meri:", - "description": "Informacije o vaši namestitvi programa Home Assistant", + "description": "Ogled informacij o namestitvi Home Assistant", "developed_by": "Razvija ga kup osupljivih ljudi.", "documentation": "Dokumentacija", "frontend": "frontend-ui", @@ -1471,6 +1603,7 @@ }, "integrations": { "add_integration": "Dodaj integracijo", + "attention": "Potrebna pozornost", "caption": "Integracije", "config_entry": { "area": "V {area}", @@ -1489,6 +1622,9 @@ "no_device": "Entitete brez naprav", "no_devices": "Ta integracija je brez naprav.", "options": "Možnosti", + "reload": "Ponovno naloži", + "reload_confirm": "Integracija je bila ponovno naložena", + "reload_restart_confirm": "Znova zaženite Home Assistant, da dokončate ponovno nalaganje te integracije", "rename": "Preimenujte", "restart_confirm": "Znova zaženite Home Assistant-a, da dokončate odstranitev te integracije", "settings_button": "Uredite nastavitve za {integration}", @@ -1499,7 +1635,7 @@ "config_flow": { "aborted": "Prekinjeno", "close": "Zapri", - "created_config": "Ustvarjena konfiguracija za {name}.", + "created_config": "Ustvarjene nastavitve za {name}.", "dismiss": "Opusti pogovorno okno", "error_saving_area": "Napaka pri shranjevanju območja: {error}", "external_step": { @@ -1513,7 +1649,7 @@ }, "configure": "Konfiguriraj", "configured": "Konfigurirano", - "description": "Upravljajte in postavljajte integracije", + "description": "Upravljanje integracij", "details": "Podrobnosti integracije", "discovered": "Odkrito", "home_assistant_website": "spletne strani Home Assistant", @@ -1537,11 +1673,12 @@ "none_found_detail": "Prilagodite iskalne kriterije.", "note_about_integrations": "Vseh integracij še ni mogoče konfigurirati prek uporabniškega vmesnika.", "note_about_website_reference": "Več jih je na voljo prek", + "reconfigure": "Ponovno nastavite", "rename_dialog": "Uredite ime tega vnosa konfiguracije", "rename_input_label": "Ime vnosa", "search": "Iskanje integracij" }, - "introduction": "Tukaj je mogoče konfigurirati vaše komponente in Home Assistanta. Vsega ni mogoče konfigurirati iz uporabniškega vmesnika (vendar delamo na tem).", + "introduction": "V tem pogledu je mogoče konfigurirati komponente in nastavitve za Home Assistant. Iz uporabniškega vmesnika še ni mogoče konfigurirati vsega, vendar delamo na tem.", "logs": { "caption": "Dnevniki", "clear": "Počisti", @@ -1597,9 +1734,9 @@ "open": "Odpri" } }, - "description": "Konfigurirajte nadzorne plošče Lovelace", + "description": "Upravljanje nadzornih plošč Lovelace", "resources": { - "cant_edit_yaml": "Lovelace uporabljate v načinu YAML, zato ne morete upravljati svojih virov prek uporabniškega vmesnika. Upravljajte jih v config.yaml.", + "cant_edit_yaml": "Lovelace uporabljate v načinu YAML, zato ne morete upravljati svojih virov prek uporabniškega vmesnika. Upravljajte jih v configuration.yaml.", "caption": "Viri", "confirm_delete": "Ali ste prepričani, da želite izbrisati ta vir?", "detail": { @@ -1647,6 +1784,7 @@ "topic": "tema" }, "ozw": { + "button": "Nastavi", "common": { "node_id": "ID vozlišča", "ozw_instance": "OpenZWave primerek", @@ -1657,6 +1795,12 @@ "stage": "Stopnja", "zwave_info": "Z-Wave Informacije" }, + "network": { + "header": "Upravljanje omrežja" + }, + "node_metadata": { + "product_manual": "Priročnik za izdelek" + }, "node_query_stages": { "complete": "Postopek intervjuja je končan", "configuration": "Pridobitev konfiguracijskih vrednosti iz vozlišča", @@ -1671,6 +1815,9 @@ "title": "Osveži podatke o vozlišču", "wakeup_header": "Navodila za bujenje za", "wakeup_instructions_source": "Navodila za prebujanje so pridobljena iz podatkovne zbirke naprav OpenZWave." + }, + "services": { + "cancel_command": "Prekliči ukaz" } }, "person": { @@ -1679,7 +1826,7 @@ "confirm_delete": "Ali ste prepričani, da želite izbrisati to osebo?", "confirm_delete2": "Vse naprave, ki pripadajo tej osebi, bodo postale nedodeljene.", "create_person": "Ustvari osebo", - "description": "Upravljajte osebe, ki jih sledi Home Assistant.", + "description": "Upravljanje oseb, ki jim sledi Home Assistant.", "detail": { "create": "Ustvarite", "delete": "Izbriši", @@ -1696,13 +1843,13 @@ "update": "Posodobite" }, "introduction": "Tu lahko določite vsako osebo (uporabnika) v Home Assistant-a.", - "no_persons_created_yet": "Izgleda, da še niste ustvarili nobene osebe.", + "no_persons_created_yet": "Videti je, da še niste ustvarili nobene osebe.", "note_about_persons_configured_in_yaml": "Opomba: oseb, konfiguriranih prek config.yaml, ni mogoče urejati prek uporabniškega vmesnika." }, "scene": { "activated": "Aktivirana scena {name} .", "caption": "Scene", - "description": "Ustvarjanje in urejanje scen", + "description": "Upravljanje scen", "editor": { "default_name": "Nova scena", "devices": { @@ -1746,7 +1893,7 @@ }, "script": { "caption": "Skripte", - "description": "Ustvarite in uredite skripte", + "description": "Upravljanje skriptov", "editor": { "alias": "Ime", "default_name": "Nova Skripta", @@ -1754,7 +1901,7 @@ "delete_script": "Izbriši skripto", "header": "Skripta: {name}", "icon": "Ikona", - "id": "ID subjekta", + "id": "ID entitete", "id_already_exists": "Ta ID že obstaja", "id_already_exists_save_error": "Te skripte ne morete shraniti, ker ID ni edinstven, izberite drug ID ali ga pustite prazno, da ga samodejno ustvari.", "introduction": "Uporabite skripte za izvajanje zaporedij dejanj.", @@ -1777,7 +1924,7 @@ "sequence_sentence": "Zaporedje dejanj te skripte." }, "picker": { - "add_script": "Dodaj skripto", + "add_script": "Ustvari novo skripto", "edit_script": "Uredi skripto", "header": "Urejevalnik skript", "headers": { @@ -1796,37 +1943,74 @@ "section": { "reloading": { "automation": "Ponovno naloži avtomatizacije", + "command_line": "Znova naložite entitete ukazne vrstice", "core": "Ponovno naloži lokacijo in prilagoditve", - "group": "Ponovno naloži skupine", + "filter": "Znova naložite entitete filtrov", + "group": "Znova naložite skupine, skupine entitete in storitve obveščanja", "heading": "Ponovno nalaganje konfiguracije YAML", + "homekit": "Znova naložite HomeKit", "input_boolean": "Ponovno naloži \"input booleans\"", "input_datetime": "Ponovno naloži vhodne datumske čase", "input_number": "Ponovno naloži vhodne številke", "input_select": "Ponovno naloži izbirne vnose", "input_text": "Ponovno naloži vhodna besedila", - "introduction": "Nekateri deli programa Home Assistant-a se lahko naložijo brez ponovnega zagona. S ponovnim nalaganjem se trenutna konfiguracija YAML zamenja in naloži nova.", + "introduction": "Nekateri deli programa Home Assistant se lahko naložijo brez ponovnega zagona. S ponovnim nalaganjem se trenutna konfiguracija YAML zamenja in naloži nova.", + "mqtt": "Znova naložite ročno konfigurirane entitete mqtt", "person": "Ponovno naloži osebe", + "rest": "Znova entitete rest in storitve obveščanja", "scene": "Ponovno naloži scene", "script": "Ponovno naloži skripte", + "statistics": "Znova naložite statistične entitete", + "template": "Znova naložite entitete predloge", + "universal": "Znova naložite enote univerzalnega predvajalnika", "zone": "Ponovno naloži območja" }, "server_management": { - "confirm_restart": "Ali ste prepričani, da želite znova zagnati Home Assistant-a?", - "confirm_stop": "Ali ste prepričani, da želite ustaviti Home Assistant-a?", + "confirm_restart": "Ali ste prepričani, da želite znova zagnati Home Assistant?", + "confirm_stop": "Ali ste prepričani, da želite za ustaviti Home Assistant?", "heading": "Upravljanje strežnika", - "introduction": "Nadzirajte strežnik Home Assistant ... iz Home Assistant-a", + "introduction": "Nadzirajte strežnik Home Assistant... iz Home Assistant.", "restart": "Ponovni zagon", - "stop": "Ustavi" + "stop": "Zaustavitev" }, "validation": { "check_config": "Preverite konfiguracijo", "heading": "Preverjanje konfiguracije", "introduction": "Potrdite svojo konfiguracijo, če ste nedavno spremenili svojo konfiguracijo in se prepričajte, da je vse veljavno", - "invalid": "Konfiguracija ni veljavna", - "valid": "Konfiguracija veljavna!" + "invalid": "Nastavitve niso veljavne", + "valid": "Nastavitve so veljavne!" } } }, + "tags": { + "add_tag": "Dodaj značko", + "automation_title": "Značka {name} se prebira", + "caption": "Značke", + "create_automation": "Ustvarite avtomatizacijo z značko", + "description": "Upravljanje značk", + "detail": { + "companion_apps": "spremljevalne aplikacije", + "create": "Ustvari", + "create_and_write": "Ustvari in zapiši", + "delete": "Izbriši", + "description": "Opis", + "name": "Ime", + "new_tag": "Nova značka", + "tag_id": "ID značke", + "tag_id_placeholder": "Samodejno ustvarjeno, če ostane prazno", + "update": "Posodobi", + "usage": "Značka lahko sproži avtomatizacijo, koje prebraba. Uporabite lahko značke NFC, QR kode ali katero koli drugo vrsto. Uporabite našo {companion_link} da to značko zapišete v programabilno oznako NFC ali spodaj ustvarite kodo QR." + }, + "edit": "Uredi", + "headers": { + "last_scanned": "Zadnje branje", + "name": "Ime" + }, + "learn_more": "Preberite več o značkah", + "never_scanned": "Nikoli prebrano", + "no_tags": "Brez značk", + "write": "Zapiši" + }, "users": { "add_user": { "caption": "Dodaj uporabnika", @@ -1836,7 +2020,7 @@ "username": "Uporabniško ime" }, "caption": "Uporabniki", - "description": "Upravljajte uporabnike", + "description": "Upravljanje uporabnikov", "editor": { "activate_user": "Aktiviraj uporabnika", "active": "aktiven", @@ -1850,6 +2034,7 @@ "id": "ID", "name": "Ime", "owner": "Lastnik", + "password_changed": "Geslo je bilo uspešno spremenjeno", "system_generated": "Sistemsko generirano", "system_generated_users_not_editable": "Sistemskih uporabnikov ni mogoče posodobiti.", "system_generated_users_not_removable": "Sistemskih uporabnikov ni mogoče odstraniti.", @@ -1863,7 +2048,7 @@ "system": "Sistem" } }, - "users_privileges_note": "Skupine uporabnikov je delo v teku. Uporabnik ne bo mogel upravljati primerka prek uporabniškega vmesnika. Še vedno poteka revidiranje vseh končnih točk API-ja za upravljanje, da zagotovimo pravilno omejevanje dostopa do administratorjev." + "users_privileges_note": "Zmožnosti skupin uporabnikov so delo v teku. Uporabnik ne bo mogel upravljati primerka prek uporabniškega vmesnika. Še vedno poteka revidiranje vseh končnih točk API-ja za upravljanje, da zagotovimo pravilno omejevanje dostopa do administratorjev." }, "zha": { "add_device_page": { @@ -1933,7 +2118,7 @@ "create_group": "Zigbee Home Automation - Ustvari skupino", "create_group_details": "Da ustvarite novo skupino Zigbee vnesite zahtevane podrobnosti.", "creating_group": "Ustvarjanje skupine", - "description": "Ustvarjajte in spreminjajte skupine Zigbee", + "description": "Upravljanje skupin Zigbee", "group_details": "Tu so vse podrobnosti za izbrano skupino Zigbee.", "group_id": "ID skupine", "group_info": "Informacije o skupini", @@ -1981,7 +2166,7 @@ "create": "Ustvari", "delete": "Izbriši", "icon": "Ikona", - "icon_error_msg": "Ikona mora biti v obliki predpona:ime ikone, na primer: mdi:home", + "icon_error_msg": "Ikona mora biti v obliki \"predpona:ime\" ikone, na primer: \"mdi:home\"", "latitude": "Zemljepisna širina", "longitude": "Zemljepisna dolžina", "name": "Ime", @@ -2035,13 +2220,13 @@ }, "node_management": { "add_to_group": "Dodaj v skupino", - "entities": "Subjekti tega vozlišča", - "entity_info": "Podatki o subjektu", + "entities": "Entitete tega vozlišča", + "entity_info": "Podatki o entiteti", "exclude_entity": "Izključite to entiteto iz Home Assistant-a", "group": "Skupina", "header": "Upravljanje Z-Wave vozlišč", "introduction": "Poženite ukaze Z-Wave, ki vplivajo na posamezno vozlišče. Izberite vozlišče in si oglejte seznam razpoložljivih ukazov.", - "max_associations": "Max združenja:", + "max_associations": "Največ združenj:", "node_group_associations": "Združenja skupin vozlišč", "node_protection": "Zaščita vozlišča", "node_to_control": "Vozlišče za nadzor", @@ -2069,7 +2254,7 @@ "heal_node": "Pozdravi Vozlišče", "node_info": "Informacije o vozlišču", "print_node": "Podatki o vozlišču", - "refresh_entity": "Osveži subjekt", + "refresh_entity": "Osveži entiteto", "refresh_node": "Osveži vozlišče", "remove_failed_node": "Odstranite neuspešno vozlišče", "remove_node": "Odstrani vozlišče", @@ -2104,7 +2289,7 @@ "documentation": "Dokumentacija o dogodkih.", "event_fired": "Dogodek {name} zagnan", "fire_event": "Zaženite dogodek", - "listen_to_events": "Poslušajte dogodkom", + "listen_to_events": "Prisluhnite dogodkom", "listening_to": "Poslušanje", "notification_event_fired": "Dogodek {type} uspešno zagnan!", "start_listening": "Začnite poslušati", @@ -2148,7 +2333,11 @@ "description": "Predloge so upodobljene s pomočjo mehanizma za predloge Jinja2 z nekaterimi posebnimi razširitvami Home Assistant.", "editor": "Urejevalnik predlog", "jinja_documentation": "Dokumentacija predloge Jinja2", + "no_listeners": "Ta predloga ne posluša nobenih dogodkov in se ne bo samodejno posodabljala.", + "reset": "Ponastavi na demo predlogo", + "result_type": "Tip rezultata", "template_extensions": "Home Assistant razširitvene predloge", + "time": "Ta predloga se posodobi na začetku vsake minute.", "title": "Predloge", "unknown_error_template": "Neznana napaka upodabljanju predloge" } @@ -2215,7 +2404,7 @@ } }, "changed_toast": { - "message": "Konfiguracija uporabniškega vmesnika Lovelace za to nadzorno ploščo je bila posodobljena, če želite videti spremembe jo morate osvežiti.", + "message": "Nastavitve uporabniškega vmesnika Lovelace za to nadzorno ploščo so bile posodobljene, če želite videti spremembe jo morate osvežiti.", "refresh": "Osveži" }, "editor": { @@ -2246,7 +2435,12 @@ }, "entities": { "description": "Kartica entitet je najpogostejša vrsta kartice. Predmete združuje v sezname.", + "edit_special_row": "Podrobnosti te vrstice si oglejte s klikom na gumb za urejanje", "name": "Subjekti", + "secondary_info_values": { + "last-triggered": "Zadnjič sproženo", + "last-updated": "Zadnja posodobitev" + }, "show_header_toggle": "Pokaži preklop glave?", "toggle": "Preklopi entitete." }, @@ -2255,8 +2449,8 @@ "name": "Filter entitet" }, "entity": { - "description": "Entity kartica vam omogoča hiter pregled stanja vašega subjekta.", - "name": "Subjekt" + "description": "Kartica vam omogoča hiter pregled stanja vaše entitete.", + "name": "Entiteta" }, "gauge": { "description": "Gauge kartica je osnovna kartica, ki omogoča vizualno videnje podatkov senzorjev.", @@ -2398,7 +2592,7 @@ "delete": "Izbriši kartico", "duplicate": "Podvoji kartico", "edit": "Uredi", - "header": "Konfiguracija kartice", + "header": "Nastavitve kartice", "move": "Premakni v pogled", "options": "Več možnosti", "pick_card": "Katero kartico želite dodati?", @@ -2436,9 +2630,9 @@ "raw_editor": "\"Surovi\" urejevalnik konfiguracije" }, "migrate": { - "header": "Konfiguracija Nezdružljiva", + "header": "Nastavitve so nezdružljiva", "migrate": "Selitev konfiguracije", - "para_migrate": "Home Assistant lahko za vas samodejno doda ID na vse vaše kartice in poglede s pritiskom na gumb »Preseli konfiguracijo«.", + "para_migrate": "Home Assistant lahko samodejno doda ID na vse vaše kartice in poglede s pritiskom na gumb »Preseli konfiguracijo«.", "para_no_id": "Ta element nima ID-ja. Prosimo, dodajte ID tega elementa v 'ui-lovelace.yaml'." }, "move_card": { @@ -2446,7 +2640,7 @@ }, "raw_editor": { "confirm_remove_config_text": "Samodejno bomo ustvarili vaše poglede uporabniškega vmesnika Lovelace z vašimi območji in napravami, če odstranite konfiguracijo uporabniškega vmesnika Lovelace.", - "confirm_remove_config_title": "Ali ste prepričani, da želite odstraniti konfiguracijo uporabniškega vmesnika Lovelace? Samodejno bomo ustvarili vaše poglede uporabniškega vmesnika Lovelace z vašimi območji in napravami.", + "confirm_remove_config_title": "Ali ste prepričani, da želite odstraniti konfiguracijo uporabniškega vmesnika Lovelace?", "confirm_unsaved_changes": "Imate neshranjene spremembe, ali ste prepričani, da želite zapreti?", "confirm_unsaved_comments": "Vaša konfiguracija vsebuje komentarje, ki ne bodo shranjeni. Ali želite nadaljevati?", "error_invalid_config": "Vaša konfiguracija ni veljavna: {error}", @@ -2467,7 +2661,7 @@ "para": "To nadzorno ploščo trenutno vzdržuje Home Assistant. Samodejno se posodobi, ko bodo na voljo novi subjekti ali komponente Lovelace UI. Če prevzamete nadzor, se ta nadzorna plošča ne bo več samodejno posodabljala. Vedno lahko ustvarite novo nadzorno ploščo v konfiguraciji, s katero se lahko igrate.", "para_sure": "Ali ste prepričani, da želite prevzeti nadzor nad vašim vmesnikom?", "save": "Prevzemite nadzor", - "yaml_config": "Za pomoč pri zagonu je tukaj trenutna konfiguracija te nadzorne plošče:", + "yaml_config": "Za začetek vam lahko pomaga trenutne nastavitve te nadzorne plošče:", "yaml_control": "Če želite prevzeti nadzor v načinu YAML, ustvarite datoteko YAML z imenom, ki ste ga določili v konfiguraciji za to nadzorno ploščo, ali privzeto 'ui-lovelace.yaml'.", "yaml_mode": "Za to nadzorno ploščo uporabljate način YAML, kar pomeni, da ne morete spremeniti konfiguracije Lovelace iz uporabniškega vmesnika. Če želite upravljati to nadzorno ploščo iz uporabniškega vmesnika, iz konfiguracije Lovelace v 'config.yaml.' Odstranite 'mode: yaml'." }, @@ -2482,7 +2676,7 @@ }, "view": { "panel_mode": { - "description": "To prikaže prvo kartico v polni širini, ostale ne bodo prikazane.", + "description": "To prikaže prvo kartico v polni širini. Ostale kartice v tem pogledu in značke ne bodo prikazane.", "title": "Način panel?", "warning_multiple_cards": "Ta pogled vsebuje več kartic, na plošči je lahko prikazana največ ena kartica." } @@ -2490,11 +2684,12 @@ }, "menu": { "close": "Zapri", - "configure_ui": "Konfiguriraj UI", + "configure_ui": "Uredi nadzorno ploščo", "exit_edit_mode": "Zapustite način urejanja iz uporabniškega vmesnika", "help": "Pomoč", "refresh": "Osveži", - "reload_resources": "Ponovno naloži vire" + "reload_resources": "Ponovno naloži vire", + "start_conversation": "Začni pogovor" }, "reload_lovelace": "Ponovno naloži uporabniški vmesnik", "reload_resources": { @@ -2507,8 +2702,8 @@ "entity": "Subjekt", "entity_id": "ID subjekta", "last_changed": "Zadnja sprememba", - "no_data": "Najdenih ni bilo neuporabljenih subjektov", - "search": "Iskanje subjektov", + "no_data": "Najdenih ni bilo neuporabljenih entitet", + "search": "Iskanje entitet", "select_to_add": "Izberite entitete, ki jih želite dodati na kartico, in nato kliknite gumb Dodaj kartico.", "title": "Neuporabljene entitete" }, @@ -2637,7 +2832,7 @@ "demo": { "demo_by": "avtor: {name}", "introduction": "Dobrodošli doma! Dosegli ste predstavitev Home Assistant-a, kjer smo predstavili najboljše uporabniške vmesnike, ki jih je ustvarila naša skupnost.", - "learn_more": "Več o Home Assistant-u", + "learn_more": "Preberite več o Home Assistant", "next_demo": "Naslednja predstavitev" } }, @@ -2727,6 +2922,10 @@ "dropdown_label": "Nadzorna plošča", "header": "Nadzorna plošča" }, + "enable_shortcuts": { + "description": "Omogočite ali onemogočite bližnjice na tipkovnici za izvajanje različnih dejanj v uporabniškem vmesniku.", + "header": "Bližnjice na tipkovnici" + }, "force_narrow": { "description": "To bo privzeto skrilo stransko vrstico, podobno kot pri mobilnih napravah.", "header": "Vedno skrij stransko vrstico" @@ -2753,7 +2952,7 @@ "learn_auth_requests": "Naučite se, kako naredite preverjene zahteve.", "not_used": "Nikoli ni bil uporabljen", "prompt_copy_token": "Kopirate žeton za dostop. Ta ne bo prikazan znova.", - "prompt_name": "Ime?" + "prompt_name": "Dajte žetonu ime" }, "mfa_setup": { "close": "Zapri", @@ -2769,6 +2968,10 @@ "header": "Večfaktorski moduli za preverjanje pristnosti" }, "push_notifications": { + "add_device_prompt": { + "input_label": "Ime naprave", + "title": "Kako naj se imenuje ta naprava?" + }, "description": "Pošiljaj obvestila tej napravi", "error_load_platform": "Konfiguriraj notify.html5 (push obvestila).", "error_use_https": "Zahteva SSL za Frontend.", @@ -2817,7 +3020,7 @@ } }, "sidebar": { - "external_app_configuration": "Konfiguracija aplikacije", + "external_app_configuration": "Nastavitve aplikacije", "sidebar_toggle": "Preklop stranske vrstice" } } diff --git a/translations/frontend/uk.json b/translations/frontend/uk.json index e4bed65e19..dc18d54118 100644 --- a/translations/frontend/uk.json +++ b/translations/frontend/uk.json @@ -569,7 +569,7 @@ "messages": { "became_unavailable": "стала недоступною", "changed_to_state": "змінено на {state}", - "cleared_device_class": "чисто (не {device_class} виявлено)", + "cleared_device_class": "чисто ({device_class} не виявлено)", "detected_device_class": "виявлено {device_class}", "set": "встановити", "turned_off": "вимкнено", @@ -623,14 +623,15 @@ "hour": "In {count} {count, plural,\n one {hour}\n other {hours}\n}", "minute": "In {count} {count, plural,\n one {minute}\n other {minutes}\n}" }, - "just_now": "Прямо зараз", + "just_now": "Щойно", "never": "Ніколи", "past": "{time} тому", "past_duration": { - "day": "{count} {count, plural,\n one {day}\n other {days}\n} тому", - "hour": "{count} {count, plural,\n one {hour}\n other {hours}\n} тому", - "minute": "{count} {count, plural,\n one {minute}\n other {minutes}\n} тому", - "second": "{count} {count, plural,\n one {second}\n other {seconds}\n} тому" + "day": "{count} {count, plural,\n one {день}\n other {днів}\n} тому", + "hour": "{count} {count, plural,\n one {годину}\n other {годин}\n} тому", + "minute": "{count} {count, plural,\n one {хвилину}\n other {хвилин}\n} тому", + "second": "{count} {count, plural,\n one {секунду}\n other {секунд}\n} тому", + "week": "{count} {count, plural,\n one {тиждень}\n other {тижнів}\n} тому" } }, "service-picker": { @@ -676,6 +677,13 @@ "ok": "ТАК" }, "helper_settings": { + "counter": { + "initial": "Початкове значення", + "maximum": "Максимальне значення", + "minimum": "Мінімальне значення", + "restore": "Відновлення останнього відомого значення під час Home Assistant", + "step": "Розмір кроку" + }, "generic": { "icon": "Значок", "name": "Назва" @@ -708,7 +716,10 @@ "password": "Пароль", "text": "Текст" }, - "required_error_msg": "Це поле є обов'язковим" + "required_error_msg": "Це поле є обов'язковим", + "timer": { + "duration": "Тривалість" + } }, "image_cropper": { "crop": "Обрізати" @@ -719,6 +730,7 @@ "dismiss": "Відхилити", "edit": "Редагувати об'єкт", "history": "Історія", + "last_changed": "Востаннє змінено", "last_updated": "Останнє оновлення", "person": { "create_zone": "Створити зону з поточного місця розташування" @@ -774,6 +786,13 @@ } }, "quick-bar": { + "commands": { + "server_control": { + "perform_action": "{action} сервер", + "restart": "Перезапустити", + "stop": "Зупинити" + } + }, "filter_placeholder": "Фільтр об'єкта" }, "voice_command": { @@ -836,6 +855,7 @@ }, "notification_toast": { "connection_lost": "З'єднання втрачено. Повторне підключення...", + "dismiss": "Відхилити", "service_call_failed": "Не вдалося викликати сервіс {service}.", "started": "Home Assistant запущений!", "triggered": "Запущено {name}" @@ -1141,6 +1161,7 @@ "time": { "at": "У", "label": "Час", + "type_input": "Значення помічнику дати й часу", "type_value": "Фіксований час" }, "webhook": { @@ -1512,11 +1533,13 @@ "no_helpers": "Схоже, у вас ще немає помічників!" }, "types": { + "counter": "Лічильник", "input_boolean": "Тумблер", "input_datetime": "Дата та/або час", "input_number": "Номер", "input_select": "Випадання", - "input_text": "Текст" + "input_text": "Текст", + "timer": "Таймер" } }, "info": { @@ -2362,6 +2385,7 @@ "entity-id": "ID об'єкта", "last-changed": "Востаннє змінено", "last-triggered": "Останнє спрацьовування", + "last-updated": "Останнє оновлення", "none": "Немає додаткової інформації", "position": "Положення", "tilt-position": "Положення нахилу" @@ -2896,6 +2920,9 @@ "header": "Багатофакторна перевірка справжності модулів" }, "push_notifications": { + "add_device_prompt": { + "input_label": "Ім'я пристрою" + }, "description": "Надіслати сповіщення на цей пристрій.", "error_load_platform": "Налаштувати notify.html5.", "error_use_https": "Потрібно ввімкнути SSL для інтерфейсу.", diff --git a/translations/frontend/zh-Hans.json b/translations/frontend/zh-Hans.json index 7513de7ed8..86887903a6 100644 --- a/translations/frontend/zh-Hans.json +++ b/translations/frontend/zh-Hans.json @@ -798,6 +798,7 @@ "dismiss": "关闭对话框", "edit": "编辑实体", "history": "历史", + "last_changed": "上次变化", "last_updated": "上次更新", "person": { "create_zone": "从当前位置创建地点" diff --git a/translations/frontend/zh-Hant.json b/translations/frontend/zh-Hant.json index b777b0f34f..c4fc360cdb 100644 --- a/translations/frontend/zh-Hant.json +++ b/translations/frontend/zh-Hant.json @@ -798,6 +798,7 @@ "dismiss": "忽略對話", "edit": "編輯實體", "history": "歷史", + "last_changed": "上次變更", "last_updated": "最後更新", "person": { "create_zone": "使用目前位置新增區域" @@ -1732,7 +1733,7 @@ "options": "選項", "reload": "重新載入", "reload_confirm": "整合已重新載入", - "reload_restart_confirm": "重啟 Home Assistant 以為重整合重新載入", + "reload_restart_confirm": "重啟 Home Assistant 以完成整合重新載入", "rename": "重新命名", "restart_confirm": "重啟 Home Assistant 以完成此整合移動", "services": "{count} {count, plural,\n one {項服務}\n other {項服務}\n}", From 1753c9163cad2988080d1c7701f01ff57d8686a8 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Sun, 1 Nov 2020 00:32:29 +0000 Subject: [PATCH 234/242] [ci skip] Translation update --- translations/frontend/cy.json | 30 ++- translations/frontend/el.json | 1 + translations/frontend/hu.json | 1 + translations/frontend/it.json | 6 +- translations/frontend/sl.json | 396 +++++++++++++++++++++++------ translations/frontend/sv.json | 136 +++++++++- translations/frontend/zh-Hans.json | 4 +- 7 files changed, 488 insertions(+), 86 deletions(-) diff --git a/translations/frontend/cy.json b/translations/frontend/cy.json index 65efe02d63..a09725d53a 100644 --- a/translations/frontend/cy.json +++ b/translations/frontend/cy.json @@ -378,7 +378,7 @@ "messages": { "became_unavailable": "Daeth anargael", "changed_to_state": "wedi newid i {state}", - "cleared_device_class": "clirio (ni ganfuwyd {device_class}", + "cleared_device_class": "clirio (ni ganfuwyd {device_class})", "detected_device_class": "canfodwyd {device_class}", "turned_off": "i ffwrdd", "turned_on": "troi ymlaen", @@ -448,6 +448,7 @@ }, "more_info_control": { "dismiss": "Gwrthod deialog", + "last_changed": "Newidiwyd ddiwethaf", "script": { "last_action": "Gweithrediad diwethaf" }, @@ -462,6 +463,21 @@ } }, "quick-bar": { + "commands": { + "reload": { + "filesize": "Ailgychwyn endidau maint ffeil", + "mqtt": "Ailgychwyn endidau mqtt wedi'u ffurfweddu", + "ping": "Ailgychwyn endidau sensor ping binary", + "rpi_gpio": "Ailgychwyn endidau GPIO Raspberry Pi", + "smtp": "Ailgychwyn gwasanaethau hysbysu smtp", + "telegram": "Ailgychwyn gwasanaethau hysbysu telegram" + }, + "server_control": { + "perform_action": "{action} Gweinydd", + "restart": "Ailgychwyn", + "stop": "Stop" + } + }, "filter_placeholder": "Hidlo Endid" }, "voice_command": { @@ -926,6 +942,7 @@ }, "services": { "add_node": "Ychwanegu Nod", + "cancel_command": "Canslo Gorchymyn", "remove_node": "Tynnu Nod" } }, @@ -999,6 +1016,7 @@ "group": "Ail-lwytho grwpiau", "heading": "Ffurfweddiad yn ail-lwytho", "introduction": "Gall rhai rhannau o Home Assistant ail-lwytho heb orfod ailgychwyn. Bydd taro ail-lwytho yn dadlwytho eu cyfluniad cyfredol a llwytho'r un newydd.", + "mqtt": "Ail-lwytho endidau mqtt wedi'u ffurfweddu", "rest": "Ail-lwytho endidau gorffwys", "script": "Ail-lwytho sgriptiau", "statistics": "Ail-lwytho endidau ystadegau", @@ -1501,6 +1519,16 @@ "description": "Dewiswch ddangosfwrdd diofyn ar gyfer y ddyfais hon.", "dropdown_label": "Dangosfwrdd", "header": "Dangosfwrdd" + }, + "enable_shortcuts": { + "description": "Galluogi neu analluogi llwybrau byr bysellfwrdd ar gyfer perfformio gweithredoedd amrywiol yn yr UI.", + "header": "Llwybrau byr bysellfwrdd" + }, + "push_notifications": { + "add_device_prompt": { + "input_label": "Enw dyfais", + "title": "Beth ddylid galw'r ddyfais yma?" + } } }, "shopping-list": { diff --git a/translations/frontend/el.json b/translations/frontend/el.json index 98e88188fa..80d31314c1 100644 --- a/translations/frontend/el.json +++ b/translations/frontend/el.json @@ -798,6 +798,7 @@ "dismiss": "Κλείσιμο διαλόγου.", "edit": "Επεξεργασία οντότητας", "history": "Ιστορικό", + "last_changed": "Τελευταία αλλαγή", "last_updated": "Τελευταία ενημέρωση", "person": { "create_zone": "Δημιουργία ζώνης από την τρέχουσα θέση" diff --git a/translations/frontend/hu.json b/translations/frontend/hu.json index 69f4f62bc9..57feb0f3cb 100644 --- a/translations/frontend/hu.json +++ b/translations/frontend/hu.json @@ -798,6 +798,7 @@ "dismiss": "Párbeszédpanel elvetése", "edit": "Entitás szerkesztése", "history": "Előzmények", + "last_changed": "Utoljára módosult", "last_updated": "Utoljára frissítve", "person": { "create_zone": "Zóna létrehozása az aktuális helyről" diff --git a/translations/frontend/it.json b/translations/frontend/it.json index 02a72f379b..7cfaa12b79 100644 --- a/translations/frontend/it.json +++ b/translations/frontend/it.json @@ -2004,7 +2004,7 @@ }, "services": { "add_node": "Aggiungi Nodo", - "cancel_command": "Annulla Comando", + "cancel_command": "Annulla comando", "remove_node": "Rimuovi nodo" } }, @@ -2627,9 +2627,9 @@ "call-service": "Chiama il Servizio", "default_action": "Azione predefinita", "more-info": "Ulteriori informazioni", - "navigate": "Navigare", + "navigate": "Vai a", "none": "Nessuna Azione", - "toggle": "Commutatore", + "toggle": "Commuta", "url": "Url" }, "editor_service_data": "I dati di servizio possono essere inseriti solo nell'editor del codice", diff --git a/translations/frontend/sl.json b/translations/frontend/sl.json index e1f2ffde41..ded5af72af 100644 --- a/translations/frontend/sl.json +++ b/translations/frontend/sl.json @@ -19,6 +19,7 @@ "logbook": "Dnevnik", "mailbox": "Nabiralnik", "map": "Zemljevid", + "media_browser": "Medijski brskalnik", "profile": "Profil", "shopping_list": "Nakupovalni seznam", "states": "Pregled" @@ -495,9 +496,11 @@ "wnw": "Zahod-severozahod", "wsw": "Zahod-jugozahod" }, + "day": "Dan", "forecast": "Napoved", "high": "Visoko", - "low": "Nizko" + "low": "Nizko", + "night": "Noč" } }, "common": { @@ -505,6 +508,8 @@ "back": "Nazaj", "cancel": "Prekliči", "close": "Zapri", + "continue": "Nadaljuj", + "copied": "Kopirano", "delete": "Izbriši", "error_required": "Zahtevano", "loading": "Nalaganje", @@ -551,6 +556,10 @@ "toggle": "Preklopite" }, "entity": { + "entity-attribute-picker": { + "attribute": "Atribut", + "show_attributes": "Pokaži atribute" + }, "entity-picker": { "clear": "Počisti", "entity": "Entiteta", @@ -570,11 +579,12 @@ "changed_to_state": "je spremenil stanje v {state}", "cleared_device_class": "počiščeno (no {device_class} detected)", "detected_device_class": "zaznan {device_class}", - "rose": "zrastel", + "rose": "zrasel", "set": "nastavljen", "turned_off": "ugasnjen", "turned_on": "vključen", "was_at_home": "je bil/a doma", + "was_at_state": "je bil {state}", "was_away": "je bil odsoten", "was_closed": "je bil zaprt", "was_connected": "je bil povezan", @@ -591,7 +601,31 @@ } }, "media-browser": { + "audio_not_supported": "Vaš brskalnik ne podpira zvočnega elementa.", + "choose_player": "Izberi predvajalnik", "choose-source": "Izberite vir", + "class": { + "album": "Album", + "app": "Aplikacija", + "artist": "Ustvarjalec", + "channel": "Kanal", + "composer": "Skladatelj", + "contributing_artist": "Ustvarjalec, ki prispeva", + "directory": "Knjižnica", + "episode": "Epizoda", + "game": "Igra", + "genre": "Žanr", + "image": "Slika", + "movie": "Film", + "music": "Glasba", + "playlist": "Seznam predvajanja", + "podcast": "Poddaja", + "season": "Sezona", + "track": "Skladba", + "tv_show": "Televizijska oddaja", + "url": "URL", + "video": "Video" + }, "content-type": { "album": "Album", "artist": "Ustvarjalec", @@ -599,11 +633,23 @@ "playlist": "Seznam predvajanja", "server": "Strežnik" }, + "documentation": "dokumentacija", + "learn_adding_local_media": "Več o dodajanju medijev preberite v {documentation}.", + "local_media_files": "V imenik predstavnosti postavite video, zvočne in slikovne datoteke, da lahko brskate in jih predvajate v brskalniku ali podprtih predvajalnikih.", + "media_browsing_error": "Napaka pri brskanju po medijih", + "media_not_supported": "Predvajalnik ne podpira te vrste", + "media_player": "Medijski predvajalnik", + "media-player-browser": "Brskalnik za medijski predvajalnik", "no_items": "Ni elementov", + "no_local_media_found": "Ni bilo najdenega lokalnega medija", + "no_media_folder": "Videti je, da še niste ustvarili medijskega imenika.", "pick": "Izberi", "pick-media": "Izberi vsebino", "play": "Predvajaj", - "play-media": "Predvajaj vsebino" + "play-media": "Predvajaj vsebino", + "setup_local_help": "Preverite {documentation} o tem, kako nastaviti lokalni medij.", + "video_not_supported": "Vaš brskalnik ne podpira video elementa.", + "web-browser": "Spletni brskalnik" }, "picture-upload": { "label": "Slika", @@ -629,9 +675,23 @@ "week": "{count} {count, plural,\none {Teden}\nother {Tednov}\n}" }, "future": "Čez {time}", + "future_duration": { + "day": "V {count} {count, plural,\n one {dnevu}\n other {dnevih}\n}", + "hour": "V {count} {count, plural,\n one {uri}\n other {urah}\n}", + "minute": "V {count} {count, plural,\n one {minuti}\n other {minutah}\n}", + "second": "V {count} {count, plural,\n one {sekundi}\n other {sekundah}\n}", + "week": "V {count} {count, plural,\n one {tednu}\n other {tednih}\n}" + }, "just_now": "Pravkar", "never": "Nikoli", - "past": "Pred {time}" + "past": "Pred {time}", + "past_duration": { + "day": "Pred {count} {count, plural,\n one {dnevom}\n two {dnevoma}\n other {dnevi}\n}", + "hour": "Pred {count} {count, plural,\n one {uro}\n two {urama}\n other {urami}\n}", + "minute": "Pred {count} {count, plural,\n one {minuto}\n two {minutama}\n other {minutami}\n}", + "second": "Pred {count} {count, plural,\n one {sekundo}\n two {sekundama}\n other {sekundami}\n}", + "week": "Pred {count} {count, plural,\n one {tednom}\n two {tednoma}\n other {tedni}\n}" + } }, "service-picker": { "service": "Storitev" @@ -645,7 +705,7 @@ "dialogs": { "config_entry_system_options": { "enable_new_entities_description": "Če je onemogočeno, novo odkrite entitete za {integration} ne bodo samodejno dodane v Home Assistant.", - "enable_new_entities_label": "Omogočite novo dodane subjekte.", + "enable_new_entities_label": "Omogoči novo dodane entitete.", "title": "Sistemske možnosti za {integration}", "update": "Posodobite" }, @@ -660,16 +720,17 @@ "confirm_delete": "Ali ste prepričani, da želite izbrisati ta vnos?", "delete": "Izbriši", "enabled_cause": "Onemogočeno zaradi {cause}.", - "enabled_description": "Onemogočeni subjekti ne bodo dodani v Home Assistant-a.", + "enabled_description": "Onemogočene entitete ne bodo dodane v Home Assistant.", "enabled_label": "Omogoči entiteto", - "entity_id": "ID subjekta", + "entity_id": "ID entitete", "icon": "Ikona", - "icon_error": "Ikone morajo biti v obliki \"predpona: imeIkone\", na primer \"MDI: Home\"", + "icon_error": "Ikone morajo biti v obliki 'prefix:iconname', npr. 'mid:home'", "name": "Ime", "note": "Opomba: to morda še ne deluje z vsemi integracijami.", "unavailable": "Ta entiteta trenutno ni na voljo.", "update": "Posodobi" }, + "faq": "dokumentacija", "no_unique_id": "Ta entiteta nima enoličnega ID-ja, zato njenih nastavitev ni mogoče upravljati iz uporabniškega vmesnika. Za več podrobnosti glejte {faq_link} .", "related": "Povezano", "settings": "Nastavitve" @@ -718,7 +779,7 @@ "min": "Najkrajša dolžina", "mode": "Način prikaza", "password": "Geslo", - "pattern": "Vzorec Regex za validacijo na strani odjemalca", + "pattern": "Regex vzorec za preverjanje veljavnosti na strani odjemalca", "text": "Besedilo" }, "platform_not_loaded": "Integracija {platform} ni naložena. Prosimo, dodajte ga v svojo konfiguracijo tako, da dodate 'default_config: 'ali' ' {platform} :' '.", @@ -780,7 +841,7 @@ "entities": "Entitete", "no_entities": "Brez entitet", "no_triggers": "Brez sprožilcev", - "payload_display": "Payload display", + "payload_display": "Prikaz koristnega tovora", "recent_messages": "{n} zadnjih prejetih sporočil", "show_as_yaml": "Pokaži kot YAML", "title": "{Device} debug info", @@ -797,21 +858,41 @@ "quick-bar": { "commands": { "reload": { - "automation": "Ponovno naloži avtomatizacije", - "homekit": "Znova naložite HomeKit", - "mqtt": "Ponovno naloži ", - "person": "Ponovno naloži osebe", - "reload": "Ponovno naloži {domain}", - "rpi_gpio": "Ponovno naloži Raspberry Pi GPIO entitete", - "scene": "Ponovno naloži scene", - "script": "Ponovno naloži skripte", - "smtp": "Ponovno naloži smtp strežnike za obvestila.", - "telegram": "Ponovno naloži telegram strežnike za obvestila.", - "zone": "Ponovno naloži območja" + "automation": "Znova naloži avtomatizacije", + "command_line": "Znova naloži entitete ukazne vrstice", + "core": "Znova naloži lokacijo in prilagoditve", + "filesize": "Znova naloži entitete velikosti datoteke", + "filter": "Znova naloži entitete entitete filtra", + "generic": "Znova naloži entitete generičnih IP kamer", + "generic_thermostat": "Znova naloži entitete generičnih termostatov", + "group": "Znova naloži skupine, skupine entitete in storitve obveščanja", + "history_stats": "Znova naloži entitete statistike zgodovine", + "homekit": "Znova naloži HomeKit", + "input_boolean": "Znova naloži vhode boolean", + "input_datetime": "Znova naloži datumske vhode", + "input_number": "Znova naloži števične vhode", + "input_select": "Znova naloži izbirne vhode", + "input_text": "Znova naloži tekstovne vhode", + "min_max": "Znova naloži entitete min/max", + "mqtt": "Znova naloži ročno nastavljene entitete MQTT", + "person": "Znova naloži osebe", + "ping": "Znova naloži entitete binarnega senzorja PING", + "reload": "Znova naloži {domain}", + "rest": "Znova naloži entitete REST in storitve obveščanja", + "rpi_gpio": "Znova naloži Raspberry Pi GPIO entitete", + "scene": "Znova naloži scene", + "script": "Znova naloži skripte", + "smtp": "Znova naloži smtp strežnike za obvestila.", + "statistics": "Znova naloži statistične entitete", + "telegram": "Znova naloži telegram strežnike za obvestila.", + "template": "Znova naloži entitete predlog", + "trend": "Znova naloži entitete trendov", + "universal": "Znova naloži entitete univerzalnega predvajalnika", + "zone": "Znova naloži območja" }, "server_control": { "perform_action": "{action} strežnik", - "restart": "Ponovno zaženi", + "restart": "Znova zaženi", "stop": "Zaustavi" } }, @@ -829,7 +910,7 @@ "buttons": { "add": "Dodajte naprave prek te naprave", "clusters": "Upravljanje gruč", - "reconfigure": "Ponovno konfigurirajte napravo", + "reconfigure": "Znova konfiguriraj napravo", "remove": "Odstranite napravo", "zigbee_information": "Podpis naprave Zigbee" }, @@ -843,7 +924,7 @@ "power_source": "Vir napajanja", "quirk": "Posebnost", "services": { - "reconfigure": "Ponovno konfigurirajte napravo ZHA (\"pozdravite\" napravo). To uporabite, če imate z njo težave. Če ta naprava deluje na baterije, se prepričajte, da je budna in sprejema ukaze pri uporabi te storitve.", + "reconfigure": "Znova konfiguriraj napravo ZHA (\"pozdravite\" napravo). To uporabite, če imate z njo težave. Če ta naprava deluje na baterije, se prepričajte, da je budna in sprejema ukaze pri uporabi te storitve.", "remove": "Odstranite napravo iz omrežja Zigbee.", "updateDeviceName": "Nastavite ime po meri za to napravo v registru naprav.", "zigbee_information": "Oglejte si informacije Zigbee za to napravo." @@ -871,6 +952,7 @@ "notification_drawer": { "click_to_configure": "Kliknite gumb, da konfigurirate {entity}", "close": "Zapri", + "dismiss_all": "Zavrzi vse", "empty": "Ni obvestil", "title": "Obvestila" }, @@ -991,9 +1073,12 @@ "service_data": "Podatki storitve" }, "wait_for_trigger": { - "label": "Počakaj na sprožilec" + "continue_timeout": "Nadaljuj ob časovni omejitvi", + "label": "Počakaj na sprožilec", + "timeout": "Časovna omejitev (neobvezno)" }, "wait_template": { + "continue_timeout": "Nadaljuj ob časovni omejitvi", "label": "počakajte", "timeout": "Časovna omejitev (neobvezno)", "wait_template": "Čakalna predloga" @@ -1058,6 +1143,8 @@ "after": "Po", "before": "Pred", "label": "Čas", + "type_input": "Vrednost pomagalnika za datum/čas", + "type_value": "Fiksni čas", "weekdays": { "fri": "petek", "mon": "ponedeljek", @@ -1126,6 +1213,8 @@ }, "event": { "context_user_pick": "Dodaj uporabnika", + "context_user_picked": "Dogodek uporabnikove sprožitve", + "context_users": "Omeji na dogodke, ki jih sproži", "event_data": "Podatki o dogodku", "event_type": "Vrsta dogodka", "label": "Dogodek" @@ -1185,6 +1274,7 @@ "time": { "at": "Ob", "label": "Čas", + "type_input": "Vrednost pomočnika za datum/čas", "type_value": "Fiksni čas" }, "webhook": { @@ -1208,6 +1298,8 @@ "add_automation": "Dodaj avtomatizacijo", "delete_automation": "Izbriši avtomatizacijo", "delete_confirm": "Ali ste prepričani, da želite izbrisati to avtomatizacijo?", + "duplicate": "Podvoji", + "duplicate_automation": "Podvoji avtomatizacijo", "edit_automation": "Urejanje avtomatizacije", "header": "Urejevalnik avtomatizacije", "headers": { @@ -1230,7 +1322,7 @@ "enable_ha_skill": "Omogoči Home Assistant spretnost za Alexo", "enable_state_reporting": "Omogoči poročanje o stanju", "info": "Z integracijo Alexa za Home Assistant cloud boste lahko nadzirali vse svoje naprave s pomočjo katere koli naprave, ki podpira Alexa.", - "info_state_reporting": "Če omogočite poročanje o stanju, bo Home Assistant amazonu poslal vse spremembe stanja izpostavljenih entitet. To vam omogoča, da vedno vidite najnovejša stanja v aplikaciji Alexa.", + "info_state_reporting": "Če omogočite poročanje o stanju, bo Home Assistant Amazonu poslal vse spremembe stanja izpostavljenih entitet. To vam omogoča, da vedno vidite najnovejša stanja v aplikaciji Alexa.", "manage_entities": "Upravljaj entitete", "state_reporting_error": "Stanja poročila ni mogoče {enable_disable}.", "sync_entities": "Sinhroniziranje entitet", @@ -1261,7 +1353,7 @@ "integrations_introduction2": "Preverite spletno stran za ", "integrations_link_all_features": "vse razpoložljive funkcije", "manage_account": "Upravljaj račun", - "nabu_casa_account": "Nabu Casa račun", + "nabu_casa_account": "Račun Nabu Casa", "not_connected": "Brez povezave", "remote": { "access_is_being_prepared": "Oddaljeni dostop se pripravlja. Obvestili vas bomo, ko bo pripravljen.", @@ -1289,9 +1381,14 @@ }, "alexa": { "banner": "Urejanje entitet, ki so izpostavljeni prek tega uporabniškega vmesnika, je onemogočeno, ker ste v config.yaml konfigurirali filtre entitet.", + "dont_expose_entity": "Ne izpostavljaj entitete", "expose": "Izpostavite Alexi", + "expose_entity": "Izpostavi entiteto", + "exposed": "izpostavljeno: {selected}", "exposed_entities": "Izpostavljene entitete", + "follow_domain": "Sledi domeni", "manage_domains": "Upravljaj z domenami", + "not_exposed": "ni izpostavljeno: {selected}", "not_exposed_entities": "Entitete, ki niso izpostavljene", "title": "Alexa" }, @@ -1329,9 +1426,14 @@ "google": { "banner": "Urejanje entitet, ki so izpostavljeni prek tega uporabniškega vmesnika, je onemogočeno, ker ste v config.yaml konfigurirali filtre entitet.", "disable_2FA": "Onemogočite dvofaktorsko preverjanje pristnosti", + "dont_expose_entity": "Ne izpostavi entitete", "expose": "Izpostavite Pomočniku Google", + "expose_entity": "Izpostavi entiteto", + "exposed": "izpostavljeno: {selected}", "exposed_entities": "Izpostavljene entitete", + "follow_domain": "Sledi domeni", "manage_domains": "Upravljaj z domenami", + "not_exposed": "ni izpostavljeno: {selected}", "not_exposed_entities": "Entitete, ki niso izpostavljene", "sync_to_google": "Sinhroniziranje sprememb z Googlom.", "title": "Pomočnik Google" @@ -1374,7 +1476,7 @@ "link_terms_conditions": "Pravila in Pogoji", "password": "Geslo", "password_error_msg": "Gesla morajo biti dolga vsaj 8 znakov", - "resend_confirm_email": "Ponovno pošlji potrditveno e-poštno sporočilo", + "resend_confirm_email": "Znova pošlji potrditveno e-poštno sporočilo", "start_trial": "Začnite preizkus", "title": "Registrirajte račun" } @@ -1422,6 +1524,7 @@ "different_include": "Mogoče prek domene, globusa ali drugačne vsebovanosti.", "pick_attribute": "Izberite atribut, ki ga želite preglasiti", "picker": { + "documentation": "Dokumentacija o prilagoditvah", "entity": "Entiteta", "header": "Prilagoditve", "introduction": "Prilagajanja atributov na entiteti. Dodane/spremenjene prilagoditve začnejo veljati takoj. Odstranjene pa po posodobitvi entitete." @@ -1433,6 +1536,7 @@ } }, "devices": { + "add_prompt": "Noben {name} še ni bil dodan s to napravo. Lahko ga dodaš s klikom na gumb + spodaj.", "automation": { "actions": { "caption": "Ko se nekaj sproži ...", @@ -1452,7 +1556,8 @@ "caption": "Naredi nekaj, ko ...", "no_triggers": "Brez sprožilcev", "unknown_trigger": "Neznan sprožilec" - } + }, + "unknown_automation": "Neznana avtomatizacija" }, "cant_edit": "Urejate lahko samo elemente, ki so ustvarjeni v uporabniškem vmesniku.", "caption": "Naprave", @@ -1490,7 +1595,7 @@ "scenes": "Scene", "script": { "create": "Ustvarjanje skript z napravo", - "no_scripts": "Ni skript", + "no_scripts": "Brez skriptov", "scripts": "Skripte" }, "scripts": "Skripte", @@ -1504,8 +1609,8 @@ "picker": { "disable_selected": { "button": "Onemogoči izbrane", - "confirm_text": "Onemogočeni subjekti ne bodo dodani v Home Assistant-a.", - "confirm_title": "Ali želite onemogočiti {number} entiteto/i/e?" + "confirm_text": "Onemogočene entitete ne bodo dodane v Home Assistant.", + "confirm_title": "Ali želite onemogočiti {number} entitet?" }, "enable_selected": { "button": "Omogoči izbrane", @@ -1514,13 +1619,15 @@ }, "filter": { "filter": "Filter", - "show_disabled": "Pokaži onemogočene subjekte", + "hidden_entities": "{number} {number, plural,\n one {skrita entiteta}\n two {skriti entiteti}\n other {skrite entitete}\n}", + "show_all": "Pokaži vse", + "show_disabled": "Pokaži onemogočene entitete", "show_readonly": "Prikaži entitete \"samo za branje\"", "show_unavailable": "Pokaži nerazpoložljive entitete" }, "header": "Entitete", "headers": { - "entity_id": "ID subjekta", + "entity_id": "ID entitete", "integration": "Integracija", "name": "Ime", "status": "Stanje" @@ -1562,18 +1669,20 @@ "add_helper": "Dodajte pomočnika", "headers": { "editable": "Za urejanje", - "entity_id": "ID subjekta", + "entity_id": "ID entitete", "name": "Ime", "type": "Vrsta" }, "no_helpers": "Zdi se, da še nimate pomočnikov!" }, "types": { + "counter": "Števec", "input_boolean": "Preklopite", "input_datetime": "Datum in/ali čas", "input_number": "Številka", "input_select": "Spustni", - "input_text": "Besedilo" + "input_text": "Besedilo", + "timer": "Časovnik" } }, "info": { @@ -1613,7 +1722,7 @@ "device_unavailable": "naprava ni na voljo", "devices": "{count} {count, plural,\n one {naprava}\n other {naprav}\n}", "documentation": "Dokumentacija", - "entities": "{count} {count, plural,\n one {entiteta}\n other {entitet}\n}", + "entities": "{count} {count, plural,\n one {entiteta}\n two {entiteti}\n other {entitete}\n}", "entity_unavailable": "entiteta ni na voljo", "firmware": "Firmware: {version}", "hub": "Povezan prek", @@ -1622,11 +1731,12 @@ "no_device": "Entitete brez naprav", "no_devices": "Ta integracija je brez naprav.", "options": "Možnosti", - "reload": "Ponovno naloži", - "reload_confirm": "Integracija je bila ponovno naložena", - "reload_restart_confirm": "Znova zaženite Home Assistant, da dokončate ponovno nalaganje te integracije", + "reload": "Znova naloži", + "reload_confirm": "Integracija je bila znova naložena", + "reload_restart_confirm": "Znova zaženi Home Assistant, da dokončate ponovno nalaganje te integracije", "rename": "Preimenujte", "restart_confirm": "Znova zaženite Home Assistant-a, da dokončate odstranitev te integracije", + "services": "{count} {count, plural,\n one {storitev}\n two {storitvi}\n other {storitve}\n}", "settings_button": "Uredite nastavitve za {integration}", "system_options": "Sistemske možnosti", "system_options_button": "Sistemske možnosti za {integration}", @@ -1673,7 +1783,7 @@ "none_found_detail": "Prilagodite iskalne kriterije.", "note_about_integrations": "Vseh integracij še ni mogoče konfigurirati prek uporabniškega vmesnika.", "note_about_website_reference": "Več jih je na voljo prek", - "reconfigure": "Ponovno nastavite", + "reconfigure": "Znova nastavi", "rename_dialog": "Uredite ime tega vnosa konfiguracije", "rename_input_label": "Ime vnosa", "search": "Iskanje integracij" @@ -1786,8 +1896,13 @@ "ozw": { "button": "Nastavi", "common": { + "controller": "Krmilnik", + "instance": "Instanca", + "network": "Omrežje", "node_id": "ID vozlišča", "ozw_instance": "OpenZWave primerek", + "query_stage": "Stopnja poizvedbe", + "wakeup_instructions": "Ukazi za prebujanje", "zwave": "Z-Wave" }, "device_info": { @@ -1795,8 +1910,33 @@ "stage": "Stopnja", "zwave_info": "Z-Wave Informacije" }, + "navigation": { + "network": "Omrežje", + "node": { + "config": "Konfiguracija", + "dashboard": "Nadzorna plošča" + }, + "nodes": "Vozlišča", + "select_instance": "Izberi instanco" + }, + "network_status": { + "details": { + "driverallnodesqueried": "Poizvedena so bila vsa vozlišča", + "started": "Povezan z MQTT", + "starting": "Povezovanje z MQTT" + }, + "offline": "Brez povezave", + "online": "Povezan", + "starting": "Zaganja se", + "unknown": "Neznano" + }, "network": { - "header": "Upravljanje omrežja" + "header": "Upravljanje omrežja", + "introduction": "Upravljajte omrežne funkcije.", + "node_count": "{count} vozlišč" + }, + "node_config": { + "header": "Konfiguracija vozlišča" }, "node_metadata": { "product_manual": "Priročnik za izdelek" @@ -1807,17 +1947,34 @@ "dynamic": "Pridobivanje pogosto spreminjajočih se vrednosti iz vozlišča", "session": "Pridobitev redko spreminjajočih se vrednosti iz vozlišča" }, + "node": { + "button": "Podrobnosti o vozlišču", + "not_found": "Vozlišča ni mogoče najti" + }, + "nodes_table": { + "manufacturer": "Proizvajalec", + "model": "Model", + "zwave_plus": "Z-Wave Plus" + }, "refresh_node": { "battery_note": "Če vozlišče napaja baterijo, se pred nadaljevanjem prepričajte, da ga zbudite", + "button": "Osveži vozlišče", "complete": "Osveževanje vozlišča je končano", + "node_status": "Stanje vozlišča", "refreshing_description": "Osveževanje informacij o vozlišču ...", "start_refresh_button": "Začni osveževanje", + "step": "Korak", "title": "Osveži podatke o vozlišču", "wakeup_header": "Navodila za bujenje za", "wakeup_instructions_source": "Navodila za prebujanje so pridobljena iz podatkovne zbirke naprav OpenZWave." }, + "select_instance": { + "header": "Izberite OpenZWave instanco" + }, "services": { - "cancel_command": "Prekliči ukaz" + "add_node": "Dodaj vozlišče", + "cancel_command": "Prekliči ukaz", + "remove_node": "Odstrani vozlišče" } }, "person": { @@ -1828,11 +1985,14 @@ "create_person": "Ustvari osebo", "description": "Upravljanje oseb, ki jim sledi Home Assistant.", "detail": { + "admin": "Administrator", + "allow_login": "Dovoli osebi, da se prijavi", + "confirm_delete_user": "Ali ste prepričani, da želite izbrisati uporabniški račun za {name}? Uporabnika lahko še vedno spremljate, vendar se oseba ne bo več mogla prijaviti.", "create": "Ustvarite", "delete": "Izbriši", "device_tracker_intro": "Izberite naprave, ki pripadajo tej osebi.", "device_tracker_pick": "Izberite napravo za sledenje", - "device_tracker_picked": "Sledi Napravi", + "device_tracker_picked": "Sledi napravi", "link_integrations_page": "Stran za integracije", "link_presence_detection_integrations": "Integracije zaznavanja prisotnosti", "linked_user": "Povezani uporabnik", @@ -1843,8 +2003,11 @@ "update": "Posodobite" }, "introduction": "Tu lahko določite vsako osebo (uporabnika) v Home Assistant-a.", + "learn_more": "Preberite več o osebah", "no_persons_created_yet": "Videti je, da še niste ustvarili nobene osebe.", - "note_about_persons_configured_in_yaml": "Opomba: oseb, konfiguriranih prek config.yaml, ni mogoče urejati prek uporabniškega vmesnika." + "note_about_persons_configured_in_yaml": "Opomba: oseb, konfiguriranih prek config.yaml, ni mogoče urejati prek uporabniškega vmesnika.", + "person_not_found": "Nismo našli osebe, ki ste jo poskušali urediti.", + "person_not_found_title": "Oseba ni najdena" }, "scene": { "activated": "Aktivirana scena {name} .", @@ -1863,7 +2026,7 @@ "delete": "Izbrišite entiteto", "device_entities": "Če dodate entiteto, ki pripada napravi, bo dodana naprava.", "header": "Entitete", - "introduction": "Tu lahko nastavite subjekte, ki ne pripadajo napravi.", + "introduction": "Tu lahko nastavite entitete, ki ne pripadajo napravi.", "without_device": "Entitete brez naprave" }, "icon": "Ikona", @@ -1920,6 +2083,7 @@ "restart": "Ponovni zagon", "single": "Enojno (privzeta nastavitev)" }, + "save_script": "Shrani skripto", "sequence": "Zaporedje", "sequence_sentence": "Zaporedje dejanj te skripte." }, @@ -1933,6 +2097,7 @@ "introduction": "Urejevalnik skript vam omogoča njihovo ustvarjanje in urejanje. Upoštevajte spodnjo povezavo in si preberite navodila, da se prepričate, da ste pravilno konfigurirali Home Assistant-a.", "learn_more": "Preberite več o skriptah", "no_scripts": "Nismo našli nobene skripte za urejanje", + "run_script": "Zaženi skripto", "show_info": "Pokaži informacije o skripti", "trigger_script": "Sproži skripto" } @@ -1942,27 +2107,38 @@ "description": "Znova zaženite in ustavite strežnik Home Assistant", "section": { "reloading": { - "automation": "Ponovno naloži avtomatizacije", - "command_line": "Znova naložite entitete ukazne vrstice", - "core": "Ponovno naloži lokacijo in prilagoditve", - "filter": "Znova naložite entitete filtrov", - "group": "Znova naložite skupine, skupine entitete in storitve obveščanja", - "heading": "Ponovno nalaganje konfiguracije YAML", - "homekit": "Znova naložite HomeKit", + "automation": "Znova naloži avtomatizacije", + "command_line": "Znova naloži entitete ukazne vrstice", + "core": "Znova naloži lokacijo in prilagoditve", + "filesize": "Znova naloži entitete velikosti datoteke", + "filter": "Znova naloži entitete filtrov", + "generic": "Znova naloži entitete generičnih IP kamer", + "generic_thermostat": "Znova naloži entitete generičnih termostatov", + "group": "Znova naloži skupine, skupine entitete in storitve obveščanja", + "heading": "Konfiguracije YAML se znova nalaga", + "history_stats": "Znova naloži entitete statistike zgodovine", + "homekit": "Znova naloži HomeKit", "input_boolean": "Ponovno naloži \"input booleans\"", "input_datetime": "Ponovno naloži vhodne datumske čase", "input_number": "Ponovno naloži vhodne številke", "input_select": "Ponovno naloži izbirne vnose", "input_text": "Ponovno naloži vhodna besedila", "introduction": "Nekateri deli programa Home Assistant se lahko naložijo brez ponovnega zagona. S ponovnim nalaganjem se trenutna konfiguracija YAML zamenja in naloži nova.", - "mqtt": "Znova naložite ročno konfigurirane entitete mqtt", + "min_max": "Znova naloži entitete min/max", + "mqtt": "Ročno osveži konfigurirane entitete MQTT", "person": "Ponovno naloži osebe", - "rest": "Znova entitete rest in storitve obveščanja", + "ping": "Znova naloži entitete binarnega senzorja PING", + "reload": "Ponovno naloži {domain}", + "rest": "Znova naloži entitete REST in storitve obveščanja", + "rpi_gpio": "Znova naloži entitete GPIO z Raspberry Pi", "scene": "Ponovno naloži scene", "script": "Ponovno naloži skripte", - "statistics": "Znova naložite statistične entitete", - "template": "Znova naložite entitete predloge", - "universal": "Znova naložite enote univerzalnega predvajalnika", + "smtp": "Znova naloži storitve obveščanja SMTP", + "statistics": "Znova naloži statistične entitete", + "telegram": "Znova naloži storitve obveščanja Telegram", + "template": "Znova naloži entitete predlog", + "trend": "Znova naloži entitete trendov", + "universal": "Znova naloži entitete univerzalnega predvajalnika", "zone": "Ponovno naloži območja" }, "server_management": { @@ -1999,7 +2175,7 @@ "tag_id": "ID značke", "tag_id_placeholder": "Samodejno ustvarjeno, če ostane prazno", "update": "Posodobi", - "usage": "Značka lahko sproži avtomatizacijo, koje prebraba. Uporabite lahko značke NFC, QR kode ali katero koli drugo vrsto. Uporabite našo {companion_link} da to značko zapišete v programabilno oznako NFC ali spodaj ustvarite kodo QR." + "usage": "Značka lahko sproži avtomatizacijo, ko je prebrana. Uporabite lahko značke NFC, QR kode ali katero koli drugo vrsto. Uporabite našo {companion_link} da to značko zapišete v programabilno oznako NFC ali spodaj ustvarite kodo QR." }, "edit": "Uredi", "headers": { @@ -2017,6 +2193,8 @@ "create": "Ustvari", "name": "Ime", "password": "Geslo", + "password_confirm": "Potrdi geslo", + "password_not_match": "Gesli se ne ujemata", "username": "Uporabniško ime" }, "caption": "Uporabniki", @@ -2033,6 +2211,7 @@ "group": "Skupina", "id": "ID", "name": "Ime", + "new_password": "Novo geslo", "owner": "Lastnik", "password_changed": "Geslo je bilo uspešno spremenjeno", "system_generated": "Sistemsko generirano", @@ -2172,7 +2351,7 @@ "name": "Ime", "new_zone": "Novo območje", "passive": "Pasivno", - "passive_note": "Pasivna območja so skrita v \"frontendu\" in jih ne uporabljamo za sledenje naprav. Koristna so, če jih želite uporabiti samo za avtomatizacijo.", + "passive_note": "Pasivna območja so skrita v uporabniškem vmesniku in jih ne uporabljamo za sledenje naprav. Koristna so, če jih želite uporabiti samo za avtomatizacijo.", "radius": "Polmer", "required_error_msg": "To polje je obvezno", "update": "Posodobite" @@ -2330,9 +2509,13 @@ "title": "Stanja" }, "templates": { + "all_listeners": "Ta predloga posluša vse dogodke spremembe stanja.", "description": "Predloge so upodobljene s pomočjo mehanizma za predloge Jinja2 z nekaterimi posebnimi razširitvami Home Assistant.", + "domain": "Domena", "editor": "Urejevalnik predlog", + "entity": "Entiteta", "jinja_documentation": "Dokumentacija predloge Jinja2", + "listeners": "Ta predloga posluša naslednje dogodke spremembe stanja:", "no_listeners": "Ta predloga ne posluša nobenih dogodkov in se ne bo samodejno posodabljala.", "reset": "Ponastavi na demo predlogo", "result_type": "Tip rezultata", @@ -2408,6 +2591,20 @@ "refresh": "Osveži" }, "editor": { + "action-editor": { + "actions": { + "call-service": "Kliči Storitev", + "default_action": "Privzeto dejanje", + "more-info": "Več informacij", + "navigate": "Krmari", + "none": "Brez akcije", + "toggle": "Preklopi", + "url": "URL" + }, + "editor_service_data": "Podatke o storitvah lahko vnesete samo v urejevalniku kode", + "navigation_path": "Navigacijska pot", + "url_path": "Url pot" + }, "card": { "alarm-panel": { "available_states": "Stanja na voljo", @@ -2415,9 +2612,21 @@ "name": "Alarmna plošča" }, "button": { + "default_action_help": "Privzeto dejanje je odvisno od zmožnosti entitete, bodisi se preklopi ali pa se prikaže več informacij.", "description": "Gumbna kartica vam omogoča, da dodate gumbe za opravljanje nalog.", "name": "Gumb" }, + "calendar": { + "calendar_entities": "Entitete koledarja", + "description": "Kartica Koledar prikazuje koledar, ki vključuje poglede dneva, tedna in seznama", + "inital_view": "Začetni pogled", + "name": "Koledar", + "views": { + "dayGridDay": "Dan", + "dayGridMonth": "Mesec", + "listWeek": "Seznam" + } + }, "conditional": { "card": "Kartica", "change_type": "Spremeni tip", @@ -2436,12 +2645,30 @@ "entities": { "description": "Kartica entitet je najpogostejša vrsta kartice. Predmete združuje v sezname.", "edit_special_row": "Podrobnosti te vrstice si oglejte s klikom na gumb za urejanje", + "entity_row_editor": "Urejevalnik vrstic entitete", + "entity_row": { + "attribute": "Atribut", + "button": "Gumb", + "buttons": "Gumbi", + "call-service": "Kliči Storitev", + "conditional": "Pogojno", + "divider": "Razdelilnik", + "section": "Sekcija", + "weblink": "Spletna povezava" + }, "name": "Subjekti", "secondary_info_values": { + "brightness": "Svetlost", + "entity-id": "ID entitete", + "last-changed": "Zadnja sprememba", "last-triggered": "Zadnjič sproženo", - "last-updated": "Zadnja posodobitev" + "last-updated": "Zadnja posodobitev", + "none": "Brez sekundarnih informacij", + "position": "Položaj", + "tilt-position": "Položaj nagiba" }, "show_header_toggle": "Pokaži preklop glave?", + "special_row": "posebna vrstica", "toggle": "Preklopi entitete." }, "entity-filter": { @@ -2488,6 +2715,7 @@ "show_name": "Prikaži ime?", "show_state": "Prikaži stanje?", "state": "Stanje", + "state_color": "Barvne ikone glede na stanje?", "tap_action": "Dejanje dotika", "theme": "Tema", "title": "Naslov", @@ -2505,7 +2733,7 @@ }, "horizontal-stack": { "description": "Kartica Horizontal stack vam omogoča, da skupaj zložite več kart, tako da vedno stojijo drug poleg drugega v razmaku enega stolpca.", - "name": "Vodoravna skladnica" + "name": "Vodoravni sklad" }, "humidifier": { "description": "Kartica \"humidifier\" omogoča nadzor nad vašo vlažilno enoto. Omogoča vam, da spremenite vlažnost in način dela entitete.", @@ -2534,7 +2762,7 @@ "name": "Markdown" }, "media-control": { - "description": "Kartica Media Control se uporablja za prikazovanje subjektov predvajalnikov v vmesniku z enostavnimi kontrolami.", + "description": "Kartica Media Control se uporablja za prikaz entitet predvajalnika na vmesniku s preprostimi kontrolniki.", "name": "Nadzor predvajalnika" }, "picture-elements": { @@ -2542,8 +2770,8 @@ "name": "Slikovni elementi" }, "picture-entity": { - "description": "Kartica Picture entity prikazuje subjekt v obliki slike. Namesto slik z URL-ja lahko prikaže tudi sliko subjektov kamer.", - "name": "Subjekt slike" + "description": "Kartica Slika prikazuje entiteto v obliki slike. Namesto slik z URL-ja lahko prikaže tudi sliko kamer.", + "name": "Slika" }, "picture-glance": { "description": "Kartica Picture Glance prikazuje sliko in ustrezna stanja entitete kot ikono. Subjekti na desni strani omogočajo preklopna dejanja, drugi pa prikazujejo pogovorno okno z več informacijami.", @@ -2561,7 +2789,8 @@ "description": "Kartica Sensor vam omogoča hiter pregled stanja vaših senzorjev z izbirnim grafom, s katerim lahko prikažete spremembe skozi čas.", "graph_detail": "Podrobnosti grafa", "graph_type": "Vrsta grafikona", - "name": "Senzor" + "name": "Senzor", + "show_more_detail": "Pokaži več podrobnosti" }, "shopping-list": { "description": "Kartica nakupovalni seznam omogoča dodajanje, urejanje in brisanje elementov s seznama nakupov.", @@ -2569,12 +2798,12 @@ "name": "Nakupovalni seznam" }, "thermostat": { - "description": "Kartica Termostat omogoča nadzor nad vašo klimatsko enoto. Omogoča vam spreminjanje temperature in načina dela.", + "description": "Kartica Termostat omogoča nadzor nad vašo klimatsko enoto. Omogoča spreminjanje temperature in načina dela.", "name": "Termostat" }, "vertical-stack": { "description": "Kartica Vertical Stack vam omogoča, da združite več kartic, tako da vedno sedijo v istem stolpcu.", - "name": "Navpična skladnica" + "name": "Navpični sklad" }, "weather-forecast": { "description": "Kartica Weather Forecast prikazuje vreme. Zelo koristno za vključiti na vmesnike, ki jih ljudje prikažejo na steni.", @@ -2583,9 +2812,16 @@ } }, "cardpicker": { + "by_card": "Po kartici", + "by_entity": "Po entiteti", "custom_card": "Po meri", + "domain": "Domena", + "entity": "Entiteta", "no_description": "Opis ni na voljo." }, + "edit_badges": { + "panel_mode": "Te značke ne bodo prikazane, ker je ta pogled v načinu \"Panel Mode\"." + }, "edit_card": { "add": "Dodaj kartico", "confirm_cancel": "Ali ste prepričani, da želite preklicati?", @@ -2594,9 +2830,12 @@ "edit": "Uredi", "header": "Nastavitve kartice", "move": "Premakni v pogled", + "move_after": "Premakni kartico po", + "move_before": "Premakni kartico pred", "options": "Več možnosti", "pick_card": "Katero kartico želite dodati?", "pick_card_view_title": "Katero kartico želite dodati v pogled {name}?", + "search_cards": "Poišči kartice", "show_code_editor": "Pokaži urejevalnik kode", "show_visual_editor": "Pokaži vizualni urejevalnik", "toggle_editor": "Preklop na urejevalnik", @@ -2648,7 +2887,7 @@ "error_remove": "Konfiguracije ni mogoče odstraniti: {error}", "error_save_yaml": "YAML-a ni mogoče shraniti: {error}", "header": "Uredi konfiguracijo", - "resources_moved": "Viri se naj ne bi več dodajali v Lovelace konfiguracijo ampak v Lovelace config ploščo.", + "resources_moved": "Virov ne bi smeli več dodajati v konfiguracijo Lovelace, lahko pa jih dodate na konfiguracijski plošči Lovelace.", "save": "Shrani", "saved": "Shranjeno", "unsaved_changes": "Neshranjene spremembe" @@ -2658,7 +2897,7 @@ "close": "Zapri", "empty_config": "Začnite s prazno nadzorno ploščo", "header": "Prevzemite nadzor nad lovelace vmesnikom", - "para": "To nadzorno ploščo trenutno vzdržuje Home Assistant. Samodejno se posodobi, ko bodo na voljo novi subjekti ali komponente Lovelace UI. Če prevzamete nadzor, se ta nadzorna plošča ne bo več samodejno posodabljala. Vedno lahko ustvarite novo nadzorno ploščo v konfiguraciji, s katero se lahko igrate.", + "para": "To nadzorno ploščo trenutno vzdržuje Home Assistant. Samodejno se posodobi, ko bodo na voljo nove entitete ali komponente Lovelace UI. Če prevzamete nadzor, se ta nadzorna plošča ne bo več samodejno posodabljala. Vedno lahko ustvarite novo nadzorno ploščo v konfiguraciji, s katero se lahko igrate.", "para_sure": "Ali ste prepričani, da želite prevzeti nadzor nad vašim vmesnikom?", "save": "Prevzemite nadzor", "yaml_config": "Za začetek vam lahko pomaga trenutne nastavitve te nadzorne plošče:", @@ -2700,7 +2939,7 @@ "available_entities": "To so entitete, ki so vam na voljo, vendar še niso v uporabniškem vmesniku Lovelace.", "domain": "Domena", "entity": "Subjekt", - "entity_id": "ID subjekta", + "entity_id": "ID entitete", "last_changed": "Zadnja sprememba", "no_data": "Najdenih ni bilo neuporabljenih entitet", "search": "Iskanje entitet", @@ -2878,6 +3117,7 @@ "intro": "Pozdravljeni {name}, dobrodošli v Home Assistantu. Kako bi radi poimenovali vaš dom?", "intro_location": "Radi bi vedeli, kje živite. Te informacije vam bodo pomagale pri prikazovanju informacij in postavitvi avtomatizacij, ki temeljijo na soncu. Ti podatki se nikoli ne delijo izven vašega omrežja.", "intro_location_detect": "Lahko vam pomagamo izpolniti te informacije z enkratno zahtevo za zunanjo storitev.", + "location_name": "Ime namestitve Home Assistant", "location_name_default": "Dom" }, "integration": { @@ -2886,6 +3126,12 @@ "more_integrations": "Več" }, "intro": "Ali ste pripravljeni prebuditi svoj dom, povrniti svojo zasebnost in se pridružiti svetovni skupnosti ustvarjalcev?", + "restore": { + "description": "Lahko pa obnovite tudi iz prejšnjega posnetka.", + "hide_log": "Skrij celoten dnevnik", + "in_progress": "Obnavljanje v teku", + "show_log": "Prikaži celoten dnevnik" + }, "user": { "create_account": "Ustvarite račun", "data": { @@ -2917,6 +3163,11 @@ "submit": "Pošlji" }, "current_user": "Trenutno ste prijavljeni kot {fullName}.", + "customize_sidebar": { + "button": "Uredi", + "description": "Če želite aktivirati način urejanja, lahko pritisnete in pridržite glavo stranske vrstice.", + "header": "Spremeni vrstni red in skrij predmete v stranski vrstici" + }, "dashboard": { "description": "Izberite privzeto nadzorno ploščo za to napravo.", "dropdown_label": "Nadzorna plošča", @@ -2943,6 +3194,7 @@ "confirm_delete": "Ali ste prepričani, da želite izbrisati žeton za dostop za {name} ?", "create": "Ustvari žeton", "create_failed": "Ni bilo mogoče ustvariti žetona za dostop.", + "created": "Ustvarjeno {date}", "created_at": "Ustvarjen na {date}", "delete_failed": "Ni bilo mogoče ustvariti žetona za dostop.", "description": "Ustvarite dolgožive žetone dostopa, s katerimi lahko skripte komunicirajo z vašim primerkom Home Assistanta. Vsak žeton bo veljaven 10 let od nastanka. Trenutno so aktivni naslednji dolgotrajni dostopni žetoni.", @@ -2950,6 +3202,7 @@ "header": "Dolgotrajni dostopni žetoni", "last_used": "Nazadnje uporabljen {date} iz {location}", "learn_auth_requests": "Naučite se, kako naredite preverjene zahteve.", + "name": "Ime", "not_used": "Nikoli ni bil uporabljen", "prompt_copy_token": "Kopirate žeton za dostop. Ta ne bo prikazan znova.", "prompt_name": "Dajte žetonu ime" @@ -3020,6 +3273,7 @@ } }, "sidebar": { + "done": "Končano", "external_app_configuration": "Nastavitve aplikacije", "sidebar_toggle": "Preklop stranske vrstice" } diff --git a/translations/frontend/sv.json b/translations/frontend/sv.json index 2182c235e2..20129a006c 100644 --- a/translations/frontend/sv.json +++ b/translations/frontend/sv.json @@ -577,6 +577,8 @@ "messages": { "became_unavailable": "blev otillgänglig", "changed_to_state": "ändrades till {state}", + "cleared_device_class": "rensat (ingen {device_class} upptäckt)", + "detected_device_class": "upptäckt {device_class}", "rose": "gick upp", "set": "gick ned", "turned_off": "Slogs av", @@ -599,6 +601,7 @@ } }, "media-browser": { + "audio_not_supported": "Mediaspelaren i webbläsaren stödjer inte denna typ av musikmedia.", "choose_player": "Välj spelare", "choose-source": "Välj källa", "class": { @@ -645,6 +648,7 @@ "play": "Spela", "play-media": "Spela media", "setup_local_help": "Kontrollera {documentation} om hur du ställer in lokala medier.", + "video_not_supported": "Mediaspelaren i webbläsaren stödjer inte denna typ av videomedia.", "web-browser": "Webbläsare" }, "picture-upload": { @@ -691,6 +695,11 @@ }, "service-picker": { "service": "Tjänst" + }, + "user-picker": { + "add_user": "Lägg till användare", + "no_user": "Ingen användare", + "remove_user": "Ta bort användare" } }, "dialogs": { @@ -733,6 +742,13 @@ "ok": "OK" }, "helper_settings": { + "counter": { + "initial": "Initialt värde", + "maximum": "Maximalt värde", + "minimum": "Minsta värde", + "restore": "Återställ det senast kända värdet när Home Assistant startar", + "step": "Steglängd" + }, "generic": { "icon": "Ikon", "name": "Namn" @@ -768,6 +784,9 @@ }, "platform_not_loaded": "Integrationen {platform} har ej laddats in. Lägg till integrationen genom att lägga till 'default_config:' eller ''{platform}:''.", "required_error_msg": "Det här fältet krävs", + "timer": { + "duration": "Varaktighet" + }, "yaml_not_editable": "Inställningar för denna entitet kan inte ändras från användargränssnittet. Enbart entiteter uppsatta från användargränssnittet är konfigurerbara från användargränssnittet." }, "image_cropper": { @@ -779,6 +798,7 @@ "dismiss": "Avfärda", "edit": "Redigera entitet", "history": "Historik", + "last_changed": "Senast ändrad", "last_updated": "Senast uppdaterad", "person": { "create_zone": "Skapa zon från aktuell plats" @@ -839,18 +859,41 @@ "commands": { "reload": { "automation": "Ladda om automationer", + "command_line": "Ladda om command line entiteter", + "core": "Ladda om plats ", + "filesize": "Ladda om filstorleks ", + "filter": "Ladda om filter entiteter", + "generic": "Ladda om standard IP kamera entiteter", + "generic_thermostat": "Ladda om standard termostat entiteter", + "group": "Ladda om grupper, grupp entiteter och meddelandetjänster", + "history_stats": "Ladda om historisk statistik entiteter", "homekit": "Ladda om HomeKit", + "input_boolean": "Ladda om input boolean", "input_datetime": "Ladda om inmatningsdatum/tid", + "input_number": "Ladda om input nummer", + "input_select": "Ladda om input rullista", + "input_text": "Ladda om input texter", "min_max": "Ladda om min/max entiteter", "mqtt": "Ladda om mqtt entiteter", "person": "Ladda om personer", + "ping": "Ladda om ping och binära sensor entiteter", "reload": "Ladda om {domain}", + "rest": "Ladda om rest entiteter och ", "rpi_gpio": "Ladda om Raspberry Pi GPIO entiteter", "scene": "Ladda om scener", "script": "Ladda om skripts", "smtp": "Ladda om smtp notifieringstjänster", + "statistics": "Ladda om statistik entiteter", "telegram": "Ladda om telegram notifieringstjänster", + "template": "Ladda om mallade entiteter", + "trend": "Ladda om trend entiteter", + "universal": "Ladda om universella mediaspelar entiteter", "zone": "Ladda om zoner" + }, + "server_control": { + "perform_action": "{action} Server", + "restart": "Starta om", + "stop": "Stopp" } }, "filter_placeholder": "Entitetsfilter" @@ -909,11 +952,13 @@ "notification_drawer": { "click_to_configure": "Klicka på knappen för att konfigurera {entity}", "close": "Stäng", + "dismiss_all": "Avfärda alla", "empty": "Inga notiser", "title": "Notiser" }, "notification_toast": { "connection_lost": "Anslutning tappad. Ansluter igen...", + "dismiss": "Avfärda", "service_call_failed": "Misslyckades med att anropa tjänsten {service}.", "started": "Home Assistant har startat!", "starting": "Home Assistant startar, allt är inte tillgängligt förrän uppstarten är klar.", @@ -1167,6 +1212,9 @@ "trigger": "Utlösare" }, "event": { + "context_user_pick": "Lägg till användare", + "context_user_picked": "Användaravfyrning", + "context_users": "Begränsa till händelser som utlöses av", "event_data": "Händelsedata", "event_type": "Händelsetyp", "label": "Händelse" @@ -1476,6 +1524,7 @@ "different_include": "Möjligen via en domain, en glob eller en annan include.", "pick_attribute": "Välj ett attribut att anpassa", "picker": { + "documentation": "Anpassningsdokumentation", "entity": "Entitet", "header": "Anpassningar", "introduction": "Justera attribut per enhet. Tillagda och redigerade anpassningar kommer att tillträda omedelbart. Borttagna anpassningar kommer att träda i kraft när enheten är uppdaterad." @@ -1490,18 +1539,25 @@ "add_prompt": "Inga {name} har lagts till med hjälp av den här enheten ännu. Du kan lägga till genom att klicka på + knappen ovan.", "automation": { "actions": { - "caption": "När något utlöses..." + "caption": "När något utlöses...", + "no_actions": "Inga åtgärder", + "unknown_action": "Okänd åtgärd" }, "automations": "Automatiseringar", "conditions": { - "caption": "Utför endast om..." + "caption": "Utför endast om...", + "no_conditions": "Inga villkor", + "unknown_condition": "Okänt villkor" }, "create": "Skapa automatisering med enheten", "no_automations": "Inga automatiseringar", "no_device_automations": "Det finns inga automatiseringar tillgängliga för den här enheten.", "triggers": { - "caption": "Gör något när ..." - } + "caption": "Gör något när ...", + "no_triggers": "Inga utlösare", + "unknown_trigger": "Okänd utlösare" + }, + "unknown_automation": "Okänd automatisering" }, "cant_edit": "Du kan bara redigera objekt som skapas i användargränssnittet.", "caption": "Enheter", @@ -1563,6 +1619,7 @@ }, "filter": { "filter": "Filter", + "hidden_entities": "{number} dold {number, plural,\n one {entity}\n other {entities}\n}", "show_all": "Visa alla", "show_disabled": "Visa inaktiverade entiteter", "show_readonly": "Visa skrivskyddade entiteter", @@ -1619,11 +1676,13 @@ "no_helpers": "Det verkar som att du inte har några hjälpare än!" }, "types": { + "counter": "Räknare", "input_boolean": "Växla", "input_datetime": "Datum och/eller tid", "input_number": "Nummer", "input_select": "Rullgardinsmenyn", - "input_text": "Text" + "input_text": "Text", + "timer": "Timer" } }, "info": { @@ -1842,6 +1901,8 @@ "network": "Nätverk", "node_id": "Nod-ID", "ozw_instance": "OpenZWave-instans", + "query_stage": "Frågestadium", + "wakeup_instructions": "Väckningsinstruktioner", "zwave": "Z-Wave" }, "device_info": { @@ -1851,11 +1912,18 @@ }, "navigation": { "network": "Nätverk", + "node": { + "config": "Konfiguration", + "dashboard": "Instrumentpanel" + }, "nodes": "Noder", "select_instance": "Välj instans" }, "network_status": { "details": { + "driverallnodesqueried": "Alla noder har frågats", + "driverallnodesqueriedsomedead": "Alla noder har ifrågasatts. Vissa noder hittades döda", + "driverawakenodesqueries": "Alla vakna noder har ifrågasatts", "driverfailed": "Det gick inte att ansluta till Z-Wave-styrenheten", "driverready": "Initierar Z-Wave-styrenheten", "driverremoved": "Drivrutinen har tagits bort", @@ -1876,19 +1944,33 @@ "introduction": "Hantera nätverksövergripande funktioner.", "node_count": "{count} noder" }, + "node_config": { + "header": "Nodkonfiguration", + "help_source": "Config-parameterbeskrivningar och hjälptext tillhandahålls av OpenZWave-projektet.", + "introduction": "Hantera de olika konfigurationsparametrarna för en Z-Wave-nod.", + "wakeup_help": "Batteridrivna noder måste vara vaken för att ändra konfigurationen. Om noden inte är vaken kommer OpenZWave att försöka uppdatera nodens konfiguration nästa gång den vaknar, vilket kan vara flera timmar (eller dagar) senare. Följ dessa steg för att väcka enheten:" + }, + "node_metadata": { + "product_manual": "Produktmanual" + }, "node_query_stages": { "associations": "Uppdaterar associationsgrupper och medlemskap", + "cacheload": "Laddar information från OpenZWave-cachefilen. Batterinoder förblir i detta skede tills noden vaknar.", "complete": "Intervjuprocessen är klar", "configuration": "Hämtar konfigurationsvärden från noden", "dynamic": "Hämtar värden som ofta ändras från noden", "instances": "Inhämtar detaljer om vilka instanser eller kanaler en enhet stöder", "manufacturerspecific1": "Inhämtar tillverkar- och produkt-ID-koder från noden", + "manufacturerspecific2": "Skaffa ytterligare tillverkar- och produkt-ID-koder från noden", "neighbors": "Hämtar en lista över nodens grannar", + "nodeinfo": "Skaffa kommandoklasser som stöds från noden", "nodeplusinfo": "Hämtar Z-Wave+-information från noden", "probe": "Kontrollera om noden är vaken / levande", + "protocolinfo": "Hämta grundläggande Z-Wave-funktioner för denna nod från styrenheten", "session": "Hämtar värden som sällan ändras från noden", "static": "Hämtar statiska värden från enheten", - "versions": "Inhämtar information om firmware och kommandoklassversioner" + "versions": "Inhämtar information om firmware och kommandoklassversioner", + "wakeup": "Ställa in stöd för väckarköer och meddelanden" }, "node": { "button": "Noddetaljer", @@ -1899,6 +1981,7 @@ "id": "ID", "manufacturer": "Tillverkare", "model": "Modell", + "query_stage": "Frågestadium", "zwave_plus": "Z-Wave Plus" }, "refresh_node": { @@ -1921,6 +2004,7 @@ }, "services": { "add_node": "Lägg till nod", + "cancel_command": "Avbryt kommandot", "remove_node": "Ta bort nod" } }, @@ -2055,11 +2139,15 @@ "section": { "reloading": { "automation": "Ladda om automatiseringar", + "command_line": "Ladda om command line entiteter", "core": "Ladda om plats & anpassningar", + "filesize": "Ladda om filstorleks entiteter", "filter": "Ladda om filterentiteter", "generic": "Ladda om generella IP kamera entiteter", + "generic_thermostat": "Ladda om standard termometer entiteter", "group": "Ladda om grupper", "heading": "YAML-konfiguration laddas om", + "history_stats": "Ladda om historiskstatistik entiteter", "homekit": "Ladda om HomeKit", "input_boolean": "Ladda om inmatning av booleska värden", "input_datetime": "Ladda om inmatningsdatum/tid", @@ -2067,15 +2155,21 @@ "input_select": "Ladda om inmatningsväljare", "input_text": "Ladda om inmatningstext", "introduction": "Vissa delar av Home Assistant kan laddas om utan att en omstart krävs. Att trycka på \"ladda om\" innebär att den nuvarande konfiguration inaktiveras och den nya laddas.", + "min_max": "Ladda om min/max entiteter", "mqtt": "Ladda om MQTT entiteter", "person": "Ladda om personer", + "ping": "Ladda om ping binära sensor entiteter", "reload": "Ladda om {domain}", + "rest": "Ladda om rest entiteter och aviseringstjänster", "rpi_gpio": "Ladda om Raspberry Pi GPIO-entiteter", "scene": "Ladda om scenarier", "script": "Ladda om skript", "smtp": "Ladda om SMTP aviseringstjänster", + "statistics": "Ladda om statistik entiteter", "telegram": "Ladda om Telegram aviseringstjänster", "template": "Ladda om mallar för entiteter", + "trend": "Ladda om trend entiteter", + "universal": "Ladda om universella mediespelare entiteter", "zone": "Ladda om zoner" }, "server_management": { @@ -2102,6 +2196,7 @@ "create_automation": "Skapa automatisering med tagg", "description": "Hantera taggar", "detail": { + "companion_apps": "kompletterande appar", "create": "Skapa", "create_and_write": "Skapa och redigera", "delete": "Ta bort", @@ -2110,13 +2205,15 @@ "new_tag": "Ny tagg", "tag_id": "Tagg-ID", "tag_id_placeholder": "Autogenereras när det lämnas tomt", - "update": "Uppdatera" + "update": "Uppdatera", + "usage": "En tagg kan utlösa en automatisering när den skannas, du kan använda NFC-taggar, QR-koder eller någon annan typ av tagg. Använd vår {companion_link} att skriva den här taggen till en programmerbar NFC-tagg eller skapa en QR-kod nedan." }, "edit": "Redigera", "headers": { "last_scanned": "Senast skannad", "name": "Namn" }, + "learn_more": "Lär dig mer om utlösare", "never_scanned": "Aldrig skannad", "no_tags": "Inga taggar", "write": "Redigera" @@ -2279,7 +2376,7 @@ "create": "Skapa", "delete": "Radera", "icon": "Ikon", - "icon_error_msg": "Ikonen ska vara i format prefix:ikonnamn, till exempel: mdi:home", + "icon_error_msg": "Ikonen ska vara i format \"prefix:ikonnamn\", till exempel: \"mdi:home\"", "latitude": "Latitud", "longitude": "Longitud", "name": "Namn", @@ -2452,7 +2549,9 @@ "listeners": "Den här mallen lyssnar efter följande tillståndsändrade händelser:", "no_listeners": "Den här mallen lyssnar inte efter några tillståndsändrade händelser och uppdateras inte automatiskt.", "reset": "Återställ till demomall", + "result_type": "Resultattyp", "template_extensions": "Mallutökningar för Home Assistant", + "time": "Den här mallen uppdateras i början av varje minut.", "title": "Mallar", "unknown_error_template": "Okänt fel vid rendering av mall" } @@ -2525,6 +2624,7 @@ "editor": { "action-editor": { "actions": { + "call-service": "Anropa tjänst", "default_action": "Standardåtgärd", "more-info": "Mer information", "navigate": "Navigera", @@ -2533,6 +2633,7 @@ "url": "URL" }, "editor_service_data": "Data för en tjänst kan bara anges i kodredigeraren", + "navigation_path": "Navigationsväg", "url_path": "Sökväg till URL" }, "card": { @@ -2542,11 +2643,14 @@ "name": "Larmpanel" }, "button": { + "default_action_help": "Standardåtgärden beror på enhetens funktioner, den växlas antingen eller mer information visas.", "description": "Knappkortet låter dig lägga till knappar för att utföra uppgifter.", "name": "Knapp" }, "calendar": { + "calendar_entities": "Kalenderentiteter", "description": "Kalenderkortet visar en kalender med dag-, vecka- och listvyer", + "inital_view": "Ursprunglig vy", "name": "Kalender", "views": { "dayGridDay": "Dag", @@ -2572,6 +2676,7 @@ "entities": { "description": "Entitetskortet är den vanligaste korttypen. Det grupperar objekt i listor.", "edit_special_row": "Visa detaljerna för denna rad genom att klicka på redigeringsknappen", + "entity_row_editor": "Enhetsradredigerare", "entity_row": { "attribute": "Attribut", "button": "Knapp", @@ -2589,6 +2694,7 @@ "entity-id": "Entitets-ID", "last-changed": "Senast ändrad", "last-triggered": "Senast utlöst", + "last-updated": "Senast uppdaterad", "none": "Ingen sekundärinformation", "position": "Position", "tilt-position": "Lutningsposition" @@ -2745,6 +2851,9 @@ "entity": "Entitet", "no_description": "Ingen beskrivning finns tillgänglig." }, + "edit_badges": { + "panel_mode": "Dessa märken visas inte eftersom den här vyn är i \"Panelläge\"." + }, "edit_card": { "add": "Lägg till kort", "confirm_cancel": "Är du säker på att du vill avbryta?", @@ -2850,7 +2959,8 @@ "exit_edit_mode": "Avsluta UI-redigeringsläge", "help": "Hjälp", "refresh": "Uppdatera", - "reload_resources": "Ladda om resurser" + "reload_resources": "Ladda om resurser", + "start_conversation": "Starta konversation" }, "reload_lovelace": "Ladda om användargränssnittet", "reload_resources": { @@ -3095,6 +3205,10 @@ "dropdown_label": "Instrumentpanel", "header": "Instrumentpanel" }, + "enable_shortcuts": { + "description": "Aktivera eller inaktivera kortkommandon för att utföra olika åtgärder i användargränssnittet.", + "header": "Tangentbordsgenvägar" + }, "force_narrow": { "description": "Detta kommer att dölja sidofältet som standard, liknande mobilupplevelsen.", "header": "Göm alltid sidofältet" @@ -3139,6 +3253,10 @@ "header": "Tvåfaktorsautentiseringsmoduler" }, "push_notifications": { + "add_device_prompt": { + "input_label": "Enhetsnamn", + "title": "Vad ska den här enheten kallas?" + }, "description": "Skicka meddelanden till den här enheten", "error_load_platform": "Konfigurera notify.html5.", "error_use_https": "Kräver att SSL är aktiverat för frontend.", diff --git a/translations/frontend/zh-Hans.json b/translations/frontend/zh-Hans.json index 86887903a6..18a93d2ee4 100644 --- a/translations/frontend/zh-Hans.json +++ b/translations/frontend/zh-Hans.json @@ -1654,7 +1654,7 @@ }, "filtering": { "clear": "清除", - "filtering_by": "筛选方式" + "filtering_by": "正在筛选:" }, "header": "配置 Home Assistant", "helpers": { @@ -1774,7 +1774,7 @@ "show_ignored": "显示忽略的集成", "stop_ignore": "不再忽略" }, - "integration": "个集成", + "integration": "集成", "integration_not_found": "未找到集成。", "new": "设置新集成", "no_integrations": "您好像还没有配置任何集成。点击下面的按钮来添加第一个集成!", From 3b91343082f0079d4550931c5cec31f75595a34e Mon Sep 17 00:00:00 2001 From: Ryan Meek <25127328+maykar@users.noreply.github.com> Date: Sun, 1 Nov 2020 16:04:27 -0500 Subject: [PATCH 235/242] Dark mode header color (#7514) Co-authored-by: Bram Kragten --- src/common/color/convert-color.ts | 13 ++---------- src/common/color/hex.ts | 24 +++++++++++++++++++++++ src/common/dom/apply_themes_on_element.ts | 8 ++++++++ src/resources/styles.ts | 2 +- 4 files changed, 35 insertions(+), 12 deletions(-) create mode 100644 src/common/color/hex.ts diff --git a/src/common/color/convert-color.ts b/src/common/color/convert-color.ts index f48e6184a0..29f95b4283 100644 --- a/src/common/color/convert-color.ts +++ b/src/common/color/convert-color.ts @@ -1,10 +1,4 @@ -const expand_hex = (hex: string): string => { - let result = ""; - for (const val of hex) { - result += val + val; - } - return result; -}; +import { expandHex } from "./hex"; const rgb_hex = (component: number): string => { const hex = Math.round(Math.min(Math.max(component, 0), 255)).toString(16); @@ -14,10 +8,7 @@ const rgb_hex = (component: number): string => { // Conversion between HEX and RGB export const hex2rgb = (hex: string): [number, number, number] => { - hex = hex.replace("#", ""); - if (hex.length === 3 || hex.length === 4) { - hex = expand_hex(hex); - } + hex = expandHex(hex); return [ parseInt(hex.substring(0, 2), 16), diff --git a/src/common/color/hex.ts b/src/common/color/hex.ts new file mode 100644 index 0000000000..a25b6d6442 --- /dev/null +++ b/src/common/color/hex.ts @@ -0,0 +1,24 @@ +export const expandHex = (hex: string): string => { + hex = hex.replace("#", ""); + if (hex.length === 6) return hex; + let result = ""; + for (const val of hex) { + result += val + val; + } + return result; +}; + +// Blend 2 hex colors: c1 is placed over c2, blend is c1's opacity. +export const hexBlend = (c1: string, c2: string, blend = 50): string => { + let color = ""; + c1 = expandHex(c1); + c2 = expandHex(c2); + for (let i = 0; i <= 5; i += 2) { + const h1 = parseInt(c1.substr(i, 2), 16); + const h2 = parseInt(c2.substr(i, 2), 16); + let hex = Math.floor(h2 + (h1 - h2) * (blend / 100)).toString(16); + while (hex.length < 2) hex = "0" + hex; + color += hex; + } + return `#${color}`; +}; diff --git a/src/common/dom/apply_themes_on_element.ts b/src/common/dom/apply_themes_on_element.ts index 902a1a196a..4e1aeb9ec6 100644 --- a/src/common/dom/apply_themes_on_element.ts +++ b/src/common/dom/apply_themes_on_element.ts @@ -7,6 +7,7 @@ import { rgb2hex, rgb2lab, } from "../color/convert-color"; +import { hexBlend } from "../color/hex"; import { labBrighten, labDarken } from "../color/lab"; import { rgbContrast } from "../color/rgb"; @@ -37,6 +38,13 @@ export const applyThemesOnElement = ( if (themeOptions.dark) { cacheKey = `${cacheKey}__dark`; themeRules = darkStyles; + if (themeOptions.primaryColor) { + themeRules["app-header-background-color"] = hexBlend( + themeOptions.primaryColor, + "#121212", + 8 + ); + } } if (themeOptions.primaryColor) { cacheKey = `${cacheKey}__primary_${themeOptions.primaryColor}`; diff --git a/src/resources/styles.ts b/src/resources/styles.ts index 2313327b54..c263427770 100644 --- a/src/resources/styles.ts +++ b/src/resources/styles.ts @@ -8,7 +8,7 @@ export const darkStyles = { "secondary-text-color": "#9b9b9b", "disabled-text-color": "#6f6f6f", "app-header-text-color": "#e1e1e1", - "app-header-background-color": "#1c1c1c", + "app-header-background-color": "#101e24", "switch-unchecked-button-color": "#999999", "switch-unchecked-track-color": "#9b9b9b", "divider-color": "rgba(225, 225, 225, .12)", From 199e17d0b11e57e75ea6b784f8a2d24f6e784abd Mon Sep 17 00:00:00 2001 From: Ryan Meek <25127328+maykar@users.noreply.github.com> Date: Sun, 1 Nov 2020 16:04:52 -0500 Subject: [PATCH 236/242] Use paper-tabs while in edit mode (#7563) Co-authored-by: Bram Kragten --- src/panels/lovelace/hui-root.ts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/panels/lovelace/hui-root.ts b/src/panels/lovelace/hui-root.ts index ad92d4a9f8..77f0ca4199 100644 --- a/src/panels/lovelace/hui-root.ts +++ b/src/panels/lovelace/hui-root.ts @@ -17,6 +17,7 @@ import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-scroll-effects/effects/waterfall"; import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/paper-tabs/paper-tab"; +import "@polymer/paper-tabs/paper-tabs"; import { css, CSSResult, @@ -381,7 +382,7 @@ class HUIRoot extends LitElement { ${this._editMode ? html`
- ` : ""} - +
` : ""} @@ -798,13 +799,17 @@ class HUIRoot extends LitElement { width: 100%; height: 100%; margin-left: 4px; + } + paper-tabs { + margin-left: 12px; + margin-left: max(env(safe-area-inset-left), 12px); + margin-right: env(safe-area-inset-right); + } + ha-tabs, paper-tabs { --paper-tabs-selection-bar-color: var(--text-primary-color, #fff); text-transform: uppercase; } - .edit-mode ha-tabs { - margin-left: max(env(safe-area-inset-left), 24px); - margin-right: max(env(safe-area-inset-right), 24px); - } + .edit-mode { background-color: var(--dark-color, #455a64); color: var(--text-dark-color); From 57500f6c9796d9e6b7dd963c281b0e1307ad04b7 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Mon, 2 Nov 2020 00:32:22 +0000 Subject: [PATCH 237/242] [ci skip] Translation update --- translations/frontend/ca.json | 4 ++-- translations/frontend/el.json | 36 +++++++++++++++++------------------ translations/frontend/et.json | 2 +- translations/frontend/fr.json | 1 + translations/frontend/hu.json | 16 ++++++++-------- translations/frontend/ru.json | 2 +- translations/frontend/sl.json | 4 ++-- 7 files changed, 33 insertions(+), 32 deletions(-) diff --git a/translations/frontend/ca.json b/translations/frontend/ca.json index dd83cc294e..31ac096b02 100644 --- a/translations/frontend/ca.json +++ b/translations/frontend/ca.json @@ -798,7 +798,7 @@ "dismiss": "Desestimar el diàleg", "edit": "Edita entitat", "history": "Historial", - "last_changed": "Darrera canvi", + "last_changed": "Darrer canvi", "last_updated": "Última actualització", "person": { "create_zone": "Crea una zona a partir de la ubicació actual" @@ -3255,7 +3255,7 @@ "push_notifications": { "add_device_prompt": { "input_label": "Nom del dispositiu", - "title": "Com s'ha d'anomenar aquest dispositiu?" + "title": "Com vols anomenar aquest dispositiu?" }, "description": "Envia notificacions a aquest dispositiu.", "error_load_platform": "Configurar notify.html5.", diff --git a/translations/frontend/el.json b/translations/frontend/el.json index 80d31314c1..c0cb9cf939 100644 --- a/translations/frontend/el.json +++ b/translations/frontend/el.json @@ -439,7 +439,7 @@ }, "script": { "cancel": "Ακύρωση", - "cancel_multiple": "Ακύρωση {αριθμός}", + "cancel_multiple": "Ακύρωση {number}", "execute": "Εκτέλεση" }, "service": { @@ -634,7 +634,7 @@ "server": "Διακομιστής" }, "documentation": "τεκμηρίωση", - "learn_adding_local_media": "Μάθετε περισσότερα σχετικά με την προσθήκη πολυμέσων στην {τεκμηρίωση}.", + "learn_adding_local_media": "Μάθετε περισσότερα σχετικά με την προσθήκη πολυμέσων στην {documentation} .", "local_media_files": "Τοποθετήστε τα αρχεία βίντεο, ήχου και εικόνας στον κατάλογο πολυμέσων για να μπορείτε να περιηγηθείτε και να τα αναπαραγάγετε στο πρόγραμμα περιήγησης ή σε υποστηριζόμενες συσκευές αναπαραγωγής πολυμέσων.", "media_browsing_error": "Σφάλμα περιήγησης πολυμέσων", "media_not_supported": "Το Πρόγραμμα αναπαραγωγής πολυμέσων του προγράμματος περιήγησης δεν υποστηρίζει αυτόν τον τύπο πολυμέσων", @@ -647,7 +647,7 @@ "pick-media": "Επιλογή μέσων", "play": "Αναπαραγωγή", "play-media": "Αναπαραγωγή πολυμέσων", - "setup_local_help": "Ελέγξτε την {τεκμηρίωση} σχετικά με τον τρόπο ρύθμισης των τοπικών μέσων.", + "setup_local_help": "Ελέγξτε την {documentation} σχετικά με τον τρόπο ρύθμισης τοπικών μέσων.", "video_not_supported": "Το πρόγραμμα περιήγησής σας δεν υποστηρίζει το στοιχείο βίντεο.", "web-browser": "Φυλλομετρητής" }, @@ -1024,7 +1024,7 @@ "conditions": "Συνθήκες", "default": "Προεπιλεγμένες ενέργειες", "label": "Επιλέξτε", - "option": "Επιλογή {αριθμός}", + "option": "Επιλογή {number}", "remove_option": "Κατάργηση επιλογής", "sequence": "Ενέργειες" }, @@ -1384,11 +1384,11 @@ "dont_expose_entity": "Να μην εκτεθεί η οντότητα", "expose": "Έκθεση στο Alexa", "expose_entity": "Έκθεση οντότητας", - "exposed": "{επιλεγμένο} εκτεθειμένο", + "exposed": "{selected} εκτεθειμένο", "exposed_entities": "Εκτεθειμένες οντότητες", "follow_domain": "Παρακολούθηση τομέα", "manage_domains": "Διαχείριση τομέων", - "not_exposed": "{επιλεγμένο} δεν εκτίθεται", + "not_exposed": "{selected} μη εκτεθειμένο", "not_exposed_entities": "Μη εκτεθειμένες οντότητες", "title": "Alexa" }, @@ -1429,11 +1429,11 @@ "dont_expose_entity": "Να μην εκτεθεί η οντότητα", "expose": "Έκθεση στο Google Assistant.", "expose_entity": "Έκθεση οντότητας", - "exposed": "{επιλεγμένο} εκτεθειμένο", + "exposed": "{selected} εκτεθειμένο", "exposed_entities": "Εκτεθειμένες οντότητες", "follow_domain": "Παρακολούθηση τομέα", "manage_domains": "Διαχείριση τομέων", - "not_exposed": "{επιλεγμένο} μη-εκτεθειμένο", + "not_exposed": "{selected} μη εκτεθειμένο", "not_exposed_entities": "Μη εκτεθειμένες οντότητες", "sync_to_google": "Συγχρονισμός αλλαγών στο Google.", "title": "Google Assistant" @@ -1580,7 +1580,7 @@ "device_not_found": "Η συσκευή δε βρέθηκε.", "entities": { "add_entities_lovelace": "Προσθήκη στο Lovelace", - "disabled_entities": "+{count} {count, πληθυντικός,\n μία {απενεργοποιημένη οντότητα}\n άλλες {απενεργοποιημένες οντότητες}\n}", + "disabled_entities": "+{count} {count, plural,\n one {απενεργοποιημένη οντότηταy}\n other {απενεργοποιημένες οντότητες}\n}", "entities": "Οντότητες", "hide_disabled": "Η απόκρυψη είναι απενεργοποιημένη", "none": "Αυτή η συσκευή δεν έχει οντότητες" @@ -1619,7 +1619,7 @@ }, "filter": { "filter": "Φίλτρο", - "hidden_entities": "{αριθμός} κρυφό {αριθμός, πληθυντικός,\n μία {οντότητα}\n άλλες {οντότητες}\n}", + "hidden_entities": "{number} κρυφό {number, plural,\n one {οντότητα}\n other {οντότητες}\n}", "show_all": "Εμφάνιση όλων", "show_disabled": "Προβολή απενεργοποιημένων οντοτήτων", "show_readonly": "Εμφάνιση οντοτήτων μόνο για ανάγνωση", @@ -1636,7 +1636,7 @@ "introduction2": "Χρησιμοποιήστε το μητρώο οντοτήτων για να παρακάμψετε το όνομα, να αλλάξετε το αναγνωριστικό οντότητας ή να καταργήσετε την καταχώριση από το Home Assistant.", "remove_selected": { "button": "Αφαίρεση επιλεγμένων", - "confirm_partly_text": "Μπορείτε να καταργήσετε μόνο {αφαιρούμενες} από τις επιλεγμένες {επιλεγμένες} οντότητες. Οι οντότητες μπορούν να καταργηθούν μόνο όταν η ενσωμάτωση δεν παρέχει πλέον τις οντότητες. Μερικές φορές πρέπει να κάνετε επανεκκίνηση του Home Assistant για να μπορέσετε να καταργήσετε τις οντότητες μιας ενσωμάτωσης που καταργήθηκε. Είστε βέβαιοι ότι θέλετε να καταργήσετε τις αφαιρούμενες οντότητες;", + "confirm_partly_text": "Μπορείτε να αφαιρέσετε μόνο {removable} από τις επιλεγμένες {selected} οντότητες. Οι οντότητες μπορούν να καταργηθούν μόνο όταν η ενοποίηση δεν παρέχει πλέον τις οντότητες. Μερικές φορές πρέπει να κάνετε επανεκκίνηση του Home Assistant για να μπορέσετε να καταργήσετε τις οντότητες μιας καταργημένης ενοποίησης. Είστε βέβαιοι ότι θέλετε να καταργήσετε τις αφαιρούμενες οντότητες;", "confirm_partly_title": "Μόνο {number} επιλεγμένες οντότητες μπορούν να καταργηθούν.", "confirm_text": "Θα πρέπει να τα αφαιρέσετε από το Lovelace config και τους αυτοματισμούς σας εάν περιέχουν αυτές τις οντότητες.", "confirm_title": "θέλετε να αφαιρέσετε {number} οντότητες;" @@ -1662,7 +1662,7 @@ "description": "Διαχειριστείτε στοιχεία που βοηθούν στη δημιουργία αυτοματισμών", "dialog": { "add_helper": "Προσθήκη βοηθού", - "add_platform": "Προσθήκη {πλατφόρμας}", + "add_platform": "Προσθήκη {platform}", "create": "Δημιουργία" }, "picker": { @@ -2159,7 +2159,7 @@ "mqtt": "Επανάληψη φόρτωσης μη αυτόματα ρυθμισμένων οντοτήτων mqtt", "person": "Επαναφόρτωση ατόμων", "ping": "Επαναφόρτωση οντοτήτων δυαδικών αισθητήρων ping", - "reload": "Επαναφόρτωση {τομέα}", + "reload": "Επαναφόρτωση {domain}", "rest": "Επαναφόρτωση οντοτήτων ανάπαυσης και ειδοποίηση υπηρεσιών", "rpi_gpio": "Επαναφόρτωση οντοτήτων Raspberry Pi GPIO", "scene": "Επαναφόρτωση σκηνών", @@ -2348,7 +2348,7 @@ "zha_zigbee_groups": "ZHA oμάδες Zigbee" }, "header": "Διαμόρφωση οικιακού αυτοματισμού Zigbee", - "introduction": "Εδώ μπορείς να παραμετροποιήσεις την ενοποίηση ZHA. Δεν είναι ακόμα δυνατό να παραμετροποιηθούν τα πάντα μέσω του γραφικού περιβάλλοντος εργασίας, αλλά το δουλεύουμε.", + "introduction": "Εδώ είναι δυνατό να ρυθμίσετε τις παραμέτρους του στοιχείου ZHA. Δεν είναι όλα δυνατά για να ρυθμίσετε από το ui ακόμα, αλλά εργαζόμαστε σε αυτό.", "network_management": { "header": "Διαχείριση δικτύου", "introduction": "Εντολές που επηρεάζουν ολόκληρο το δίκτυο" @@ -2363,7 +2363,7 @@ "hint_wakeup": "Μερικές συσκευές όπως οι αισθητήρες Xiaomi έχουν ένα κουμπί αφύπνισης το οποίο μπορείτε να πιέσετε για διαστήματα των ~5 δευτερολέπτων ώστε να κρατήσετε τις συσκευές αφυπνισμένες ενώ αλληλεπιδράτε μαζί τους.", "introduction": "Εκτελέστε εντολές ZHA που επηρεάζουν μια μόνο συσκευή. Επιλέξτε μια συσκευή για να δείτε μια λίστα διαθέσιμων εντολών." }, - "title": "Zigbee Home Automation" + "title": "Οικιακός Αυτοματισμός Zigbee" }, "zone": { "add_zone": "Προσθήκη ζώνης", @@ -2497,7 +2497,7 @@ "data": "Δεδομένα συμβάντος (YAML, προαιρετικό)", "description": "Πυροδοτήστε ένα συμβάν στο δίαυλο συμβάντων.", "documentation": "Έγγραφα συμβάντων", - "event_fired": "Το συμβάν {type} πυροδοτήθηκε επιτυχώς", + "event_fired": "Το συμβάν {name} ενεργοποιήθηκε", "fire_event": "Εκκίνηση συμβάντος", "listen_to_events": "Επισκόπηση συμβάντων", "listening_to": "Ακούω", @@ -2871,7 +2871,7 @@ "show_code_editor": "Εμφάνιση επεξεργαστή κώδικα", "show_visual_editor": "Εμφάνιση οπτικού προγράμματος επεξεργασίας", "toggle_editor": "Εναλλαγή κειμενογράφου", - "typed_header": "{τύπος} Διαμόρφωση κάρτας", + "typed_header": "{type} Διαμόρφωση κάρτας", "unsaved_changes": "Έχετε μη αποθηκευμένες αλλαγές" }, "edit_lovelace": { @@ -3226,7 +3226,7 @@ "confirm_delete": "Είστε σίγουρος ότι θέλετε να διαγράψετε το διακριτικό πρόσβασης για το {name};", "create": "Δημιουργία Διακριτικού", "create_failed": "Αδύνατη η δημιουργία του τρέχοντος διακριτικού.", - "created": "Δημιουργήθηκε {ημερομηνία}", + "created": "Δημιουργήθηκε {date}", "created_at": "Δημιουργήθηκε στις {date}", "delete_failed": "Αδύνατη η διαγραφή του τρέχοντος διακριτικού.", "description": "Δημιουργήστε διακριτικά πρόσβασης μακράς διάρκειας για να επιτρέψετε στα σενάρια σας να αλληλεπιδρούν με το Home Assistant. Κάθε διακριτικό θα ισχύει για 10 χρόνια. Τα παρακάτω διακριτικά πρόσβασης μακράς διαρκείας είναι ενεργά.", diff --git a/translations/frontend/et.json b/translations/frontend/et.json index 9fcce1c30b..ef98cca5e0 100644 --- a/translations/frontend/et.json +++ b/translations/frontend/et.json @@ -669,7 +669,7 @@ "relative_time": { "duration": { "day": "{count} {count, plural,\n one {päev}\n other {päeva}\n}", - "hour": "{count} {count, plural,\n one {tund}\n other {tundi}\n}", + "hour": "{count} {count, plural,\n one {tund}\n other {tunni}\n}", "minute": "{count} {count, plural,\n one {minut}\n other {minutit}\n}", "second": "{count} {count, plural,\n one {sekund}\n other {sekundit}\n}", "week": "{count} {count, plural,\n one {nädal}\n other {nädalat}\n}" diff --git a/translations/frontend/fr.json b/translations/frontend/fr.json index ae6298a82b..87f75bf4ef 100644 --- a/translations/frontend/fr.json +++ b/translations/frontend/fr.json @@ -798,6 +798,7 @@ "dismiss": "Fermer la fenêtre de dialogue", "edit": "Modifier l'entité", "history": "Historique", + "last_changed": "Dernière modification", "last_updated": "Dernière mise à jour", "person": { "create_zone": "Créer une zone à partir de l'emplacement actuel" diff --git a/translations/frontend/hu.json b/translations/frontend/hu.json index 57feb0f3cb..416447bb2e 100644 --- a/translations/frontend/hu.json +++ b/translations/frontend/hu.json @@ -868,11 +868,11 @@ "group": "Csoportok, csoport entitások és értesítési szolgáltatások újratöltése", "history_stats": "Előzmény statisztika entitások újratöltése", "homekit": "HomeKit újratöltése", - "input_boolean": "Bemeneti logikai változók újratöltése", + "input_boolean": "Logikai változó bemenetek újratöltése", "input_datetime": "Időpont bemenetek újratöltése", "input_number": "Szám bemenetek újratöltése", "input_select": "Választási bemenetek újratöltése", - "input_text": "Bemeneti szövegek újratöltése", + "input_text": "Szöveg bemenetek újratöltése", "min_max": "Min/max entitások újratöltése", "mqtt": "MQTT entitások újratöltése", "person": "Személyek újratöltése", @@ -885,7 +885,7 @@ "smtp": "Smtp értesítési szolgáltatások újratöltése", "statistics": "Statisztikai entitások újratöltése", "telegram": "Telegram értesítési szolgáltatások újratöltése", - "template": "Sablonentitások újratöltése", + "template": "Sablon entitások újratöltése", "trend": "Trend entitások újratöltése", "universal": "Univerzális médialejátszó entitások újratöltése", "zone": "Zónák újratöltése" @@ -1367,7 +1367,7 @@ "sign_out": "Kijelentkezés", "thank_you_note": "Köszönjük, hogy a Home Assistant Felhő részese vagy. Az olyan emberek miatt, mint te, vagyunk képesek mindenki számára nagyszerű otthoni automatizálási élményt nyújtani. Köszönjük!", "webhooks": { - "disable_hook_error_msg": "A webhook letiltása sikertelen:", + "disable_hook_error_msg": "Nem sikerült letiltani a webhookot:", "info": "Bármihez, ami úgy van beállítva, hogy egy webhook által elindulhasson, létrehozható egy nyilvánosan elérhető URL, ami lehetővé teszi, hogy adatokat küldhess vissza a Home Assistant számára bárhonnan, anélkül, hogy kinyitnád a rendszered az internet felé.", "link_learn_more": "Tudj meg többet a webhook-alapú automatizálások létrehozásáról.", "loading": "Betöltés...", @@ -1677,7 +1677,7 @@ }, "types": { "counter": "Számláló", - "input_boolean": "Váltás", + "input_boolean": "Váltó", "input_datetime": "Dátum és/vagy idő", "input_number": "Szám", "input_select": "Legördülő", @@ -2149,11 +2149,11 @@ "heading": "YAML konfiguráció újratöltése", "history_stats": "Előzmény statisztika entitások újratöltése", "homekit": "HomeKit újratöltése", - "input_boolean": "Bemeneti logikai változók újratöltése", + "input_boolean": "Logikai változó bemenetek újratöltése", "input_datetime": "Időpont bemenetek újratöltése", "input_number": "Szám bemenetek újratöltése", "input_select": "Választási bemenetek újratöltése", - "input_text": "Bemeneti szövegek újratöltése", + "input_text": "Szöveg bemenetek újratöltése", "introduction": "A Home Assistant bizonyos részei újraindítás nélkül újratölthetőek. Újratöltéskor az aktuálisan betöltött YAML konfiguráció helyére betöltődik az új.", "min_max": "Min/max entitások újratöltése", "mqtt": "MQTT entitások újratöltése", @@ -2167,7 +2167,7 @@ "smtp": "Smtp értesítési szolgáltatások újratöltése", "statistics": "Statisztikai entitások újratöltése", "telegram": "Telegram értesítési szolgáltatások újratöltése", - "template": "Sablonentitások újratöltése", + "template": "Sablon entitások újratöltése", "trend": "Trend entitások újratöltése", "universal": "Univerzális médialejátszó entitások újratöltése", "zone": "Zónák újratöltése" diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index 29b99fc5e9..c2cc7d546d 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -377,7 +377,7 @@ "low": "низкий", "on_off": "Вкл / Выкл", "operation": "Режим работы", - "preset_mode": "Набор настроек", + "preset_mode": "Предустановка", "swing_mode": "Режим качания воздушных шторок", "target_humidity": "Заданная влажность", "target_temperature": "Заданная температура", diff --git a/translations/frontend/sl.json b/translations/frontend/sl.json index ded5af72af..2ade9347f5 100644 --- a/translations/frontend/sl.json +++ b/translations/frontend/sl.json @@ -2128,7 +2128,7 @@ "mqtt": "Ročno osveži konfigurirane entitete MQTT", "person": "Ponovno naloži osebe", "ping": "Znova naloži entitete binarnega senzorja PING", - "reload": "Ponovno naloži {domain}", + "reload": "Znova naloži {domain}", "rest": "Znova naloži entitete REST in storitve obveščanja", "rpi_gpio": "Znova naloži entitete GPIO z Raspberry Pi", "scene": "Ponovno naloži scene", @@ -2152,7 +2152,7 @@ "validation": { "check_config": "Preverite konfiguracijo", "heading": "Preverjanje konfiguracije", - "introduction": "Potrdite svojo konfiguracijo, če ste nedavno spremenili svojo konfiguracijo in se prepričajte, da je vse veljavno", + "introduction": "Potrdite svojo konfiguracijo, če ste nedavno spremenili svojo konfiguracijo in se prepričajte, da je vse veljavno.", "invalid": "Nastavitve niso veljavne", "valid": "Nastavitve so veljavne!" } From da12233ade8045b98743d821b7e60c0ca9f87f11 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 2 Nov 2020 10:46:52 +0100 Subject: [PATCH 238/242] Add dark mode toggle to gallery cards (#7532) --- gallery/src/components/demo-cards.js | 35 +++++++-- gallery/src/components/demo-more-info.js | 9 +-- gallery/src/components/more-info-content.ts | 73 ------------------- .../src/demos/demo-hui-alarm-panel-card.ts | 19 ++++- .../src/demos/demo-hui-entity-button-card.ts | 2 +- gallery/src/demos/demo-more-info-light.ts | 8 +- src/dialogs/more-info/ha-more-info-dialog.ts | 31 ++------ src/dialogs/more-info/more-info-content.ts | 57 +++++++++++++++ src/fake_data/provide_hass.ts | 26 ++++--- 9 files changed, 131 insertions(+), 129 deletions(-) delete mode 100644 gallery/src/components/more-info-content.ts create mode 100644 src/dialogs/more-info/more-info-content.ts diff --git a/gallery/src/components/demo-cards.js b/gallery/src/components/demo-cards.js index 26ac82e3f7..9e076371c4 100644 --- a/gallery/src/components/demo-cards.js +++ b/gallery/src/components/demo-cards.js @@ -5,11 +5,16 @@ import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../src/components/ha-switch"; import "../../../src/components/ha-formfield"; import "./demo-card"; +import { applyThemesOnElement } from "../../../src/common/dom/apply_themes_on_element"; class DemoCards extends PolymerElement { static get template() { return html`
@@ -31,16 +39,21 @@ class DemoCards extends PolymerElement { + + +
-
- +
+
+ +
`; } @@ -59,6 +72,12 @@ class DemoCards extends PolymerElement { _showConfigToggled(ev) { this._showConfig = ev.target.checked; } + + _darkThemeToggled(ev) { + applyThemesOnElement(this.$.container, { themes: {} }, "default", { + dark: ev.target.checked, + }); + } } customElements.define("demo-cards", DemoCards); diff --git a/gallery/src/components/demo-more-info.js b/gallery/src/components/demo-more-info.js index 9e4a34023f..0805e77c37 100644 --- a/gallery/src/components/demo-more-info.js +++ b/gallery/src/components/demo-more-info.js @@ -3,7 +3,7 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../src/components/ha-card"; import "../../../src/state-summary/state-card-content"; -import "./more-info-content"; +import "../../../src/dialogs/more-info/more-info-content"; class DemoMoreInfo extends PolymerElement { static get template() { @@ -16,15 +16,12 @@ class DemoMoreInfo extends PolymerElement { ha-card { width: 333px; + padding: 20px 24px; } state-card-content { display: block; - padding: 16px; - } - - more-info-content { - padding: 0 16px; + margin-bottom: 16px; } pre { diff --git a/gallery/src/components/more-info-content.ts b/gallery/src/components/more-info-content.ts deleted file mode 100644 index 549ac4fa2d..0000000000 --- a/gallery/src/components/more-info-content.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { HassEntity } from "home-assistant-js-websocket"; -import { property, PropertyValues, UpdatingElement } from "lit-element"; -import dynamicContentUpdater from "../../../src/common/dom/dynamic_content_updater"; -import { stateMoreInfoType } from "../../../src/dialogs/more-info/state_more_info_control"; -import "../../../src/dialogs/more-info/controls/more-info-alarm_control_panel"; -import "../../../src/dialogs/more-info/controls/more-info-automation"; -import "../../../src/dialogs/more-info/controls/more-info-camera"; -import "../../../src/dialogs/more-info/controls/more-info-climate"; -import "../../../src/dialogs/more-info/controls/more-info-configurator"; -import "../../../src/dialogs/more-info/controls/more-info-counter"; -import "../../../src/dialogs/more-info/controls/more-info-cover"; -import "../../../src/dialogs/more-info/controls/more-info-default"; -import "../../../src/dialogs/more-info/controls/more-info-fan"; -import "../../../src/dialogs/more-info/controls/more-info-group"; -import "../../../src/dialogs/more-info/controls/more-info-humidifier"; -import "../../../src/dialogs/more-info/controls/more-info-input_datetime"; -import "../../../src/dialogs/more-info/controls/more-info-light"; -import "../../../src/dialogs/more-info/controls/more-info-lock"; -import "../../../src/dialogs/more-info/controls/more-info-media_player"; -import "../../../src/dialogs/more-info/controls/more-info-person"; -import "../../../src/dialogs/more-info/controls/more-info-script"; -import "../../../src/dialogs/more-info/controls/more-info-sun"; -import "../../../src/dialogs/more-info/controls/more-info-timer"; -import "../../../src/dialogs/more-info/controls/more-info-vacuum"; -import "../../../src/dialogs/more-info/controls/more-info-water_heater"; -import "../../../src/dialogs/more-info/controls/more-info-weather"; -import { HomeAssistant } from "../../../src/types"; - -class MoreInfoContent extends UpdatingElement { - @property({ attribute: false }) public hass?: HomeAssistant; - - @property() public stateObj?: HassEntity; - - private _detachedChild?: ChildNode; - - protected firstUpdated(): void { - this.style.position = "relative"; - this.style.display = "block"; - } - - // This is not a lit element, but an updating element, so we implement update - protected update(changedProps: PropertyValues): void { - super.update(changedProps); - const stateObj = this.stateObj; - const hass = this.hass; - - if (!stateObj || !hass) { - if (this.lastChild) { - this._detachedChild = this.lastChild; - // Detach child to prevent it from doing work. - this.removeChild(this.lastChild); - } - return; - } - - if (this._detachedChild) { - this.appendChild(this._detachedChild); - this._detachedChild = undefined; - } - - const moreInfoType = - stateObj.attributes && "custom_ui_more_info" in stateObj.attributes - ? stateObj.attributes.custom_ui_more_info - : "more-info-" + stateMoreInfoType(stateObj); - - dynamicContentUpdater(this, moreInfoType.toUpperCase(), { - hass, - stateObj, - }); - } -} - -customElements.define("more-info-content", MoreInfoContent); diff --git a/gallery/src/demos/demo-hui-alarm-panel-card.ts b/gallery/src/demos/demo-hui-alarm-panel-card.ts index 12b5f130b4..73d46b53fd 100644 --- a/gallery/src/demos/demo-hui-alarm-panel-card.ts +++ b/gallery/src/demos/demo-hui-alarm-panel-card.ts @@ -15,6 +15,10 @@ const ENTITIES = [ getEntity("alarm_control_panel", "unavailable", "unavailable", { friendly_name: "Alarm", }), + getEntity("alarm_control_panel", "alarm_code", "disarmed", { + friendly_name: "Alarm", + code_format: "number", + }), ]; const CONFIGS = [ @@ -30,7 +34,14 @@ const CONFIGS = [ config: ` - type: alarm-panel entity: alarm_control_panel.alarm_armed - title: My Alarm + name: My Alarm + `, + }, + { + heading: "Code Example", + config: ` +- type: alarm-panel + entity: alarm_control_panel.alarm_code `, }, { @@ -83,8 +94,12 @@ class DemoAlarmPanelEntity extends PolymerElement { public ready() { super.ready(); + this._setupDemo(); + } + + private async _setupDemo() { const hass = provideHass(this.$.demos); - hass.updateTranslations(null, "en"); + await hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-hui-entity-button-card.ts b/gallery/src/demos/demo-hui-entity-button-card.ts index 8c4c77e100..5b89327432 100644 --- a/gallery/src/demos/demo-hui-entity-button-card.ts +++ b/gallery/src/demos/demo-hui-entity-button-card.ts @@ -98,4 +98,4 @@ class DemoButtonEntity extends PolymerElement { } } -customElements.define("demo-hui-button-card", DemoButtonEntity); +customElements.define("demo-hui-entity-button-card", DemoButtonEntity); diff --git a/gallery/src/demos/demo-more-info-light.ts b/gallery/src/demos/demo-more-info-light.ts index 8c5ac611e9..70b77560d9 100644 --- a/gallery/src/demos/demo-more-info-light.ts +++ b/gallery/src/demos/demo-more-info-light.ts @@ -6,7 +6,7 @@ import { SUPPORT_BRIGHTNESS } from "../../../src/data/light"; import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-more-infos"; -import "../components/more-info-content"; +import "../../../src/dialogs/more-info/more-info-content"; const ENTITIES = [ getEntity("light", "bed_light", "on", { @@ -40,8 +40,12 @@ class DemoMoreInfoLight extends PolymerElement { public ready() { super.ready(); + this._setupDemo(); + } + + private async _setupDemo() { const hass = provideHass(this); - hass.updateTranslations(null, "en"); + await hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/src/dialogs/more-info/ha-more-info-dialog.ts b/src/dialogs/more-info/ha-more-info-dialog.ts index 10a4b1f15b..836273f07f 100644 --- a/src/dialogs/more-info/ha-more-info-dialog.ts +++ b/src/dialogs/more-info/ha-more-info-dialog.ts @@ -17,14 +17,10 @@ import { DOMAINS_MORE_INFO_NO_HISTORY, DOMAINS_WITH_MORE_INFO, } from "../../common/const"; -import { dynamicElement } from "../../common/dom/dynamic-element-directive"; import { fireEvent } from "../../common/dom/fire_event"; import { computeDomain } from "../../common/entity/compute_domain"; import { computeStateName } from "../../common/entity/compute_state_name"; -import { - stateMoreInfoType, - importMoreInfoControl, -} from "./state_more_info_control"; + import { navigate } from "../../common/navigate"; import "../../components/ha-dialog"; import "../../components/ha-header-bar"; @@ -39,6 +35,7 @@ import "./ha-more-info-history"; import "./ha-more-info-logbook"; import "./controls/more-info-default"; import { CONTINUOUS_DOMAINS } from "../../data/logbook"; +import "./more-info-content"; const DOMAINS_NO_INFO = ["camera", "configurator"]; /** @@ -63,8 +60,6 @@ export class MoreInfoDialog extends LitElement { @internalProperty() private _entityId?: string | null; - @internalProperty() private _moreInfoType?: string; - @internalProperty() private _currTabIndex = 0; public showDialog(params: MoreInfoDialogParams) { @@ -74,18 +69,6 @@ export class MoreInfoDialog extends LitElement { return; } this.large = false; - - const stateObj = this.hass.states[this._entityId]; - if (!stateObj) { - return; - } - if (stateObj.attributes && "custom_ui_more_info" in stateObj.attributes) { - this._moreInfoType = stateObj.attributes.custom_ui_more_info; - } else { - const type = stateMoreInfoType(stateObj); - importMoreInfoControl(type); - this._moreInfoType = type === "hidden" ? undefined : `more-info-${type}`; - } } public closeDialog() { @@ -218,12 +201,10 @@ export class MoreInfoDialog extends LitElement { .hass=${this.hass} .entityId=${this._entityId} >`} - ${this._moreInfoType - ? dynamicElement(this._moreInfoType, { - hass: this.hass, - stateObj, - }) - : ""} + ${stateObj.attributes.restored ? html`

diff --git a/src/dialogs/more-info/more-info-content.ts b/src/dialogs/more-info/more-info-content.ts new file mode 100644 index 0000000000..47570226fa --- /dev/null +++ b/src/dialogs/more-info/more-info-content.ts @@ -0,0 +1,57 @@ +import { HassEntity } from "home-assistant-js-websocket"; +import { property, PropertyValues, UpdatingElement } from "lit-element"; + +import { HomeAssistant } from "../../types"; +import dynamicContentUpdater from "../../common/dom/dynamic_content_updater"; +import { stateMoreInfoType } from "./state_more_info_control"; +import { importMoreInfoControl } from "../../panels/lovelace/custom-card-helpers"; + +class MoreInfoContent extends UpdatingElement { + @property({ attribute: false }) public hass?: HomeAssistant; + + @property() public stateObj?: HassEntity; + + private _detachedChild?: ChildNode; + + // This is not a lit element, but an updating element, so we implement update + protected update(changedProps: PropertyValues): void { + super.update(changedProps); + const stateObj = this.stateObj; + const hass = this.hass; + + if (!stateObj || !hass) { + if (this.lastChild) { + this._detachedChild = this.lastChild; + // Detach child to prevent it from doing work. + this.removeChild(this.lastChild); + } + return; + } + + if (this._detachedChild) { + this.appendChild(this._detachedChild); + this._detachedChild = undefined; + } + + let moreInfoType: string | undefined; + + if (stateObj.attributes && "custom_ui_more_info" in stateObj.attributes) { + moreInfoType = stateObj.attributes.custom_ui_more_info; + } else { + const type = stateMoreInfoType(stateObj); + importMoreInfoControl(type); + moreInfoType = type === "hidden" ? undefined : `more-info-${type}`; + } + + if (!moreInfoType) { + return; + } + + dynamicContentUpdater(this, moreInfoType.toUpperCase(), { + hass, + stateObj, + }); + } +} + +customElements.define("more-info-content", MoreInfoContent); diff --git a/src/fake_data/provide_hass.ts b/src/fake_data/provide_hass.ts index 0bc58b1040..3407ecbb18 100644 --- a/src/fake_data/provide_hass.ts +++ b/src/fake_data/provide_hass.ts @@ -53,19 +53,21 @@ export const provideHass = ( } = {}; const entities = {}; - function updateTranslations(fragment: null | string, language?: string) { + async function updateTranslations( + fragment: null | string, + language?: string + ) { const lang = language || getLocalLanguage(); - getTranslation(fragment, lang).then(async (translation) => { - const resources = { - [lang]: { - ...(hass().resources && hass().resources[lang]), - ...translation.data, - }, - }; - hass().updateHass({ - resources, - localize: await computeLocalize(elements[0], lang, resources), - }); + const translation = await getTranslation(fragment, lang); + const resources = { + [lang]: { + ...(hass().resources && hass().resources[lang]), + ...translation.data, + }, + }; + hass().updateHass({ + resources, + localize: await computeLocalize(elements[0], lang, resources), }); } From e52be20fbad23818f8043a54d1370ec63fd1017d Mon Sep 17 00:00:00 2001 From: Zack Barett Date: Mon, 2 Nov 2020 03:47:24 -0600 Subject: [PATCH 239/242] Grid Card: Fix Card Picker (#7562) Co-authored-by: Bram Kragten --- src/panels/lovelace/editor/lovelace-cards.ts | 7 +++---- src/translations/en.json | 4 ++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/panels/lovelace/editor/lovelace-cards.ts b/src/panels/lovelace/editor/lovelace-cards.ts index 6da45eef00..5842e566c9 100644 --- a/src/panels/lovelace/editor/lovelace-cards.ts +++ b/src/panels/lovelace/editor/lovelace-cards.ts @@ -29,10 +29,6 @@ export const coreCards: Card[] = [ type: "glance", showElement: true, }, - { - type: "grid", - showElement: true, - }, { type: "history-graph", showElement: true, @@ -95,6 +91,9 @@ export const coreCards: Card[] = [ { type: "entity-filter", }, + { + type: "grid", + }, { type: "horizontal-stack", }, diff --git a/src/translations/en.json b/src/translations/en.json index 6323e70856..78034f08cd 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -2502,6 +2502,10 @@ "columns": "Columns", "description": "The Glance card is useful to group multiple sensors in a compact overview." }, + "grid": { + "name": "Grid", + "description": "The Grid card allows you to show multiple cards in a grid." + }, "history-graph": { "name": "History Graph", "description": "The History Graph card allows you to display a graph for each of the entities listed." From 8361b9553bede32f991bcbd993cccb39153583d9 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 2 Nov 2020 22:06:49 +0100 Subject: [PATCH 240/242] Fix polyfill check (#7575) --- src/common/translations/localize.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common/translations/localize.ts b/src/common/translations/localize.ts index fa6adc1b52..6ebba251b8 100644 --- a/src/common/translations/localize.ts +++ b/src/common/translations/localize.ts @@ -15,10 +15,10 @@ export interface FormatsType { let polyfillLoaded = !shouldPolyfill(); const polyfillProm = polyfillLoaded - ? import("@formatjs/intl-pluralrules/polyfill-locales").then(() => { + ? undefined + : import("@formatjs/intl-pluralrules/polyfill-locales").then(() => { polyfillLoaded = true; - }) - : undefined; + }); /** * Adapted from Polymer app-localize-behavior. From 924e4a45d0f38dfb659ee6097cd96c0487877737 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Tue, 3 Nov 2020 00:32:27 +0000 Subject: [PATCH 241/242] [ci skip] Translation update --- translations/frontend/ca.json | 2 +- translations/frontend/cy.json | 6 ++++- translations/frontend/de.json | 4 ++-- translations/frontend/en.json | 4 ++++ translations/frontend/fr.json | 2 +- translations/frontend/hu.json | 2 +- translations/frontend/ko.json | 45 +++++++++++++++++++++++++++++++++-- translations/frontend/lb.json | 35 ++++++++++++++++++++++++++- 8 files changed, 91 insertions(+), 9 deletions(-) diff --git a/translations/frontend/ca.json b/translations/frontend/ca.json index 31ac096b02..7c0a765664 100644 --- a/translations/frontend/ca.json +++ b/translations/frontend/ca.json @@ -2493,7 +2493,7 @@ "events": { "alert_event_type": "El tipus d'esdeveniment és un camp obligatori", "available_events": "Esdeveniments disponibles", - "count_listeners": " ({count} oients)", + "count_listeners": " ({count} oient/s)", "data": "Dades de l'esdeveniment (en YAML, opcionals)", "description": "Crida un esdeveniment al bus d'esdeveniments.", "documentation": "Documentació d'esdeveniments.", diff --git a/translations/frontend/cy.json b/translations/frontend/cy.json index a09725d53a..a2e7731b55 100644 --- a/translations/frontend/cy.json +++ b/translations/frontend/cy.json @@ -466,11 +466,15 @@ "commands": { "reload": { "filesize": "Ailgychwyn endidau maint ffeil", + "history_stats": "Ail-lwytho endidau ystadegau hanes", + "homekit": "Ail-lwytho HomeKit", + "min_max": "AIl-lwytho endidau lleiaf/uchaf", "mqtt": "Ailgychwyn endidau mqtt wedi'u ffurfweddu", "ping": "Ailgychwyn endidau sensor ping binary", "rpi_gpio": "Ailgychwyn endidau GPIO Raspberry Pi", "smtp": "Ailgychwyn gwasanaethau hysbysu smtp", - "telegram": "Ailgychwyn gwasanaethau hysbysu telegram" + "telegram": "Ailgychwyn gwasanaethau hysbysu telegram", + "trend": "Ail-lwytho endidau tuedd" }, "server_control": { "perform_action": "{action} Gweinydd", diff --git a/translations/frontend/de.json b/translations/frontend/de.json index 4c15b45311..ce2cc22c4d 100644 --- a/translations/frontend/de.json +++ b/translations/frontend/de.json @@ -1751,7 +1751,7 @@ }, "configure": "Konfigurieren", "configured": "Konfiguriert", - "description": "Verwalte verbundene Integrationen", + "description": "Verbundene Integrationen verwalten", "details": "Details zur Integration", "discovered": "Entdeckt", "home_assistant_website": "Home Assistant Website", @@ -1981,7 +1981,7 @@ "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, denen Home Assistant folgt.", + "description": "Personen verwalten, denen Home Assistant folgt.", "detail": { "admin": "Administrator", "allow_login": "Erlauben Sie dieser Person, sich einzuloggen.", diff --git a/translations/frontend/en.json b/translations/frontend/en.json index 3ab12ba356..a15c767c8b 100644 --- a/translations/frontend/en.json +++ b/translations/frontend/en.json @@ -2759,6 +2759,10 @@ "description": "The Glance card is useful to group multiple sensors in a compact overview.", "name": "Glance" }, + "grid": { + "description": "The Grid card allows you to show multiple cards in a grid.", + "name": "Grid" + }, "history-graph": { "description": "The History Graph card allows you to display a graph for each of the entities listed.", "name": "History Graph" diff --git a/translations/frontend/fr.json b/translations/frontend/fr.json index 87f75bf4ef..be701d7cc4 100644 --- a/translations/frontend/fr.json +++ b/translations/frontend/fr.json @@ -1673,7 +1673,7 @@ "name": "Nom", "type": "Type" }, - "no_helpers": "On dirait que vous n'avez pas encore d'aide!" + "no_helpers": "On dirait que vous n'avez pas encore d'entrée!" }, "types": { "counter": "Compteur", diff --git a/translations/frontend/hu.json b/translations/frontend/hu.json index 416447bb2e..447bb6f981 100644 --- a/translations/frontend/hu.json +++ b/translations/frontend/hu.json @@ -1793,7 +1793,7 @@ "caption": "Napló", "clear": "Törlés", "description": "A Home Assistant naplófájlok megtekintése", - "details": "Naplózás részletessége ({level})", + "details": "Naplóbejegyzés részletei ({level})", "load_full_log": "Teljes Home Assistant napló betöltése", "loading_log": "Hibanapló betöltése...", "multiple_messages": "az üzenet először a következő időpontban fordult elő: {time}, majd később {counter} alkalommal ismétlődött", diff --git a/translations/frontend/ko.json b/translations/frontend/ko.json index 3970f6c91d..53a85040d6 100644 --- a/translations/frontend/ko.json +++ b/translations/frontend/ko.json @@ -654,6 +654,11 @@ }, "service-picker": { "service": "서비스" + }, + "user-picker": { + "add_user": "사용자 추가", + "no_user": "사용자 없음", + "remove_user": "사용자 제거" } }, "dialogs": { @@ -741,6 +746,7 @@ "dismiss": "대화창 닫기", "edit": "구성요소 편집", "history": "기록 내용", + "last_changed": "최근 변경 됨", "person": { "create_zone": "현재 위치로 지역 만들기" }, @@ -796,6 +802,15 @@ "description": "옵션이 성공적으로 저장되었습니다." } }, + "quick-bar": { + "commands": { + "server_control": { + "perform_action": "서버 {action}", + "restart": "재시작", + "stop": "중지" + } + } + }, "voice_command": { "did_not_hear": "Home Assistant 가 아무 소리도 듣지 못했습니다", "error": "이런, 오류가 발생했습니다", @@ -855,6 +870,7 @@ }, "notification_toast": { "connection_lost": "서버와 연결이 끊어졌습니다. 다시 연결 중...", + "dismiss": "해제", "service_call_failed": "{service} 서비스를 호출하지 못했습니다.", "started": "Home Assistant 가 시작되었습니다!", "starting": "Home Assistant 가 시작됩니다. 완료될 때까지 모든 기능을 사용할 수 있는 것은 아닙니다.", @@ -940,7 +956,7 @@ }, "event": { "event": "이벤트:", - "label": "이벤트 발생", + "label": "이벤트 발행", "service_data": "서비스 데이터" }, "repeat": { @@ -1098,6 +1114,9 @@ "trigger": "트리거" }, "event": { + "context_user_pick": "사용자 추가", + "context_user_picked": "사용자 발행 이벤트", + "context_users": "트리거된 이벤트로 제한", "event_data": "이벤트 데이터", "event_type": "이벤트 유형", "label": "이벤트" @@ -1809,6 +1828,13 @@ "introduction": "네트워크 전체 기능을 관리합니다.", "node_count": "{count} 개 노드" }, + "node_config": { + "help_source": "구성 매개변수 설명 및 도움말 텍스트는 OpenZWave 프로젝트에서 제공합니다.", + "wakeup_help": "배터리 전원을 사용하는 노드는 구성을 변경하려면 반드시 절전 해제된 상태이어야 합니다. 노드가 절전 생태인 경우 Openzwave 는 절전 해제될 때 노드의 구성 업데이트를 시도합니다. 이 과정은 몇 시간 (또는 며칠) 후에 이루어질 수 있습니다. 기기를 절전 해제하려면 다음 단계를 따라주세요." + }, + "node_metadata": { + "product_manual": "제품 설명서" + }, "node_query_stages": { "associations": "연결 그룹 및 구성원 자격 새로고침", "cacheload": "OpenZWave 캐시 파일에서 정보를 읽어오기. 배터리 노드는 노드가 절전 해제 상태가 될 때까지 이 단계를 유지합니다.", @@ -1859,6 +1885,7 @@ }, "services": { "add_node": "노드 추가", + "cancel_command": "명령 취소", "remove_node": "노드 제거" } }, @@ -2393,7 +2420,9 @@ "listeners": "이 템플릿은 다음의 상태 변경 이벤트를 수신합니다.", "no_listeners": "이 템플릿은 상태 변경 이벤트를 수신하지 않으며 자동으로 업데이트되지 않습니다.", "reset": "데모 템플릿으로 재설정", + "result_type": "결과 유형", "template_extensions": "Home Assistant 템플릿 확장기능 문서 보기", + "time": "이 템플릿은 매 분마다 업데이트됩니다.", "title": "템플릿", "unknown_error_template": "템플릿 구성 중 알 수 없는 오류가 발생했습니다" } @@ -2508,6 +2537,9 @@ "weblink": "웹 링크" }, "name": "구성요소 모음", + "secondary_info_values": { + "last-updated": "최근 업데이트 됨" + }, "show_header_toggle": "헤더 토글 표시", "special_row": "특별 행", "toggle": "구성요소 토글" @@ -2763,7 +2795,8 @@ "exit_edit_mode": "UI 편집 모드 종료", "help": "도움말", "refresh": "새로고침", - "reload_resources": "리소스 다시 읽어오기" + "reload_resources": "리소스 다시 읽어오기", + "start_conversation": "대화 시작" }, "reload_lovelace": "UI 다시 읽어오기", "reload_resources": { @@ -3002,6 +3035,10 @@ "dropdown_label": "대시보드", "header": "대시보드" }, + "enable_shortcuts": { + "description": "UI 에서 다양한 작업을 수행하기 위한 단축키를 활성화하거나 비활성화합니다.", + "header": "키보드 단축키" + }, "force_narrow": { "description": "모바일 환경과 마찬가지로 기본적으로 사이드바가 숨겨집니다.", "header": "항상 사이드바 숨기기" @@ -3046,6 +3083,10 @@ "header": "다단계 인증 모듈" }, "push_notifications": { + "add_device_prompt": { + "input_label": "기기 이름", + "title": "이 기기의 이름을 지어주세요" + }, "description": "이 기기에 알림을 보냅니다.", "error_load_platform": "notify.html5 를 구성해주세요.", "error_use_https": "SSL 을 통한 보안 연결된 환경이 필요합니다.", diff --git a/translations/frontend/lb.json b/translations/frontend/lb.json index 2d2a986bf4..5292e9f36b 100644 --- a/translations/frontend/lb.json +++ b/translations/frontend/lb.json @@ -681,6 +681,11 @@ }, "service-picker": { "service": "Service" + }, + "user-picker": { + "add_user": "Benotzer erstellen", + "no_user": "Kee Benotzer", + "remove_user": "Benotzer läschen" } }, "dialogs": { @@ -723,6 +728,12 @@ "ok": "OK" }, "helper_settings": { + "counter": { + "initial": "Initial Wäert", + "maximum": "Maximale Wäert", + "minimum": "Minimale Wäert", + "step": "Schrëtt Gréisst" + }, "generic": { "icon": "Ikon", "name": "Numm" @@ -769,6 +780,7 @@ "dismiss": "Dialog ofbriechen", "edit": "Entitéit änneren", "history": "Verlaf", + "last_changed": "Läscht Ännerung", "last_updated": "Läscht mise à jour", "person": { "create_zone": "Zone erstellen vun der aktueller Positioun" @@ -826,6 +838,13 @@ } }, "quick-bar": { + "commands": { + "server_control": { + "perform_action": "{action} Server", + "restart": "Restart", + "stop": "Stop" + } + }, "filter_placeholder": "Entitéite Filter" }, "voice_command": { @@ -1140,6 +1159,7 @@ "trigger": "Ausléiser" }, "event": { + "context_user_pick": "Benotzer erstellen", "event_data": "Evenement Donnée", "event_type": "Typ vun Evenement", "label": "Evenement" @@ -1464,7 +1484,8 @@ "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" + "caption": "Wann eppes ausgeléist gëtt", + "unknown_action": "Onbekannten Aktioun" }, "automations": "Automatismen", "conditions": { @@ -1824,6 +1845,9 @@ }, "navigation": { "network": "Netzwierk", + "node": { + "dashboard": "Tableau de Bord" + }, "nodes": "Nodes", "select_instance": "Instanz auswielen" }, @@ -2107,6 +2131,7 @@ "last_scanned": "Läscht duerchsicht", "name": "Numm" }, + "learn_more": "Méi iwwert Tags liesen", "never_scanned": "Niemols gescannt", "no_tags": "Keng Tags", "write": "Schréiwen" @@ -2585,6 +2610,7 @@ "entity-id": "Entitéit ID", "last-changed": "Läscht Ännerung", "last-triggered": "Läscht ausgeléist", + "last-updated": "Läscht mise à jour", "none": "Keng Sekundär Informatioun", "position": "Positioun", "tilt-position": "Kippstellung" @@ -3091,6 +3117,9 @@ "dropdown_label": "Tableau de Bord", "header": "Tableau de Bord" }, + "enable_shortcuts": { + "header": "Tastatur Ofkierzungen" + }, "force_narrow": { "description": "Dës Optioun verstoppt d'Säite Läischt esou wéi op engem mobillen Apparat.", "header": "Säite Läischt ëmmer verstoppen" @@ -3135,6 +3164,10 @@ "header": "Multi-Faktor Authentifikatioun's Module" }, "push_notifications": { + "add_device_prompt": { + "input_label": "Numm vum Apparat", + "title": "Wéi soll dësen Apparat genannt ginn?" + }, "description": "Noriichten op dësen Apparat schécken", "error_load_platform": "Notifiy.html5 konfiguréieren.", "error_use_https": "Benéidegt SSL fir de Frontend", From 2e47763ecc9b92a761109117e9409cb3c435c6fb Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Wed, 4 Nov 2020 00:32:29 +0000 Subject: [PATCH 242/242] [ci skip] Translation update --- translations/frontend/ca.json | 4 ++ translations/frontend/cs.json | 4 ++ translations/frontend/de.json | 2 +- translations/frontend/el.json | 8 +++- translations/frontend/es.json | 4 ++ translations/frontend/et.json | 6 ++- translations/frontend/hu.json | 4 ++ translations/frontend/lb.json | 74 +++++++++++++++++++++++++++--- translations/frontend/nb.json | 4 ++ translations/frontend/nl.json | 18 ++++++++ translations/frontend/pl.json | 4 ++ translations/frontend/ru.json | 4 ++ translations/frontend/sv.json | 34 +++++++------- translations/frontend/tr.json | 46 ++++++++++++++++++- translations/frontend/zh-Hans.json | 4 ++ 15 files changed, 192 insertions(+), 28 deletions(-) diff --git a/translations/frontend/ca.json b/translations/frontend/ca.json index 7c0a765664..859b988bfb 100644 --- a/translations/frontend/ca.json +++ b/translations/frontend/ca.json @@ -2759,6 +2759,10 @@ "description": "La targeta visualització és útil per agrupar diversos sensors de forma general i compacta.", "name": "Visualització" }, + "grid": { + "description": "La targeta quadrícula et permet mostrar diferents targetes dins d'una quadrícula.", + "name": "Quadrícula" + }, "history-graph": { "description": "La targeta gràfic històric et permet mostrar un gràfic per a cadascuna de les entitats establertes.", "name": "Gràfic històric" diff --git a/translations/frontend/cs.json b/translations/frontend/cs.json index 51586e31f7..e426d1ad84 100644 --- a/translations/frontend/cs.json +++ b/translations/frontend/cs.json @@ -2759,6 +2759,10 @@ "description": "Karta Náhled je užitečná pro seskupení více senzorů v kompaktním přehledu.", "name": "Rychlý náhled" }, + "grid": { + "description": "Karta Mřížka umožňuje zobrazit více karet v mřížce.", + "name": "Mřížka" + }, "history-graph": { "description": "Karta Graf historie umožňuje zobrazit graf pro každou z uvedených entit.", "name": "Graf historie" diff --git a/translations/frontend/de.json b/translations/frontend/de.json index ce2cc22c4d..cd53a3ef52 100644 --- a/translations/frontend/de.json +++ b/translations/frontend/de.json @@ -2677,7 +2677,7 @@ "description": "Die Messkarte ist eine Basiskarte, mit der Sensordaten visuell angezeigt werden können.", "name": "Gauge", "severity": { - "define": "Schweregrad definieren?", + "define": "Schwellenwerte definieren?", "green": "Grün", "red": "Rot", "yellow": "Gelb" diff --git a/translations/frontend/el.json b/translations/frontend/el.json index c0cb9cf939..f5e2aceaf6 100644 --- a/translations/frontend/el.json +++ b/translations/frontend/el.json @@ -571,8 +571,8 @@ "no_history_found": "Δεν έχει βρεθεί ιστορικό κατάστασης." }, "logbook": { - "by": "ανά", - "by_service": "ανά υπηρεσία", + "by": "από", + "by_service": "από υπηρεσία", "entries_not_found": "Δεν βρέθηκαν καταχωρήσεις ημερολογίου.", "messages": { "became_unavailable": "μετετράπη σε μη διαθέσιμο", @@ -2759,6 +2759,10 @@ "description": "Η κάρτα Glance είναι χρήσιμη για την ομαδοποίηση πολλαπλών αισθητήρων σε μια συμπαγή επισκόπηση.", "name": "Ματιά" }, + "grid": { + "description": "Η κάρτα πλέγματος σάς επιτρέπει να εμφανίζετε πολλές κάρτες σε ένα πλέγμα.", + "name": "Πλέγμα" + }, "history-graph": { "description": "Η κάρτα Ιστορικού γραφήματος σάς επιτρέπει να εμφανίσετε ένα γράφημα για καθεμία από τις αναφερόμενες οντότητες.", "name": "Ιστορικό γράφημα" diff --git a/translations/frontend/es.json b/translations/frontend/es.json index a40088b3e6..8149c78426 100644 --- a/translations/frontend/es.json +++ b/translations/frontend/es.json @@ -2759,6 +2759,10 @@ "description": "La tarjeta Vistazo es útil para agrupar varios sensores en una visión general compacta.", "name": "Vistazo" }, + "grid": { + "description": "La tarjeta Cuadrícula te permite mostrar varias tarjetas en una cuadrícula.", + "name": "Cuadrícula" + }, "history-graph": { "description": "La tarjeta Historial Gráfico te permite mostrar un gráfico para cada una de las entidades enumeradas.", "name": "Gráfico histórico" diff --git a/translations/frontend/et.json b/translations/frontend/et.json index ef98cca5e0..6c60373ed4 100644 --- a/translations/frontend/et.json +++ b/translations/frontend/et.json @@ -2041,7 +2041,7 @@ "person_not_found_title": "Isikuid ei leitud" }, "scene": { - "activated": "Aktiveeritud stseen {name} .", + "activated": "Stseen {name} on käivitatud.", "caption": "Stseenid", "description": "Loo ja muuda stseene", "editor": { @@ -2759,6 +2759,10 @@ "description": "Kaart Pilk on kasulik mitme sensori rühmitamiseks kompaktse ülevaatena.", "name": "Pilk" }, + "grid": { + "description": "GRID kaart võimaldab kuvada võrgustikus mitut kaarti.", + "name": "" + }, "history-graph": { "description": "Ajaloograafiku kaart võimaldab kuvada graafiku iga loetletud olemi kohta.", "name": "Ajalooline graafik" diff --git a/translations/frontend/hu.json b/translations/frontend/hu.json index 447bb6f981..f341422100 100644 --- a/translations/frontend/hu.json +++ b/translations/frontend/hu.json @@ -2759,6 +2759,10 @@ "description": "A Pillantás kártyával több érzékelő csoportosítható egy kompakt áttekintő nézetbe.", "name": "Pillantás" }, + "grid": { + "description": "A Rács kártya lehetővé teszi több kártya megjelenítését egy rácsban.", + "name": "Rács" + }, "history-graph": { "description": "Az Előzmény grafikon kártya lehetővé teszi az entitások múltbeli értékeinek grafikus megjelenítését.", "name": "Előzmény grafikon" diff --git a/translations/frontend/lb.json b/translations/frontend/lb.json index 5292e9f36b..4cb7556cc1 100644 --- a/translations/frontend/lb.json +++ b/translations/frontend/lb.json @@ -732,6 +732,7 @@ "initial": "Initial Wäert", "maximum": "Maximale Wäert", "minimum": "Minimale Wäert", + "restore": "Restauréiert de leschte bekannte Wäert wann Home Assistant start", "step": "Schrëtt Gréisst" }, "generic": { @@ -769,6 +770,9 @@ }, "platform_not_loaded": "{platform} Integratioun ass net gelueden. Setz et an deng Konfiguration dobäi mat 'default_config:' oder ''{platform}:''.", "required_error_msg": "Dëst Feld ass erfuerderlech", + "timer": { + "duration": "Dauer" + }, "yaml_not_editable": "D'Astellunge vun dëser Entitéit kënnen net vun vum Benotzer Interface as geännert ginn. Nëmmen Entitéiten déi iwwer den Benotzer Interface aus konfiguréiert sinn kënnen vun do aus geännert ginn." }, "image_cropper": { @@ -839,6 +843,31 @@ }, "quick-bar": { "commands": { + "reload": { + "automation": "Automatisme frësch lueden", + "command_line": "Kommando Zeilen Entitéite frësch lueden", + "filter": "Filter Entitéite frësch lueden", + "generic": "Generesch IP Kamera Entitéite frësch lueden", + "generic_thermostat": "Generesch Thermostat Entitéite frësch lueden", + "homekit": "HomeKit frësch lueden", + "input_datetime": "Agab Zäit-Datum frësch lueden", + "input_number": "Agab Zuelen frësch lueden", + "input_text": "Agab Text frësch lueden", + "min_max": "Min/Max Entitéite frësch lueden", + "mqtt": "Manuell konfiguréiert MQTT Entitéite frësch lueden", + "person": "Persoune frësch lueden", + "reload": "{domain} frësch lueden", + "rest": "Rest Entitéiten an Notifikatioun Servicer frësch lueden", + "rpi_gpio": "Raspberry Pi GPIO Entitéite frësch lueden", + "scene": "Zeene frësch lueden", + "script": "Skripte frësch lueden", + "smtp": "SMTP Notifikatioun Servicer frësch lueden", + "statistics": "Statistik Entitéite frësch lueden", + "telegram": "Telegram Notifikatioun Servicer frësch lueden", + "template": "Virlag Entitéite frësch lueden", + "universal": "Universell Medie Spiller Entitéite frësch lueden", + "zone": "Zone frësch lueden" + }, "server_control": { "perform_action": "{action} Server", "restart": "Restart", @@ -901,11 +930,13 @@ "notification_drawer": { "click_to_configure": "Dréck de Knäppchen fir {entity} ze konfiguréieren", "close": "Zoumaachen", + "dismiss_all": "Alles verwerfen", "empty": "Keng Notifikatioune", "title": "Notifikatioune" }, "notification_toast": { "connection_lost": "Verbindung verluer. Verbindung gëtt nees opgebaut...", + "dismiss": "Verwerfen", "service_call_failed": "Feeler beim opruffen vun {service}", "started": "Home Assistant ass gestart!", "starting": "Home Assistant start, et wäert nach net alles prett sinn bis et fäerdeg gestart ass.", @@ -1160,6 +1191,8 @@ }, "event": { "context_user_pick": "Benotzer erstellen", + "context_user_picked": "Benotzer deen den Evenement gestart huet", + "context_users": "Op Evenementer limitéieren déi ausgeléist goufen duerch ", "event_data": "Evenement Donnée", "event_type": "Typ vun Evenement", "label": "Evenement" @@ -1485,18 +1518,24 @@ "automation": { "actions": { "caption": "Wann eppes ausgeléist gëtt", + "no_actions": "Keng Aktiounen", "unknown_action": "Onbekannten Aktioun" }, "automations": "Automatismen", "conditions": { - "caption": "Nëmmen eppes maachen wann..." + "caption": "Nëmmen eppes maachen wann...", + "no_conditions": "Keng Konditiounen", + "unknown_condition": "Onbekannte Konditioun" }, "create": "Automatisme mat Apparat erstellen", "no_automations": "Keng Automatismen", "no_device_automations": "Et gi keng Automatisme fir dësen Apparat.", "triggers": { - "caption": "Maach eppes wann..." - } + "caption": "Maach eppes wann...", + "no_triggers": "Keng Ausléiser", + "unknown_trigger": "Onbekannten Ausléiser" + }, + "unknown_automation": "Onbekannten Automatisme" }, "cant_edit": "Dir kënnt nëmmen Elementer änneren déi an der UI erstallt goufen.", "caption": "Apparater", @@ -1614,11 +1653,13 @@ "no_helpers": "Et gesäit sou aus wéi wann nach keng Helpers erstallt goufen." }, "types": { + "counter": "Compteur", "input_boolean": "Ëmschalten", "input_datetime": "Datum an/oder Zäit", "input_number": "Nummer", "input_select": "Auswiellëscht", - "input_text": "Text" + "input_text": "Text", + "timer": "Timer" } }, "info": { @@ -1836,6 +1877,7 @@ "network": "Netzwierk", "node_id": "Node ID", "ozw_instance": "OpenZWave Instanz", + "wakeup_instructions": "Instruktioune fir d'erwächen", "zwave": "Z-Wave" }, "device_info": { @@ -1846,6 +1888,7 @@ "navigation": { "network": "Netzwierk", "node": { + "config": "Konfiguratioun", "dashboard": "Tableau de Bord" }, "nodes": "Nodes", @@ -1876,6 +1919,14 @@ "introduction": "Netzwierk wäit Funktioune verwalten", "node_count": "{count} nodes" }, + "node_config": { + "header": "Konfiguratioun vum Node", + "introduction": "Verwalt déi verschidde Konfiguratioun Parameter fir ee Z-Wave Node.", + "wakeup_help": "Batterie bedriwwen Nodes mussen un si fir hier Konfiguratioun ze veränneren. Falls den Node net un ass, probéiert OpenZWave dem Node seng Konfiguratioun ze veränneren déi nächste Kéier wann de Node aktiv gëtt, dëst ka méi Stonnen (oder Deeg) daueren. \nFolleg dëse Schrëtt fir den Apparat unzeschalten:" + }, + "node_metadata": { + "product_manual": "Produkt Gebrauchsanweisung" + }, "node_query_stages": { "associations": "Associatiounsgruppen a Memberen aktualiséieren", "cacheload": "Lued Informatioune vun der OpenZWave Cache Datei. Batterie Nodes bleiwen op dëser Etapp bis de Node erwächt.", @@ -1925,6 +1976,7 @@ }, "services": { "add_node": "Node dobäisetzen", + "cancel_command": "Commande ofbriechen", "remove_node": "Node läschen" } }, @@ -2116,6 +2168,7 @@ "create_automation": "Erstell Automatisme mam Tag", "description": "Tags verwalten", "detail": { + "companion_apps": "Begleeder Apps", "create": "Erstellen", "create_and_write": "Erstellen a schréiwen", "delete": "Läschen", @@ -2124,7 +2177,8 @@ "new_tag": "Neien tag", "tag_id": "Tag id", "tag_id_placeholder": "Automatesch erstallt falls eidel geloss", - "update": "Aktualiséieren" + "update": "Aktualiséieren", + "usage": "Een Tag kann een Automatisme ausléise wann e gescannt gëtt, du kanns NFC Tage, QR Code oder iergendeng Zort vun Tags benotzen. Benotz ons {companion_link} fir dësen Tag op eng programméierbar NFC Tag ze schreiwen oder erstell ee QR Code hei ënnen." }, "edit": "Änneren", "headers": { @@ -2467,7 +2521,9 @@ "listeners": "Dës Virlag lauschtert fir déi folgend geännert Evenementer:", "no_listeners": "Dës Virlag lauschtert net fir geännert Zoustänn Evenementer a gëtt net automatesch aktualiséiert.", "reset": "Op Demo Modell zeréck setzen", + "result_type": "Typ vum Resultat", "template_extensions": "Home Assistant Modell Erweiderungen", + "time": "Dës Virlag aktualiséiert sech am Ufank vun all Minutt.", "title": "Modeller", "unknown_error_template": "Onbekannte Feeler beim duerstelle vum Modell" } @@ -2675,6 +2731,10 @@ "description": "D'Glance Kaart ass nëtzlech fir verschidde Sensoren an enger kompakter Iwwersiicht ze gruppéieren.", "name": "Usiicht" }, + "grid": { + "description": "Gitter Kaart erlaabt et multiple Kaarten als Gitter unzeweisen.", + "name": "Gitter" + }, "history-graph": { "description": "D'Verlaf's Grafik Kaart erlaabt Iech eng Grafik fir all eenzel opgelëschten Entitéiten unzeweisen.", "name": "Verlaf Diagramm" @@ -2872,7 +2932,8 @@ "exit_edit_mode": "Benotzer Interface Editéierungsmodus verloossen", "help": "Hëllef", "refresh": "Erneieren", - "reload_resources": "Ressource frësch lueden" + "reload_resources": "Ressource frësch lueden", + "start_conversation": "Ënnerhalung starten" }, "reload_lovelace": "Benotzer frësch lueden", "reload_resources": { @@ -3118,6 +3179,7 @@ "header": "Tableau de Bord" }, "enable_shortcuts": { + "description": "Tastatur Ofkierzungen aktivéieren oder déaktivéieren fir verschidde Aktiounen am Interface auszeféieren.", "header": "Tastatur Ofkierzungen" }, "force_narrow": { diff --git a/translations/frontend/nb.json b/translations/frontend/nb.json index 29d01d8cf5..efb8c4713e 100644 --- a/translations/frontend/nb.json +++ b/translations/frontend/nb.json @@ -2759,6 +2759,10 @@ "description": "Glance-kortet er nyttig for å gruppere flere sensorer i en kompakt oversikt.", "name": "Blikk" }, + "grid": { + "description": "Med Rutenett-kortet kan du vise flere kort i et rutenett.", + "name": "Rutenettet" + }, "history-graph": { "description": "Med History Graph-kortet kan du vise en graf for hver av enhetene som er oppført.", "name": "Historikk graf" diff --git a/translations/frontend/nl.json b/translations/frontend/nl.json index aa448f334e..62402c9829 100644 --- a/translations/frontend/nl.json +++ b/translations/frontend/nl.json @@ -798,6 +798,7 @@ "dismiss": "Dialoogvenster sluiten", "edit": "Entiteit bewerken", "history": "Geschiedenis", + "last_changed": "Laatst gewijzigd", "last_updated": "Laatst bijgewerkt", "person": { "create_zone": "Creëer zone van huidige locatie" @@ -888,6 +889,10 @@ "trend": "Herlaad trend entiteiten", "universal": "Herlaad universele mediaplayer entiteiten", "zone": "Herlaad zones" + }, + "server_control": { + "restart": "Herstarten", + "stop": "Stop" } }, "filter_placeholder": "Entiteitsfilter" @@ -1998,6 +2003,7 @@ }, "services": { "add_node": "Knooppunt toevoegen", + "cancel_command": "Opdracht annuleren", "remove_node": "Knooppunt verwijderen" } }, @@ -2752,6 +2758,10 @@ "description": "De Glance-kaart is handig om meerdere sensoren in een compact overzicht te groeperen.", "name": "Oogopslag" }, + "grid": { + "description": "Met de rasterkaart kun je meerdere kaarten in een raster tonen.", + "name": "Raster" + }, "history-graph": { "description": "Met de History Graph-kaart kunt u een grafiek weergeven voor elk van de vermelde entiteiten.", "name": "Geschiedenis grafiek" @@ -3198,6 +3208,10 @@ "dropdown_label": "Dashboard", "header": "Dashboard" }, + "enable_shortcuts": { + "description": "Schakel sneltoetsen in of uit voor het uitvoeren van verschillende acties in de UI.", + "header": "Toetsenbord sneltoetsen" + }, "force_narrow": { "description": "De zijbalk standaard verbergen, vergelijkbaar met de mobiele ervaring.", "header": "Zijbalk altijd verbergen" @@ -3242,6 +3256,10 @@ "header": "Twee-factor-authenticatie modules" }, "push_notifications": { + "add_device_prompt": { + "input_label": "Apparaatnaam", + "title": "Hoe moet dit apparaat genoemd worden?" + }, "description": "Verstuur meldingen naar dit apparaat.", "error_load_platform": "Configureer notify.html5.", "error_use_https": "Vereist SSL voor de frontend", diff --git a/translations/frontend/pl.json b/translations/frontend/pl.json index e27851505a..0ead10bb49 100644 --- a/translations/frontend/pl.json +++ b/translations/frontend/pl.json @@ -2759,6 +2759,10 @@ "description": "Karta glance umożliwia grupowanie wielu sensorów w kompaktowym przeglądzie.", "name": "Glance" }, + "grid": { + "description": "Karta siatka umożliwia wyświetlanie wielu kart w siatce.", + "name": "Siatka" + }, "history-graph": { "description": "Karta wykres historii umożliwia wyświetlenie wykresu dla każdej z wymienionych encji.", "name": "Wykres historii" diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index c2cc7d546d..fb617dd7ec 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -2759,6 +2759,10 @@ "description": "Компактно группирует несколько объектов. Рекомендуется для сенсоров.", "name": "Glance" }, + "grid": { + "description": "Позволяет отображать несколько карточек в виде сетки.", + "name": "Сетка" + }, "history-graph": { "description": "Позволяет отображать графики для выбранных объектов.", "name": "График истории" diff --git a/translations/frontend/sv.json b/translations/frontend/sv.json index 20129a006c..a25045a0a4 100644 --- a/translations/frontend/sv.json +++ b/translations/frontend/sv.json @@ -723,15 +723,15 @@ "enabled_description": "Inaktiverade entiteter kommer inte att läggas till i Home Assistant.", "enabled_label": "Aktivera entitet", "entity_id": "Entitets-ID", - "icon": "Överskrid ikon", + "icon": "Ikon", "icon_error": "Ikoner ska vara i formatet 'prefix:ikonnamn', t.ex. 'mdi:home'", - "name": "Skriv över namn", + "name": "Namn", "note": "Obs: detta kanske inte fungerar ännu med alla integrationer.", "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.", + "no_unique_id": "Den här entiteten har inget unikt ID, därför kan den inte hanteras från användargränssnittet.\nKlicka här {faq_link} för mer detaljer.", "related": "Relaterade", "settings": "Inställningar" }, @@ -860,7 +860,7 @@ "reload": { "automation": "Ladda om automationer", "command_line": "Ladda om command line entiteter", - "core": "Ladda om plats ", + "core": "Ladda om plats och anpassningar", "filesize": "Ladda om filstorleks ", "filter": "Ladda om filter entiteter", "generic": "Ladda om standard IP kamera entiteter", @@ -882,9 +882,9 @@ "rpi_gpio": "Ladda om Raspberry Pi GPIO entiteter", "scene": "Ladda om scener", "script": "Ladda om skripts", - "smtp": "Ladda om smtp notifieringstjänster", + "smtp": "Ladda om smtp aviseringstjänster", "statistics": "Ladda om statistik entiteter", - "telegram": "Ladda om telegram notifieringstjänster", + "telegram": "Ladda om telegram aviseringstjänster", "template": "Ladda om mallade entiteter", "trend": "Ladda om trend entiteter", "universal": "Ladda om universella mediaspelar entiteter", @@ -912,7 +912,7 @@ "clusters": "Hantera kluster", "reconfigure": "Konfigurera om enheten", "remove": "Ta bort enhet", - "zigbee_information": "Zigbee-information" + "zigbee_information": "Zigbee-enhetens signatur" }, "confirmations": { "remove": "Är du säker på att du vill ta bort enheten?" @@ -1619,7 +1619,7 @@ }, "filter": { "filter": "Filter", - "hidden_entities": "{number} dold {number, plural,\n one {entity}\n other {entities}\n}", + "hidden_entities": "{number} dold {number, plural,\n one {entitet}\n other {entiteter}\n}", "show_all": "Visa alla", "show_disabled": "Visa inaktiverade entiteter", "show_readonly": "Visa skrivskyddade entiteter", @@ -1946,7 +1946,7 @@ }, "node_config": { "header": "Nodkonfiguration", - "help_source": "Config-parameterbeskrivningar och hjälptext tillhandahålls av OpenZWave-projektet.", + "help_source": "Konfig-parameterbeskrivningar och hjälptext tillhandahålls av OpenZWave-projektet.", "introduction": "Hantera de olika konfigurationsparametrarna för en Z-Wave-nod.", "wakeup_help": "Batteridrivna noder måste vara vaken för att ändra konfigurationen. Om noden inte är vaken kommer OpenZWave att försöka uppdatera nodens konfiguration nästa gång den vaknar, vilket kan vara flera timmar (eller dagar) senare. Följ dessa steg för att väcka enheten:" }, @@ -2119,7 +2119,7 @@ "sequence_sentence": "Handlingssekvensen för detta skript." }, "picker": { - "add_script": "Lägg till skript", + "add_script": "Lägg till nytt skript", "edit_script": "Redigera skript", "header": "Skript-redigerare", "headers": { @@ -2145,7 +2145,7 @@ "filter": "Ladda om filterentiteter", "generic": "Ladda om generella IP kamera entiteter", "generic_thermostat": "Ladda om standard termometer entiteter", - "group": "Ladda om grupper", + "group": "Ladda om grupper, gruppentiteter och aviseringstjänster", "heading": "YAML-konfiguration laddas om", "history_stats": "Ladda om historiskstatistik entiteter", "homekit": "Ladda om HomeKit", @@ -2206,7 +2206,7 @@ "tag_id": "Tagg-ID", "tag_id_placeholder": "Autogenereras när det lämnas tomt", "update": "Uppdatera", - "usage": "En tagg kan utlösa en automatisering när den skannas, du kan använda NFC-taggar, QR-koder eller någon annan typ av tagg. Använd vår {companion_link} att skriva den här taggen till en programmerbar NFC-tagg eller skapa en QR-kod nedan." + "usage": "En tagg kan utlösa en automatisering när den skannas, du kan använda NFC-taggar, QR-koder eller någon annan typ av tagg. Använd vår {companion_link} till att skriva den här taggen till en programmerbar NFC-tagg eller skapa en QR-kod nedan." }, "edit": "Redigera", "headers": { @@ -2371,7 +2371,7 @@ "configured_in_yaml": "Zoner konfigurerade via configuration.yaml kan inte redigeras via användargränssnittet.", "confirm_delete": "Är du säker på att du vill ta bort den här zonen?", "create_zone": "Skapa Zon", - "description": "Hantera zonerna du vill följa personer i", + "description": "Hantera zonerna som du vill följa personer i", "detail": { "create": "Skapa", "delete": "Radera", @@ -2547,7 +2547,7 @@ "entity": "Entitet", "jinja_documentation": "Malldokumentation för Jinja2", "listeners": "Den här mallen lyssnar efter följande tillståndsändrade händelser:", - "no_listeners": "Den här mallen lyssnar inte efter några tillståndsändrade händelser och uppdateras inte automatiskt.", + "no_listeners": "Den här mallen lyssnar inte efter några händelser och uppdateras inte automatiskt.", "reset": "Återställ till demomall", "result_type": "Resultattyp", "template_extensions": "Mallutökningar för Home Assistant", @@ -2911,7 +2911,7 @@ }, "raw_editor": { "confirm_remove_config_text": "Vi kommer automatiskt att generera dina Lovelace UI-vyer med dina områden och enheter om du tar bort din Lovelace UI-konfiguration.", - "confirm_remove_config_title": "Är du säker på att du vill ta bort din Lovelace UI konfiguration? Vi kommer automatiskt att generera dina Lovelace UI-vyer med dina områden och enheter.", + "confirm_remove_config_title": "Är du säker på att du vill ta bort din Lovelace UI konfiguration?", "confirm_unsaved_changes": "Du har osparade ändringar. Är du säker på att du vill avsluta?", "confirm_unsaved_comments": "Din konfiguration innehåller en eller flera kommentarer, dessa kommer inte att sparas. Vill du fortsätta ändå?", "error_invalid_config": "Din konfiguration är inte giltig: {error}", @@ -2955,7 +2955,7 @@ }, "menu": { "close": "Stäng", - "configure_ui": "Konfigurera användargränssnittet", + "configure_ui": "Redigera kontrollpanel", "exit_edit_mode": "Avsluta UI-redigeringsläge", "help": "Hjälp", "refresh": "Uppdatera", @@ -3237,7 +3237,7 @@ "name": "Namn", "not_used": "Har aldrig använts", "prompt_copy_token": "Kopiera din åtkomsttoken. Den kommer inte att visas igen.", - "prompt_name": "Namn?" + "prompt_name": "Ge token ett namn" }, "mfa_setup": { "close": "Stäng", diff --git a/translations/frontend/tr.json b/translations/frontend/tr.json index e85c19fe12..adc51e13b4 100644 --- a/translations/frontend/tr.json +++ b/translations/frontend/tr.json @@ -609,6 +609,11 @@ }, "service-picker": { "service": "Servis" + }, + "user-picker": { + "add_user": "Kullanıcı Ekle", + "no_user": "Kullanıcı yok", + "remove_user": "Kullanıcıyı kaldır" } }, "dialogs": { @@ -693,6 +698,7 @@ "dismiss": "İletişim kutusunu kapat", "edit": "Varlığı düzenle", "history": "Geçmiş", + "last_changed": "Son değişiklik", "person": { "create_zone": "Geçerli konumdan bölge oluşturma" }, @@ -747,6 +753,15 @@ "description": "Seçenekler başarıyla kaydedildi." } }, + "quick-bar": { + "commands": { + "server_control": { + "perform_action": "{action} Sunucu", + "restart": "Yeniden Başlat", + "stop": "Durdur" + } + } + }, "voice_command": { "did_not_hear": "Home asistanı hiçbir şey duymadı", "error": "Oops, bir hata oluştu", @@ -805,6 +820,7 @@ }, "notification_toast": { "connection_lost": "Bağlantı koptu. Yeniden bağlanıyor ...", + "dismiss": "Yoksay", "service_call_failed": "{service} çağrı yapılamadı.", "started": "Home Assistant başladı!", "starting": "Home Assistant başlıyor, arayüzün yüklenmesi için bekleyiniz", @@ -1042,6 +1058,9 @@ "trigger": "tetik" }, "event": { + "context_user_pick": "Kullanıcı Ekle", + "context_user_picked": "Kullanıcı tarafından tetiklenmiş olay", + "context_users": "Tarafından tetiklenen olaylarla sınırla", "event_data": "Etkinlik Verisi", "event_type": "Olay Türü", "label": "Olay:" @@ -1678,6 +1697,15 @@ }, "starting": "Başlatılıyor", "unknown": "Bilinmeyen" + }, + "node_config": { + "wakeup_help": "Pille çalışan nodlar, yapılandırmalarını değiştirmek için uyanık olmalıdır. Nodlar uyanık değilse OpenZWave, bir sonraki uyanışında düğümün yapılandırmasını güncellemeye çalışacaktır, bu birkaç saat (veya gün) sonra olabilir. Cihazınızı uyandırmak için şu adımları izleyin:" + }, + "node_metadata": { + "product_manual": "Ürün kılavuzu" + }, + "services": { + "cancel_command": "Komutu İptal Et" } }, "person": { @@ -2133,7 +2161,9 @@ "jinja_documentation": "Jinja2 taslak dökümantasyonu", "listeners": "Bu şablon, takip edilen durumu değişen olayları dinler:", "no_listeners": "Bu şablon, durum değiştirilen olayları dinlemez ve otomatik olarak güncelleştirilmez.", + "result_type": "Sonuç türü", "template_extensions": "Home Assistant taslak eklentileri", + "time": "Bu şablon her dakika güncellenir.", "title": "Taslaklar", "unknown_error_template": "Bilinmeyen taslak gösterim hatası" } @@ -2252,6 +2282,7 @@ "secondary_info_values": { "last-changed": "Son değiştirilen", "last-triggered": "Son Tetiklenen", + "last-updated": "Son güncelleme", "position": "Pozisyon" }, "show_header_toggle": "Başlık Değiştirme Gösterilsin mi?", @@ -2308,6 +2339,10 @@ "description": "Bakış kartı, birden fazla sensörü kompakt bir genel bakışta gruplamak için kullanışlıdır.", "name": "Glance" }, + "grid": { + "description": "Izgara kartı, ızgarada birden çok kart göstermenizi sağlar.", + "name": "Izgara" + }, "history-graph": { "description": "Geçmiş Grafiği kartı, listelenen varlıkların her biri için bir grafik görüntülemenizi sağlar.", "name": "Geçmiş grafiği" @@ -2491,7 +2526,8 @@ "exit_edit_mode": "UI düzenleme modundan çık", "help": "Yardım", "refresh": "Yenile", - "reload_resources": "Kaynakları yeniden yükle" + "reload_resources": "Kaynakları yeniden yükle", + "start_conversation": "Konuşmayı başlatın" }, "reload_lovelace": "Arayüzü yeniden yükle", "reload_resources": { @@ -2723,6 +2759,10 @@ "dropdown_label": "Gösterge Paneli", "header": "Gösterge Paneli" }, + "enable_shortcuts": { + "description": "Kullanıcı arayüzünde çeşitli eylemler gerçekleştirmek için klavye kısayollarını etkinleştirin veya devre dışı bırakın.", + "header": "Klavye kısayolları" + }, "force_narrow": { "description": "Bu, mobil deneyimi benzer kenar çubuğunu varsayılan olarak gizler.", "header": "Kenar çubuğunu her zaman gizle" @@ -2767,6 +2807,10 @@ "header": "Çok Faktörlü Kimlik Doğrulama Modülleri" }, "push_notifications": { + "add_device_prompt": { + "input_label": "Cihaz adı", + "title": "Bu cihaz ne olarak adlandırılmalı?" + }, "description": "Bu cihaza bildirimler gönder", "error_load_platform": "Notify.html5 'i yapılandırın.", "error_use_https": "Önyüz için SSL'nin etkinleştirilmesini gerektirir.", diff --git a/translations/frontend/zh-Hans.json b/translations/frontend/zh-Hans.json index 18a93d2ee4..0e6f1cafd5 100644 --- a/translations/frontend/zh-Hans.json +++ b/translations/frontend/zh-Hans.json @@ -2759,6 +2759,10 @@ "description": "“概览”卡片用于将多个传感器汇聚成一个紧凑的概览。", "name": "概览" }, + "grid": { + "description": "“网格”卡片用于将多个卡片显示在一个网格。", + "name": "网格" + }, "history-graph": { "description": "“历史图表”卡片用于为每一个列出的实体显示图表。", "name": "历史图表"