From a7fdbc069b65e7c2cc8472ec9b7cb55e6e0aa984 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Fri, 30 Aug 2019 19:29:17 -0500 Subject: [PATCH 01/10] Update fan direction (#3547) * Handle current_direction in more-info-fan * remove current_direction changes * add forward/reverse to translations --- .../more-info/controls/more-info-fan.js | 20 +++++++++---------- src/translations/en.json | 4 +++- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/dialogs/more-info/controls/more-info-fan.js b/src/dialogs/more-info/controls/more-info-fan.js index 4df080e319..8bd690ae5b 100644 --- a/src/dialogs/more-info/controls/more-info-fan.js +++ b/src/dialogs/more-info/controls/more-info-fan.js @@ -81,15 +81,15 @@ class MoreInfoFan extends LocalizeMixin(EventsMixin(PolymerElement)) {
[[localize('ui.card.fan.direction')]]
@@ -164,25 +164,25 @@ class MoreInfoFan extends LocalizeMixin(EventsMixin(PolymerElement)) { }); } - onDirectionLeft() { + onDirectionReverse() { this.hass.callService("fan", "set_direction", { entity_id: this.stateObj.entity_id, direction: "reverse", }); } - onDirectionRight() { + onDirectionForward() { this.hass.callService("fan", "set_direction", { entity_id: this.stateObj.entity_id, direction: "forward", }); } - computeIsRotatingLeft(stateObj) { + computeIsRotatingReverse(stateObj) { return stateObj.attributes.direction === "reverse"; } - computeIsRotatingRight(stateObj) { + computeIsRotatingForward(stateObj) { return stateObj.attributes.direction === "forward"; } } diff --git a/src/translations/en.json b/src/translations/en.json index 3bf8d23235..9047b48fc8 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -416,7 +416,9 @@ "fan": { "speed": "Speed", "oscillate": "Oscillate", - "direction": "Direction" + "direction": "Direction", + "forward": "Forward", + "reverse": "Reverse" }, "light": { "brightness": "Brightness", From f43abb5a9d91931234fd9f493e452453558efd97 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 2 Sep 2019 06:45:47 +0200 Subject: [PATCH 02/10] Support device triggers in automation editor (#3514) * Support device trigger in automation editor * Fix review comments, improve usability. * Lint * Lint * Improve styling, address review comments * Fix support for unknown stored automation * Fix * Lint * Lint * Index trigger by key, not by object * Fix no trigger case * Fix typing * Move trigger translations to backend * Rename WS command to device_automation/trigger/list * Tweak * Update src/data/device_automation.ts Co-Authored-By: Paulus Schoutsen * Address review comments * Fix.. * Simplify ha-device-trigger-picker * Fix changing device --- src/components/device/ha-device-picker.ts | 119 +++++++++++++ .../device/ha-device-trigger-picker.ts | 166 ++++++++++++++++++ src/data/device_automation.ts | 57 ++++++ src/panels/config/js/trigger/device.js | 52 ++++++ src/panels/config/js/trigger/trigger_edit.js | 2 + src/translations/en.json | 3 + 6 files changed, 399 insertions(+) create mode 100644 src/components/device/ha-device-picker.ts create mode 100644 src/components/device/ha-device-trigger-picker.ts create mode 100644 src/data/device_automation.ts create mode 100644 src/panels/config/js/trigger/device.js diff --git a/src/components/device/ha-device-picker.ts b/src/components/device/ha-device-picker.ts new file mode 100644 index 0000000000..f9c64578a1 --- /dev/null +++ b/src/components/device/ha-device-picker.ts @@ -0,0 +1,119 @@ +import "@polymer/paper-input/paper-input"; +import "@polymer/paper-item/paper-item"; +import "@polymer/paper-item/paper-item-body"; +import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light"; +import "@polymer/paper-listbox/paper-listbox"; +import memoizeOne from "memoize-one"; +import { + LitElement, + TemplateResult, + html, + css, + CSSResult, + customElement, + property, +} from "lit-element"; +import { UnsubscribeFunc } from "home-assistant-js-websocket"; +import { HomeAssistant } from "../../types"; +import { fireEvent } from "../../common/dom/fire_event"; +import { + DeviceRegistryEntry, + subscribeDeviceRegistry, +} from "../../data/device_registry"; +import { compare } from "../../common/string/compare"; + +@customElement("ha-device-picker") +class HaDevicePicker extends LitElement { + public hass?: HomeAssistant; + @property() public label?: string; + @property() public value?: string; + @property() public devices?: DeviceRegistryEntry[]; + private _unsubDevices?: UnsubscribeFunc; + + private _sortedDevices = memoizeOne((devices?: DeviceRegistryEntry[]) => { + if (!devices || devices.length === 1) { + return devices || []; + } + const sorted = [...devices]; + sorted.sort((a, b) => compare(a.name || "", b.name || "")); + return sorted; + }); + + public connectedCallback() { + super.connectedCallback(); + this._unsubDevices = subscribeDeviceRegistry( + this.hass!.connection!, + (devices) => { + this.devices = devices; + } + ); + } + + public disconnectedCallback() { + super.disconnectedCallback(); + if (this._unsubDevices) { + this._unsubDevices(); + this._unsubDevices = undefined; + } + } + + protected render(): TemplateResult | void { + return html` + + + + No device + + ${this._sortedDevices(this.devices).map( + (device) => html` + + ${device.name_by_user || device.name} + + ` + )} + + + `; + } + + private get _value() { + return this.value || ""; + } + + private _deviceChanged(ev) { + const newValue = ev.detail.item.dataset.deviceId; + + if (newValue !== this._value) { + this.value = newValue; + setTimeout(() => { + fireEvent(this, "value-changed", { value: newValue }); + fireEvent(this, "change"); + }, 0); + } + } + + static get styles(): CSSResult { + return css` + paper-dropdown-menu-light { + width: 100%; + } + paper-listbox { + min-width: 200px; + } + paper-item { + cursor: pointer; + } + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-device-picker": HaDevicePicker; + } +} diff --git a/src/components/device/ha-device-trigger-picker.ts b/src/components/device/ha-device-trigger-picker.ts new file mode 100644 index 0000000000..7ff3b6d48d --- /dev/null +++ b/src/components/device/ha-device-trigger-picker.ts @@ -0,0 +1,166 @@ +import "@polymer/paper-input/paper-input"; +import "@polymer/paper-item/paper-item"; +import "@polymer/paper-item/paper-item-body"; +import "@polymer/paper-listbox/paper-listbox"; +import { + LitElement, + TemplateResult, + html, + css, + CSSResult, + customElement, + property, +} from "lit-element"; +import { HomeAssistant } from "../../types"; +import { fireEvent } from "../../common/dom/fire_event"; +import { + DeviceTrigger, + fetchDeviceTriggers, + deviceAutomationTriggersEqual, + localizeDeviceAutomationTrigger, +} from "../../data/device_automation"; +import "../../components/ha-paper-dropdown-menu"; + +const NO_TRIGGER_KEY = "NO_TRIGGER"; +const UNKNOWN_TRIGGER_KEY = "UNKNOWN_TRIGGER"; + +@customElement("ha-device-trigger-picker") +class HaDeviceTriggerPicker extends LitElement { + public hass!: HomeAssistant; + @property() public label?: string; + @property() public deviceId?: string; + @property() public value?: DeviceTrigger; + @property() private _triggers: DeviceTrigger[] = []; + + // Trigger an empty render so we start with a clean DOM. + // paper-listbox does not like changing things around. + @property() private _renderEmpty = false; + + private get _key() { + if (!this.value) { + return NO_TRIGGER_KEY; + } + + const idx = this._triggers.findIndex((trigger) => + deviceAutomationTriggersEqual(trigger, this.value!) + ); + + if (idx === -1) { + return UNKNOWN_TRIGGER_KEY; + } + + return `${this._triggers[idx].device_id}_${idx}`; + } + + protected render(): TemplateResult | void { + if (this._renderEmpty) { + return html``; + } + return html` + + + + + ${this._triggers.map( + (trigger, idx) => html` + + ${localizeDeviceAutomationTrigger(this.hass, trigger)} + + ` + )} + + + `; + } + + protected updated(changedProps) { + super.updated(changedProps); + + if (changedProps.has("deviceId")) { + this._updateDeviceInfo(); + } + + // The value has changed, force the listbox to update + if (changedProps.has("value") || changedProps.has("_renderEmpty")) { + const listbox = this.shadowRoot!.querySelector("paper-listbox")!; + if (listbox) { + listbox._selectSelected(this._key); + } + } + } + + private async _updateDeviceInfo() { + this._triggers = this.deviceId + ? await fetchDeviceTriggers(this.hass!, this.deviceId!) + : // No device, clear the list of triggers + []; + + // If there is no value, or if we have changed the device ID, reset the value. + if (!this.value || this.value.device_id !== this.deviceId) { + this._setValue( + this._triggers.length ? this._triggers[0] : this._noTrigger + ); + } + this._renderEmpty = true; + await this.updateComplete; + this._renderEmpty = false; + } + + private get _noTrigger() { + return { + device_id: this.deviceId || "", + platform: "device", + domain: "", + entity_id: "", + }; + } + + private _triggerChanged(ev) { + this._setValue(ev.detail.item.trigger); + } + + private _setValue(trigger: DeviceTrigger) { + if (this.value && deviceAutomationTriggersEqual(trigger, this.value)) { + return; + } + this.value = trigger; + setTimeout(() => { + fireEvent(this, "change"); + }, 0); + } + + static get styles(): CSSResult { + return css` + ha-paper-dropdown-menu { + width: 100%; + } + paper-listbox { + min-width: 200px; + } + paper-item { + cursor: pointer; + } + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-device-trigger-picker": HaDeviceTriggerPicker; + } +} diff --git a/src/data/device_automation.ts b/src/data/device_automation.ts new file mode 100644 index 0000000000..d3c7370527 --- /dev/null +++ b/src/data/device_automation.ts @@ -0,0 +1,57 @@ +import { HomeAssistant } from "../types"; +import compute_state_name from "../common/entity/compute_state_name"; + +export interface DeviceTrigger { + platform: string; + device_id: string; + domain: string; + entity_id: string; + type?: string; + event?: string; +} + +export interface DeviceTriggerList { + triggers: DeviceTrigger[]; +} + +export const fetchDeviceTriggers = (hass: HomeAssistant, deviceId: string) => + hass + .callWS({ + type: "device_automation/trigger/list", + device_id: deviceId, + }) + .then((response) => response.triggers); + +export const deviceAutomationTriggersEqual = ( + a: DeviceTrigger, + b: DeviceTrigger +) => { + if (typeof a !== typeof b) { + return false; + } + + for (const property in a) { + if (!Object.is(a[property], b[property])) { + return false; + } + } + for (const property in b) { + if (!Object.is(a[property], b[property])) { + return false; + } + } + + return true; +}; + +export const localizeDeviceAutomationTrigger = ( + hass: HomeAssistant, + trigger: DeviceTrigger +) => + hass.localize( + `component.${trigger.domain}.device_automation.trigger_type.${ + trigger.type + }`, + "name", + trigger.entity_id ? compute_state_name(hass!.states[trigger.entity_id]) : "" + ); diff --git a/src/panels/config/js/trigger/device.js b/src/panels/config/js/trigger/device.js new file mode 100644 index 0000000000..504eabdb7a --- /dev/null +++ b/src/panels/config/js/trigger/device.js @@ -0,0 +1,52 @@ +import { h, Component } from "preact"; + +import "../../../../components/device/ha-device-picker"; +import "../../../../components/device/ha-device-trigger-picker"; + +import { onChangeEvent } from "../../../../common/preact/event"; + +export default class DeviceTrigger extends Component { + constructor() { + super(); + this.onChange = onChangeEvent.bind(this, "trigger"); + this.devicePicked = this.devicePicked.bind(this); + this.deviceTriggerPicked = this.deviceTriggerPicked.bind(this); + this.state.device_id = undefined; + } + + devicePicked(ev) { + this.setState({ device_id: ev.target.value }); + } + + deviceTriggerPicked(ev) { + const deviceTrigger = ev.target.value; + this.props.onChange(this.props.index, (this.props.trigger = deviceTrigger)); + } + + /* eslint-disable camelcase */ + render({ trigger, hass }, { device_id }) { + if (device_id === undefined) device_id = trigger.device_id; + + return ( +
+ + +
+ ); + } +} + +DeviceTrigger.defaultConfig = { + device_id: "", +}; diff --git a/src/panels/config/js/trigger/trigger_edit.js b/src/panels/config/js/trigger/trigger_edit.js index 443c094a3a..e0234ed550 100644 --- a/src/panels/config/js/trigger/trigger_edit.js +++ b/src/panels/config/js/trigger/trigger_edit.js @@ -4,6 +4,7 @@ import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; +import DeviceTrigger from "./device"; import EventTrigger from "./event"; import GeolocationTrigger from "./geo_location"; import HassTrigger from "./homeassistant"; @@ -18,6 +19,7 @@ import WebhookTrigger from "./webhook"; import ZoneTrigger from "./zone"; const TYPES = { + device: DeviceTrigger, event: EventTrigger, state: StateTrigger, geo_location: GeolocationTrigger, diff --git a/src/translations/en.json b/src/translations/en.json index 9047b48fc8..32999f17db 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -691,6 +691,9 @@ "unsupported_platform": "Unsupported platform: {platform}", "type_select": "Trigger type", "type": { + "device": { + "label": "Device" + }, "event": { "label": "Event", "event_type": "Event type", From 6998cce8eb2b3d0edcd51409b97007247419a41a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 1 Sep 2019 21:48:37 -0700 Subject: [PATCH 03/10] Update translations --- translations/el.json | 2 +- translations/es.json | 14 +- translations/et.json | 301 +++++++++++++++++++++++++++++++++----- translations/fr.json | 16 +- translations/nb.json | 8 +- translations/pl.json | 48 +++--- translations/uk.json | 102 ++++++++++--- translations/zh-Hans.json | 27 +++- translations/zh-Hant.json | 4 +- 9 files changed, 420 insertions(+), 102 deletions(-) diff --git a/translations/el.json b/translations/el.json index 35a025b6bc..6bc2f2ba05 100644 --- a/translations/el.json +++ b/translations/el.json @@ -293,7 +293,7 @@ "armed_custom_bypass": "Οπλισμένο" }, "device_tracker": { - "home": "Σπίτι", + "home": "Εντός σπιτιού", "not_home": "Εκτός" }, "person": { diff --git a/translations/es.json b/translations/es.json index b81aefd6a8..5bf20235ba 100644 --- a/translations/es.json +++ b/translations/es.json @@ -633,7 +633,7 @@ "set_wakeup": "Configurar el intervalo de activación", "config_parameter": "Parámetro de configuración", "config_value": "Valor de configuración", - "true": "Cierto", + "true": "Verdadero", "false": "Falso", "set_config_parameter": "Establecer parámetro de configuración" } @@ -748,9 +748,9 @@ "default_name": "Área Nueva", "delete": "BORRAR", "update": "ACTUALIZAR", - "enabled_label": "Habilitar entidad", + "enabled_label": "Activar entidad", "enabled_cause": "Desactivado por {cause}.", - "enabled_description": "Las entidades deshabilitadas no se agregarán a Home Assistant." + "enabled_description": "Las entidades desactivadas no se añadirán a Home Assistant." } }, "person": { @@ -780,12 +780,12 @@ "core": "Recargar núcleo", "group": "Recargar grupos", "automation": "Recargar automatizaciones", - "script": "Recargar los scripts", + "script": "Recargar scripts", "scene": "Recargar escenas" }, "server_management": { "heading": "Gestión del servidor", - "introduction": "Controla tu servidor de Home Assistant ... desde Home Assistant.", + "introduction": "Controla tu servidor de Home Assistant... desde Home Assistant.", "restart": "Reiniciar", "stop": "Detener" } @@ -1308,8 +1308,8 @@ }, "config_entry_system_options": { "title": "Opciones del sistema", - "enable_new_entities_label": "Habilitar entidades recién agregadas.", - "enable_new_entities_description": "Si está deshabilitada, las nuevas entidades que se descubran no se agregarán automáticamente a Home Assistant." + "enable_new_entities_label": "Activar entidades recién añadidas.", + "enable_new_entities_description": "Si está desactivado, las entidades recién descubiertas no se añadirán automáticamente a Home Assistant." } }, "auth_store": { diff --git a/translations/et.json b/translations/et.json index 590f5f3d78..92c4cabe82 100644 --- a/translations/et.json +++ b/translations/et.json @@ -141,7 +141,8 @@ "high_demand": "Kõrge nõudlus", "heat_pump": "Soojuspump", "gas": "Gaas", - "manual": "Käsitsi" + "manual": "Käsitsi", + "heat_cool": "Küta\/jahuta" }, "configurator": { "configure": "Seadista", @@ -276,7 +277,8 @@ "default": { "unknown": "?", "unavailable": "Kadunud", - "error": "Viga" + "error": "Viga", + "entity_not_found": "Olemit ei leitud" }, "alarm_control_panel": { "armed": "Valves", @@ -318,10 +320,13 @@ "title": "Sündmused" }, "templates": { - "title": "Mallid" + "title": "Mall" }, "mqtt": { "title": "MQTT" + }, + "info": { + "title": "Info" } } }, @@ -344,12 +349,13 @@ "introduction": "Siin saab seadistada oma komponente ja Home Assistant-i. Mitte kõike ei saa veel kasutajaliidese kaudu seadistada, kuid me töötame selle nimel.", "core": { "caption": "Üldine", - "description": "Kontrolli oma seadete faili ja kontrolli serverit", + "description": "Home Assistant'i üldiste seadete muutmine", "section": { "core": { "header": "Seadete ja serveri kontroll", "introduction": "Seadete muutmine võib olla väsitav tegevus. Me teame. See osa püüab su elu natuke hõlpsamaks teha.", "core_config": { + "edit_requires_storage": "Redaktor on keelatud, kuna seaded asuvad configuration.yaml failis.", "location_name": "Sinu Home Assistant paigalduse nimi", "latitude": "Laius", "longitude": "Pikkus", @@ -391,9 +397,10 @@ }, "customize": { "caption": "Kohandamine", - "description": "Kohanda oma üksusi", + "description": "Kohanda oma olemeid", "picker": { - "header": "Kohandamine" + "header": "Kohandamine", + "introduction": "Kohanda olemi atribuute. Lisatud või muudetud kohandused rakenduvad kohe. Eemaldatud kohandused rakenduvad olemi värskendamisel." } }, "automation": { @@ -468,7 +475,7 @@ }, "zone": { "label": "Ala", - "entity": "Asukohaga üksus", + "entity": "Asukohaga olem", "zone": "Ala", "event": "Sündmus:", "enter": "Sisenemine", @@ -535,7 +542,7 @@ }, "zone": { "label": "Ala", - "entity": "Asukohaga üksus", + "entity": "Asukohaga olem", "zone": "Ala" } }, @@ -574,7 +581,9 @@ } }, "learn_more": "Lisateave tegevuste kohta" - } + }, + "load_error_not_editable": "Ainult automations.yaml failis asuvad automatiseeringud on muudetavad.", + "load_error_unknown": "Viga automatiseeringu laadimisel ({err_no})." } }, "script": { @@ -584,7 +593,48 @@ "zwave": { "caption": "Z-Wave", "description": "Halda oma Z-Wave võrku", + "network_management": { + "header": "Z-Wave võrgu haldamine", + "introduction": "Käivita käske, mis mõjutavad Z-Wave võrku. Sa ei saa tagasisidet selle kohta, kas enamik käske õnnestus, kuid selle kontrollimiseks võid uurida OZW-logi." + }, + "network_status": { + "network_stopped": "Z-Wave võrk on seiskunud", + "network_starting": "Z-Wave võrgu käivitamine ...", + "network_starting_note": "Sõltuvalt võrgu suurusest võib see natuke aega võtta.", + "network_started": "Z-Wave võrk on käivitatud", + "network_started_note_some_queried": "Ärkvel sõlmedele on päringud tehtud. Uinuvatele sõlmedele tehakse päringud, kui nad ärkavad.", + "network_started_note_all_queried": "Kõikidele sõlmedele on päringud esitatud." + }, + "services": { + "start_network": "Käivita võrk", + "stop_network": "Peata võrk", + "heal_network": "Tervenda võrku", + "test_network": "Testi võrku", + "soft_reset": "Pehme lähtestamine", + "save_config": "Salvesta seaded", + "add_node_secure": "Lisa turvaline sõlm", + "add_node": "Lisa sõlm", + "remove_node": "Eemalda sõlm", + "cancel_command": "Tühista käsk" + }, + "common": { + "value": "Väärtus", + "instance": "Eksemplar", + "index": "Indeks", + "unknown": "tundmatu", + "wakeup_interval": "Ärkamise intervall" + }, + "values": { + "header": "Sõlme väärtused" + }, "node_config": { + "header": "Sõlme seadistamise valikud", + "seconds": "sekundit", + "set_wakeup": "Määra ärkamise intervall", + "config_parameter": "Konfiguratsiooniparameeter", + "config_value": "Seade väärtus", + "true": "Tõene", + "false": "Väär", "set_config_parameter": "Seadista parameeter Config" } }, @@ -613,7 +663,8 @@ "cloud": { "caption": "Home Assistant pilv", "description_login": "Sisse logitud kui {email}", - "description_not_login": "Pole sisse logitud" + "description_not_login": "Pole sisse logitud", + "description_features": "Juhi kodust eemal viibides, seo Alexa ja Google Assistant'iga." }, "integrations": { "caption": "Sidumised", @@ -625,21 +676,41 @@ "none": "Midagi pole veel seadistatud", "config_entry": { "no_devices": "See sidumine ei hõlma ühtegi seadet", - "no_device": "Üksused ilma seadmeteta", + "no_device": "Olemid ilma seadmeteta", "delete_confirm": "Oled kindel, et soovid selle sidumise kustutada?", "restart_confirm": "Selle sidumise lõplikuks eemaldamiseks taaskäivita Home Assistant", "manuf": "{manufacturer}", "via": "Ühendatud", "firmware": "Püsivara: {version}", "device_unavailable": "seade pole saadaval", - "entity_unavailable": "üksus pole saadaval", - "no_area": "Ala puudub" + "entity_unavailable": "olem pole saadaval", + "no_area": "Ala puudub", + "hub": "Ühendatud" + }, + "config_flow": { + "external_step": { + "description": "Selle etapi lõpetamine nõuab välise veebisaidi külastamist.", + "open_site": "Ava veebisait" + } } }, "zha": { "caption": "ZHA", + "description": "ZigBee Home Automation võrgu haldamine", + "services": { + "reconfigure": "Taasseadista (tervenda) ZHA seade. Kasuta seda, kui seadmega on probleeme. Kui seade on akutoitega, siis veendu, et see oleks ärkvel ja oleks valmis käske vastu võtma.", + "updateDeviceName": "Anna sellele seadmele seadmete registris kohandatud nimi.", + "remove": "Eemalda seade ZigBee võrgust." + }, "device_card": { - "area_picker_label": "Ala" + "device_name_placeholder": "Kasutaja antud nimi", + "area_picker_label": "Ala", + "update_name_button": "Värskenda nime" + }, + "add_device_page": { + "header": "Zigbee Home Automation - seadmete lisamine", + "spinner": "ZHA Zigbee seadmete otsimine ...", + "discovery_text": "Leitud seadmed kuvatakse siin. Järgige seadme(te) juhiseid ja pange seade sidumisrežiimile." } }, "area_registry": { @@ -647,6 +718,9 @@ "description": "Ülevaade kõikidest oma kodu aladest.", "picker": { "header": "Alade register", + "introduction": "Alasid kasutatakse seadmete paiknemise korraldamiseks. Seda teavet kasutatakse läbivalt kasutajaliidese, lubade ja teiste süsteemidega sidumise korraldamisel.", + "introduction2": "Seadmete paigutamiseks alale mine alloleva lingi kaudu sidumiste lehele ja seejärel klõpsa seadme kaartideni jõudmiseks seadistatud sidumisel.", + "integrations_page": "Sidumiste leht", "no_areas": "Paistab, et sul pole veel alasid!", "create_area": "LOO ALA" }, @@ -660,27 +734,62 @@ } }, "entity_registry": { - "caption": "Üksuste register", - "description": "Ülevaade kõikidest teadaolevatest üksustest.", + "caption": "Olemite register", + "description": "Ülevaade kõikidest teadaolevatest olemitest.", "picker": { - "header": "Üksuste register", - "unavailable": "(pole saadaval)" + "header": "Olemite register", + "unavailable": "(pole saadaval)", + "introduction": "Home Assistant peab registrit iga olemi kohta, mida ta kunagi näinud on ja mida saab üheselt tuvastada. Kõigile nendele olemitele antakse olemi ID, mis reserveeritakse ainult sellele olemile.", + "introduction2": "Kasuta olemite registrit olemi nime või ID muutmiseks või olemi eemaldamiseks Home Assistant'ist. Pane tähele, et olemi registrikirje eemaldamine ei eemalda olemit. Selleks järgi allolevat linki ja eemalda olem sidumiste lehelt.", + "integrations_page": "Sidumiste leht" }, "editor": { - "unavailable": "See üksus pole praegu saadaval.", + "unavailable": "See olem pole praegu saadaval.", "default_name": "Uus ala", "delete": "KUSTUTA", - "update": "UUENDA" + "update": "UUENDA", + "enabled_label": "Luba olem", + "enabled_cause": "Keelatud {cause}.", + "enabled_description": "Keelatud olemeid ei lisata Home Assistant'i." } }, "person": { "caption": "Isikud", + "description": "Halda isikuid, keda Home Assistant jälgib.", "detail": { "name": "Nimi", "device_tracker_intro": "Vali seadmed, mis kuuluvad sellele isikule.", "device_tracker_picked": "Jälgi seadet", "device_tracker_pick": "Vali jälgitav seade" } + }, + "server_control": { + "caption": "Serveri juhtimine", + "description": "Taaskäivita ja peata Home Assistant server", + "section": { + "validation": { + "heading": "Seadete kontrollimine", + "introduction": "Kontrolli oma seadeid kui oled neis hiljuti muutusi teinud ja tahad veenduda, et kõik on korrektne", + "check_config": "Kontrolli seadeid", + "valid": "Konfiguratsioon on korrektne!", + "invalid": "Konfiguratsioon on vigane" + }, + "reloading": { + "heading": "Konfiguratsiooni taaslaadimine", + "introduction": "Mõned Home Assistant-i komponendid on taaslaetavad ilma taaskäivituseta. Taaslaadimise klõpsamisel tühistatakse nende praegused seaded ja laetakse uued.", + "core": "Taaslae tuum", + "group": "Taaslae grupid", + "automation": "Taaslae automatiseeringud", + "script": "Taaslae skriptid", + "scene": "Taaslae stseenid" + }, + "server_management": { + "heading": "Serveri haldamine", + "introduction": "Kontrolli oma Home Assistant serverit... Home Assistant-ist.", + "restart": "Taaskäivita", + "stop": "Peata" + } + } } }, "profile": { @@ -751,6 +860,11 @@ "step_done": "{step} seadistatud", "close": "Sulge", "submit": "Esita" + }, + "logout": "Logi välja", + "force_narrow": { + "header": "Peida alati külgriba", + "description": "See peidab vaikimisi külgriba, sarnaselt mobiilikogemusega." } }, "page-authorize": { @@ -775,7 +889,7 @@ "data": { "code": "Kaheastmeline autentimiskood" }, - "description": "Ava oma seadmes **{mfa_module_name}**, et näha oma kahetasemelise autentimise koodi ja tõendada oma isikut:" + "description": "Ava oma seadmes **{mfa_module_name}**, et näha oma kaheastmelise autentimise koodi ja tõendada oma isikut:" } }, "error": { @@ -798,7 +912,7 @@ "data": { "code": "Kaheastmelise autentimise kood" }, - "description": "Ava oma seadmes **{mfa_module_name}**, et näha oma kahetasemelise autentimise koodi ja tõendada oma isikut:" + "description": "Ava oma seadmes **{mfa_module_name}**, et näha oma kaheastmelise autentimise koodi ja tõendada oma isikut:" } }, "error": { @@ -830,6 +944,12 @@ "username": "Kasutajanimi", "password": "Salasõna" } + }, + "mfa": { + "data": { + "code": "Kaheastmeline autentimiskood" + }, + "description": "Ava oma seadmes **{mfa_module_name}**, et näha oma kaheastmelise autentimise koodi ja tõendada oma isikut:" } }, "error": { @@ -861,6 +981,7 @@ } }, "integration": { + "intro": "Seadmed ja teenused on Home Assistant'is esitatud sidumistena. Võid neid seadistada kohe või teha seda hiljem konfiguratsioonilehelt.", "more_integrations": "Rohkem", "finish": "Lõpeta" }, @@ -881,18 +1002,36 @@ "add_item": "Lisa toode" }, "empty_state": { - "title": "Tere tulemast koju" + "title": "Tere tulemast koju", + "no_devices": "See leht võimaldab sul oma seadmeid juhtida, kuid tundub, et sul pole veel seadistatud seadmeid. Alustamiseks suundu sidumiste lehele.", + "go_to_integrations_page": "Mine sidumiste lehele." + }, + "picture-elements": { + "hold": "Hoia:", + "tap": "Toksa:", + "navigate_to": "Liigu asukohta {location}", + "toggle": "Lülita {name}", + "call_service": "Kutsu välja teenus {name}", + "more_info": "Näita rohkem teavet: {name}" } }, "editor": { "edit_card": { + "header": "Kaardi seadistamine", "save": "Salvesta", + "toggle_editor": "Lülita redaktor sisse\/välja", "pick_card": "Vali kaart, mida soovid lisada.", "add": "Lisa kaart", "edit": "Muuda", "delete": "Kustuta", "move": "Liiguta" }, + "migrate": { + "header": "Konfiguratsioon ei ühildu", + "para_no_id": "Sellel elemendil puudub ID. Lisa sellele elemendile ID 'ui-lovelace.yaml' failis.", + "para_migrate": "Home Assistant võib kõikidele kaartidele ja vaadetele automaatselt ID-d lisada, kui vajutad nupule \"Siirda seaded\".", + "migrate": "Siirda seaded" + }, "header": "Muuda kasutajaliidest", "edit_view": { "header": "Vaata seadeid", @@ -901,9 +1040,15 @@ "delete": "Kustuta vaade" }, "save_config": { + "header": "Võta Lovelace kasutajaliides oma kontrolli alla", + "para": "Vaikimisi hoolitseb kasutajaliidese eest Home Assistant, värskendades seda, kui saadaval on uued olemid või Lovelace komponendid. Kui võtad kontrolli üle, ei tee me sinu jaoks enam automaatselt muudatusi.", + "para_sure": "Oled kindel, et soovid kasutajaliidese oma kontrolli alla võtta?", "cancel": "Ära pane tähele", "save": "Võta kontroll" }, + "menu": { + "raw_editor": "Toore konfiguratsiooni redaktor" + }, "raw_editor": { "header": "Muuda seadeid", "save": "Salvesta", @@ -913,18 +1058,67 @@ }, "menu": { "configure_ui": "Seadista kasutajaliidest", - "unused_entities": "Kasutamata üksused", + "unused_entities": "Kasutamata olemid", "help": "Abi", "refresh": "Värskenda" }, "warning": { - "entity_not_found": "Üksus pole saadaval: {entity}", - "entity_non_numeric": "Üksus on mittenumbriline: {entity}" + "entity_not_found": "Olem pole saadaval: {entity}", + "entity_non_numeric": "Olem on mittenumbriline: {entity}" + }, + "changed_toast": { + "message": "Lovelace'i seadeid uuendati, kas soovid värskendada?", + "refresh": "Värskenda" + }, + "reload_lovelace": "Taaslae Lovelace" + }, + "page-demo": { + "cards": { + "demo": { + "demo_by": "{name}", + "next_demo": "Järgmine demo", + "introduction": "Tere tulemast koju! Siin asub Home Assistant'i demo, mis tutvustab parimaid meie kogukonna loodud kasutajaliideseid.", + "learn_more": "Lisateave Home Assistant'i kohta" + } + }, + "config": { + "arsaboo": { + "names": { + "upstairs": "Ülemine korrus", + "family_room": "Elutuba", + "kitchen": "Köök", + "patio": "Terrass", + "hallway": "Esik", + "master_bedroom": "Suur magamistuba", + "left": "Vasakpoolne", + "right": "Parempoolne", + "mirror": "Peegel" + }, + "labels": { + "lights": "Valgustid", + "information": "Teave", + "morning_commute": "Hommikune pendelränne", + "commute_home": "Teel koju", + "entertainment": "Meelelahutus", + "activity": "Tegevus", + "hdmi_input": "HDMI sisend", + "hdmi_switcher": "HDMI lüliti", + "volume": "Helitugevus", + "total_tv_time": "TV-aeg kokku", + "turn_tv_off": "Lülita teler välja", + "air": "Õhk" + }, + "unit": { + "watching": "jälgin", + "minutes_abbr": "min" + } + } } } }, "sidebar": { - "log_out": "Logi välja" + "log_out": "Logi välja", + "external_app_configuration": "Äpi seaded" }, "common": { "loading": "Laadimine", @@ -1027,7 +1221,8 @@ "fan_mode": "Ventilaatori režiim", "swing_mode": "Õõtsumise režiim", "away_mode": "Eemal", - "aux_heat": "Abiküte" + "aux_heat": "Abiküte", + "preset_mode": "Eelseade" }, "lock": { "code": "Kood", @@ -1054,7 +1249,7 @@ "components": { "entity": { "entity-picker": { - "entity": "Üksus" + "entity": "Olem" } }, "service-picker": { @@ -1087,8 +1282,8 @@ "dialogs": { "more_info_settings": { "save": "Salvesta", - "name": "Nimi", - "entity_id": "Üksuse ID" + "name": "Nime muutmine", + "entity_id": "Olemi ID" }, "more_info_control": { "script": { @@ -1102,6 +1297,19 @@ "updater": { "title": "Uuendamise juhised" } + }, + "options_flow": { + "form": { + "header": "Valikud" + }, + "success": { + "description": "Valikud on edukalt salvestatud." + } + }, + "config_entry_system_options": { + "title": "Süsteemi valikud", + "enable_new_entities_label": "Luba äsja lisatud olemid.", + "enable_new_entities_description": "Kui see on keelatud, ei lisata äsja avastatud olemeid automaatselt Home Assistant'i." } }, "auth_store": { @@ -1170,12 +1378,39 @@ "climate": { "fan_mode": { "off": "Väljas", - "on": "Sees" + "on": "Sees", + "auto": "Automaatne" + }, + "preset_mode": { + "none": "Puudub", + "eco": "Öko", + "away": "Eemal", + "boost": "Suurenda", + "comfort": "Mugavus", + "home": "Kodus", + "sleep": "Uinuv", + "activity": "Tegevus" + }, + "hvac_action": { + "off": "Väljas", + "heating": "Küte", + "cooling": "Jahutamine", + "drying": "Kuivatamine", + "idle": "Ootel", + "fan": "Ventilaator" } } }, "groups": { "system-admin": "Administraatorid", - "system-users": "Kasutajad" + "system-users": "Kasutajad", + "system-read-only": "Ainult lugemisõigusega kasutajad" + }, + "config_entry": { + "disabled_by": { + "user": "Kasutaja", + "integration": "Sidumine", + "config_entry": "Seade kanne" + } } } \ No newline at end of file diff --git a/translations/fr.json b/translations/fr.json index d7bc851162..46784d4f4b 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -349,7 +349,7 @@ "introduction": "Ici, il est possible de configurer vos composants et Home Assistant. Tout n'est pas encore possible de configurer à partir de l'interface utilisateur, mais nous y travaillons.", "core": { "caption": "Général", - "description": "Validez votre fichier de configuration et contrôlez le serveur", + "description": "Changer la configuration générale de votre Home Assistant.", "section": { "core": { "header": "Configuration générale", @@ -405,10 +405,10 @@ }, "automation": { "caption": "Automatisation", - "description": "Créer et modifier des automatisations", + "description": "Créer et modifier des automatisations.", "picker": { "header": "Éditeur d'automatisation", - "introduction": "L'éditeur d'automatisation vous permet de créer et éditer des automatisations. Veuillez lire [les instructions](https:\/\/home-assistant.io\/docs\/automation\/editor\/) pour être sûr d'avoir configuré Home-Assistant correctement.", + "introduction": "L'éditeur d'automatisation vous permet de créer et éditer des automatisations. Veuillez lire les instructions ci-dessous pour vous assurer d'avoir configuré Home-Assistant correctement.", "pick_automation": "Choisissez l'automatisation à éditer", "no_automations": "Il n'y a aucune automatisation modifiable.", "add_automation": "Ajouter une automatisation", @@ -504,7 +504,7 @@ }, "conditions": { "header": "Conditions", - "introduction": "Les conditions sont une partie optionnelle d'une règle d'automatisation et peuvent être utilisées pour empêcher une action d'avoir lieu lorsque la règle est déclenchée. Les conditions ressemblent aux déclencheurs mais sont très différentes. Un déclencheur regardera les événements sur le système tandis qu'une condition ne regarde que l'état courant du système. Un déclencheur peut observer qu'un interrupteur est en train d'être allumé. Une condition ne peut que voir si l'interrupteur est allumé ou éteint.\n\n[En apprendre plus sur les conditions.](https:\/\/home-assistant.io\/docs\/scripts\/conditions\/)", + "introduction": "Les conditions sont une partie optionnelle d'une règle d'automatisation et peuvent être utilisées pour empêcher une action d'avoir lieu lorsque la règle est déclenchée. Les conditions ressemblent aux déclencheurs mais sont très différentes. Un déclencheur regardera les événements sur le système tandis qu'une condition ne regarde que l'état courant du système. Un déclencheur peut observer qu'un interrupteur est en train d'être allumé. Une condition ne peut que voir si l'interrupteur est allumé ou éteint.", "add": "Ajouter une condition", "duplicate": "Dupliquer", "delete": "Effacement", @@ -550,7 +550,7 @@ }, "actions": { "header": "Actions", - "introduction": "Les actions sont ce que Home Assistant fera quand une automatisation est déclenchée.\n\n[En apprendre plus sur les actions.](https:\/\/home-assistant.io\/docs\/automation\/action\/)", + "introduction": "Les actions sont ce que Home Assistant fera quand une automatisation est déclenchée.", "add": "Ajouter une action", "duplicate": "Dupliquer", "delete": "Supprimer", @@ -588,11 +588,11 @@ }, "script": { "caption": "Script", - "description": "Créer et modifier des scripts" + "description": "Créer et modifier des scripts." }, "zwave": { "caption": "Z-Wave", - "description": "Gérez votre réseau Z-Wave", + "description": "Gérez votre réseau Z-Wave.", "network_management": { "header": "Gestion de réseau Z-Wave", "introduction": "Exécutez les commandes qui affectent le réseau Z-Wave. Vous ne saurez pas si la plupart des commandes ont réussi, mais vous pouvez consulter le journal OZW pour essayer de le savoir." @@ -765,7 +765,7 @@ }, "server_control": { "caption": "Contrôle du serveur", - "description": "Redémarrez et arrêtez le serveur Home Assistant", + "description": "Redémarrez et arrêtez le serveur Home Assistant.", "section": { "validation": { "heading": "Validation de la configuration", diff --git a/translations/nb.json b/translations/nb.json index 2b5a8cf08d..60b4644283 100644 --- a/translations/nb.json +++ b/translations/nb.json @@ -633,8 +633,8 @@ "set_wakeup": "Angi vekkeintervall", "config_parameter": "Konfigurasjon parameter", "config_value": "Konfigurasjon verdi", - "true": "Ekte", - "false": "Falsk", + "true": "Sant", + "false": "Usant", "set_config_parameter": "Angi konfigurasjons parameter" } }, @@ -749,7 +749,7 @@ "delete": "SLETT", "update": "OPPDATER", "enabled_label": "Aktiver enhet", - "enabled_cause": "Deaktivert av {Cause}.", + "enabled_cause": "Deaktivert av {cause}.", "enabled_description": "Deaktiverte enheter vil ikke bli lagt til i Home Assistant." } }, @@ -1309,7 +1309,7 @@ "config_entry_system_options": { "title": "Systemalternativer", "enable_new_entities_label": "Aktiver enheter som nylig er lagt til.", - "enable_new_entities_description": "Hvis den er deaktivert, vil ikke nyoppdagede enheter automatisk bli lagt til i Home Assistant." + "enable_new_entities_description": "Hvis deaktivert, vil ikke nyoppdagede enheter automatisk bli lagt til i Home Assistant." } }, "auth_store": { diff --git a/translations/pl.json b/translations/pl.json index fa90066d56..af3e3ce7df 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -346,10 +346,10 @@ }, "config": { "header": "Konfiguruj Home Assistant'a", - "introduction": "Tutaj można skonfigurować komponenty i Home Assistant'a. Nie wszystko jest możliwe do skonfigurowania z interfejsu użytkownika, ale pracujemy nad tym.", + "introduction": "Tutaj możesz skonfigurować Home Assistant'a i jego komponenty. Nie wszystkie opcje można konfigurować z interfejsu użytkownika, ale pracujemy nad tym.", "core": { "caption": "Ogólne", - "description": "Zmień ogólną konfigurację Home Assistant", + "description": "Zmień podstawowe opcje Home Assistant'a", "section": { "core": { "header": "Konfiguracja ogólna", @@ -373,18 +373,18 @@ "server_control": { "validation": { "heading": "Sprawdzanie konfiguracji", - "introduction": "Jeśli ostatnio wprowadzono zmiany w konfiguracji i chcesz się upewnić, że jest ona poprawna, kliknij Sprawdź konfigurację", + "introduction": "Kliknij Sprawdź konfigurację, by upewnić się, że jest ona prawidłowa.", "check_config": "Sprawdź konfigurację", "valid": "Konfiguracja prawidłowa!", "invalid": "Konfiguracja nieprawidłowa" }, "reloading": { - "heading": "Przeładowanie konfiguracji", - "introduction": "Niektóre części Home Assistant'a można przeładować bez konieczności ponownego uruchomienia. Kliknięcie przeładuj spowoduje ponowne wczytanie konfiguracji.", - "core": "Przeładuj rdzeń", - "group": "Przeładuj grupy", - "automation": "Przeładuj automatyzacje", - "script": "Przeładuj skrypty" + "heading": "Ponowne wczytanie konfiguracji", + "introduction": "Niektóre części konfiguracji można wczytać od nowa bez konieczności ponownego uruchamiania Home Assistant'a. Naciśnięcie poniższych przycisków wczyta ponownie daną część konfiguracji.", + "core": "Rdzeń", + "group": "Grupy", + "automation": "Automatyzacje", + "script": "Skrypty" }, "server_management": { "heading": "Zarządzanie serwerem", @@ -592,7 +592,7 @@ }, "zwave": { "caption": "Z-Wave", - "description": "Zarządzaj swoją siecią Z-Wave", + "description": "Zarządzaj siecią Z-Wave", "network_management": { "header": "Zarządzanie siecią Z-Wave", "introduction": "Uruchom polecenia sterujące siecią Z-Wave. Nie otrzymasz informacji o tym, czy wykonanie poleceń się powiodło, ale możesz szukać informacji na ten temat w logu OZW." @@ -715,7 +715,7 @@ }, "area_registry": { "caption": "Rejestr obszarów", - "description": "Przegląd wszystkich obszarów w twoim domu.", + "description": "Przegląd wszystkich obszarów w twoim domu", "picker": { "header": "Rejestr obszarów", "introduction": "Obszary służą do organizacji urządzeń. Informacje te będą używane w Home Assistant, aby pomóc w organizacji interfejsu, uprawnień i integracji z innymi systemami.", @@ -755,7 +755,7 @@ }, "person": { "caption": "Osoby", - "description": "Zarządzaj osobami, które śledzi Home Assistant.", + "description": "Zarządzaj osobami, które śledzi Home Assistant", "detail": { "name": "Imię", "device_tracker_intro": "Wybierz urządzenia należące do tej osoby.", @@ -765,27 +765,27 @@ }, "server_control": { "caption": "Kontrola serwera", - "description": "Uruchom ponownie i zatrzymaj serwer Home Assistant", + "description": "Uruchom ponownie i zatrzymaj serwer Home Assistant'a", "section": { "validation": { "heading": "Sprawdzanie konfiguracji", - "introduction": "Jeśli ostatnio wprowadzano zmiany w konfiguracji sprawdź jej poprawność", + "introduction": "Kliknij Sprawdź konfigurację, by upewnić się, że jest ona prawidłowa.", "check_config": "Sprawdź konfigurację", "valid": "Konfiguracja prawidłowa!", "invalid": "Konfiguracja nieprawidłowa" }, "reloading": { - "heading": "Ponowne załadowanie konfiguracji", - "introduction": "Niektóre części Home Assistant można przeładować bez konieczności ponownego uruchamiania. Naciśnięcie przycisku przeładowania spowoduje zwolnienie bieżącej konfiguracji i załadowanie nowej.", - "core": "Załaduj ponownie rdzeń", - "group": "Załaduj ponownie grupy", - "automation": "Załaduj ponownie automatyzacje", - "script": "Załaduj ponownie skrypty", - "scene": "Załaduj ponownie sceny" + "heading": "Ponowne wczytanie konfiguracji", + "introduction": "Niektóre części konfiguracji można wczytać od nowa bez konieczności ponownego uruchamiania Home Assistant'a. Naciśnięcie poniższych przycisków wczyta ponownie daną część konfiguracji.", + "core": "Rdzeń", + "group": "Grupy", + "automation": "Automatyzacje", + "script": "Skrypty", + "scene": "Sceny" }, "server_management": { "heading": "Zarządzanie serwerem", - "introduction": "Kontroluj swój serwer Home Assistant… z Home Assistant.", + "introduction": "Kontroluj serwer Home Assistant'a.", "restart": "Uruchom ponownie", "stop": "Zatrzymaj" } @@ -987,7 +987,7 @@ }, "core-config": { "intro": "{name}, witamy w Home Assistant. Jak chcesz nazwać swój dom?", - "intro_location": "Chcielibyśmy wiedzieć gdzie mieszkasz. Te dane pomogą w wyświetlaniu informacji i konfigurowaniu automatyki opartej na położeniu słońca. Te dane nigdy nie będą udostępniane poza Twoją sieć lokalną.", + "intro_location": "Chcielibyśmy wiedzieć, gdzie mieszkasz. Te dane pomogą w wyświetlaniu informacji i konfigurowaniu automatyki opartej na położeniu słońca. Te dane nigdy nie będą udostępniane poza Twoją sieć lokalną.", "intro_location_detect": "Możemy pomóc Ci wprowadzić te informacje, wysyłając jednorazowe zapytanie do usługi zewnętrznej.", "location_name_default": "Dom", "button_detect": "Wykryj", @@ -1070,7 +1070,7 @@ "message": "Zaktualizowano konfigurację Lovelace, czy chcesz odświeżyć?", "refresh": "Odśwież" }, - "reload_lovelace": "Przeładuj Lovelace" + "reload_lovelace": "Wczytaj ponownie Lovelace" }, "page-demo": { "cards": { diff --git a/translations/uk.json b/translations/uk.json index 75a94d468a..1c0753ffbf 100644 --- a/translations/uk.json +++ b/translations/uk.json @@ -142,7 +142,7 @@ "heat_pump": "Тепловий насос", "gas": "Газ", "manual": "Вручну", - "heat_cool": "Нагрівання\/Охолодження" + "heat_cool": "Опалення\/Охолодження" }, "configurator": { "configure": "Налаштувати", @@ -277,7 +277,8 @@ "default": { "unknown": "Невід", "unavailable": "Недост", - "error": "Помилка" + "error": "Помилка", + "entity_not_found": "Об'єкт не знайдено" }, "alarm_control_panel": { "armed": "Охорона", @@ -354,6 +355,8 @@ "header": "Конфігурація та керування сервером", "introduction": "Зміна вашої конфігурації може бути неабияким процесом. Ми знаємо. Цей розділ намагатиметься полегшити ваше життя.", "core_config": { + "edit_requires_storage": "Редактор відключено, оскільки конфігурація вже збережена у configuration.yaml.", + "location_name": "Заголовок для вашого Home Assistant", "latitude": "Широта", "longitude": "Довгота", "elevation": "Висота", @@ -570,7 +573,9 @@ } }, "learn_more": "Докладніше про дії" - } + }, + "load_error_not_editable": "Можна редагувати лише секцію automations у файлі automations.yaml", + "load_error_unknown": "Помилка під час завантаження автоматизації ({err_no})." } }, "script": { @@ -586,8 +591,15 @@ "remove_node": "Видалити вузол", "cancel_command": "Скасувати команду" }, + "common": { + "unknown": "невідомо", + "wakeup_interval": "Інтервал пробудження" + }, "node_config": { + "seconds": "секунд", + "set_wakeup": "Встановити інтервал пробудження", "config_parameter": "Параметр конфігурації", + "config_value": "Значення параметра", "set_config_parameter": "Встановити параметр налаштування" } }, @@ -616,7 +628,8 @@ "cloud": { "caption": "Хмара Home Assistant", "description_login": "Увійшли в систему як {email}", - "description_not_login": "Не ввійшли в систему" + "description_not_login": "Не ввійшли в систему", + "description_features": "Керуйте далеко від дому, інтегруйтеся з Alexa та Google Assistant." }, "integrations": { "caption": "Інтеграція", @@ -631,40 +644,55 @@ "no_device": "Об'єкти без пристроїв", "delete_confirm": "Ви впевнені, що хочете видалити цю інтеграцію?", "restart_confirm": "Перезавантажте Home Assistant, щоб завершити видалення цієї інтеграції", - "manuf": "від {manufacturer}", + "manuf": "створено: {manufacturer}", "via": "Підключено через", "firmware": "Прошивка: {version}", "device_unavailable": "пристрій недоступний", "entity_unavailable": "Недоступний", - "no_area": "Немає області" + "no_area": "Немає області", + "hub": "Підключено через" + }, + "config_flow": { + "external_step": { + "description": "На цьому кроці необхідно відвідати зовнішній веб-сайт.", + "open_site": "Відкрити веб-сайт" + } } }, "zha": { "caption": "ZHA", "description": "Управління мережею домашньої автоматизації Zigbee", "services": { - "reconfigure": "Переконфігуруйте пристрій ZHA (пристрій загоєння). Використовуйте це, якщо у вас виникли проблеми з пристроєм. Якщо пристрій, про який йде мова, живиться від батареї, будь ласка, переконайтеся, що він є активним і приймає команди під час використання цієї команди.", + "reconfigure": "Переконфігуруйте пристрій ZHA. Використовуйте це, якщо у вас виникли проблеми з пристроєм. Якщо пристрій, про який йде мова, живиться від батареї, будь ласка, переконайтеся, що він працює і приймає команди.", + "updateDeviceName": "Встановіть зручну назву для цього пристрою у реєстрі.", "remove": "Видалити пристрій із мережі ZigBee." }, "device_card": { - "area_picker_label": "Площа" + "device_name_placeholder": "Ім'я", + "area_picker_label": "Зона", + "update_name_button": "Змінити ім'я" + }, + "add_device_page": { + "header": "Розумні пристрої на базі Zigbee - додавання пристроїв", + "spinner": "Пошук пристроїв ZHA Zigbee ...", + "discovery_text": "Тут будуть показані автоматично виявлені пристрої. Дотримуйтесь вказівок на ваший пристроях і переведіть пристрої в режим з'єднання." } }, "area_registry": { "caption": "Реєстр зони", "description": "Огляд всіх областей у вашому домі.", "picker": { - "header": "Реєстр областей", + "header": "Реєстр зон", "introduction": "Області використовуються для організації пристроїв. Ця інформація буде використовуватисяHome Assistant, щоб допомогти вам організувати ваш інтерфейс, дозволи та інтеграції з іншими системами.", "introduction2": "Щоб розмістити пристрої в області, скористайтеся посиланням нижче, щоб перейти до сторінки інтеграції, а потім натисніть налаштовану інтеграцію, щоб дістатися до карток пристрою.", "integrations_page": "Сторінка інтеграцій ", - "no_areas": "Схоже, у вас ще немає областей!", - "create_area": "СТВОРИТИ ОБЛАСТЬ" + "no_areas": "Схоже, що у вас ще немає створених зон!", + "create_area": "СТВОРИТИ ЗОНУ" }, - "no_areas": "Схоже, у вас ще немає областей!", - "create_area": "СТВОРИТИ ОБЛАСТЬ", + "no_areas": "Схоже, що у вас ще немає зон!", + "create_area": "СТВОРИТИ ЗОНУ", "editor": { - "default_name": "Нова область", + "default_name": "Нова зона", "delete": "ВИДАЛИТИ", "update": "ОНОВИТИ", "create": "СТВОРИТИ" @@ -682,10 +710,11 @@ }, "editor": { "unavailable": "Цей об'єкт наразі недоступний.", - "default_name": "Нова область", + "default_name": "Нова зона", "delete": "ВИДАЛИТИ", "update": "ОНОВИТИ", "enabled_label": "Увімкнути об'єкт", + "enabled_cause": "Відключено: {cause}.", "enabled_description": "Відключені об'єкти не будуть додані в Home Assistant." } }, @@ -898,11 +927,14 @@ } }, "integration": { + "intro": "Пристрої та послуги в Home Assistant, які вимагають інтеграції з зовнішніми джерелами. Ви можете їх налаштувати зараз або зробити це пізніше на екрані конфігурації.", "more_integrations": "Більше", "finish": "Завершити" }, "core-config": { - "intro": "Привіт {name}, Ласкаво просимо до домашнього помічника. Як би ви хотіли назвати свій будинок?", + "intro": "Привіт {name}, Ласкаво просимо до Home Assistant. Як би ви хотіли назвати свій дім?", + "intro_location": "Ми хотіли б знати, де ви живете. Ця інформація допоможе нам відображати інформацію та налаштування, базуючись положенні сонця. Ці дані ніколи не передаються за межі вашої локальної мережі.", + "intro_location_detect": "Ми можемо допомогти вам заповнити цю інформацію, зробивши одноразовий запит до зовнішньої служби.", "location_name_default": "Головна", "button_detect": "Виявити", "finish": "Далі" @@ -921,7 +953,12 @@ "go_to_integrations_page": "Перейти на сторінку інтеграцій." }, "picture-elements": { - "call_service": "Викликати сервіс {name}" + "hold": "Утримуйте:", + "tap": "Торкніться:", + "navigate_to": "Перейти до {location}", + "toggle": "Переключити {ім'я}", + "call_service": "Звернутись до сервісу {name}", + "more_info": "Показати більше: {name}" } }, "editor": { @@ -984,21 +1021,41 @@ "page-demo": { "cards": { "demo": { + "demo_by": "створено: {name}", + "next_demo": "Наступний дизайн", + "introduction": "Ласкаво просимо додому! Ви знаходитесь на сторінці демонстрації системи Home Assistant. Тут ви зможете переглянути найкращі інтерфейси користувача, створені нашою спільнотою.", "learn_more": "Дізнайтеся більше про Home Assistant" } }, "config": { "arsaboo": { "names": { + "upstairs": "Нагорі", "family_room": "Вітальня", "kitchen": "Кухня", - "left": "Зліва", - "right": "Право" + "patio": "Зона відпочинку", + "hallway": "Коридор", + "master_bedroom": "Головна спальня", + "left": "Ліворуч", + "right": "Праворуч", + "mirror": "Дзеркало" }, "labels": { - "volume": "Гучність" + "lights": "Фари", + "information": "Інформація", + "morning_commute": "Їхати на роботу", + "commute_home": "Їхати додому", + "entertainment": "Розваги", + "activity": "Діяльність", + "hdmi_input": "HDMI-вхід", + "hdmi_switcher": "HDMI-перемикач", + "volume": "Гучність", + "total_tv_time": "Сумарний час перегляду", + "turn_tv_off": "Вимкнути телевізор", + "air": "Повітря" }, "unit": { + "watching": "спостерігати", "minutes_abbr": "хв" } } @@ -1006,7 +1063,8 @@ } }, "sidebar": { - "log_out": "Вийти" + "log_out": "Вийти", + "external_app_configuration": "Конфігурація застосунку" }, "common": { "loading": "Завантаження", @@ -1280,7 +1338,7 @@ }, "hvac_action": { "off": "Вимкнено", - "heating": "Нагрівання", + "heating": "Опалення", "cooling": "Охолодження", "drying": "Сушіння", "idle": "Очікування", diff --git a/translations/zh-Hans.json b/translations/zh-Hans.json index 366d12c94b..8a491a0b24 100644 --- a/translations/zh-Hans.json +++ b/translations/zh-Hans.json @@ -618,14 +618,19 @@ "common": { "value": "值", "instance": "实例", + "index": "指数", "unknown": "未知", "wakeup_interval": "唤醒时间间隔" }, + "values": { + "header": "节点值" + }, "node_config": { "header": "节点配置选项", "seconds": "秒", "set_wakeup": "设置唤醒间隔", "config_parameter": "配置参数", + "config_value": "配置值", "set_config_parameter": "设置配置参数" } }, @@ -738,7 +743,10 @@ "unavailable": "该实体暂不可用。", "default_name": "新建区域", "delete": "删除", - "update": "更新" + "update": "更新", + "enabled_label": "启用实体", + "enabled_cause": "被{cause}禁用。", + "enabled_description": "已禁用的实体不再添加到Home Assistant。" } }, "person": { @@ -752,15 +760,19 @@ } }, "server_control": { + "caption": "服务器控制", + "description": "重新启动或停止Home Assistant服务器", "section": { "validation": { "heading": "配置有效性", + "introduction": "此处可以帮助你检验最新修改的配置文件有效性", "check_config": "配置检查", "valid": "配置有效!", "invalid": "配置无效" }, "reloading": { "heading": "配置重载中", + "introduction": "Home Assistant 中的部分设定可以直接重载,无需重启服务器。点击重载按钮将重新载入新的设定。", "core": "重载核心模块", "group": "重载分组", "automation": "重载自动化", @@ -769,6 +781,7 @@ }, "server_management": { "heading": "服务器管理", + "introduction": "在这里即可控制 Home Assistant 服务。", "restart": "重新启动", "stop": "停止服务" } @@ -1288,6 +1301,11 @@ "success": { "description": "选项已成功保存。" } + }, + "config_entry_system_options": { + "title": "系统选项", + "enable_new_entities_label": "启用新添加的实体。", + "enable_new_entities_description": "如果禁用,新发现的实体将不会自动添加到Home Assistant。" } }, "auth_store": { @@ -1383,5 +1401,12 @@ "system-admin": "管理员", "system-users": "用户", "system-read-only": "只读用户" + }, + "config_entry": { + "disabled_by": { + "user": "用户", + "integration": "集成", + "config_entry": "配置条目" + } } } \ No newline at end of file diff --git a/translations/zh-Hant.json b/translations/zh-Hant.json index c78c9272af..2061cf1446 100644 --- a/translations/zh-Hant.json +++ b/translations/zh-Hant.json @@ -218,7 +218,7 @@ "on": "開啓" }, "sun": { - "above_horizon": "白天", + "above_horizon": "日出東海", "below_horizon": "日落西山" }, "switch": { @@ -986,7 +986,7 @@ "finish": "完成" }, "core-config": { - "intro": "{name}、你好,歡迎使用 Home Assistant。為您的家庭取個名字吧?", + "intro": "{name}你好,歡迎使用 Home Assistant。為您的家庭取個名字吧?", "intro_location": "希望能夠提供您所居住的區域,資料將協助所顯示的資訊內容、設定以日出日落為基礎的自動化。此資料將絕不會與外部網路進行分享。", "intro_location_detect": "設定可以藉由一次性請求外部服務、以協助您填寫此項資料。", "location_name_default": "首頁", From 6259e45128e79a2f7e0bdc435e30c7f185e35dd2 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 1 Sep 2019 21:48:41 -0700 Subject: [PATCH 04/10] Bumped version to 20190901.0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index ce90a45340..f2bf44985c 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name="home-assistant-frontend", - version="20190828.0", + version="20190901.0", description="The Home Assistant frontend", url="https://github.com/home-assistant/home-assistant-polymer", author="The Home Assistant Authors", From c3e29e359aadcd387067106407512bca92b79fab Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Sun, 1 Sep 2019 23:51:01 -0500 Subject: [PATCH 05/10] Show alarm's friendly_name if set (#3565) Closes https://github.com/home-assistant/home-assistant-polymer/issues/3459 --- src/panels/lovelace/cards/hui-alarm-panel-card.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/panels/lovelace/cards/hui-alarm-panel-card.ts b/src/panels/lovelace/cards/hui-alarm-panel-card.ts index 8b99421f7e..899a2c6eb9 100644 --- a/src/panels/lovelace/cards/hui-alarm-panel-card.ts +++ b/src/panels/lovelace/cards/hui-alarm-panel-card.ts @@ -114,7 +114,11 @@ class HuiAlarmPanelCard extends LitElement implements LovelaceCard { } return html` - + Date: Sun, 1 Sep 2019 23:51:35 -0500 Subject: [PATCH 06/10] Present confirmation for server restarts/stops (#3564) Closes https://github.com/home-assistant/home-assistant-polymer/issues/3233 --- src/components/buttons/ha-call-service-button.js | 7 +++++++ .../server_control/ha-config-section-server-control.js | 2 ++ src/translations/en.json | 4 +++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/components/buttons/ha-call-service-button.js b/src/components/buttons/ha-call-service-button.js index ab61dc0444..909919c9a1 100644 --- a/src/components/buttons/ha-call-service-button.js +++ b/src/components/buttons/ha-call-service-button.js @@ -42,10 +42,17 @@ class HaCallServiceButton extends EventsMixin(PolymerElement) { type: Object, value: {}, }, + + confirmation: { + type: String, + }, }; } buttonTapped() { + if (this.confirmation && !window.confirm(this.confirmation)) { + return; + } this.progress = true; var el = this; var eventData = { diff --git a/src/panels/config/server_control/ha-config-section-server-control.js b/src/panels/config/server_control/ha-config-section-server-control.js index d1e7fb9c41..6382de6c5e 100644 --- a/src/panels/config/server_control/ha-config-section-server-control.js +++ b/src/panels/config/server_control/ha-config-section-server-control.js @@ -150,6 +150,7 @@ class HaConfigSectionServerControl extends LocalizeMixin(PolymerElement) { hass="[[hass]]" domain="homeassistant" service="restart" + confirmation="[[localize('ui.panel.config.server_control.section.server_management.confirm_restart')]]" >[[localize('ui.panel.config.server_control.section.server_management.restart')]] [[localize('ui.panel.config.server_control.section.server_management.stop')]] diff --git a/src/translations/en.json b/src/translations/en.json index 32999f17db..fd9d65bed1 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -649,7 +649,9 @@ "heading": "Server management", "introduction": "Control your Home Assistant server… from Home Assistant.", "restart": "Restart", - "stop": "Stop" + "confirm_restart": "Are you sure you want to restart Home Assistant?", + "stop": "Stop", + "confirm_stop": "Are you sure you want to stop Home Assistant?" } } }, From 12173388a029d4b2cd7f97f652d4af6f5a437c3a Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 2 Sep 2019 06:53:12 +0200 Subject: [PATCH 07/10] Split Logs from info tab in dev tools (#3560) * Split Logs from info tab in dev tools * lint * Remove border above logs --- .../developer-tools/developer-tools-router.ts | 4 ++ .../ha-panel-developer-tools.ts | 3 ++ .../info/developer-tools-info.ts | 5 +- .../logs/developer-tools-logs.ts | 52 +++++++++++++++++++ .../dialog-system-log-detail.ts | 0 .../{info => logs}/error-log-card.ts | 0 .../show-dialog-system-log-detail.ts | 0 .../{info => logs}/system-log-card.ts | 2 - src/translations/en.json | 3 ++ 9 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 src/panels/developer-tools/logs/developer-tools-logs.ts rename src/panels/developer-tools/{info => logs}/dialog-system-log-detail.ts (100%) rename src/panels/developer-tools/{info => logs}/error-log-card.ts (100%) rename src/panels/developer-tools/{info => logs}/show-dialog-system-log-detail.ts (100%) rename src/panels/developer-tools/{info => logs}/system-log-card.ts (98%) diff --git a/src/panels/developer-tools/developer-tools-router.ts b/src/panels/developer-tools/developer-tools-router.ts index 924c82232e..7af7705ac1 100644 --- a/src/panels/developer-tools/developer-tools-router.ts +++ b/src/panels/developer-tools/developer-tools-router.ts @@ -28,6 +28,10 @@ class DeveloperToolsRouter extends HassRouterPage { tag: "developer-tools-info", load: () => import("./info/developer-tools-info"), }, + logs: { + tag: "developer-tools-logs", + load: () => import("./logs/developer-tools-logs"), + }, mqtt: { tag: "developer-tools-mqtt", load: () => import("./mqtt/developer-tools-mqtt"), diff --git a/src/panels/developer-tools/ha-panel-developer-tools.ts b/src/panels/developer-tools/ha-panel-developer-tools.ts index f982cc1f1a..edb2236237 100644 --- a/src/panels/developer-tools/ha-panel-developer-tools.ts +++ b/src/panels/developer-tools/ha-panel-developer-tools.ts @@ -52,6 +52,9 @@ class PanelDeveloperTools extends LitElement { ${this.hass.localize("ui.panel.developer-tools.tabs.info.title")} + + ${this.hass.localize("ui.panel.developer-tools.tabs.logs.title")} + ${this.hass.localize( "ui.panel.developer-tools.tabs.events.title" diff --git a/src/panels/developer-tools/info/developer-tools-info.ts b/src/panels/developer-tools/info/developer-tools-info.ts index f9b1be82f0..3c021f7c57 100644 --- a/src/panels/developer-tools/info/developer-tools-info.ts +++ b/src/panels/developer-tools/info/developer-tools-info.ts @@ -10,8 +10,6 @@ import { import { HomeAssistant } from "../../../types"; import { haStyle } from "../../../resources/styles"; -import "./system-log-card"; -import "./error-log-card"; import "./system-health-card"; const JS_TYPE = __BUILD__; @@ -119,8 +117,6 @@ class HaPanelDevInfo extends LitElement {
- -
`; } @@ -181,6 +177,7 @@ class HaPanelDevInfo extends LitElement { display: block; max-width: 600px; margin: 0 auto; + padding-bottom: 16px; } `, ]; diff --git a/src/panels/developer-tools/logs/developer-tools-logs.ts b/src/panels/developer-tools/logs/developer-tools-logs.ts new file mode 100644 index 0000000000..6bc7190ffd --- /dev/null +++ b/src/panels/developer-tools/logs/developer-tools-logs.ts @@ -0,0 +1,52 @@ +import { + LitElement, + html, + CSSResult, + css, + TemplateResult, + property, +} from "lit-element"; + +import { HomeAssistant } from "../../../types"; +import { haStyle } from "../../../resources/styles"; + +import "../logs/system-log-card"; +import "../logs/error-log-card"; + +class HaPanelDevLogs extends LitElement { + @property() public hass!: HomeAssistant; + + protected render(): TemplateResult | void { + return html` +
+ + +
+ `; + } + + static get styles(): CSSResult[] { + return [ + haStyle, + css` + :host { + -ms-user-select: initial; + -webkit-user-select: initial; + -moz-user-select: initial; + } + + .content { + direction: ltr; + } + `, + ]; + } +} + +declare global { + interface HTMLElementTagNameMap { + "developer-tools-logs": HaPanelDevLogs; + } +} + +customElements.define("developer-tools-logs", HaPanelDevLogs); diff --git a/src/panels/developer-tools/info/dialog-system-log-detail.ts b/src/panels/developer-tools/logs/dialog-system-log-detail.ts similarity index 100% rename from src/panels/developer-tools/info/dialog-system-log-detail.ts rename to src/panels/developer-tools/logs/dialog-system-log-detail.ts diff --git a/src/panels/developer-tools/info/error-log-card.ts b/src/panels/developer-tools/logs/error-log-card.ts similarity index 100% rename from src/panels/developer-tools/info/error-log-card.ts rename to src/panels/developer-tools/logs/error-log-card.ts diff --git a/src/panels/developer-tools/info/show-dialog-system-log-detail.ts b/src/panels/developer-tools/logs/show-dialog-system-log-detail.ts similarity index 100% rename from src/panels/developer-tools/info/show-dialog-system-log-detail.ts rename to src/panels/developer-tools/logs/show-dialog-system-log-detail.ts diff --git a/src/panels/developer-tools/info/system-log-card.ts b/src/panels/developer-tools/logs/system-log-card.ts similarity index 98% rename from src/panels/developer-tools/info/system-log-card.ts rename to src/panels/developer-tools/logs/system-log-card.ts index e3800dcfec..1d3e264e46 100644 --- a/src/panels/developer-tools/info/system-log-card.ts +++ b/src/panels/developer-tools/logs/system-log-card.ts @@ -141,8 +141,6 @@ class SystemLogCard extends LitElement { .system-log-intro { margin: 16px; - border-top: 1px solid var(--light-primary-color); - padding-top: 16px; } .loading-container { diff --git a/src/translations/en.json b/src/translations/en.json index fd9d65bed1..72816e5649 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -1320,6 +1320,9 @@ "info": { "title": "Info" }, + "logs": { + "title": "Logs" + }, "events": { "title": "Events" }, From be0c035ba151274f4de0eaa6ef4e2747024d52aa Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Sun, 1 Sep 2019 23:59:57 -0500 Subject: [PATCH 08/10] Don't open more-info from integrations dashboard (#3556) --- .../config/integrations/ha-config-entries-dashboard.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/panels/config/integrations/ha-config-entries-dashboard.js b/src/panels/config/integrations/ha-config-entries-dashboard.js index d7c6113afb..0a2159a45a 100644 --- a/src/panels/config/integrations/ha-config-entries-dashboard.js +++ b/src/panels/config/integrations/ha-config-entries-dashboard.js @@ -126,10 +126,7 @@ class HaConfigManagerDashboard extends LocalizeMixin( items="[[_computeConfigEntryEntities(hass, item, entities)]]" > - + [[_computeStateName(item)]] @@ -230,10 +227,6 @@ class HaConfigManagerDashboard extends LocalizeMixin( return computeStateName(stateObj); } - _handleMoreInfo(ev) { - this.fire("hass-more-info", { entityId: ev.model.item.entity_id }); - } - _computeRTL(hass) { return computeRTL(hass); } From 6b5c9efb3906b1e60b71317c4cf987c6eca1324c Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Mon, 2 Sep 2019 00:00:14 -0500 Subject: [PATCH 09/10] Break long strings in notifications (#3557) --- src/dialogs/notifications/persistent-notification-item.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/dialogs/notifications/persistent-notification-item.ts b/src/dialogs/notifications/persistent-notification-item.ts index b40a743203..9ddb665718 100644 --- a/src/dialogs/notifications/persistent-notification-item.ts +++ b/src/dialogs/notifications/persistent-notification-item.ts @@ -73,6 +73,9 @@ export class HuiPersistentNotificationItem extends LitElement { a { color: var(--primary-color); } + ha-markdown { + overflow-wrap: break-word; + } `; } From 1bc2e6fc1713fb1fd81f417566bda566ec82ccc0 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 2 Sep 2019 07:00:32 +0200 Subject: [PATCH 10/10] Use tslib and importHelpers (#3559) --- package.json | 1 + tsconfig.json | 3 ++- yarn.lock | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index c0f9cb3149..25afbc9b9c 100644 --- a/package.json +++ b/package.json @@ -96,6 +96,7 @@ "roboto-fontface": "^0.10.0", "round-slider": "^1.3.3", "superstruct": "^0.6.1", + "tslib": "^1.10.0", "unfetch": "^4.1.0", "web-animations-js": "^2.3.1", "xss": "^1.0.6" diff --git a/tsconfig.json b/tsconfig.json index ddc30c8b56..7ca6093963 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,6 +15,7 @@ "noImplicitAny": false, "skipLibCheck": true, "resolveJsonModule": true, - "experimentalDecorators": true + "experimentalDecorators": true, + "importHelpers": true } } diff --git a/yarn.lock b/yarn.lock index 01617334de..845883feff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13210,7 +13210,7 @@ tslib@1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ== -tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.10.0, tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==