From 515e39154ab548c9a6031b64e0bde977a7a21b78 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Sat, 27 Jun 2020 00:32:42 +0000 Subject: [PATCH 01/13] [ci skip] Translation update --- translations/frontend/cs.json | 26 ++++++++++++++++++++++++-- translations/frontend/it.json | 19 +++++++++++++++++++ translations/frontend/nb.json | 23 +++++++++++++++++++++++ translations/frontend/zh-Hans.json | 4 +++- 4 files changed, 69 insertions(+), 3 deletions(-) diff --git a/translations/frontend/cs.json b/translations/frontend/cs.json index b4cb190800..72bdd89897 100644 --- a/translations/frontend/cs.json +++ b/translations/frontend/cs.json @@ -48,6 +48,19 @@ "none": "Žádná", "sleep": "Spánek" } + }, + "humidifier": { + "mode": { + "auto": "Automatika", + "away": "Pryč", + "baby": "Dítě", + "boost": "Boost", + "comfort": "Komfort", + "eco": "Ekonomický mód", + "home": "Doma", + "normal": "Běžný", + "sleep": "Spánek" + } } }, "state_badge": { @@ -388,6 +401,12 @@ "reverse": "Vzad", "speed": "Rychlost" }, + "humidifier": { + "humidity": "Cílová vlhkost", + "mode": "Režim", + "on_entity": "{name} zapnuto", + "target_humidity_entity": "{name} cílová vlhkost" + }, "light": { "brightness": "Jas", "color_temperature": "Teplota barvy", @@ -560,7 +579,7 @@ "config_entry_system_options": { "enable_new_entities_description": "Pokud je zakázáno, nově objevené entity pro {integration} nebudou automaticky přidány do Home Assistant.", "enable_new_entities_label": "Povolit nově přidané entity.", - "title": "Systémové možnosti pro {integration}", + "title": "Upravit nastavení pro {integration}", "update": "Aktualizovat" }, "domain_toggler": { @@ -1425,7 +1444,7 @@ "restart_confirm": "Restartujte Home Assistant pro odstranění této integrace", "settings_button": "Upravit nastavení pro {integration}", "system_options": "Více možností", - "system_options_button": "Systémové možnosti pro {integration}", + "system_options_button": "Upravit nastavení pro {integration}", "unnamed_entry": "Nepojmenovaný záznam" }, "config_flow": { @@ -2198,6 +2217,9 @@ "description": "Karta Horizontální Stack umožňuje seskupovat více karet tak, že jsou vždy zobrazeny vedle sebe v prostoru šířky jednoho sloupce.", "name": "Horizontální uskupení" }, + "humidifier": { + "name": "Zvlhčovač" + }, "iframe": { "description": "Karta Webová stránka umožňuje vložit oblíbenou webovou stránku přímo do Home Assistanta.", "name": "iFrame" diff --git a/translations/frontend/it.json b/translations/frontend/it.json index b3c80f8041..681720b018 100644 --- a/translations/frontend/it.json +++ b/translations/frontend/it.json @@ -48,6 +48,19 @@ "none": "Nessuna", "sleep": "Dormire" } + }, + "humidifier": { + "mode": { + "auto": "Automatico", + "away": "Fuori casa", + "baby": "Bambino", + "boost": "Boost", + "comfort": "Comfort", + "eco": "Eco", + "home": "In casa", + "normal": "Normale", + "sleep": "Sonno" + } } }, "state_badge": { @@ -388,6 +401,12 @@ "reverse": "Indietro", "speed": "Velocità" }, + "humidifier": { + "humidity": "Target umidità", + "mode": "Modalità", + "on_entity": "{name} acceso", + "target_humidity_entity": "{name} target umidità" + }, "light": { "brightness": "Luminosità", "color_temperature": "Temperatura colore", diff --git a/translations/frontend/nb.json b/translations/frontend/nb.json index ce2dfe7d53..b0d5e9f04a 100644 --- a/translations/frontend/nb.json +++ b/translations/frontend/nb.json @@ -48,6 +48,19 @@ "none": "Ingen", "sleep": "Sove" } + }, + "humidifier": { + "mode": { + "auto": "Auto", + "away": "Borte", + "baby": "Baby", + "boost": "Øke", + "comfort": "Komfort", + "eco": "Øko", + "home": "Hjem", + "normal": "Normal", + "sleep": "Sove" + } } }, "state_badge": { @@ -388,6 +401,12 @@ "reverse": "Omvendt", "speed": "Hastighet" }, + "humidifier": { + "humidity": "Målfuktighet", + "mode": "Modus", + "on_entity": "{name} på", + "target_humidity_entity": "{name} målfuktighet" + }, "light": { "brightness": "Lysstyrke", "color_temperature": "Fargetemperatur", @@ -2198,6 +2217,10 @@ "description": "Horizontal Stack-kortet lar deg stable sammen flere kort, slik at de alltid sitter ved siden av hverandre i løpet av en kolonne.", "name": "Horisontal Stack" }, + "humidifier": { + "description": "Luftfukterkortet gir kontroll over luftfukterenheten din. Lar deg endre fuktigheten og modusen til enheten.", + "name": "Luftfukter" + }, "iframe": { "description": "Websidekortet lar deg legge inn favorittwebsiden din direkte i Home Assistant.", "name": "Webside" diff --git a/translations/frontend/zh-Hans.json b/translations/frontend/zh-Hans.json index 3e7fc68123..7a4cf31406 100644 --- a/translations/frontend/zh-Hans.json +++ b/translations/frontend/zh-Hans.json @@ -403,7 +403,9 @@ }, "humidifier": { "humidity": "设定湿度", - "mode": "模式" + "mode": "模式", + "on_entity": "{name} 已打开", + "target_humidity_entity": "{name} 的设定湿度" }, "light": { "brightness": "亮度", From da6fdc74d8604837b9e9e8836b31807478d5f055 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Sun, 28 Jun 2020 00:32:23 +0000 Subject: [PATCH 02/13] [ci skip] Translation update --- translations/frontend/de.json | 4 +- translations/frontend/he.json | 278 +++++++++++++++++++++++++++++++--- translations/frontend/ko.json | 35 ++++- translations/frontend/ru.json | 48 +++--- 4 files changed, 314 insertions(+), 51 deletions(-) diff --git a/translations/frontend/de.json b/translations/frontend/de.json index 95d93c2c11..09733803ce 100644 --- a/translations/frontend/de.json +++ b/translations/frontend/de.json @@ -1738,8 +1738,8 @@ "discovered_text": "Geräte werden hier angezeigt sobald sie erkannt worden sind.", "discovery_text": "Erkannte Geräte werden hier angezeigt. Befolgen Sie die Anweisungen für Ihr Gerät und versetzen Sie das Gerät in den Pairing-Modus.", "header": "Zigbee Home Automation - Geräte hinzufügen", - "no_devices_found": "Es wurde keine Geräte erkannt, stelle sicher das sie sich im Pairing Modus befinden und halte sie Aktiv solange die Erkennung läuft,", - "pairing_mode": "Stellen Sie sicher, dass sich Ihre Geräte im Pairing-Modus befinden. Überprüfen Sie dazu die Anweisungen Ihres Geräts.", + "no_devices_found": "Es wurden keine Geräte erkannt. Stelle sicher, dass sie sich im Pairing-Modus befinden und halte sie aktiv, solange die Erkennung läuft,", + "pairing_mode": "Stelle sicher, dass sich deine Geräte im Pairing-Modus befinden. Überprüfe dazu die Anweisungen deines Geräts.", "search_again": "Erneut suchen", "spinner": "Suche nach ZHA Zigbee Geräten..." }, diff --git a/translations/frontend/he.json b/translations/frontend/he.json index 9410eece82..ae21586b39 100644 --- a/translations/frontend/he.json +++ b/translations/frontend/he.json @@ -51,8 +51,15 @@ }, "humidifier": { "mode": { + "auto": "אוטומטי", "away": "לא בבית", - "home": "בבית" + "baby": "תִינוֹק", + "boost": "גבוה", + "comfort": "נוחות", + "eco": "חסכוני", + "home": "בבית", + "normal": "רגיל", + "sleep": "שינה" } } }, @@ -394,6 +401,12 @@ "reverse": "אחורה", "speed": "מהירות" }, + "humidifier": { + "humidity": "יעד לחות", + "mode": "מצב", + "on_entity": "{name} דולק", + "target_humidity_entity": "{שם} לחות יעד" + }, "light": { "brightness": "בהירות", "color_temperature": "טמפרטורת הצבע", @@ -419,6 +432,9 @@ "script": { "execute": "הפעל" }, + "service": { + "run": "הפעל" + }, "timer": { "actions": { "cancel": "ביטול", @@ -495,11 +511,30 @@ "yes": "כן" }, "components": { + "area-picker": { + "add_dialog": { + "add": "הוסף", + "failed_create_area": "יצירת אזור נכשלה.", + "name": "שם", + "text": "הזן את שם האזור החדש.", + "title": "הוסף אזור חדש" + }, + "add_new": "הוסף אזור חדש...", + "area": "אזור", + "clear": "נקה", + "show_areas": "הצג אזורים" + }, + "date-range-picker": { + "end_date": "תאריך סיום", + "select": "בחר", + "start_date": "תאריך התחלה" + }, "device-picker": { "clear": "נקה", "device": "התקן", "no_area": "אין אזור", - "show_devices": "הצג התקנים" + "show_devices": "הצג התקנים", + "toggle": "החלף מצב" }, "entity": { "entity-picker": { @@ -512,6 +547,17 @@ "loading_history": "טוען היסטוריה...", "no_history_found": "לא נמצאה היסטוריה" }, + "related-items": { + "area": "אֵזוֹר", + "automation": "חלק מהאוטומציות הבאות", + "device": "מכשיר", + "entity": "ישויות קשורות", + "group": "חלק מהקבוצות הבאות", + "integration": "אינטגרציה", + "no_related_found": "לא נמצאו פריטים קשורים.", + "scene": "חלק מהסצינות הבאות", + "script": "חלק מהסקריפטים הבאים" + }, "relative_time": { "duration": { "day": "{count} {count, plural,\n one {יום}\n other {ימים}\n}", @@ -532,13 +578,38 @@ "config_entry_system_options": { "enable_new_entities_description": "אם הם מושבתים, ישויות שהתגלו לאחרונה עבור {integration} לא יתווספו אוטומטית ל Home Assistant.", "enable_new_entities_label": "הפוך ישויות חדשות שנוספו לזמינות.", - "title": "אפשרויות מערכת" + "title": "אפשרויות מערכת", + "update": "עדכון" }, "domain_toggler": { "title": "החלף דומיינים" }, + "entity_registry": { + "control": "בקרה", + "dismiss": "בטל", + "editor": { + "confirm_delete": "האם אתה בטוח שברצונך למחוק רשומה זו?", + "delete": "מחק", + "enabled_cause": "לא זמין עקב {סיבה}.", + "enabled_description": "ישויות לא זמינות לא יתווספו ל Home Assistant.", + "enabled_label": "הפוך ישות לזמינה", + "entity_id": "מזהה ישות", + "icon": "סמל חלופי", + "icon_error": "סמלים צריכים להיות בפורמט: prefix:iconname, למשל: mdi:home", + "name": "שם חלופי", + "note": "הערה: יתכן וזה עדיין לא עובד עם כל האינטגרציות.", + "unavailable": "ישות זו אינה זמינה כרגע.", + "update": "עדכון" + }, + "no_unique_id": "לישות זו אין מזהה ייחודי, ולכן לא ניתן לנהל את ההגדרות שלה ממשק המשתמש.", + "related": "קשורים", + "settings": "הגדרות" + }, "generic": { - "close": "סגור" + "cancel": "ביטול", + "close": "סגור", + "default_confirmation_title": "האם אתה בטוח?", + "ok": "אישור" }, "helper_settings": { "generic": { @@ -548,6 +619,7 @@ "input_datetime": { "date": "תאריך", "datetime": "תאריך ושעה", + "mode": "מה ברצונך להזין?", "time": "זמן" }, "input_number": { @@ -573,12 +645,18 @@ "pattern": "דפוס Regex לצורך אימות בצד הלקוח", "text": "טקסט" }, - "required_error_msg": "שדה זה הוא חובה" + "platform_not_loaded": "האינטגרציה {platform} אינה טעונה. אנא הוסף אותה לקונפיגורציה שלך על ידי הוספת 'default_config:' או '' {platform} : ''.", + "required_error_msg": "שדה זה הוא חובה", + "yaml_not_editable": "אין אפשרות לערוך את ההגדרות של ישות זו מממשק המשתמש. רק ישויות שהוגדרו מממשק המשתמש ניתנות להגדרה מתוך ממשק המשתמש." }, "more_info_control": { "dismiss": "סגור", + "person": { + "create_zone": "צור אזור מהמיקום הנוכחי" + }, "script": { - "last_action": "פעולה אחרונה" + "last_action": "פעולה אחרונה", + "last_triggered": "הופעל לאחרונה" }, "settings": "הגדרות ישות", "sun": { @@ -588,9 +666,22 @@ }, "updater": { "title": "הוראות עדכון" + }, + "vacuum": { + "clean_spot": "נקה נקודה", + "commands": "פקודות שואב אבק:", + "fan_speed": "מהירות מאוורר", + "locate": "איתור", + "pause": "השהיה", + "return_home": "חזור הביתה", + "start": "התחל", + "start_pause": "התחל/השהה", + "status": "סטטוס", + "stop": "עצור" } }, "mqtt_device_debug_info": { + "deserialize": "נסה לנתח הודעות MQTT כ- JSON", "entities": "ישויות", "no_entities": "אין ישויות", "no_triggers": "אין טריגרים", @@ -619,10 +710,15 @@ "zha_device_info": { "buttons": { "add": "הוסף מכשירים", + "clusters": "ניהול אשכולות", "reconfigure": "הגדר מחדש את המכשיר", "remove": "הסר מכשיר", "zigbee_information": "מידע על Zigbee" }, + "confirmations": { + "remove": "האם אתה בטוח שברצונך למחוק מכשיר זה?" + }, + "device_signature": "חתימת התקן zigbee", "last_seen": "נראה לאחרונה", "manuf": "לפי {manufacturer}", "no_area": "ללא אזור", @@ -631,7 +727,8 @@ "services": { "reconfigure": "הגדר מחדש את התקן ה- ZHA (ריפוי מכשיר). השתמש בזה אם אתה נתקל בבעיות במכשיר. אם המכשיר המדובר הוא התקן המונע על ידי סוללה, אנא וודא שהוא דלוק ומקבל פקודות בעת השימוש בשירות זה.", "remove": "הסר מכשיר מרשת ה-Zigbee", - "updateDeviceName": "הגדר שם מותאם אישית עבור התקן זה במאגר ההתקנים." + "updateDeviceName": "הגדר שם מותאם אישית עבור התקן זה במאגר ההתקנים.", + "zigbee_information": "הצגת מידע Zigbee עבור ההתקן." }, "unknown": "לא ידוע", "zha_device_card": { @@ -825,6 +922,7 @@ }, "edit_ui": "ערוך באמצעות ממשק המשתמש", "edit_yaml": "ערוך כ- YAML", + "enable_disable": "הפעל / השבת אוטומציה", "introduction": "השתמש/י באוטומציות להפיח חיים בביתך.", "load_error_not_editable": "רק אוטומציה ב automations.yaml ניתנים לעריכה.", "load_error_unknown": "שגיאה בטעינת האוטומציה ( {err_no} ).", @@ -1155,13 +1253,18 @@ "actions": { "caption": "כשמשהו מופעל..." }, + "automations": "אוטומציות", "conditions": { "caption": "בצע משהו רק אם..." }, + "create": "צור אוטומציה עם המכשיר", + "no_automations": "אין אוטומציות", + "no_device_automations": "אין אוטומציות זמינות עבור התקן זה.", "triggers": { "caption": "עשה משהו כש ..." } }, + "cant_edit": "באפשרותך לערוך פריטים שנוצרו בממשק המשתמש בלבד.", "caption": "התקנים", "confirm_delete": "האם אתה בטוח שברצונך למחוק התקן זו?", "confirm_rename_entity_ids": "האם אתה רוצה גם לשנות את המזהים של הישויות שלך?", @@ -1180,16 +1283,34 @@ "device_info": "פרטי התקן", "device_not_found": "ההתקן לא נמצא.", "entities": { - "disabled_entities": "+{count} {count, plural,\n one {disabled entity}\n other {disabled entities}\n}" + "disabled_entities": "+{count} {count, plural,\n one {disabled entity}\n other {disabled entities}\n}", + "hide_disabled": "הסתר לא זמינים" }, + "name": "שם", "no_devices": "אין התקנים", + "scene": { + "create": "צור סצינה עם ההתקן", + "no_scenes": "אין סצינות", + "scenes": "סצינות" + }, + "scenes": "סצינות", + "script": { + "create": "צור סקריפט עם המכשיר", + "no_scripts": "אין סקריפטים", + "scripts": "סקריפטים" + }, + "scripts": "סקריפטים", "unknown_error": "שגיאה לא ידועה", - "unnamed_device": "התקן ללא שם" + "unnamed_device": "התקן ללא שם", + "update": "עדכון" }, "entities": { "caption": "מאגר הישויות", "description": "סקירה של כל הישויות המוכרות", "picker": { + "filter": { + "show_readonly": "הצג ישויות לקריאה בלבד" + }, "header": "מאגר הישויות", "headers": { "entity_id": "מזהה ישות", @@ -1199,9 +1320,11 @@ "introduction": "Home Assistant מנהל רישום של כל ישות שנראתה אי פעם ואשר ניתנת לזיהוי ייחודי. לכל אחד מישויות אלו יהיה מזהה ישות שהוקצה ואשר יהה שמור רק עבור ישות זו.", "introduction2": "השתמש במאגר הישויות בכדי לשנות את השם, מזהה הישות או להסיר את הערך מ- Home Assistant. שים לב, הסרת הישות ממאגר זה לא תסיר את הישות. לשם כך, פעל לפי הקישור שלהלן והסר אותו מדף האינטגרציות.", "remove_selected": { + "confirm_partly_text": "אתה יכול להסיר רק את {removable} מהישויות שנבחרו {selected}. ניתן להסיר ישויות רק כאשר האינטגרציה כבר לא מספקת את הישויות. לפעמים אתה צריך להפעיל מחדש את עוזר הבית לפני שתוכל להסיר את הישויות של אינטגרציה שהוסרה. האם אתה בטוח שברצונך להסיר את הישויות הניתנות להסרה?", "confirm_partly_title": "ניתן להסיר רק {number} ישויות שנבחרו." }, "status": { + "readonly": "קריאה בלבד", "restored": "שוחזר" } } @@ -1215,6 +1338,7 @@ "caption": "עוזרים", "description": "רכיבים שיכולים לסייע בבניית אוטומציות.", "dialog": { + "add_helper": "הוסף עוזר", "add_platform": "הוסף {platform}", "create": "צור" }, @@ -1269,6 +1393,8 @@ "delete_button": "מחק {integration}", "delete_confirm": "האם אתה בטוח שברצונך למחוק אינטגרציה זו?", "device_unavailable": "התקן אינו זמין", + "devices": "{count} {count, plural,\n one {device}\n other {devices}\n}", + "entities": "{count} {count, plural,\n one {entity}\n other {entities}\n}", "entity_unavailable": "ישות לא זמינה", "firmware": "קושחה: {version}", "hub": "מחובר באמצעות", @@ -1281,7 +1407,8 @@ "restart_confirm": "הפעל מחדש את Home Assistant כדי להשלים את הסרת האינטגרציה", "settings_button": "ערוך הגדרות עבור {integration}", "system_options": "אפשרויות מערכת", - "system_options_button": "אפשרויות מערכת עבור {integration}" + "system_options_button": "אפשרויות מערכת עבור {integration}", + "unnamed_entry": "ערך ללא שם" }, "config_flow": { "aborted": "הופסק", @@ -1330,7 +1457,10 @@ "title": "יומנים" }, "lovelace": { + "caption": "לוחות מחוונים של Lovelace", "dashboards": { + "cant_edit_default": "לא ניתן לערוך את לוח המחוונים של לאבלייס מממשק המשתמש. באפשרותך להסתירו על-ידי הגדרת לוח מחוונים אחר כברירת מחדל.", + "cant_edit_yaml": "לא ניתן לערוך שלוחות מחוונים המוגדרים ב- YAML מממשק המשתמש. שנה אותם ב- configuration.yaml.", "caption": "לוחות בקרה", "conf_mode": { "storage": "ממשק המשתמש נשלט", @@ -1352,11 +1482,13 @@ "title": "כותרת", "title_required": "הכותרת נדרשת.", "update": "עדכן", - "url": "URL" + "url": "URL", + "url_error_msg": "כתובת האתר צריכה להכיל - ולא יכולה להכיל רווחים או תווים מיוחדים, למעט _ ו- -" }, "picker": { "add_dashboard": "הוסף לוח בקרה חדש", "headers": { + "conf_mode": "שיטת קביעת קונפיגרציה", "default": "ברירת מחדל", "filename": "שם קובץ", "require_admin": "מנהל בלבד", @@ -1366,18 +1498,22 @@ "open": "פתוח" } }, + "description": "הגדרת לוחות המחוונים של Lovelace", "resources": { + "cant_edit_yaml": "אתה משתמש ב- Lovelace במצב YAML, לכן אינך יכול לנהל את המשאבים שלך דרך ממשק המשתמש. נהל אותם ב- configuration.yaml.", "caption": "משאבים", "confirm_delete": "האם אתה בטוח שברצונך למחוק את המשאב הזה?", "detail": { "create": "צור", "delete": "מחק", "dismiss": "סגור", + "new_resource": "הוסף משאב חדש", "type": "סוג המשאב", "update": "עדכן", "url": "URL", "url_error_msg": "כתובת URL היא שדה נדרש", - "warning_header": "היה זהיר!" + "warning_header": "היה זהיר!", + "warning_text": "הוספת משאבים יכולה להיות מסוכנת, וודא שאתה יודע את מקור המשאב וסומך עליו. משאבים רעים עלולים לפגוע קשות במערכת שלך." }, "picker": { "add_resource": "הוסף משאב", @@ -1387,6 +1523,7 @@ }, "no_resources": "אין משאבים" }, + "refresh_body": "אתה צריך לרענן את הדף כדי להשלים את ההסרה, האם אתה רוצה לרענן עכשיו?", "refresh_header": "האם אתה רוצה לרענן?", "types": { "css": "סגנון עיצוב", @@ -1397,6 +1534,7 @@ } }, "mqtt": { + "button": "הגדר", "description_listen": "האזנה לנושא", "description_publish": "פרסם חבילה", "listening_to": "האזנה ל", @@ -1522,8 +1660,10 @@ "input_select": "טען מחדש input selects", "input_text": "טען מחדש input text", "introduction": "חלקים מסוימים של Home Assistant יכולים להטען מחדש ללא צורך בהפעלה מחדש.\nטעינה מחדש תשנה את הקונפיגורציה הנוכחית ותטען קונפיגורציה חדשה.", + "person": "טען מחדש אנשים", "scene": "טען מחדש סצנות", - "script": "טען מחדש סקריפטים" + "script": "טען מחדש סקריפטים", + "zone": "טען מחדש אזורים" }, "server_management": { "confirm_restart": "האם אתה בטוח שברצונך להפעיל מחדש את Home Assistant?", @@ -1590,6 +1730,10 @@ "search_again": "חפש שוב", "spinner": "מחפש מכשירי ZHA Zigbee..." }, + "add": { + "caption": "הוסף התקנים", + "description": "הוספת התקנים לרשת Zigbee" + }, "button": "הגדר", "caption": "ZHA", "cluster_attributes": { @@ -1610,7 +1754,9 @@ "issue_zigbee_command": "שלח פקודת Zigbee" }, "clusters": { - "help_cluster_dropdown": "בחר אשכול כדי להציג תכונות ופקודות." + "header": "אשכולות", + "help_cluster_dropdown": "בחר אשכול כדי להציג תכונות ופקודות.", + "introduction": "אשכולות הם אבני הבניין עבור פונקציונליות Zigbee. הן מפרידות את הפונקציונליות ליחידות לוגיות. קיימים סוגים של לקוחות ושרתים הכוללים תכונות ופקודות." }, "common": { "add_devices": "הוסף התקנים", @@ -1620,6 +1766,27 @@ "value": "ערך" }, "description": "ניהול רשת Zigbee לאוטומציה ביתית", + "devices": { + "header": "אוטומציה ביתית של Zigbee - מכשיר" + }, + "group_binding": { + "bind_button_help": "קשר את הקבוצה שנבחרה לאשכול המכשירים שנבחר.", + "bind_button_label": "קשר קבוצה", + "cluster_selection_help": "בחר אשכולות לקישור לקבוצה שנבחרה.", + "group_picker_help": "בחר קבוצה להפעלת פקודת קישור.", + "group_picker_label": "קבוצות הניתנות לקישור", + "header": "קישור הקבוצה", + "introduction": "קישור וניתוק קבוצות.", + "unbind_button_label": "ביטול קישור של קבוצה" + }, + "groups": { + "caption": "קבוצות", + "description": "יצירה ושינוי של קבוצות Zigbee", + "group-header": "אוטומציה ביתית של Zigbee - פרטי קבוצה", + "groups-header": "אוטומציה ביתית של Zigbee - ניהול קבוצות" + }, + "header": "הגדר אוטומציה ביתית של Zigbee", + "introduction": "כאן ניתן לקבוע את התצורה של רכיב ה- ZHA. עדיין לא ניתן להגדיר הכל ממשק המשתמש, אך אנו עובדים על זה.", "network_management": { "header": "ניהול רשת", "introduction": "פקודות שמשפיעות על הרשת כולה" @@ -1633,7 +1800,37 @@ "hint_battery_devices": "הערה: מכשירים מנומנמים (מופעלים על סוללות) צריכים להיות ערים בעת ביצוע פקודות מולם. בדרך כלל ניתן להעיר מכשיר מנומנם על ידי ביצוע פקודה מולם.", "hint_wakeup": "מכשירים מסוימים, כגון חיישני Xiaomi, כוללים כפתור להתעוררות עליו ניתן ללחוץ במרווח של ~5 שניות על מנת להשאיר אותם ערים בזמן שמתקשרים איתם.", "introduction": "הפעל פקודות ZHA המשפיעות על מכשיר בודד. בחר מכשיר כדי לראות את רשימת הפקודות הזמינות." - } + }, + "title": "אוטומציה ביתית של Zigbee" + }, + "zone": { + "add_zone": "הוסף אזור", + "caption": "אזורים", + "configured_in_yaml": "לא ניתן לערוך אזורים המוגדרים באמצעות configuration.yaml באמצעות ממשק המשתמש.", + "confirm_delete": "האם אתה בטוח שברצונך למחוק אזור זה?", + "create_zone": "צור אזור", + "description": "נהל את האזורים שבהם ברצונך לעקוב אחר אנשים.", + "detail": { + "create": "צור", + "delete": "מחק", + "icon": "סמל", + "icon_error_msg": "הסמל צריך להיות בפורמט: prefix:iconname, למשל: mdi:home", + "latitude": "קו רוחב", + "longitude": "קו אורך", + "name": "שם", + "new_zone": "אזור חדש", + "passive": "פסיבי", + "passive_note": "אזורים פסיביים מוסתרים בממשק המשתמש ולא משמשים כמיקום עבור עוקבי מכשירים. זה שימושי אם אתה רק רוצה להשתמש בו לאוטומציות.", + "radius": "רדיוס", + "required_error_msg": "שדה זה הוא חובה", + "update": "עדכן" + }, + "edit_home_zone": "עדיין לא ניתן לערוך את רדיוס אזור הבית מממשק המשתמש. גרור את הסמן על המפה כדי להזיז את אזור הבית.", + "edit_home_zone_narrow": "הרדיוס של אזור הבית שלך ניתן לעריכה מדף הקונפיגורציה הכללי. עדיין לא ניתן לערוך את רדיוס אזור הבית מממשק המשתמש. האם ברצונך לעבור לקונפיגורציה הכללית?", + "go_to_core_config": "לעבור לקונפיגורציה הכללית?", + "home_zone_core_config": "המיקום של אזור הבית שלך ניתן לעריכה מדף הקונפיגורציה הכללי. עדיין לא ניתן לערוך את מיקום אזור הבית מממשק המשתמש. האם ברצונך לעבור לקונפיגורציה הכללית?", + "introduction": "אזורים מאפשרים לך לציין אזורים מסוימים בכדור הארץ. כאשר אדם נמצא באזור, הסטטוס יקח את השם מהאזור. אזורים יכולים לשמש גם כטריגר או תנאי בתוך הגדרות אוטומציה.", + "no_zones_created_yet": "נראה שעדיין לא יצרת אזורים." }, "zwave": { "button": "הגדר", @@ -1677,34 +1874,45 @@ "group": "קְבוּצָה", "header": "ניהול יחידות Z-Wave", "introduction": "הפעל פקודות Z-Wave המשפיעות על יחידה בודדת. בחר יחידה כדי לראות רשימה של פקודות זמינות.", + "max_associations": "כמות קישורים מקסימלי:", "node_group_associations": "קישורי קבוצת היחידה", "node_protection": "הגנת יחידה", "node_to_control": "יחידה לניהול", "nodes": "יחידות", "nodes_hint": "בחר יחידה כדי להציג אפשרויות ליחידה", + "nodes_in_group": "יחידות אחרות בקבוצה זו:", "pooling_intensity": "עוצמת דגימה", "protection": "הגנה", + "remove_broadcast": "הסר שידור רחב", "remove_from_group": "הסר מהקבוצה", "set_protection": "הגדרת הגנה" }, "ozw_log": { "header": "יומן OZW", "introduction": "צפה ביומן. 0 הוא המינימום (טוען יומן שלם) ו -1000 הוא המקסימום. הטעינה תציג יומן סטטי והסוף יתעדכן אוטומטית במספר האחרון שצוין של שורות היומן.", - "load": "לִטעוֹן" + "last_log_lines": "מספר שורות יומן אחרונות", + "load": "לִטעוֹן", + "tail": "סוף" }, "services": { "add_node": "הוסף רכיב", "add_node_secure": "הוסף רכיב מאובטח", "cancel_command": "ביטול פקודה", "heal_network": "ריפוי רשת", + "heal_node": "תיקון יחידה", "node_info": "מידע על היחידה", + "print_node": "הדפסת יחידה", "refresh_entity": "רענן ישות", + "refresh_node": "רענן יחידה", + "remove_failed_node": "הסר יחידה תקולה", "remove_node": "הסר רכיב", + "replace_failed_node": "החלף יחידה תקולה", "save_config": "שמור קונפיגורציה", "soft_reset": "איפוס רך", "start_network": "הפעל רשת", "stop_network": "עצור רשת", - "test_network": "בדיקת רשת" + "test_network": "בדיקת רשת", + "test_node": "בדיקת יחידה" }, "values": { "header": "ערכים" @@ -1781,6 +1989,12 @@ }, "history": { "period": "תקופה", + "ranges": { + "last_week": "שבוע שעבר", + "this_week": "השבוע", + "today": "היום", + "yesterday": "אתמול" + }, "showing_entries": "מציג רשומות עבור" }, "logbook": { @@ -1802,6 +2016,9 @@ "no_devices": "דף זה מאפשר לך לשלוט במכשירים שלך, אך נראה שעדיין לא הוגדרו מכשירים. עבור אל דף האינטגרציות כדי להתחיל.", "title": "ברוך הבא הביתה" }, + "entities": { + "never_triggered": "מעולם לא הופעל" + }, "picture-elements": { "call_service": "קריאה לשירות {name}", "hold": "החזק:", @@ -1811,6 +2028,10 @@ "toggle": "החלף מצב {name}", "url": "פתח חלון ל- {url_path}" }, + "safe-mode": { + "description": "Home Assistant נתקל בבעיות בעת טעינת התצורה שלך וכעת הוא פועל במצב בטוח. עיין ביומן השגיאות כדי לראות מה השתבש.", + "header": "מצב בטוח מופעל" + }, "shopping-list": { "add_item": "הוסף פריט", "checked_items": "פריטים מסומנים", @@ -1829,10 +2050,12 @@ "card": { "alarm-panel": { "available_states": "מצבים זמינים", + "description": "הכרטיס של לוח האזעקה מאפשר לך לדרוך ולנטרל את שילובי לוח הבקרה של האזעקה.", "name": "לוח אזעקה" }, "button": { - "description": "כרטיס ה־Button מאפשר להוסיף כפתורים לביצוע משימות." + "description": "כרטיס ה־Button מאפשר להוסיף כפתורים לביצוע משימות.", + "name": "כפתור" }, "conditional": { "card": "כרטיס", @@ -1917,6 +2140,10 @@ "description": "כרטיס הערימה האופקית מאפשר לכם לערום יחד מספר כרטיסים, כך שהם תמיד יושבים אחד ליד השני במרחב של טור אחד.", "name": "עימוד אופקי" }, + "humidifier": { + "description": "כרטיס מכשיר אדים מעניק שליטה על ישות מכשיר האדים שלך ומאפשר לך לשנות את הלחות והמצב של הישות.", + "name": "מכשיר אדים" + }, "iframe": { "description": "כרטיס דף האינטרנט מאפשר לך להטביע את דף האינטרנט המועדף עליך ישירות לתוך Home Assistant.", "name": "iFrame" @@ -1971,6 +2198,7 @@ }, "shopping-list": { "description": "כרטיס רשימת הקניות מאפשר לך להוסיף, לערוך, לבצע הוצאה ולנקות פריטים מרשימת הקניות שלך.", + "integration_not_loaded": "כרטיס זה דורש את הגדרת האינטגרציה 'shopping_list'.", "name": "רשימת קניות" }, "thermostat": { @@ -2018,6 +2246,9 @@ "header_name": "{name} הצג את תצורת", "move_left": "הזז את התצוגה שמאלה", "move_right": "הזז את התצוגה ימינה", + "tab_badges": "תגים", + "tab_settings": "הגדרות", + "tab_visibility": "ניראות", "visibility": { "select_users": "בחר אילו משתמשים צריכים לראות תצוגה זו בתפריט" } @@ -2038,8 +2269,10 @@ "confirm_unsaved_comments": "התצורה שלך מכילה הערות, אלה לא יישמרו. האם אתה רוצה להמשיך?", "error_invalid_config": "התצורה שלך אינה תקפה: {error}", "error_parse_yaml": "לא ניתן לנתח את YAML: {error}", + "error_remove": "לא ניתן להסיר את הקונפיגורציה: {error}", "error_save_yaml": "אין אפשרות לשמור את YAML: {error}", "header": "עריכת קונפיגורציה", + "resources_moved": "אין להוסיף עוד משאבים לתצורת Lovelace אך ניתן להוסיף אותם בלוח התצורה של Lovelace.", "save": "שמור", "saved": "נשמר", "unsaved_changes": "שינויים שלא נשמרו" @@ -2051,7 +2284,10 @@ "header": "קח שליטה על Lovelace ממשק המשתמש שלך", "para": "כברירת מחדל Home Assistant יתחזק את ממשק המשתמש שלך , יעדכן אותו כאשר קומפוננטות או ישויות חדשות יהפכו לזמינות. אם תקח שליטה אנו לא נוכל לבצע שינויים בצורה אוטומטית בשבילך.", "para_sure": "האם אתה בטוח שאתה רוצה לקחת שליטה על ממשק המשתמש?", - "save": "קח שליטה" + "save": "קח שליטה", + "yaml_config": "כדי לעזור לך להתחיל הנה התצורה הנוכחית של לוח מחוונים זה:", + "yaml_control": "כדי לקבל שליטה במצב YAML, צור קובץ YAML עם השם שציינת ב-config עבור לוח מחוונים זה, או ברירת המחדל 'ui-lovelace.yaml'.", + "yaml_mode": "אתה משתמש במצב YAML עבור לוח מחוונים זה ולכן אין באפשרותך לשנות את קונפיגורצית Lovelace מממשק המשתמש. אם ברצונך לנהל לוח מחוונים זה מממשק המשתמש, הסר 'mode: yaml' מתצורת Loverlace ב 'configuration.yaml.'." }, "view": { "panel_mode": { @@ -2086,6 +2322,7 @@ "views": { "confirm_delete": "האם אתה בטוח שברצונך למחוק תצוגה זו?", "confirm_delete_existing_cards": "מחיקת תצוגה זו תסיר גם את הכרטיסים", + "confirm_delete_existing_cards_text": "האם אתה בטוח שברצונך למחוק את התצוגה '' {name} '' שלך? התצוגה כוללת {number} כרטיסים שיימחקו. לא ניתן לבטל פעולה זו.", "confirm_delete_text": "האם אתה בטוח שברצונך למחוק את התצוגה \"{name}\"?" }, "warning": { @@ -2279,6 +2516,7 @@ "profile": { "advanced_mode": { "description": "Home Assistant מסתיר תכונות ואפשרויות מתקדמות כברירת מחדל. ביכולתך לחשוף אותן ע\"י בחירת תיבת הסימון זו. הגדרה זו היא עבור המשתמש הנוכחי ולא תשפיע על משתמשים אחרים ב Home Assistant.", + "link_promo": "למד עוד", "title": "מצב מתקדם" }, "change_password": { @@ -2306,6 +2544,8 @@ "link_promo": "עזור לתרגם" }, "logout": "התנתק", + "logout_text": "האם אתה בטוח שברצונך להתנתק?", + "logout_title": "להתנתק?", "long_lived_access_tokens": { "confirm_delete": "האם אתה בטוח שברצונך למחוק את אסימון הגישה עבור {name} ?", "create": "צור אסימון", diff --git a/translations/frontend/ko.json b/translations/frontend/ko.json index 5d8a51939c..dba4fdec40 100644 --- a/translations/frontend/ko.json +++ b/translations/frontend/ko.json @@ -48,6 +48,19 @@ "none": "없음", "sleep": "취침" } + }, + "humidifier": { + "mode": { + "auto": "자동", + "away": "외출", + "baby": "아기", + "boost": "쾌속", + "comfort": "쾌적", + "eco": "에코", + "home": "재실", + "normal": "일반", + "sleep": "취침" + } } }, "state_badge": { @@ -388,6 +401,12 @@ "reverse": "뒤로", "speed": "속도" }, + "humidifier": { + "humidity": "희망 습도", + "mode": "모드", + "on_entity": "{name} 작동", + "target_humidity_entity": "{name} 희망 습도" + }, "light": { "brightness": "밝기", "color_temperature": "색온도", @@ -507,9 +526,9 @@ "show_areas": "영역 표시" }, "date-range-picker": { - "end_date": "종료일", + "end_date": "종료 날짜", "select": "선택", - "start_date": "시작일" + "start_date": "시작 날짜" }, "device-picker": { "clear": "지우기", @@ -2043,8 +2062,8 @@ "history": { "period": "기간", "ranges": { - "last_week": "지난주", - "this_week": "이번주", + "last_week": "지난 주", + "this_week": "이번 주", "today": "오늘", "yesterday": "어제" }, @@ -2054,8 +2073,8 @@ "entries_not_found": "로그북 구성요소를 찾을 수 없습니다.", "period": "기간", "ranges": { - "last_week": "지난주", - "this_week": "이번주", + "last_week": "지난 주", + "this_week": "이번 주", "today": "오늘", "yesterday": "어제" }, @@ -2198,6 +2217,10 @@ "description": "수평 모아보기 카드를 사용하면 여러 카드를 함께 묶을 수 있으며 항상 한 열의 공간에서 옆으로 나열합니다.", "name": "수평 모아보기" }, + "humidifier": { + "description": "가습기 카드는 가습 기기를 제어합니다. 구성요소의 가습 모드를 변경할 수 있습니다.", + "name": "가습기" + }, "iframe": { "description": "웹 페이지 카드를 사용하면 즐겨 찾는 웹 페이지를 Home Assistant 에 삽입할 수 있습니다.", "name": "웹 페이지" diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index 53abac9545..7c8a2407ab 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -16,7 +16,7 @@ "config": "Настройки", "developer_tools": "Панель разработчика", "history": "История", - "logbook": "Журнал", + "logbook": "Журнал событий", "mailbox": "Почта", "map": "Карта", "profile": "Профиль", @@ -792,7 +792,7 @@ "confirmation_text": "Связанные устройства потеряют привязку к помещению.", "confirmation_title": "Вы уверены, что хотите удалить это помещение?" }, - "description": "Управляйте помещениями в Вашем доме", + "description": "Управление помещениями в Вашем доме", "editor": { "area_id": "ID помещения", "create": "Добавить", @@ -814,7 +814,7 @@ }, "automation": { "caption": "Автоматизация", - "description": "Создавайте и редактируйте правила автоматизации", + "description": "Создание и редактирование правил автоматизации", "editor": { "actions": { "add": "Добавить действие", @@ -934,7 +934,7 @@ }, "edit_ui": "Форма ввода", "edit_yaml": "Текстовый редактор", - "enable_disable": "Включить / выключить автоматизацию", + "enable_disable": "Включить / выключить правило автоматизации", "introduction": "Используйте автоматизацию, чтобы оживить Ваш дом.", "load_error_not_editable": "Доступны для редактирования только автоматизации из automations.yaml.", "load_error_unknown": "Ошибка загрузки автоматизации ({err_no}).", @@ -1126,7 +1126,7 @@ "title": "Alexa" }, "caption": "Home Assistant Cloud", - "description_features": "Управление вдали от дома, интеграция с Alexa и Google Assistant", + "description_features": "Управление сервером вдали от дома, интеграция с Alexa и Google Assistant", "description_login": "{email}", "description_not_login": "Вход не выполнен", "dialog_certificate": { @@ -1215,7 +1215,7 @@ }, "core": { "caption": "Общие", - "description": "Управляйте основными настройками Home Assistant", + "description": "Основные настройки Home Assistant", "section": { "core": { "core_config": { @@ -1247,7 +1247,7 @@ "attributes_override": "Вы можете переназначить их.", "attributes_set": "Следующие атрибуты были назначены программно.", "caption": "Кастомизация", - "description": "Настраивайте атрибуты объектов", + "description": "Настройка атрибутов объектов", "different_include": "Возможно через домен, glob или include.", "pick_attribute": "Выберите атрибут", "picker": { @@ -1292,7 +1292,7 @@ "no_devices": "Нет устройств" }, "delete": "Удалить", - "description": "Управляйте подключенными устройствами", + "description": "Управление подключенными устройствами", "device_info": "Устройство", "device_not_found": "Устройство не найдено", "entities": { @@ -1322,7 +1322,7 @@ }, "entities": { "caption": "Объекты", - "description": "Управляйте доступными объектами", + "description": "Управление доступными объектами", "picker": { "disable_selected": { "button": "Скрыть выбранные", @@ -1373,7 +1373,7 @@ "header": "Настройка Home Assistant", "helpers": { "caption": "Вспомогательное", - "description": "Элементы, которые могут помочь в создании автоматизации.", + "description": "Элементы, которые могут помочь в автоматизации", "dialog": { "add_helper": "Создание вспомогательного элемента", "add_platform": "Добавить \"{platform}\"", @@ -1464,7 +1464,7 @@ }, "configure": "Настроить", "configured": "Настроено", - "description": "Добавляйте и настраивайте интеграции", + "description": "Добавление и настройка интеграций", "details": "Детали интеграции", "discovered": "Обнаружено", "home_assistant_website": "сайте Home Assistant", @@ -1493,7 +1493,7 @@ }, "introduction": "Здесь можно настроить Home Assistant. Пока что не все настройки доступны из интерфейса, но мы работаем над этим.", "logs": { - "caption": "Журнал работы сервера", + "caption": "Журнал сервера", "clear": "Очистить", "description": "Просмотр журналов работы сервера Home Assistant", "details": "Уровень: {level}", @@ -1547,7 +1547,7 @@ "open": "Открыть" } }, - "description": "Настройка панелей пользовательского интерфейса Lovelace.", + "description": "Настройка панелей пользовательского интерфейса Lovelace", "resources": { "cant_edit_yaml": "Вы используете Lovelace в режиме YAML, поэтому невозможно управление ресурсами через пользовательский интерфейс. В данном режиме управление осуществляется через файл configuration.yaml.", "caption": "Ресурсы", @@ -1583,7 +1583,7 @@ } }, "mqtt": { - "button": "Настроить", + "button": "Настройка", "description_listen": "Подписаться на топик", "description_publish": "Опубликовать данные", "listening_to": "Подписано на", @@ -1602,7 +1602,7 @@ "confirm_delete": "Вы уверены, что хотите удалить эту персону?", "confirm_delete2": "Все устройства, связанные с этой персоной, станут не назначенными.", "create_person": "Добавить персону", - "description": "Определяйте людей, которых может отслеживать Home Assistant", + "description": "Люди, которых может отслеживать Home Assistant", "detail": { "create": "Создать", "delete": "Удалить", @@ -1625,7 +1625,7 @@ "scene": { "activated": "Активирована сцена {name}.", "caption": "Сцены", - "description": "Создавайте и редактируйте сцены", + "description": "Создание и редактирование сцен", "editor": { "default_name": "Новая сцена", "devices": { @@ -1668,7 +1668,7 @@ }, "script": { "caption": "Сценарии", - "description": "Создавайте и редактируйте сценарии", + "description": "Создание и редактирование сценариев", "editor": { "alias": "Название", "default_name": "Новый сценарий", @@ -1697,7 +1697,7 @@ }, "server_control": { "caption": "Сервер", - "description": "Управляйте сервером Home Assistant", + "description": "Управление сервером Home Assistant", "section": { "reloading": { "automation": "Перезагрузить автоматизации", @@ -1741,7 +1741,7 @@ "username": "Логин" }, "caption": "Пользователи", - "description": "Управляйте учётными записями пользователей", + "description": "Управление учётными записями пользователей", "editor": { "activate_user": "Активировать", "active": "Активен", @@ -1815,7 +1815,7 @@ "manufacturer_code_override": "Переназначить код производителя", "value": "Значение" }, - "description": "Управляйте сетью Zigbee Home Automation", + "description": "Управление сетью Zigbee Home Automation", "devices": { "header": "Zigbee Home Automation - Устройство" }, @@ -1881,7 +1881,7 @@ "configured_in_yaml": "Зоны, настроенные с помощью configuration.yaml, нельзя редактировать с помощью пользовательского интерфейса.", "confirm_delete": "Вы уверены, что хотите удалить эту зону?", "create_zone": "Создать зону", - "description": "Управляйте зонами, в которых Вы хотите отслеживать людей.", + "description": "Управление зонами, в которых Вы хотите отслеживать людей", "detail": { "create": "Создать", "delete": "Удалить", @@ -1914,7 +1914,7 @@ "value": "Значение", "wakeup_interval": "Интервал пробуждения" }, - "description": "Управляйте Вашей сетью Z-Wave", + "description": "Управление сетью Z-Wave", "learn_more": "Узнайте больше о Z-Wave", "network_management": { "header": "Управление сетью Z-Wave", @@ -2050,7 +2050,7 @@ "title": "Состояния" }, "templates": { - "description": "Здесь Вы можете протестировать поведение шаблонов. Шаблоны используют шаблонизатор Jinja2 с некоторыми специальными расширениями Home Assistant.", + "description": "Здесь Вы можете протестировать поведение шаблонов. В Home Assistant используется шаблонизатор Jinja2 с некоторыми специальными расширениями.", "editor": "Редактор шаблонов", "jinja_documentation": "Узнайте больше о шаблонизаторе Jinja2", "template_extensions": "Узнайте больше о шаблонах Home Assistant", @@ -2106,7 +2106,7 @@ "url": "Открыть окно {url_path}" }, "safe-mode": { - "description": "Home Assistant столкнулся с проблемой при загрузке Вашей конфигурации и теперь работает в безопасном режиме. Ознакомьтесь с журналом ошибок, чтобы увидеть, что пошло не так.", + "description": "Home Assistant столкнулся с проблемой при загрузке Вашей конфигурации и теперь работает в безопасном режиме. Ознакомьтесь с журналом работы сервера, чтобы увидеть что пошло не так.", "header": "Безопасный режим" }, "shopping-list": { From 1870dc29c0a095935e32b4d3a698ef4268fb91fa Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Mon, 29 Jun 2020 00:32:31 +0000 Subject: [PATCH 03/13] [ci skip] Translation update --- translations/frontend/cs.json | 1 + translations/frontend/he.json | 174 +++++++++++++++++++++-------- translations/frontend/pt.json | 30 +++++ translations/frontend/ru.json | 4 +- translations/frontend/zh-Hans.json | 2 +- translations/frontend/zh-Hant.json | 2 +- 6 files changed, 164 insertions(+), 49 deletions(-) diff --git a/translations/frontend/cs.json b/translations/frontend/cs.json index 72bdd89897..d89e99aadb 100644 --- a/translations/frontend/cs.json +++ b/translations/frontend/cs.json @@ -2218,6 +2218,7 @@ "name": "Horizontální uskupení" }, "humidifier": { + "description": "Karta zvlhčovače poskytuje kontrolu nad vaší entitou zvlhčovače. Umožní vám změnit vlhkost a režim entity.", "name": "Zvlhčovač" }, "iframe": { diff --git a/translations/frontend/he.json b/translations/frontend/he.json index ae21586b39..1783a8686d 100644 --- a/translations/frontend/he.json +++ b/translations/frontend/he.json @@ -495,6 +495,7 @@ "and": "וגם", "back": "חזור", "cancel": "ביטול", + "close": "סגור", "delete": "מחיקה", "error_required": "חובה", "loading": "טוען", @@ -531,7 +532,7 @@ }, "device-picker": { "clear": "נקה", - "device": "התקן", + "device": "מכשיר", "no_area": "אין אזור", "show_devices": "הצג התקנים", "toggle": "החלף מצב" @@ -590,8 +591,8 @@ "editor": { "confirm_delete": "האם אתה בטוח שברצונך למחוק רשומה זו?", "delete": "מחק", - "enabled_cause": "לא זמין עקב {סיבה}.", - "enabled_description": "ישויות לא זמינות לא יתווספו ל Home Assistant.", + "enabled_cause": "מושבת עקב {סיבה}.", + "enabled_description": "ישויות מושבתות לא יתווספו ל Home Assistant.", "enabled_label": "הפוך ישות לזמינה", "entity_id": "מזהה ישות", "icon": "סמל חלופי", @@ -651,9 +652,17 @@ }, "more_info_control": { "dismiss": "סגור", + "edit": "ערוך יישות", "person": { "create_zone": "צור אזור מהמיקום הנוכחי" }, + "restored": { + "confirm_remove_text": "האם אתה בטוח שברצונך להסיר ישות זו?", + "confirm_remove_title": "להסיר את הישות?", + "not_provided": "ישות זו אינה זמינה כרגע והיא בת לאינטגרציה או מכשיר שהוסרו, השתנו או לא מתפקדים.", + "remove_action": "הסר יישות", + "remove_intro": "אם הישות כבר אינה בשימוש, תוכלו לנקות אותה על ידי הסרתה." + }, "script": { "last_action": "פעולה אחרונה", "last_triggered": "הופעל לאחרונה" @@ -718,17 +727,17 @@ "confirmations": { "remove": "האם אתה בטוח שברצונך למחוק מכשיר זה?" }, - "device_signature": "חתימת התקן zigbee", + "device_signature": "חתימת מכשיר Zigbee", "last_seen": "נראה לאחרונה", "manuf": "לפי {manufacturer}", "no_area": "ללא אזור", "power_source": "מקור כוח", "quirk": "מוזרות", "services": { - "reconfigure": "הגדר מחדש את התקן ה- ZHA (ריפוי מכשיר). השתמש בזה אם אתה נתקל בבעיות במכשיר. אם המכשיר המדובר הוא התקן המונע על ידי סוללה, אנא וודא שהוא דלוק ומקבל פקודות בעת השימוש בשירות זה.", + "reconfigure": "הגדר מחדש את המכשיר ה- ZHA (ריפוי מכשיר). השתמש בזה אם אתה נתקל בבעיות במכשיר. אם המכשיר המדובר הוא מכשיר המונע על ידי סוללה, אנא וודא שהוא דלוק ומקבל פקודות בעת השימוש בשירות זה.", "remove": "הסר מכשיר מרשת ה-Zigbee", - "updateDeviceName": "הגדר שם מותאם אישית עבור התקן זה במאגר ההתקנים.", - "zigbee_information": "הצגת מידע Zigbee עבור ההתקן." + "updateDeviceName": "הגדר שם מותאם אישית עבור מכשיר זה במאגר ההתקנים.", + "zigbee_information": "הצגת מידע Zigbee עבור המכשיר." }, "unknown": "לא ידוע", "zha_device_card": { @@ -787,6 +796,7 @@ "editor": { "area_id": "מזהה אזור", "create": "צור", + "default_name": "אזור חדש", "delete": "מחק", "name": "שם", "name_required": "שם הוא חובה", @@ -794,10 +804,12 @@ "update": "עדכון" }, "picker": { + "create_area": "צור אזור", "header": "מאגר האזורים", "integrations_page": "דף אינטגרציות", "introduction": "אזורים משמשים לארגון המיקום של ההתקנים. Home Assistant יעשה שימוש במידע זה בכדי לסייע לך בארגון הממשק, ההרשאות והאינטגרציות שלך עם מערכות אחרות.", - "introduction2": "כדי למקם התקנים באזור זה, השתמש בקישור הבא כדי לנווט אל דף האינטגרציות ולאחר מכן לחץ על אינטגרציה מוגדרת כדי להגיע לכרטיסי המכשיר." + "introduction2": "כדי למקם התקנים באזור זה, השתמש בקישור הבא כדי לנווט אל דף האינטגרציות ולאחר מכן לחץ על אינטגרציה מוגדרת כדי להגיע לכרטיסי המכשיר.", + "no_areas": "נראה שאין לך אזורים עדיין!" } }, "automation": { @@ -827,7 +839,7 @@ "extra_fields": { "code": "קוד" }, - "label": "התקן" + "label": "מכשיר" }, "event": { "event": "ארוע", @@ -871,7 +883,7 @@ "below": "מתחת", "for": "משך הזמן" }, - "label": "התקן" + "label": "מכשיר" }, "not": { "label": "לא" @@ -946,7 +958,7 @@ "below": "מתחת", "for": "משך" }, - "label": "התקן", + "label": "מכשיר", "trigger": "טריגר" }, "event": { @@ -1044,8 +1056,8 @@ "account": { "alexa": { "config_documentation": "הגדרת תיעוד", - "disable": "השבת", - "enable": "אפשר", + "disable": "השבתה", + "enable": "אפשור", "enable_ha_skill": "הפעל את מיומנות Home Assistant עבור אלקסה", "enable_state_reporting": "הפוך דיווח מצב לזמין", "info": "עם שילוב אלקסה עבור ענן Home Assistant תוכל לשלוט בכל המכשירים של Home Assistant באמצעות כל מכשיר המקושר לאלקסה.", @@ -1067,11 +1079,12 @@ "enter_pin_error": "אין אפשרות לאחסן את הקוד ה PIN:", "enter_pin_hint": "הזן קוד PIN לשימוש בהתקני אבטחה", "enter_pin_info": "נא הזן קוד PIN כדי לעבוד עם מכשירי אבטחה. מכשירי אבטחה הם דלתות, דלתות מוסך ומנעולים. תתבקש לומר/להזין את קוד ה PIN כאשר אתה מקיים אינטראקציה עם התקנים אלה באמצעות המסייע של Google.", - "info": "עם שילוב מסייע Google עבור ענן Home Assistant תוכל לשלוט בכל מכשירי Home Assistant שלך באמצעות כל התקן המקושר למסייע של Google.", + "info": "עם שילוב מסייע Google עבור ענן Home Assistant תוכל לשלוט בכל מכשירי Home Assistant שלך באמצעות כל מכשיר המקושר למסייע של Google.", "info_state_reporting": "אם תפעיל דיווח מצב, Home Assistant ישלח את כל שינויי המצבים של ישויות חשופות ל-Google. זה מאפשר לך תמיד לראות את המצבים האחרונים באפליקציה של גוגל.", "manage_entities": "נהל ישויות", "security_devices": "התקני אבטחה", "sync_entities": "סנכרן ישויות לגוגל", + "sync_entities_404_message": "כישלון בסינכרון היישויות שלך ל-Google, בקש מ Google 'Hey Google, sync my devices' כדי לסנכרן את הישויות שלך.", "title": "Google Assistant" }, "integrations": "אינטגרציות", @@ -1126,11 +1139,11 @@ "dialog_cloudhook": { "available_at": "ה-webhook זמין בכתובת הבאה:", "close": "סגור", - "confirm_disable": "אתה בטוח שאתה רוצה לבטל את ה webhook?", + "confirm_disable": "אתה בטוח שאתה רוצה להשבית את ה webhook?", "copied_to_clipboard": "הועתק ללוח", "info_disable_webhook": "אם אינך מעוניין עוד להשתמש ב-webhook זה, באפשרותך", - "link_disable_webhook": "לנטרל אותו", - "managed_by_integration": "webhook זה מנוהל על ידי אינטגרציה ואי אפשר לנטרל אותו.", + "link_disable_webhook": "השבת אותו", + "managed_by_integration": "webhook זה מנוהל על ידי אינטגרציה ואי אפשר להשבית אותו.", "view_documentation": "הצג תיעוד", "webhook_for": "Webhook עבור {name}" }, @@ -1206,7 +1219,7 @@ "section": { "core": { "core_config": { - "edit_requires_storage": "עורך מושבת משום שתצורה מאוחסנת ב- configuration.yaml.", + "edit_requires_storage": "העורך מושבת משום שהתצורה מאוחסנת ב- configuration.yaml.", "elevation": "גובה", "elevation_meters": "מטר", "external_url": "כתובת URL חיצונית", @@ -1259,19 +1272,19 @@ }, "create": "צור אוטומציה עם המכשיר", "no_automations": "אין אוטומציות", - "no_device_automations": "אין אוטומציות זמינות עבור התקן זה.", + "no_device_automations": "אין אוטומציות זמינות עבור מכשיר זה.", "triggers": { "caption": "עשה משהו כש ..." } }, "cant_edit": "באפשרותך לערוך פריטים שנוצרו בממשק המשתמש בלבד.", "caption": "התקנים", - "confirm_delete": "האם אתה בטוח שברצונך למחוק התקן זו?", + "confirm_delete": "האם אתה בטוח שברצונך למחוק מכשיר זה?", "confirm_rename_entity_ids": "האם אתה רוצה גם לשנות את המזהים של הישויות שלך?", "data_table": { "area": "אזור", "battery": "סוללה", - "device": "התקן", + "device": "מכשיר", "integration": "אינטגרציה", "manufacturer": "יצרן", "model": "מודל", @@ -1280,16 +1293,19 @@ }, "delete": "מחיקה", "description": "ניהול התקנים מחוברים", - "device_info": "פרטי התקן", - "device_not_found": "ההתקן לא נמצא.", + "device_info": "פרטי מכשיר", + "device_not_found": "המכשיר לא נמצא.", "entities": { + "add_entities_lovelace": "הוסף לממשק Lovelace", "disabled_entities": "+{count} {count, plural,\n one {disabled entity}\n other {disabled entities}\n}", - "hide_disabled": "הסתר לא זמינים" + "entities": "ישויות", + "hide_disabled": "הסתר מושבתים", + "none": "למכשיר זה אין ישויות" }, "name": "שם", "no_devices": "אין התקנים", "scene": { - "create": "צור סצינה עם ההתקן", + "create": "צור סצינה עם המכשיר", "no_scenes": "אין סצינות", "scenes": "סצינות" }, @@ -1301,31 +1317,52 @@ }, "scripts": "סקריפטים", "unknown_error": "שגיאה לא ידועה", - "unnamed_device": "התקן ללא שם", + "unnamed_device": "מכשיר ללא שם", "update": "עדכון" }, "entities": { "caption": "מאגר הישויות", "description": "סקירה של כל הישויות המוכרות", "picker": { + "disable_selected": { + "button": "השבת מסומנים", + "confirm_text": "ישויות מושבתות לא יתווספו ל Home Assistant.", + "confirm_title": "האם אתה רוצה להשבית {number} ישויות?" + }, + "enable_selected": { + "button": "אפשר מסומנים", + "confirm_text": "זה יהפוך אותם לזמינים ב Home Assistant שוב אם הם מושבתים כעת.", + "confirm_title": "האם אתה רוצה לאפשר {number} ישויות?" + }, "filter": { - "show_readonly": "הצג ישויות לקריאה בלבד" + "filter": "סנן", + "show_disabled": "הצג ישויות מושבתות", + "show_readonly": "הצג ישויות לקריאה בלבד", + "show_unavailable": "הצג ישויות לא זמינות" }, "header": "מאגר הישויות", "headers": { "entity_id": "מזהה ישות", "integration": "אינטגרציה", - "name": "שם" + "name": "שם", + "status": "סטטוס" }, "introduction": "Home Assistant מנהל רישום של כל ישות שנראתה אי פעם ואשר ניתנת לזיהוי ייחודי. לכל אחד מישויות אלו יהיה מזהה ישות שהוקצה ואשר יהה שמור רק עבור ישות זו.", "introduction2": "השתמש במאגר הישויות בכדי לשנות את השם, מזהה הישות או להסיר את הערך מ- Home Assistant. שים לב, הסרת הישות ממאגר זה לא תסיר את הישות. לשם כך, פעל לפי הקישור שלהלן והסר אותו מדף האינטגרציות.", "remove_selected": { + "button": "הסר את המסומנים", "confirm_partly_text": "אתה יכול להסיר רק את {removable} מהישויות שנבחרו {selected}. ניתן להסיר ישויות רק כאשר האינטגרציה כבר לא מספקת את הישויות. לפעמים אתה צריך להפעיל מחדש את עוזר הבית לפני שתוכל להסיר את הישויות של אינטגרציה שהוסרה. האם אתה בטוח שברצונך להסיר את הישויות הניתנות להסרה?", - "confirm_partly_title": "ניתן להסיר רק {number} ישויות שנבחרו." + "confirm_partly_title": "ניתן להסיר רק {number} ישויות שנבחרו.", + "confirm_text": "עליך להסיר אותם מתצורת ה- Lovelace ומהאוטומציות שלך אם הם מכילים ישויות אלה.", + "confirm_title": "האם ברצונך להסיר {מספר} ישויות?" }, + "selected": "{number} נבחרו", "status": { + "disabled": "מושבת", + "ok": "אישור", "readonly": "קריאה בלבד", - "restored": "שוחזר" + "restored": "שוחזר", + "unavailable": "לא זמין" } } }, @@ -1392,7 +1429,7 @@ "delete": "מחק", "delete_button": "מחק {integration}", "delete_confirm": "האם אתה בטוח שברצונך למחוק אינטגרציה זו?", - "device_unavailable": "התקן אינו זמין", + "device_unavailable": "מכשיר אינו זמין", "devices": "{count} {count, plural,\n one {device}\n other {devices}\n}", "entities": "{count} {count, plural,\n one {entity}\n other {entities}\n}", "entity_unavailable": "ישות לא זמינה", @@ -1414,6 +1451,7 @@ "aborted": "הופסק", "close": "סגור", "created_config": "נוצרה תצורה עבור {name}.", + "dismiss": "ביטול תיבת דו-שיח", "error_saving_area": "שגיאה בשמירת האזור: {error}", "external_step": { "description": "שלב זה מחייב אותך לבקר באתר אינטרנט חיצוני להשלמת הפעולה.", @@ -1430,6 +1468,17 @@ "details": "פרטי האינטגרציה", "discovered": "זוהו", "home_assistant_website": "אתר Home Assistant", + "ignore": { + "confirm_delete_ignore": "פעולה זו תגרום לאינטגרציה להופיע באינטגרציות שהתגלו שוב כאשר היא תתגלה. ייתכן שתידרש הפעלה מחדש או להמתין כדי שזה יקרה.", + "confirm_delete_ignore_title": "הפסק להתעלם מ- {name} ?", + "confirm_ignore": "האם אתה בטוח שאתה לא רוצה להגדיר אינטגרציה זו? אתה יכול לבטל את זה על ידי לחיצה על 'הצג אינטגרציות שמתעלמים מהן' בתפריט שמשמאל למעלה.", + "confirm_ignore_title": "התעלם מגילוי {name}?", + "hide_ignored": "הסתר אינטגרציות שמתעלמים מהן", + "ignore": "התעלם", + "ignored": "מתעלם", + "show_ignored": "הצג אינטגרציות שמתעלמים מהן", + "stop_ignore": "הפסק להתעלם" + }, "integration": "אינטגרציה", "integration_not_found": "האינטגרציה לא נמצאה.", "new": "הגדר אינטגרציה", @@ -1475,9 +1524,9 @@ "edit_dashboard": "ערוך לוח בקרה", "icon": "סמל", "new_dashboard": "הוסף לוח בקרה חדש", - "remove_default": "הסר כברירת מחדל בהתקן זה", + "remove_default": "הסר כברירת מחדל במכשיר זה", "require_admin": "מנהל בלבד", - "set_default": "הגדר כברירת מחדל בהתקן זה", + "set_default": "הגדר כברירת מחדל במכשיר זה", "show_sidebar": "הצג בסרגל הצד", "title": "כותרת", "title_required": "הכותרת נדרשת.", @@ -1566,7 +1615,7 @@ "name": "שם", "name_error_msg": "שם נדרש", "new_person": "אדם חדש", - "no_device_tracker_available_intro": "כאשר יש לך התקנים המציינים את נוכחותו של אדם, כאן תוכל להקצותם לאדם זה. באפשרותך להוסיף את ההתקן הראשון על-ידי הוספת אינטגרציה של זיהוי נוכחות מעמוד האינטגרציות.", + "no_device_tracker_available_intro": "כאשר יש לך התקנים המציינים את נוכחותו של אדם, כאן תוכל להקצותם לאדם זה. באפשרותך להוסיף את המכשיר הראשון על-ידי הוספת אינטגרציה של זיהוי נוכחות מעמוד האינטגרציות.", "update": "עדכון" }, "introduction": "כאן תוכלו להגדיר כל אדם ב Home Assistant.", @@ -1580,18 +1629,18 @@ "editor": { "default_name": "סצינה חדשה", "devices": { - "add": "הוסף התקן", - "delete": "מחיקת התקן", + "add": "הוסף מכשיר", + "delete": "מחיקת מכשיר", "header": "התקנים", "introduction": "הוסף את ההתקנים שברצונך שייכללו בסצינה. הגדר את כל ההתקנים למצב הרצוי עבור סצינה זו." }, "entities": { "add": "הוסף ישות", "delete": "מחק ישות", - "device_entities": "אם תוסיף ישות השייכת להתקן, ההתקן יתווסף.", + "device_entities": "אם תוסיף ישות השייכת למכשיר, המכשיר יתווסף.", "header": "ישויות", "introduction": "ניתן להגדיר כאן ישויות שאינן שייכות להתקנים.", - "without_device": "ישויות ללא התקן" + "without_device": "ישויות ללא מכשיר" }, "introduction": "השתמש בסצינות כדי להחיות את הבית שלך.", "load_error_not_editable": "רק סצינות ב scenes.yaml ניתנות לעריכה.", @@ -1621,6 +1670,7 @@ "caption": "סקריפט", "description": "צור וערוך סקריפטים", "editor": { + "alias": "שם", "default_name": "סקריפט חדש", "delete_confirm": "האם אתה בטוח שברצונך למחוק את הסקריפט הזה?", "delete_script": "מחק סקריפט", @@ -1777,13 +1827,35 @@ "group_picker_label": "קבוצות הניתנות לקישור", "header": "קישור הקבוצה", "introduction": "קישור וניתוק קבוצות.", + "unbind_button_help": "נתק את הקבוצה שנבחרה מאשכולות המכשירים שנבחרו.", "unbind_button_label": "ביטול קישור של קבוצה" }, "groups": { + "add_members": "הוסף חברים", + "adding_members": "מוסיף חברים", "caption": "קבוצות", + "create": "צור קבוצה", + "create_group": "אוטומציה ביתית של Zigbee - צור קבוצה", + "create_group_details": "הזן את הפרטים הדרושים כדי ליצור קבוצת zigbee חדשה", + "creating_group": "יוצר קבוצה", "description": "יצירה ושינוי של קבוצות Zigbee", + "group_details": "להלן כל הפרטים עבור קבוצת Zigbee שנבחרה.", + "group_id": "מזהה קבוצה", + "group_info": "פרטי קבוצה", + "group_name_placeholder": "שם קבוצה", + "group_not_found": "הקבוצה לא נמצאה!", "group-header": "אוטומציה ביתית של Zigbee - פרטי קבוצה", - "groups-header": "אוטומציה ביתית של Zigbee - ניהול קבוצות" + "groups": "קבוצות", + "groups-header": "אוטומציה ביתית של Zigbee - ניהול קבוצות", + "header": "אוטומציה ביתית של Zigbee - ניהול קבוצות", + "introduction": "יצירה ושינוי של קבוצות Zigbee", + "manage_groups": "ניהול קבוצות Zigbee", + "members": "חברים", + "remove_groups": "הסר קבוצות", + "remove_members": "הסר חברים", + "removing_groups": "מסיר קבוצות", + "removing_members": "מסיר חברים", + "zha_zigbee_groups": "קבוצות Zigbee ZHA" }, "header": "הגדר אוטומציה ביתית של Zigbee", "introduction": "כאן ניתן לקבוע את התצורה של רכיב ה- ZHA. עדיין לא ניתן להגדיר הכל ממשק המשתמש, אך אנו עובדים על זה.", @@ -1795,8 +1867,8 @@ "caption": "רשת" }, "node_management": { - "header": "ניהול התקן", - "help_node_dropdown": "בחר התקן להצגת האפשרויות.", + "header": "ניהול מכשירים", + "help_node_dropdown": "בחר מכשיר להצגת האפשרויות.", "hint_battery_devices": "הערה: מכשירים מנומנמים (מופעלים על סוללות) צריכים להיות ערים בעת ביצוע פקודות מולם. בדרך כלל ניתן להעיר מכשיר מנומנם על ידי ביצוע פקודה מולם.", "hint_wakeup": "מכשירים מסוימים, כגון חיישני Xiaomi, כוללים כפתור להתעוררות עליו ניתן ללחוץ במרווח של ~5 שניות על מנת להשאיר אותם ערים בזמן שמתקשרים איתם.", "introduction": "הפעל פקודות ZHA המשפיעות על מכשיר בודד. בחר מכשיר כדי לראות את רשימת הפקודות הזמינות." @@ -1964,7 +2036,7 @@ "alert_entity_field": "ישות היא שדה חובה", "attributes": "תכונות", "current_entities": "ישויות נוכחיות", - "description1": "הגדר את הייצוג של ההתקן בתוך Home Assistant.", + "description1": "הגדר את הייצוג של המכשיר בתוך Home Assistant.", "description2": "זה לא יתקשר עם המכשיר עצמו.", "entity": "ישות", "filter_attributes": "סנן תכונות", @@ -2009,6 +2081,11 @@ "showing_entries": "מציג רשומות עבור" }, "lovelace": { + "add_entities": { + "generated_unsupported": "אתה יכול להשתמש בפונקציה זו רק לאחר שהשתלטת על ממשק המשתמש של Lovelace.", + "saving_failed": "שמירת תצורת ממשק המשתמש של Lovelace נכשלה.", + "yaml_unsupported": "אינך יכול להשתמש בפונקציה זו כשמשתמשים בממשק המשתמש של Lovelace במצב YAML." + }, "cards": { "confirm_delete": "האם אתה בטוח שברצונך למחוק את הכרטיס הזה?", "empty_state": { @@ -2265,6 +2342,8 @@ "para_no_id": "האלמנט הנוכחי לא מכיל מזהה יחודיי. בבקשה הוסף מזהה יחודי לאלמט זה בקובץ 'ui-lovelace.yaml'." }, "raw_editor": { + "confirm_remove_config_text": "אנו ניצור אוטומטית את תצוגות ממשק המשתמש של Lovelace עם האזורים והמכשירים שלך אם תסיר את קונפיגורציית ממשק המשתמש שלך ב- Lovelace.", + "confirm_remove_config_title": "האם אתה בטוח שברצונך להסיר את תצורת ממשק המשתמש של Lovelace? אנו נייצר אוטומטית את תצוגות ממשק המשתמש שלך ב- Lovelace עם האזורים והמכשירים שלך.", "confirm_unsaved_changes": "יש לך שינויים שלא נשמרו, אתה בטוח שברצונך לצאת?", "confirm_unsaved_comments": "התצורה שלך מכילה הערות, אלה לא יישמרו. האם אתה רוצה להמשיך?", "error_invalid_config": "התצורה שלך אינה תקפה: {error}", @@ -2289,6 +2368,11 @@ "yaml_control": "כדי לקבל שליטה במצב YAML, צור קובץ YAML עם השם שציינת ב-config עבור לוח מחוונים זה, או ברירת המחדל 'ui-lovelace.yaml'.", "yaml_mode": "אתה משתמש במצב YAML עבור לוח מחוונים זה ולכן אין באפשרותך לשנות את קונפיגורצית Lovelace מממשק המשתמש. אם ברצונך לנהל לוח מחוונים זה מממשק המשתמש, הסר 'mode: yaml' מתצורת Loverlace ב 'configuration.yaml.'." }, + "suggest_card": { + "add": "הוסף לממשק המשתמש של Lovelace", + "create_own": "בחר כרטיס אחר", + "header": "יצרנו הצעה עבורך" + }, "view": { "panel_mode": { "description": "מציג את הכרטיס הראשון ברוחב המלא; כרטיסים אחרים בתצוגה זו לא יוצגו.", @@ -2569,8 +2653,8 @@ "title_success": "הצליח!" }, "mfa": { - "confirm_disable": "האם אתה בטוח שברצונך להשבית {name}", - "disable": "בטל", + "confirm_disable": "האם אתה בטוח שברצונך להשבית {name}?", + "disable": "השבת", "enable": "הפעל", "header": "מודלי אימות מרובה גורמים" }, @@ -2600,7 +2684,7 @@ "link_promo": "למד אודות ערכות נושא" }, "vibrate": { - "description": "הפעל או בטל את הרטט בהתקן זה בעת שליטה בהתקנים.", + "description": "הפעל או בטל את הרטט במכשיר זה בעת שליטה בהתקנים.", "header": "רטט" } }, diff --git a/translations/frontend/pt.json b/translations/frontend/pt.json index a66a0f630f..d25874f22f 100644 --- a/translations/frontend/pt.json +++ b/translations/frontend/pt.json @@ -48,6 +48,14 @@ "none": "Nenhum", "sleep": "Dormir" } + }, + "humidifier": { + "mode": { + "auto": "Auto", + "comfort": "Conforto", + "eco": "Eco", + "normal": "Normal" + } } }, "state_badge": { @@ -388,6 +396,12 @@ "reverse": "Reverter", "speed": "Velocidade" }, + "humidifier": { + "humidity": "Humidade pretendida", + "mode": "Modo", + "on_entity": "{name} ligado", + "target_humidity_entity": "{name} humidade pretendida" + }, "light": { "brightness": "Brilho", "color_temperature": "Temperatura de cor", @@ -1543,6 +1557,7 @@ } }, "mqtt": { + "button": "Configurar", "description_listen": "Ouvir um tópico", "description_publish": "Publicar um pacote", "listening_to": "A escutar", @@ -1981,11 +1996,23 @@ }, "history": { "period": "Período", + "ranges": { + "last_week": "Semana passada", + "this_week": "Esta semana", + "today": "Hoje", + "yesterday": "Ontem" + }, "showing_entries": "Mostrar valores para" }, "logbook": { "entries_not_found": "Sem registos no diário de bordo", "period": "Período", + "ranges": { + "last_week": "Semana passada", + "this_week": "Esta semana", + "today": "Hoje", + "yesterday": "Ontem" + }, "showing_entries": "Mostrar valores para" }, "lovelace": { @@ -2123,6 +2150,9 @@ "description": "O cartão Agrupamento Vertical permite agrupar vários cartões para que estes fiquem sempre na mesma coluna.", "name": "Agrupamento Horizontal" }, + "humidifier": { + "name": "Humidificador" + }, "iframe": { "description": "O cartão de página da Web, permite incorporar a sua página da Web favorita diretamente no Home Assistant.", "name": "Página Web" diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index 7c8a2407ab..6168193793 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -620,7 +620,7 @@ "input_datetime": { "date": "Дата", "datetime": "Дата и время", - "mode": "Что вы хотите ввести?", + "mode": "Режим отображения", "time": "Время" }, "input_number": { @@ -646,7 +646,7 @@ "pattern": "Шаблон регулярного выражения для проверки на стороне клиента", "text": "Текст" }, - "platform_not_loaded": "Интеграция \"{platform}\" не загружена. Добавьте в YAML-конфигурацию 'default_config:' или ''{platform}:''.", + "platform_not_loaded": "Интеграция '{platform}' не загружена. Добавьте в YAML-конфигурацию 'default_config:' или '{platform}:'.", "required_error_msg": "Обязательное поле", "yaml_not_editable": "Настройки этого объекта нельзя изменить из пользовательского интерфейса. Настраиваться из пользовательского интерфейса могут только те объекты, которые были созданы в нём." }, diff --git a/translations/frontend/zh-Hans.json b/translations/frontend/zh-Hans.json index 7a4cf31406..8e16a6f848 100644 --- a/translations/frontend/zh-Hans.json +++ b/translations/frontend/zh-Hans.json @@ -646,7 +646,7 @@ "pattern": "用于客户端验证的正则表达式模式", "text": "文本" }, - "platform_not_loaded": "{platform} 组件尚未加载。请在 'default_config:' 或 ''{platform}:'' 中选择一种方式,将其写入配置中。", + "platform_not_loaded": "{platform} 组件尚未加载。请从 'default_config:' 或 ''{platform}:'' 中选择一种方式,将其写入配置中。", "required_error_msg": "此字段为必填字段", "yaml_not_editable": "无法从 UI 编辑此实体的设置。只有通过 UI 设置的实体可以从 UI 配置。" }, diff --git a/translations/frontend/zh-Hant.json b/translations/frontend/zh-Hant.json index f770aadf86..cda2fac4e8 100644 --- a/translations/frontend/zh-Hant.json +++ b/translations/frontend/zh-Hant.json @@ -646,7 +646,7 @@ "pattern": "客戶端驗證模式", "text": "文字" }, - "platform_not_loaded": "{platform} 元件未載入。請於設定檔進行添加、新增 'default_config:' 或 ''{platform}:''。", + "platform_not_loaded": "{platform} 整合未載入。請於設定檔進行添加、新增 'default_config:' 或 ''{platform}:''。", "required_error_msg": "必填欄位", "yaml_not_editable": "此物件的設定無法藉由 UI 編輯、僅有透過 UI 設定的物件可於 UI 進行設定。" }, From 712e0d3e3b68f087e9309f0f19b975bd1c47aaef Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 29 Jun 2020 02:26:41 -0500 Subject: [PATCH 04/13] Fix camera stream not connecting (#6271) The timeout to start a camera stream was 10s. With buffering it can take around 8-10s for camera to be able to send a stream. If the time it took was longer than 10s the stream would never connect in the UI. --- package.json | 2 +- src/components/ha-camera-stream.ts | 3 +++ yarn.lock | 8 ++++---- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 00f19210a4..87a988abf4 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "fecha": "^4.2.0", "fuse.js": "^6.0.0", "google-timezones-json": "^1.0.2", - "hls.js": "^0.12.4", + "hls.js": "^0.13.2", "home-assistant-js-websocket": "^5.4.1", "idb-keyval": "^3.2.0", "intl-messageformat": "^8.3.9", diff --git a/src/components/ha-camera-stream.ts b/src/components/ha-camera-stream.ts index 592e020a54..89d1330234 100644 --- a/src/components/ha-camera-stream.ts +++ b/src/components/ha-camera-stream.ts @@ -178,6 +178,9 @@ class HaCameraStream extends LitElement { ) { const hls = new Hls({ liveBackBufferLength: 60, + fragLoadingTimeOut: 30000, + manifestLoadingTimeOut: 30000, + levelLoadingTimeOut: 30000, }); this._hlsPolyfillInstance = hls; hls.attachMedia(videoEl); diff --git a/yarn.lock b/yarn.lock index 9c72bc22ce..06be65a121 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6666,10 +6666,10 @@ he@1.2.0, he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -hls.js@^0.12.4: - version "0.12.4" - resolved "https://registry.yarnpkg.com/hls.js/-/hls.js-0.12.4.tgz#c155b7b2825a11117c111b781973c0ffa759006b" - integrity sha512-e8OPxQ60dBVsdkv4atdxR21KzC1mgwspM41qpozpj3Uv1Fz4CaeQy3FWoaV2O+QKKbNRvV5hW+/LipCWdrwnMQ== +hls.js@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/hls.js/-/hls.js-0.13.2.tgz#3e7dd28e3787c69c6aba42b64b11eb2c3c8c29f1" + integrity sha512-sIg2t4uGpWQLzuK1Iid9614WOKqxj4OYg+EbFbhhTDCsxpENBN+Du3yBFnoi+a83DuOOHdiQd1ydnti9loSGXw== dependencies: eventemitter3 "3.1.0" url-toolkit "^2.1.6" From fb7f620316576f9e479960a82d88bb4c88bcb252 Mon Sep 17 00:00:00 2001 From: Yosi Levy <37745463+yosilevy@users.noreply.github.com> Date: Mon, 29 Jun 2020 10:29:26 +0300 Subject: [PATCH 05/13] Fixed a grammar mistake (#6265) --- src/translations/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/translations/en.json b/src/translations/en.json index 3045293b40..991f44f111 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -409,7 +409,7 @@ } }, "helper_settings": { - "platform_not_loaded": "The {platform} integration is not loaded. Please add it your configuration either by adding 'default_config:' or ''{platform}:''.", + "platform_not_loaded": "The {platform} integration is not loaded. Please add it to your configuration either by adding 'default_config:' or ''{platform}:''.", "yaml_not_editable": "The settings of this entity cannot be edited from the UI. Only entities set up from the UI are configurable from the UI.", "required_error_msg": "This field is required", "generic": { From d33f18ecb7cb20a3a2fa4804a26188f88cebfbe5 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 29 Jun 2020 00:31:07 -0700 Subject: [PATCH 06/13] Use hashes for hassio entrypoints (#6260) --- build-scripts/bundle.js | 1 - build-scripts/gulp/entry-html.js | 42 +++++++++++++++++++++++++++----- build-scripts/gulp/hassio.js | 22 ++--------------- build-scripts/paths.js | 5 ++++ 4 files changed, 43 insertions(+), 27 deletions(-) diff --git a/build-scripts/bundle.js b/build-scripts/bundle.js index 2c93bd7835..50e24db416 100644 --- a/build-scripts/bundle.js +++ b/build-scripts/bundle.js @@ -178,7 +178,6 @@ module.exports.config = { publicPath: publicPath(latestBuild, paths.hassio_publicPath), isProdBuild, latestBuild, - dontHash: new Set(["entrypoint"]), }; }, diff --git a/build-scripts/gulp/entry-html.js b/build-scripts/gulp/entry-html.js index c1be430039..f79950e156 100644 --- a/build-scripts/gulp/entry-html.js +++ b/build-scripts/gulp/entry-html.js @@ -90,8 +90,6 @@ gulp.task("gen-pages-prod", (done) => { }); gulp.task("gen-index-app-dev", (done) => { - // In dev mode we don't mangle names, so we hardcode urls. That way we can - // run webpack as last in watch mode, which blocks output. const content = renderTemplate("index", { latestAppJS: "/frontend_latest/app.js", latestCoreJS: "/frontend_latest/core.js", @@ -201,8 +199,6 @@ gulp.task("gen-index-cast-prod", (done) => { }); gulp.task("gen-index-demo-dev", (done) => { - // In dev mode we don't mangle names, so we hardcode urls. That way we can - // run webpack as last in watch mode, which blocks output. const content = renderDemoTemplate("index", { latestDemoJS: "/frontend_latest/main.js", @@ -240,8 +236,6 @@ gulp.task("gen-index-demo-prod", (done) => { }); gulp.task("gen-index-gallery-dev", (done) => { - // In dev mode we don't mangle names, so we hardcode urls. That way we can - // run webpack as last in watch mode, which blocks output. const content = renderGalleryTemplate("index", { latestGalleryJS: "./frontend_latest/entrypoint.js", }); @@ -269,3 +263,39 @@ gulp.task("gen-index-gallery-prod", (done) => { ); done(); }); + +gulp.task("gen-index-hassio-dev", async () => { + writeHassioEntrypoint("entrypoint.js", "entrypoints.js"); +}); + +gulp.task("gen-index-hassio-prod", async () => { + const latestManifest = require(path.resolve( + paths.hassio_output_latest, + "manifest.json" + )); + const es5Manifest = require(path.resolve( + paths.hassio_output_es5, + "manifest.json" + )); + writeHassioEntrypoint( + latestManifest["entrypoint.js"], + es5Manifest["entrypoint.js"] + ); +}); + +function writeHassioEntrypoint(latestEntrypoint, es5Entrypoint) { + fs.mkdirSync(paths.hassio_output_root, { recursive: true }); + fs.writeFileSync( + path.resolve(paths.hassio_output_root, "entrypoint.js"), + ` +try { + new Function("import('${paths.hassio_publicPath}/frontend_latest/${latestEntrypoint}')")(); +} catch (err) { + var el = document.createElement('script'); + el.src = '${paths.hassio_publicPath}/frontend_es5/${es5Entrypoint}'; + document.body.appendChild(el); +} + `, + { encoding: "utf-8" } + ); +} diff --git a/build-scripts/gulp/hassio.js b/build-scripts/gulp/hassio.js index 858a58e263..c055ba7685 100644 --- a/build-scripts/gulp/hassio.js +++ b/build-scripts/gulp/hassio.js @@ -11,24 +11,6 @@ require("./webpack.js"); require("./compress.js"); require("./rollup.js"); -async function writeEntrypointJS() { - // We ship two builds and we need to do feature detection on what version to load. - fs.mkdirSync(paths.hassio_output_root, { recursive: true }); - fs.writeFileSync( - path.resolve(paths.hassio_output_root, "entrypoint.js"), - ` -try { - new Function("import('${paths.hassio_publicPath}/frontend_latest/entrypoint.js')")(); -} catch (err) { - var el = document.createElement('script'); - el.src = '${paths.hassio_publicPath}/frontend_es5/entrypoint.js'; - document.body.appendChild(el); -} - `, - { encoding: "utf-8" } - ); -} - gulp.task( "develop-hassio", gulp.series( @@ -37,7 +19,7 @@ gulp.task( }, "clean-hassio", "gen-icons-json", - writeEntrypointJS, + "gen-index-hassio-dev", env.useRollup() ? "rollup-watch-hassio" : "webpack-watch-hassio" ) ); @@ -51,7 +33,7 @@ gulp.task( "clean-hassio", "gen-icons-json", env.useRollup() ? "rollup-prod-hassio" : "webpack-prod-hassio", - writeEntrypointJS, + "gen-index-hassio-prod", ...// Don't compress running tests (env.isTest() ? [] : ["compress-hassio"]) ) diff --git a/build-scripts/paths.js b/build-scripts/paths.js index 0a3e4fe79d..ab1b6d3853 100644 --- a/build-scripts/paths.js +++ b/build-scripts/paths.js @@ -34,6 +34,11 @@ module.exports = { hassio_dir: path.resolve(__dirname, "../hassio"), hassio_output_root: path.resolve(__dirname, "../hassio/build"), + hassio_output_latest: path.resolve( + __dirname, + "../hassio/build/frontend_latest" + ), + hassio_output_es5: path.resolve(__dirname, "../hassio/build/frontend_es5"), hassio_publicPath: "/api/hassio/app", translations_src: path.resolve(__dirname, "../src/translations"), From 00842a3354fc871ef10bfba094b1cb0630fb7907 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 29 Jun 2020 00:31:37 -0700 Subject: [PATCH 07/13] Add air quality domain icon (#6253) --- src/common/entity/domain_icon.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/entity/domain_icon.ts b/src/common/entity/domain_icon.ts index 632473bafd..650c4288e1 100644 --- a/src/common/entity/domain_icon.ts +++ b/src/common/entity/domain_icon.ts @@ -8,6 +8,7 @@ import { DEFAULT_DOMAIN_ICON } from "../const"; const fixedIcons = { alert: "hass:alert", alexa: "hass:amazon-alexa", + air_quality: "hass:air-filter", automation: "hass:robot", calendar: "hass:calendar", camera: "hass:video", From e8996063dd99b60d48bb374877182764ea5566e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Mon, 29 Jun 2020 10:51:28 +0200 Subject: [PATCH 08/13] Remove google colors. Fix #6254 (#6263) --- demo/src/configs/jimpower/theme.ts | 4 ++-- demo/src/configs/kernehed/theme.ts | 4 ++-- hassio/src/addon-view/config/hassio-addon-audio.ts | 2 +- hassio/src/addon-view/config/hassio-addon-config.ts | 4 ++-- hassio/src/addon-view/config/hassio-addon-network.ts | 2 +- hassio/src/addon-view/info/hassio-addon-info.ts | 8 ++++---- hassio/src/addon-view/log/hassio-addon-logs.ts | 2 +- hassio/src/components/hassio-card-content.ts | 2 +- hassio/src/dashboard/hassio-update.ts | 2 +- .../src/dialogs/snapshot/dialog-hassio-snapshot.ts | 2 +- hassio/src/system/hassio-host-info.ts | 4 ++-- hassio/src/system/hassio-supervisor-info.ts | 2 +- hassio/src/system/hassio-supervisor-log.ts | 2 +- src/components/buttons/ha-progress-button.js | 4 ++-- src/components/ha-climate-control.js | 2 +- src/components/ha-water_heater-control.js | 2 +- .../dialog-config-entry-system-options.ts | 2 +- .../dialog-device-registry-detail.ts | 2 +- .../controls/more-info-alarm_control_panel.js | 2 +- src/dialogs/more-info/more-info-controls.js | 2 +- .../voice-command-dialog/ha-voice-command-dialog.ts | 2 +- .../config/areas/dialog-area-registry-detail.ts | 2 +- src/panels/config/automation/ha-automation-editor.ts | 2 +- .../config/automation/thingtalk/dialog-thingtalk.ts | 2 +- .../thingtalk/ha-thingtalk-placeholders.ts | 2 +- .../cloud/forgot-password/cloud-forgot-password.js | 2 +- src/panels/config/cloud/login/cloud-login.js | 2 +- src/panels/config/cloud/register/cloud-register.js | 2 +- src/panels/config/core/ha-config-section-core.js | 4 ++-- src/panels/config/entities/dialog-entity-editor.ts | 2 +- .../settings/entity-settings-helper-tab.ts | 4 ++-- src/panels/config/entities/ha-config-entities.ts | 2 +- .../integration-panels/zha/zha-add-devices-page.ts | 2 +- .../integration-panels/zha/zha-add-group-page.ts | 2 +- .../integration-panels/zha/zha-cluster-attributes.ts | 2 +- .../integration-panels/zha/zha-cluster-commands.ts | 2 +- .../integration-panels/zha/zha-device-binding.ts | 2 +- .../integration-panels/zha/zha-group-binding.ts | 2 +- .../integration-panels/zha/zha-group-page.ts | 2 +- .../integration-panels/zwave/zwave-network.ts | 2 +- .../zwave/zwave-node-protection.js | 2 +- src/panels/config/scene/ha-scene-editor.ts | 2 +- src/panels/config/script/ha-script-editor.ts | 2 +- .../server_control/ha-config-server-control.ts | 4 ++-- .../service/developer-tools-service.js | 2 +- src/panels/lovelace/cards/hui-alarm-panel-card.ts | 2 +- src/panels/lovelace/cards/hui-plant-status-card.ts | 2 +- .../config-elements/hui-shopping-list-editor.ts | 2 +- src/panels/lovelace/hui-root.ts | 2 +- src/resources/ha-style.ts | 3 +++ src/resources/styles.ts | 12 ++++++------ 51 files changed, 69 insertions(+), 66 deletions(-) diff --git a/demo/src/configs/jimpower/theme.ts b/demo/src/configs/jimpower/theme.ts index 5d269d38a9..7e304eb6c6 100644 --- a/demo/src/configs/jimpower/theme.ts +++ b/demo/src/configs/jimpower/theme.ts @@ -26,9 +26,9 @@ export const demoThemeJimpower = () => ({ "switch-checked-color": "var(--accent-color)", "paper-dialog-background-color": "#434954", "secondary-text-color": "#5294E2", - "google-red-500": "#E45E65", + "error-color": "#E45E65", "divider-color": "rgba(0, 0, 0, .12)", - "google-green-500": "#39E949", + "success-color": "#39E949", "switch-unchecked-button-color": "var(--disabled-text-color)", "label-badge-border-color": "green", "paper-listbox-color": "var(--primary-color)", diff --git a/demo/src/configs/kernehed/theme.ts b/demo/src/configs/kernehed/theme.ts index e1cb10e78a..ffb2f0edfe 100644 --- a/demo/src/configs/kernehed/theme.ts +++ b/demo/src/configs/kernehed/theme.ts @@ -27,9 +27,9 @@ export const demoThemeKernehed = () => ({ "switch-checked-color": "var(--accent-color)", "paper-dialog-background-color": "#292929", "secondary-text-color": "#b58e31", - "google-red-500": "#b58e31", + "error-color": "#b58e31", "divider-color": "rgba(0, 0, 0, .12)", - "google-green-500": "#2980b9", + "success-color": "#2980b9", "switch-unchecked-button-color": "var(--disabled-text-color)", "label-badge-border-color": "green", "paper-listbox-color": "#777777", diff --git a/hassio/src/addon-view/config/hassio-addon-audio.ts b/hassio/src/addon-view/config/hassio-addon-audio.ts index 233adc63cc..8a7b4c08c5 100644 --- a/hassio/src/addon-view/config/hassio-addon-audio.ts +++ b/hassio/src/addon-view/config/hassio-addon-audio.ts @@ -107,7 +107,7 @@ class HassioAddonAudio extends LitElement { display: block; } .errors { - color: var(--google-red-500); + color: var(--error-color); margin-bottom: 16px; } paper-item { diff --git a/hassio/src/addon-view/config/hassio-addon-config.ts b/hassio/src/addon-view/config/hassio-addon-config.ts index 1297981cbf..56eec34d95 100644 --- a/hassio/src/addon-view/config/hassio-addon-config.ts +++ b/hassio/src/addon-view/config/hassio-addon-config.ts @@ -84,7 +84,7 @@ class HassioAddonConfig extends LitElement { justify-content: space-between; } .errors { - color: var(--google-red-500); + color: var(--error-color); margin-top: 16px; } iron-autogrow-textarea { @@ -92,7 +92,7 @@ class HassioAddonConfig extends LitElement { font-family: monospace; } .syntaxerror { - color: var(--google-red-500); + color: var(--error-color); } `, ]; diff --git a/hassio/src/addon-view/config/hassio-addon-network.ts b/hassio/src/addon-view/config/hassio-addon-network.ts index f834ecbe25..e199a0bcc1 100644 --- a/hassio/src/addon-view/config/hassio-addon-network.ts +++ b/hassio/src/addon-view/config/hassio-addon-network.ts @@ -105,7 +105,7 @@ class HassioAddonNetwork extends LitElement { display: block; } .errors { - color: var(--google-red-500); + color: var(--error-color); margin-bottom: 16px; } .card-actions { diff --git a/hassio/src/addon-view/info/hassio-addon-info.ts b/hassio/src/addon-view/info/hassio-addon-info.ts index 7ba518c194..22a708d38e 100644 --- a/hassio/src/addon-view/info/hassio-addon-info.ts +++ b/hassio/src/addon-view/info/hassio-addon-info.ts @@ -560,7 +560,7 @@ class HassioAddonInfo extends LitElement { margin-bottom: 16px; } ha-card.warning { - background-color: var(--google-red-500); + background-color: var(--error-color); color: white; } ha-card.warning .card-header { @@ -573,8 +573,8 @@ class HassioAddonInfo extends LitElement { --mdc-theme-primary: white !important; } .warning { - color: var(--google-red-500); - --mdc-theme-primary: var(--google-red-500); + color: var(--error-color); + --mdc-theme-primary: var(--error-color); } .light-color { color: var(--secondary-text-color); @@ -590,7 +590,7 @@ class HassioAddonInfo extends LitElement { vertical-align: middle; } .errors { - color: var(--google-red-500); + color: var(--error-color); margin-bottom: 16px; } .description { diff --git a/hassio/src/addon-view/log/hassio-addon-logs.ts b/hassio/src/addon-view/log/hassio-addon-logs.ts index 4613ff2a61..069b5f6c7a 100644 --- a/hassio/src/addon-view/log/hassio-addon-logs.ts +++ b/hassio/src/addon-view/log/hassio-addon-logs.ts @@ -62,7 +62,7 @@ class HassioAddonLogs extends LitElement { display: block; } .errors { - color: var(--google-red-500); + color: var(--error-color); margin-bottom: 16px; } `, diff --git a/hassio/src/components/hassio-card-content.ts b/hassio/src/components/hassio-card-content.ts index 71f55c42e4..015e131bd2 100644 --- a/hassio/src/components/hassio-card-content.ts +++ b/hassio/src/components/hassio-card-content.ts @@ -98,7 +98,7 @@ class HassioCardContent extends LitElement { color: var(--paper-item-icon-color); } ha-svg-icon.not_available { - color: var(--google-red-500); + color: var(--error-color); } .title { color: var(--primary-text-color); diff --git a/hassio/src/dashboard/hassio-update.ts b/hassio/src/dashboard/hassio-update.ts index b3b7e6ad7f..31e97cb8b2 100644 --- a/hassio/src/dashboard/hassio-update.ts +++ b/hassio/src/dashboard/hassio-update.ts @@ -180,7 +180,7 @@ export class HassioUpdate extends LitElement { text-align: right; } .errors { - color: var(--google-red-500); + color: var(--error-color); padding: 16px; } a { diff --git a/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts b/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts index a33c4ca226..589878b7aa 100755 --- a/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts +++ b/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts @@ -224,7 +224,7 @@ class HassioSnapshotDialog extends LitElement { } .warning, .error { - color: var(--google-red-500); + color: var(--error-color); } .buttons { display: flex; diff --git a/hassio/src/system/hassio-host-info.ts b/hassio/src/system/hassio-host-info.ts index 6413788b88..be0596122c 100644 --- a/hassio/src/system/hassio-host-info.ts +++ b/hassio/src/system/hassio-host-info.ts @@ -146,7 +146,7 @@ class HassioHostInfo extends LitElement { text-align: right; } .errors { - color: var(--google-red-500); + color: var(--error-color); margin-top: 16px; } mwc-button.info { @@ -156,7 +156,7 @@ class HassioHostInfo extends LitElement { margin-bottom: 10px; } .warning { - --mdc-theme-primary: var(--google-red-500); + --mdc-theme-primary: var(--error-color); } `, ]; diff --git a/hassio/src/system/hassio-supervisor-info.ts b/hassio/src/system/hassio-supervisor-info.ts index e7d3166ef7..51a45c18b2 100644 --- a/hassio/src/system/hassio-supervisor-info.ts +++ b/hassio/src/system/hassio-supervisor-info.ts @@ -117,7 +117,7 @@ class HassioSupervisorInfo extends LitElement { text-align: right; } .errors { - color: var(--google-red-500); + color: var(--error-color); margin-top: 16px; } `, diff --git a/hassio/src/system/hassio-supervisor-log.ts b/hassio/src/system/hassio-supervisor-log.ts index d2d6ad3da2..af3b94665d 100644 --- a/hassio/src/system/hassio-supervisor-log.ts +++ b/hassio/src/system/hassio-supervisor-log.ts @@ -123,7 +123,7 @@ class HassioSupervisorLog extends LitElement { width: 96%; } .errors { - color: var(--google-red-500); + color: var(--error-color); margin-bottom: 16px; } .card-content { diff --git a/src/components/buttons/ha-progress-button.js b/src/components/buttons/ha-progress-button.js index a00e6209cb..084e50c5a2 100644 --- a/src/components/buttons/ha-progress-button.js +++ b/src/components/buttons/ha-progress-button.js @@ -22,13 +22,13 @@ class HaProgressButton extends PolymerElement { .success mwc-button { --mdc-theme-primary: white; - background-color: var(--google-green-500); + background-color: var(--success-color); transition: none; } .error mwc-button { --mdc-theme-primary: white; - background-color: var(--google-red-500); + background-color: var(--error-color); transition: none; } diff --git a/src/components/ha-climate-control.js b/src/components/ha-climate-control.js index 399f46d7b1..f4732d8623 100644 --- a/src/components/ha-climate-control.js +++ b/src/components/ha-climate-control.js @@ -20,7 +20,7 @@ class HaClimateControl extends EventsMixin(PolymerElement) { @apply --layout-justified; } .in-flux#target_temperature { - color: var(--google-red-500); + color: var(--error-color); } #target_temperature { @apply --layout-self-center; diff --git a/src/components/ha-water_heater-control.js b/src/components/ha-water_heater-control.js index 4a211ed9ab..ace62634d0 100644 --- a/src/components/ha-water_heater-control.js +++ b/src/components/ha-water_heater-control.js @@ -20,7 +20,7 @@ class HaWaterHeaterControl extends EventsMixin(PolymerElement) { @apply --layout-justified; } .in-flux#target_temperature { - color: var(--google-red-500); + color: var(--error-color); } #target_temperature { @apply --layout-self-center; diff --git a/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts b/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts index b7cbcf4b39..cb2f95a287 100644 --- a/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts +++ b/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts @@ -180,7 +180,7 @@ class DialogConfigEntrySystemOptions extends LitElement { } .error { - color: var(--google-red-500); + color: var(--error-color); } `, ]; diff --git a/src/dialogs/device-registry-detail/dialog-device-registry-detail.ts b/src/dialogs/device-registry-detail/dialog-device-registry-detail.ts index 5758c8f3a0..9386b900d9 100644 --- a/src/dialogs/device-registry-detail/dialog-device-registry-detail.ts +++ b/src/dialogs/device-registry-detail/dialog-device-registry-detail.ts @@ -132,7 +132,7 @@ class DialogDeviceRegistryDetail extends LitElement { margin-right: auto; } .error { - color: var(--google-red-500); + color: var(--error-color); } `, ]; diff --git a/src/dialogs/more-info/controls/more-info-alarm_control_panel.js b/src/dialogs/more-info/controls/more-info-alarm_control_panel.js index 016f72e118..2f7f4fd357 100644 --- a/src/dialogs/more-info/controls/more-info-alarm_control_panel.js +++ b/src/dialogs/more-info/controls/more-info-alarm_control_panel.js @@ -34,7 +34,7 @@ class MoreInfoAlarmControlPanel extends LocalizeMixin(PolymerElement) { max-width: 200px; } mwc-button.disarm { - color: var(--google-red-500); + color: var(--error-color); } diff --git a/src/dialogs/more-info/more-info-controls.js b/src/dialogs/more-info/more-info-controls.js index 7eedf536d3..ceae69366a 100644 --- a/src/dialogs/more-info/more-info-controls.js +++ b/src/dialogs/more-info/more-info-controls.js @@ -64,7 +64,7 @@ class MoreInfoControls extends LocalizeMixin(EventsMixin(PolymerElement)) { } mwc-button.warning { - --mdc-theme-primary: var(--google-red-500); + --mdc-theme-primary: var(--error-color); } :host([domain="camera"]) paper-dialog-scrollable { diff --git a/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts b/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts index 7415c133ac..4b57035a8a 100644 --- a/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts +++ b/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts @@ -446,7 +446,7 @@ export class HaVoiceCommandDialog extends LitElement { } .message.error { - background-color: var(--google-red-500); + background-color: var(--error-color); color: var(--text-primary-color); } diff --git a/src/panels/config/areas/dialog-area-registry-detail.ts b/src/panels/config/areas/dialog-area-registry-detail.ts index 63a4360c7f..78c5a522df 100644 --- a/src/panels/config/areas/dialog-area-registry-detail.ts +++ b/src/panels/config/areas/dialog-area-registry-detail.ts @@ -157,7 +157,7 @@ class DialogAreaDetail extends LitElement { margin-right: auto; } .error { - color: var(--google-red-500); + color: var(--error-color); } `, ]; diff --git a/src/panels/config/automation/ha-automation-editor.ts b/src/panels/config/automation/ha-automation-editor.ts index 70f60c5e0a..8129605c23 100644 --- a/src/panels/config/automation/ha-automation-editor.ts +++ b/src/panels/config/automation/ha-automation-editor.ts @@ -445,7 +445,7 @@ export class HaAutomationEditor extends LitElement { .errors { padding: 20px; font-weight: bold; - color: var(--google-red-500); + color: var(--error-color); } .content { padding-bottom: 20px; diff --git a/src/panels/config/automation/thingtalk/dialog-thingtalk.ts b/src/panels/config/automation/thingtalk/dialog-thingtalk.ts index 7f1a73d196..7bf85c3ff8 100644 --- a/src/panels/config/automation/thingtalk/dialog-thingtalk.ts +++ b/src/panels/config/automation/thingtalk/dialog-thingtalk.ts @@ -257,7 +257,7 @@ class DialogThingtalk extends LitElement { display: block; } .error { - color: var(--google-red-500); + color: var(--error-color); } .attribution { color: var(--secondary-text-color); diff --git a/src/panels/config/automation/thingtalk/ha-thingtalk-placeholders.ts b/src/panels/config/automation/thingtalk/ha-thingtalk-placeholders.ts index 2e853c10a2..3a1d1db4ab 100644 --- a/src/panels/config/automation/thingtalk/ha-thingtalk-placeholders.ts +++ b/src/panels/config/automation/thingtalk/ha-thingtalk-placeholders.ts @@ -480,7 +480,7 @@ export class ThingTalkPlaceholders extends SubscribeMixin(LitElement) { font-weight: 500; } .error { - color: var(--google-red-500); + color: var(--error-color); } `, ]; diff --git a/src/panels/config/cloud/forgot-password/cloud-forgot-password.js b/src/panels/config/cloud/forgot-password/cloud-forgot-password.js index 6d82355c14..db67dce724 100644 --- a/src/panels/config/cloud/forgot-password/cloud-forgot-password.js +++ b/src/panels/config/cloud/forgot-password/cloud-forgot-password.js @@ -32,7 +32,7 @@ class CloudForgotPassword extends LocalizeMixin(EventsMixin(PolymerElement)) { margin: 0; } .error { - color: var(--google-red-500); + color: var(--error-color); } .card-actions { display: flex; diff --git a/src/panels/config/cloud/login/cloud-login.js b/src/panels/config/cloud/login/cloud-login.js index f8d27ffcd0..c251be6ffe 100644 --- a/src/panels/config/cloud/login/cloud-login.js +++ b/src/panels/config/cloud/login/cloud-login.js @@ -52,7 +52,7 @@ class CloudLogin extends LocalizeMixin( margin: 0; } .error { - color: var(--google-red-500); + color: var(--error-color); } .card-actions { display: flex; diff --git a/src/panels/config/cloud/register/cloud-register.js b/src/panels/config/cloud/register/cloud-register.js index 9373b10a16..7a3fab226a 100644 --- a/src/panels/config/cloud/register/cloud-register.js +++ b/src/panels/config/cloud/register/cloud-register.js @@ -39,7 +39,7 @@ class CloudRegister extends LocalizeMixin(EventsMixin(PolymerElement)) { margin: 0; } .error { - color: var(--google-red-500); + color: var(--error-color); } .card-actions { display: flex; diff --git a/src/panels/config/core/ha-config-section-core.js b/src/panels/config/core/ha-config-section-core.js index b73161c709..3dc768f19d 100644 --- a/src/panels/config/core/ha-config-section-core.js +++ b/src/panels/config/core/ha-config-section-core.js @@ -27,7 +27,7 @@ class HaConfigSectionCore extends LocalizeMixin(PolymerElement) { } .validate-result { - color: var(--google-green-500); + color: var(--success-color); font-weight: 500; margin-bottom: 1em; } @@ -37,7 +37,7 @@ class HaConfigSectionCore extends LocalizeMixin(PolymerElement) { } .config-invalid .text { - color: var(--google-red-500); + color: var(--error-color); font-weight: 500; } diff --git a/src/panels/config/entities/dialog-entity-editor.ts b/src/panels/config/entities/dialog-entity-editor.ts index f4f6d43076..3aecc2b883 100644 --- a/src/panels/config/entities/dialog-entity-editor.ts +++ b/src/panels/config/entities/dialog-entity-editor.ts @@ -292,7 +292,7 @@ export class DialogEntityEditor extends LitElement { } mwc-button.warning { - --mdc-theme-primary: var(--google-red-500); + --mdc-theme-primary: var(--error-color); } :host([rtl]) app-toolbar { 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 24ef2e3046..e6aa99aa2f 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 @@ -241,10 +241,10 @@ export class EntityRegistrySettingsHelper extends LitElement { margin-bottom: -20px; } mwc-button.warning { - --mdc-theme-primary: var(--google-red-500); + --mdc-theme-primary: var(--error-color); } .error { - color: var(--google-red-500); + color: var(--error-color); } .row { margin-top: 8px; diff --git a/src/panels/config/entities/ha-config-entities.ts b/src/panels/config/entities/ha-config-entities.ts index 09766612bd..e43f2ab103 100644 --- a/src/panels/config/entities/ha-config-entities.ts +++ b/src/panels/config/entities/ha-config-entities.ts @@ -180,7 +180,7 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) { > .card-actions.warning ha-call-api-button { - color: var(--google-red-500); + color: var(--error-color); } .content { margin-top: 24px; diff --git a/src/panels/config/scene/ha-scene-editor.ts b/src/panels/config/scene/ha-scene-editor.ts index 9675e630fb..961d51672d 100644 --- a/src/panels/config/scene/ha-scene-editor.ts +++ b/src/panels/config/scene/ha-scene-editor.ts @@ -683,7 +683,7 @@ export class HaSceneEditor extends SubscribeMixin(LitElement) { .errors { padding: 20px; font-weight: bold; - color: var(--google-red-500); + color: var(--error-color); } .content { padding-bottom: 20px; diff --git a/src/panels/config/script/ha-script-editor.ts b/src/panels/config/script/ha-script-editor.ts index d01215a8f9..85c35f7415 100644 --- a/src/panels/config/script/ha-script-editor.ts +++ b/src/panels/config/script/ha-script-editor.ts @@ -295,7 +295,7 @@ export class HaScriptEditor extends LitElement { .errors { padding: 20px; font-weight: bold; - color: var(--google-red-500); + color: var(--error-color); } .content { padding-bottom: 20px; diff --git a/src/panels/config/server_control/ha-config-server-control.ts b/src/panels/config/server_control/ha-config-server-control.ts index 8d05bc2113..7a06a6a439 100644 --- a/src/panels/config/server_control/ha-config-server-control.ts +++ b/src/panels/config/server_control/ha-config-server-control.ts @@ -245,7 +245,7 @@ export class HaConfigServerControl extends LitElement { } .validate-result { - color: var(--google-green-500); + color: var(--success-color); font-weight: 500; margin-bottom: 1em; } @@ -255,7 +255,7 @@ export class HaConfigServerControl extends LitElement { } .config-invalid .text { - color: var(--google-red-500); + color: var(--error-color); font-weight: 500; } diff --git a/src/panels/developer-tools/service/developer-tools-service.js b/src/panels/developer-tools/service/developer-tools-service.js index 528022b263..f1e996f4f1 100644 --- a/src/panels/developer-tools/service/developer-tools-service.js +++ b/src/panels/developer-tools/service/developer-tools-service.js @@ -81,7 +81,7 @@ class HaPanelDevService extends LocalizeMixin(PolymerElement) { } .error { - color: var(--google-red-500); + color: var(--error-color); } diff --git a/src/panels/lovelace/cards/hui-alarm-panel-card.ts b/src/panels/lovelace/cards/hui-alarm-panel-card.ts index a0d70704d8..bcb4343481 100644 --- a/src/panels/lovelace/cards/hui-alarm-panel-card.ts +++ b/src/panels/lovelace/cards/hui-alarm-panel-card.ts @@ -362,7 +362,7 @@ class HuiAlarmPanelCard extends LitElement implements LovelaceCard { } mwc-button#disarm { - color: var(--google-red-500); + color: var(--error-color); } `; } diff --git a/src/panels/lovelace/cards/hui-plant-status-card.ts b/src/panels/lovelace/cards/hui-plant-status-card.ts index 304e0f65ec..95ea0a6209 100644 --- a/src/panels/lovelace/cards/hui-plant-status-card.ts +++ b/src/panels/lovelace/cards/hui-plant-status-card.ts @@ -229,7 +229,7 @@ class HuiPlantStatusCard extends LitElement implements LovelaceCard { } .problem { - color: var(--google-red-500); + color: var(--error-color); font-weight: bold; } diff --git a/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts b/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts index 98fea1a69b..830b47182c 100644 --- a/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts @@ -104,7 +104,7 @@ export class HuiShoppingListEditor extends LitElement static get styles(): CSSResult { return css` .error { - color: var(--google-red-500); + color: var(--error-color); } `; } diff --git a/src/panels/lovelace/hui-root.ts b/src/panels/lovelace/hui-root.ts index 95843c2642..d75862cb4a 100644 --- a/src/panels/lovelace/hui-root.ts +++ b/src/panels/lovelace/hui-root.ts @@ -698,7 +698,7 @@ class HUIRoot extends LitElement { color: var(--text-primary-color, white); } mwc-button.warning:not([disabled]) { - color: var(--google-red-500); + color: var(--error-color); } #view { min-height: calc(100vh - 112px); diff --git a/src/resources/ha-style.ts b/src/resources/ha-style.ts index a3f2b7d780..b1a63138c3 100644 --- a/src/resources/ha-style.ts +++ b/src/resources/ha-style.ts @@ -34,6 +34,9 @@ documentContainer.innerHTML = ` --scrollbar-thumb-color: rgb(194, 194, 194); --error-color: #db4437; + --warning-color: f4b400; + --success-color: #0f9d58; + --info-color: #4285f4; /* states and badges */ --state-icon-color: #44739e; diff --git a/src/resources/styles.ts b/src/resources/styles.ts index 1241208cab..53d84dfc49 100644 --- a/src/resources/styles.ts +++ b/src/resources/styles.ts @@ -105,15 +105,15 @@ export const haStyle = css` } .error { - color: var(--google-red-500); + color: var(--error-color); } .warning { - color: var(--google-red-500); + color: var(--error-color); } mwc-button.warning { - --mdc-theme-primary: var(--google-red-500); + --mdc-theme-primary: var(--error-color); } button.link { @@ -132,7 +132,7 @@ export const haStyle = css` } .card-actions .warning { - --mdc-theme-primary: var(--google-red-500); + --mdc-theme-primary: var(--error-color); } .layout.horizontal, @@ -247,9 +247,9 @@ export const haStyleDialog = css` } } mwc-button.warning { - --mdc-theme-primary: var(--google-red-500); + --mdc-theme-primary: var(--error-color); } .error { - color: var(--google-red-500); + color: var(--error-color); } `; From 31a0c538557bdf4991b36305ec9f372d35fbf982 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 29 Jun 2020 22:18:45 +0200 Subject: [PATCH 09/13] Fix height of card picker (#6274) --- .../editor/card-editor/hui-card-picker.ts | 88 ++++++++++--------- 1 file changed, 47 insertions(+), 41 deletions(-) diff --git a/src/panels/lovelace/editor/card-editor/hui-card-picker.ts b/src/panels/lovelace/editor/card-editor/hui-card-picker.ts index f20d2ea7d4..9fdf96e464 100644 --- a/src/panels/lovelace/editor/card-editor/hui-card-picker.ts +++ b/src/panels/lovelace/editor/card-editor/hui-card-picker.ts @@ -33,6 +33,7 @@ import { getCardStubConfig } from "../get-card-stub-config"; import { CardPickTarget, Card } from "../types"; import { coreCards } from "../lovelace-cards"; import { styleMap } from "lit-html/directives/style-map"; +import "../../../../components/ha-circular-progress"; interface CardElement { card: Card; @@ -49,35 +50,35 @@ export class HuiCardPicker extends LitElement { public cardPicked?: (cardConf: LovelaceCardConfig) => void; - private _filter?: string; + @property() private _filter = ""; private _unusedEntities?: string[]; private _usedEntities?: string[]; - private _width?: number; + @property() private _width?: number; - private _height?: number; + @property() private _height?: number; private _filterCards = memoizeOne( (cardElements: CardElement[], filter?: string): CardElement[] => { - if (filter) { - let cards = cardElements.map( - (cardElement: CardElement) => cardElement.card - ); - const options: Fuse.IFuseOptions = { - keys: ["type", "name", "description"], - isCaseSensitive: false, - minMatchCharLength: 2, - threshold: 0.2, - }; - const fuse = new Fuse(cards, options); - cards = fuse.search(filter).map((result) => result.item); - cardElements = cardElements.filter((cardElement: CardElement) => - cards.includes(cardElement.card) - ); + if (!filter) { + return cardElements; } - return cardElements; + let cards = cardElements.map( + (cardElement: CardElement) => cardElement.card + ); + const options: Fuse.IFuseOptions = { + keys: ["type", "name", "description"], + isCaseSensitive: false, + minMatchCharLength: 2, + threshold: 0.2, + }; + const fuse = new Fuse(cards, options); + cards = fuse.search(filter).map((result) => result.item); + return cardElements.filter((cardElement: CardElement) => + cards.includes(cardElement.card) + ); } ); @@ -98,9 +99,10 @@ export class HuiCardPicker extends LitElement { @value-changed=${this._handleSearchChange} >
@@ -165,24 +167,6 @@ export class HuiCardPicker extends LitElement { this._loadCards(); } - protected updated(changedProps) { - super.updated(changedProps); - // Store the width and height so that when we search, box doesn't jump - const div = this.shadowRoot!.querySelector("div")!; - if (!this._width) { - const width = div.clientWidth; - if (width) { - this._width = width; - } - } - if (!this._height) { - const height = div.clientHeight; - if (height) { - this._height = height; - } - } - } - private _loadCards() { let cards: Card[] = coreCards.map((card: Card) => ({ name: this.hass!.localize( @@ -218,8 +202,30 @@ export class HuiCardPicker extends LitElement { } private _handleSearchChange(ev: CustomEvent) { - this._filter = ev.detail.value; - this.requestUpdate(); + const value = ev.detail.value; + + if (!value) { + // Reset when we no longer filter + this._width = undefined; + this._height = undefined; + } else if (!this._width || !this._height) { + // Save height and width so the dialog doesn't jump while searching + const div = this.shadowRoot!.getElementById("content"); + if (div && !this._width) { + const width = div.clientWidth; + if (width) { + this._width = width; + } + } + if (div && !this._height) { + const height = div.clientHeight; + if (height) { + this._height = height; + } + } + } + + this._filter = value; } static get styles(): CSSResult[] { From 7b0e743ecae84e8f1bbe8737bd3498ecf99dbcb7 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 29 Jun 2020 22:19:20 +0200 Subject: [PATCH 10/13] Fix yaml card editor (#6275) --- .../editor/card-editor/hui-card-editor.ts | 45 +++++++------------ .../card-editor/hui-dialog-edit-card.ts | 5 +++ src/resources/ha-style.ts | 2 +- 3 files changed, 21 insertions(+), 31 deletions(-) diff --git a/src/panels/lovelace/editor/card-editor/hui-card-editor.ts b/src/panels/lovelace/editor/card-editor/hui-card-editor.ts index e33b3af430..404c0df8eb 100644 --- a/src/panels/lovelace/editor/card-editor/hui-card-editor.ts +++ b/src/panels/lovelace/editor/card-editor/hui-card-editor.ts @@ -8,6 +8,7 @@ import { LitElement, property, TemplateResult, + query, } from "lit-element"; import { fireEvent } from "../../../../common/dom/fire_event"; import { computeRTL } from "../../../../common/util/compute_rtl"; @@ -22,6 +23,7 @@ import { getCardElementClass } from "../../create-element/create-card-element"; import type { EntityConfig } from "../../entity-rows/types"; import type { LovelaceCardEditor } from "../../types"; import type { GUIModeChangedEvent } from "../types"; +import "../../../../components/ha-circular-progress"; export interface ConfigChangedEvent { config: LovelaceCardConfig; @@ -69,6 +71,8 @@ export class HuiCardEditor extends LitElement { @property() private _loading = false; + @query("ha-code-editor") _yamlEditor?: HaCodeEditor; + public get yaml(): string { return this._yaml || ""; } @@ -119,17 +123,18 @@ export class HuiCardEditor extends LitElement { }); } - private get _yamlEditor(): HaCodeEditor { - return this.shadowRoot!.querySelector("ha-code-editor")! as HaCodeEditor; - } - public toggleMode() { this.GUImode = !this.GUImode; } - public connectedCallback() { - super.connectedCallback(); - this._refreshYamlEditor(); + public refreshYamlEditor(focus = false) { + if (!this._yamlEditor?.codemirror) { + return; + } + this._yamlEditor.codemirror.refresh(); + if (focus) { + this._yamlEditor.codemirror.focus(); + } } protected render(): TemplateResult { @@ -155,7 +160,7 @@ export class HuiCardEditor extends LitElement { mode="yaml" autofocus .value=${this.yaml} - .error=${this._error} + .error=${Boolean(this._error)} .rtl=${computeRTL(this.hass)} @value-changed=${this._handleYAMLChanged} @keydown=${this._ignoreKeydown} @@ -182,14 +187,6 @@ export class HuiCardEditor extends LitElement { protected updated(changedProperties) { super.updated(changedProperties); - - if (changedProperties.has("_GUImode")) { - if (this.GUImode === false) { - // Refresh code editor when switching to yaml mode - this._refreshYamlEditor(true); - } - } - if (this._configElement && changedProperties.has("hass")) { this._configElement.hass = this.hass; } @@ -198,18 +195,6 @@ export class HuiCardEditor extends LitElement { } } - private _refreshYamlEditor(focus = false) { - // wait on render - setTimeout(() => { - if (this._yamlEditor && this._yamlEditor.codemirror) { - this._yamlEditor.codemirror.refresh(); - if (focus) { - this._yamlEditor.codemirror.focus(); - } - } - }, 1); - } - private _handleUIConfigChanged(ev: UIConfigChangedEvent) { ev.stopPropagation(); const config = ev.detail.config; @@ -298,10 +283,10 @@ export class HuiCardEditor extends LitElement { padding: 8px 0px; } .error { - color: #ef5350; + color: var(--error-color); } .warning { - color: #ffa726; + color: var(--warning-color); } ha-circular-progress { display: block; diff --git a/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts b/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts index c5ffaf0167..dd718075bf 100755 --- a/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts +++ b/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts @@ -122,6 +122,7 @@ export class HuiDialogEditCard extends LitElement { scrimClickAction @keydown=${this._ignoreKeydown} @closed=${this._close} + @opened=${this._opened} .heading=${html`${heading} ${this._documentationURL !== undefined ? html` @@ -360,6 +361,10 @@ export class HuiDialogEditCard extends LitElement { this._cardEditorEl?.toggleMode(); } + private _opened() { + this._cardEditorEl?.refreshYamlEditor(); + } + private _close(): void { this._params = undefined; this._cardConfig = undefined; diff --git a/src/resources/ha-style.ts b/src/resources/ha-style.ts index b1a63138c3..40c0c80ff1 100644 --- a/src/resources/ha-style.ts +++ b/src/resources/ha-style.ts @@ -34,7 +34,7 @@ documentContainer.innerHTML = ` --scrollbar-thumb-color: rgb(194, 194, 194); --error-color: #db4437; - --warning-color: f4b400; + --warning-color: #f4b400; --success-color: #0f9d58; --info-color: #4285f4; From 71faaf2ab19a6a2abd87db3017fb4fee4d56db93 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 29 Jun 2020 14:29:05 -0700 Subject: [PATCH 11/13] Handle setTimeout called when tab is shown (#6257) Co-authored-by: Bram Kragten --- src/layouts/home-assistant.ts | 69 +++++++++++++++++++-------- src/layouts/partial-panel-resolver.ts | 66 +++++++++++++++---------- 2 files changed, 89 insertions(+), 46 deletions(-) diff --git a/src/layouts/home-assistant.ts b/src/layouts/home-assistant.ts index 7356291391..667af80170 100644 --- a/src/layouts/home-assistant.ts +++ b/src/layouts/home-assistant.ts @@ -76,11 +76,15 @@ export class HomeAssistantAppEl extends HassElement { // @ts-ignore this._loadHassTranslations(this.hass!.language, "state"); + this.addEventListener("unsuspend-app", () => this._onVisible(), false); + document.addEventListener( "visibilitychange", - () => this._handleVisibilityChange(), + () => this._checkVisibility(), false ); + document.addEventListener("freeze", () => this._suspendApp()); + document.addEventListener("resume", () => this._checkVisibility()); } protected hassReconnected() { @@ -148,30 +152,53 @@ export class HomeAssistantAppEl extends HassElement { : route.path.substr(1, dividerPos - 1); } - protected _handleVisibilityChange() { + protected _checkVisibility() { if (document.hidden) { // If the document is hidden, we will prevent reconnects until we are visible again - this.hass!.connection.suspendReconnectUntil( - new Promise((resolve) => { - this._visiblePromiseResolve = resolve; - }) - ); - // We close the connection to Home Assistant after being hidden for 5 minutes - this._hiddenTimeout = window.setTimeout(() => { - this._hiddenTimeout = undefined; - this.hass!.connection.suspend(); - }, 300000); + this._onHidden(); } else { - // Clear timer to close the connection - if (this._hiddenTimeout) { - clearTimeout(this._hiddenTimeout); - this._hiddenTimeout = undefined; - } - // Unsuspend the reconnect - if (this._visiblePromiseResolve) { - this._visiblePromiseResolve(); - this._visiblePromiseResolve = undefined; + this._onVisible(); + } + } + + private _onHidden() { + if (this._visiblePromiseResolve) { + return; + } + this.hass!.connection.suspendReconnectUntil( + new Promise((resolve) => { + this._visiblePromiseResolve = resolve; + }) + ); + // We close the connection to Home Assistant after being hidden for 5 minutes + this._hiddenTimeout = window.setTimeout(() => { + this._hiddenTimeout = undefined; + // setTimeout can be delayed in the background and only fire + // when we switch to the tab or app again (Hey Android!) + if (!document.hidden) { + this._suspendApp(); } + }, 300000); + window.addEventListener("focus", () => this._onVisible(), { once: true }); + } + + private _suspendApp() { + if (!this.hass!.connection.connected) { + return; + } + this.hass!.connection.suspend(); + } + + private _onVisible() { + // Clear timer to close the connection + if (this._hiddenTimeout) { + clearTimeout(this._hiddenTimeout); + this._hiddenTimeout = undefined; + } + // Unsuspend the reconnect + if (this._visiblePromiseResolve) { + this._visiblePromiseResolve(); + this._visiblePromiseResolve = undefined; } } } diff --git a/src/layouts/partial-panel-resolver.ts b/src/layouts/partial-panel-resolver.ts index e17e41d8ed..a3cb084c36 100644 --- a/src/layouts/partial-panel-resolver.ts +++ b/src/layouts/partial-panel-resolver.ts @@ -99,11 +99,13 @@ class PartialPanelResolver extends HassRouterPage { protected firstUpdated(changedProps: PropertyValues) { super.firstUpdated(changedProps); + // Attach listeners for visibility document.addEventListener( "visibilitychange", - () => this._handleVisibilityChange(), + () => this._checkVisibility(), false ); + document.addEventListener("resume", () => this._checkVisibility()); } protected updated(changedProps: PropertyValues) { @@ -156,34 +158,48 @@ class PartialPanelResolver extends HassRouterPage { } } - private _handleVisibilityChange() { + private _checkVisibility() { if (document.hidden) { - this._hiddenTimeout = window.setTimeout(() => { - this._hiddenTimeout = undefined; - const curPanel = this.hass.panels[this._currentPage]; - if ( - this.lastChild && - // iFrames will lose their state when disconnected - // Do not disconnect any iframe panel - curPanel.component_name !== "iframe" && - // Do not disconnect any custom panel that embeds into iframe (ie hassio) - (curPanel.component_name !== "custom" || - !(curPanel.config as CustomPanelInfo).config._panel_custom - .embed_iframe) - ) { - this._disconnectedPanel = this.lastChild; - this.removeChild(this.lastChild); - } - }, 300000); + this._onHidden(); } else { - if (this._hiddenTimeout) { - clearTimeout(this._hiddenTimeout); - this._hiddenTimeout = undefined; + this._onVisible(); + } + } + + private _onHidden() { + this._hiddenTimeout = window.setTimeout(() => { + this._hiddenTimeout = undefined; + // setTimeout can be delayed in the background and only fire + // when we switch to the tab or app again (Hey Android!) + if (!document.hidden) { + return; } - if (this._disconnectedPanel) { - this.appendChild(this._disconnectedPanel); - this._disconnectedPanel = undefined; + const curPanel = this.hass.panels[this._currentPage]; + if ( + this.lastChild && + // iFrames will lose their state when disconnected + // Do not disconnect any iframe panel + curPanel.component_name !== "iframe" && + // Do not disconnect any custom panel that embeds into iframe (ie hassio) + (curPanel.component_name !== "custom" || + !(curPanel.config as CustomPanelInfo).config._panel_custom + .embed_iframe) + ) { + this._disconnectedPanel = this.lastChild; + this.removeChild(this.lastChild); } + }, 300000); + window.addEventListener("focus", () => this._onVisible(), { once: true }); + } + + private _onVisible() { + if (this._hiddenTimeout) { + clearTimeout(this._hiddenTimeout); + this._hiddenTimeout = undefined; + } + if (this._disconnectedPanel) { + this.appendChild(this._disconnectedPanel); + this._disconnectedPanel = undefined; } } From 43fbf97e10dce9a2c4daf209fb46dd07914d5618 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 29 Jun 2020 23:52:04 +0200 Subject: [PATCH 12/13] Restore focus when returning to tab (#6276) --- src/common/dom/deep-active-element.ts | 8 ++++++++ src/layouts/partial-panel-resolver.ts | 17 +++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/common/dom/deep-active-element.ts diff --git a/src/common/dom/deep-active-element.ts b/src/common/dom/deep-active-element.ts new file mode 100644 index 0000000000..e348032ed1 --- /dev/null +++ b/src/common/dom/deep-active-element.ts @@ -0,0 +1,8 @@ +export const deepActiveElement = ( + root: DocumentOrShadowRoot = document +): Element | null => { + if (root.activeElement?.shadowRoot?.activeElement) { + return deepActiveElement(root.activeElement.shadowRoot); + } + return root.activeElement; +}; diff --git a/src/layouts/partial-panel-resolver.ts b/src/layouts/partial-panel-resolver.ts index a3cb084c36..166f3b7a91 100644 --- a/src/layouts/partial-panel-resolver.ts +++ b/src/layouts/partial-panel-resolver.ts @@ -14,6 +14,7 @@ import { STATE_RUNNING, } from "home-assistant-js-websocket"; import { CustomPanelInfo } from "../data/panel_custom"; +import { deepActiveElement } from "../common/dom/deep-active-element"; const CACHE_URL_PATHS = ["lovelace", "developer-tools"]; const COMPONENTS = { @@ -92,7 +93,9 @@ class PartialPanelResolver extends HassRouterPage { private _waitForStart = false; - private _disconnectedPanel?: ChildNode; + private _disconnectedPanel?: HTMLElement; + + private _disconnectedActiveElement?: HTMLElement; private _hiddenTimeout?: number; @@ -185,7 +188,13 @@ class PartialPanelResolver extends HassRouterPage { !(curPanel.config as CustomPanelInfo).config._panel_custom .embed_iframe) ) { - this._disconnectedPanel = this.lastChild; + this._disconnectedPanel = this.lastChild as HTMLElement; + const activeEl = deepActiveElement( + this._disconnectedPanel.shadowRoot || undefined + ); + if (activeEl instanceof HTMLElement) { + this._disconnectedActiveElement = activeEl; + } this.removeChild(this.lastChild); } }, 300000); @@ -201,6 +210,10 @@ class PartialPanelResolver extends HassRouterPage { this.appendChild(this._disconnectedPanel); this._disconnectedPanel = undefined; } + if (this._disconnectedActiveElement) { + this._disconnectedActiveElement.focus(); + this._disconnectedActiveElement = undefined; + } } private async _updateRoutes(oldPanels?: HomeAssistant["panels"]) { From 163ff3d4e491a46610c60d029a73b67e01890ce9 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 29 Jun 2020 21:58:35 +0000 Subject: [PATCH 13/13] Bumped version to 20200629.0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 4e1cddad04..a01149b7e9 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name="home-assistant-frontend", - version="20200626.1", + version="20200629.0", description="The Home Assistant frontend", url="https://github.com/home-assistant/home-assistant-polymer", author="The Home Assistant Authors",