From be298284540d9d72fa1e4d35d834c05730fa0997 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Wed, 30 Jun 2021 15:58:01 +0200 Subject: [PATCH 01/14] Change path for codespaces (#9484) --- script/core | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/script/core b/script/core index 7f45620af3..00d663cab2 100755 --- a/script/core +++ b/script/core @@ -9,12 +9,6 @@ if [ -z "${DEVCONTAINER}" ]; then exit 1 fi -if [ ! -z "${CODESPACES}" ]; then - WORKSPACE="/root/workspace/frontend" -else - WORKSPACE="/workspaces/frontend" -fi - if [ -z $(which hass) ]; then echo "Installing Home Asstant core from dev." python3 -m pip install --upgrade \ @@ -22,9 +16,9 @@ if [ -z $(which hass) ]; then git+git://github.com/home-assistant/home-assistant.git@dev fi -if [ ! -d "${WORKSPACE}/config" ]; then +if [ ! -d "/workspaces/frontend/config" ]; then echo "Creating default configuration." - mkdir -p "${WORKSPACE}/config"; + mkdir -p "/workspaces/frontend/config"; hass --script ensure_config -c config echo "demo: @@ -32,24 +26,24 @@ logger: default: info logs: homeassistant.components.frontend: debug -" >> "${WORKSPACE}/config/configuration.yaml" +" >> /workspaces/frontend/config/configuration.yaml if [ ! -z "${HASSIO}" ]; then echo " # frontend: -# development_repo: ${WORKSPACE} +# development_repo: /workspaces/frontend hassio: - development_repo: ${WORKSPACE}" >> "${WORKSPACE}/config/configuration.yaml" + development_repo: /workspaces/frontend" >> /workspaces/frontend/config/configuration.yaml else echo " frontend: - development_repo: ${WORKSPACE} + development_repo: /workspaces/frontend # hassio: -# development_repo: ${WORKSPACE}" >> "${WORKSPACE}/config/configuration.yaml" +# development_repo: /workspaces/frontend" >> /workspaces/frontend/config/configuration.yaml fi fi -hass -c "${WORKSPACE}/config" +hass -c /workspaces/frontend/config From 4466950bb85693be2a027b94ba34e9dce206eb90 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 1 Jul 2021 00:47:12 +0000 Subject: [PATCH 02/14] Translation update --- translations/frontend/ca.json | 15 ++++++++++++++- translations/frontend/de.json | 15 ++++++++++++++- translations/frontend/es.json | 2 +- translations/frontend/et.json | 2 +- translations/frontend/ko.json | 13 +++++++++++++ translations/frontend/nb.json | 15 ++++++++++++++- translations/frontend/pl.json | 13 +++++++++++++ translations/frontend/ru.json | 2 +- translations/frontend/zh-Hant.json | 15 ++++++++++++++- 9 files changed, 85 insertions(+), 7 deletions(-) diff --git a/translations/frontend/ca.json b/translations/frontend/ca.json index 46336463ad..9f43de8607 100644 --- a/translations/frontend/ca.json +++ b/translations/frontend/ca.json @@ -2319,7 +2319,7 @@ "none": "Encara no hi ha res configurat", "none_found": "No s'han trobat integracions", "none_found_detail": "Ajusta els paràmetres de cerca.", - "note_about_integrations": "Encara no es poden configurar totes les integracions a través de la IU.", + "note_about_integrations": "No s'ha trobat cap integració que coincident, és possible que la integració encara no estigui disponible per configurar-se a través de la interfície d'usuari.", "note_about_website_reference": "En pots trobar més al ", "reconfigure": "Reconfigura", "rename_dialog": "Edita el nom de l'entrada de configuració", @@ -2962,6 +2962,7 @@ "common": { "add_node": "Afegeix node", "close": "Tanca", + "heal_network": "Guareix la xarxa", "home_id": "ID principal", "network": "Xarxa", "node_id": "ID del node", @@ -2988,6 +2989,18 @@ "node_status": "Estat del node", "zwave_info": "Informació Z-Wave" }, + "heal_network": { + "healing_cancelled": "La guarició de la xarxa s'ha cancel·lat.", + "healing_complete": "La guarició de la xarxa s'ha completat.", + "healing_failed": "La guarició ha fallat. Pots trobar informació addicional als registres.", + "in_progress": "La guarició de la xarxa està en curs. Trigarà una estona.", + "introduction": "Inicia una guarició de la teva xarxa Z-Wave. La guarició de xarxa farà que tots els dispositius tornin a calcular les seves rutes cap al controlador. Es recomana si recentment has canviat o mogut dispositius o el controlador.", + "run_in_background": "Pots tancar aquest diàleg, la guarició de la xarxa continuarà en segon pla.", + "start_heal": "Comença la guarició", + "stop_heal": "Atura la guarició", + "title": "Guareix la xarxa Z-Wave", + "traffic_warning": "El procés de guarició genera una gran quantitat de trànsit a la xarxa Z-Wave. Això pot fer que els dispositius responguin lentament (o gens) mentre la guarició està en procés." + }, "logs": { "log_level": "Nivell dels registres", "log_level_changed": "Nivell de registre canviat a: {level}", diff --git a/translations/frontend/de.json b/translations/frontend/de.json index 620215d570..6004e3c25b 100644 --- a/translations/frontend/de.json +++ b/translations/frontend/de.json @@ -2319,7 +2319,7 @@ "none": "Noch nichts konfiguriert", "none_found": "Keine Integrationen gefunden", "none_found_detail": "Passe deine Suchkriterien an.", - "note_about_integrations": "Nicht alle Integrationen können über die Benutzeroberfläche konfiguriert werden.", + "note_about_integrations": "Es wurden keine Integrationen für deine Suche gefunden. Möglicherweise ist die Integration, die du einrichten möchtest, noch nicht zum Einrichten über die Benutzeroberfläche verfügbar.", "note_about_website_reference": "Weitere Informationen findest du auf der ", "reconfigure": "Neu konfigurieren", "rename_dialog": "Bearbeite den Namen dieses Konfigurationseintrags", @@ -2962,6 +2962,7 @@ "common": { "add_node": "Knoten hinzufügen", "close": "Schließen", + "heal_network": "Netzwerk heilen", "home_id": "Heim-ID", "network": "Netzwerk", "node_id": "Knoten-ID", @@ -2988,6 +2989,18 @@ "node_status": "Node Status", "zwave_info": "Z-Wave Info" }, + "heal_network": { + "healing_cancelled": "Die Netzwerkheilung wurde abgebrochen.", + "healing_complete": "Die Netzwerkheilung ist abgeschlossen.", + "healing_failed": "Heilung fehlgeschlagen. Zusätzliche Informationen könnten in den Protokollen verfügbar sein.", + "in_progress": "Die Netzwerkheilung ist im Gange. Dies wird einige Zeit in Anspruch nehmen.", + "introduction": "Startet einen Netzwerk-Heal im Z-Wave-Netzwerk. Ein Netzwerk-Heal veranlasst alle Geräte, ihre Routen zurück zum Controller neu zu berechnen und wird empfohlen, wenn kürzlich Geräte oder Controller verschoben wurden.", + "run_in_background": "Dieser Dialog kann geschlossen werden und die Netzwerkheilung wird im Hintergrund fortgesetzt.", + "start_heal": "Starten der Heilung", + "stop_heal": "Stoppen der Heilung", + "title": "Heile dein Z-Wave-Netzwerk", + "traffic_warning": "Der Heilungsprozess erzeugt eine große Menge an Datenverkehr im Z-Wave-Netzwerk. Dies kann dazu führen, dass Geräte langsam (oder gar nicht) reagieren, während der Heilungsprozess läuft." + }, "logs": { "log_level": "Protokollstufe", "log_level_changed": "Log Level geändert auf: {level}", diff --git a/translations/frontend/es.json b/translations/frontend/es.json index 946be9169b..783403fbb1 100644 --- a/translations/frontend/es.json +++ b/translations/frontend/es.json @@ -2319,7 +2319,7 @@ "none": "Todavía no hay nada configurado", "none_found": "No se han encontrado integraciones", "none_found_detail": "Ajusta tus criterios de búsqueda.", - "note_about_integrations": "Todavía no se pueden configurar todas las integraciones a través de la interfaz de usuario.", + "note_about_integrations": "No hay integraciones que coincidan con tu búsqueda, es posible que la integración que deseas configurar aún no esté disponible para configurar a través de la interfaz de usuario.", "note_about_website_reference": "Hay más disponibles en el ", "reconfigure": "Reconfigurar", "rename_dialog": "Edita el nombre de esta entrada de configuración", diff --git a/translations/frontend/et.json b/translations/frontend/et.json index f3e6c180cf..5f73dfb0ca 100644 --- a/translations/frontend/et.json +++ b/translations/frontend/et.json @@ -2319,7 +2319,7 @@ "none": "Midagi pole veel seadistatud", "none_found": "Sidumisi ei leitud", "none_found_detail": "Korrigeerige oma otsingukriteeriume.", - "note_about_integrations": "Kõiki sidumisi ei saa veel kasutajaliidese kaudu seadistada.", + "note_about_integrations": "Otsingule ei vastanud ükski sidumine, soovitud üksus ei pruugi olla veel kasutajaliidese kaudu seadistamiseks saadaval.", "note_about_website_reference": "Rohkem on saadaval ", "reconfigure": "Seadistage uuesti", "rename_dialog": "Muuda selle seadistuskirje nime", diff --git a/translations/frontend/ko.json b/translations/frontend/ko.json index 6df6cb3d6f..e2f7504388 100644 --- a/translations/frontend/ko.json +++ b/translations/frontend/ko.json @@ -2962,6 +2962,7 @@ "common": { "add_node": "노드 추가하기", "close": "닫기", + "heal_network": "네트워크 복구", "home_id": "집 ID", "network": "네트워크", "node_id": "노드 ID", @@ -2988,6 +2989,18 @@ "node_status": "노드 상태", "zwave_info": "Z-Wave 정보" }, + "heal_network": { + "healing_cancelled": "네트워크 복구가 취소되었습니다.", + "healing_complete": "네트워크 복구가 완료되었습니다.", + "healing_failed": "복구에 실패했습니다. 로그에서 추가 정보를 확인할 수 있습니다.", + "in_progress": "네트워크 복구가 진행 중입니다. 시간이 좀 걸립니다.", + "introduction": "Z-Wave 네트워크 복구를 시작합니다. 네트워크 복구 시 모든 장치가 컨트롤러와의 경로를 재설정하며 최근 장치나 컨트롤러의 위치를 이동 한 경우 권장됩니다.", + "run_in_background": "이 대화 상자를 닫을 수 있으며 네트워크 복구는 백그라운드에서 계속됩니다.", + "start_heal": "복구 시작", + "stop_heal": "복구 중지", + "title": "Z-Wave 네트워크 복구", + "traffic_warning": "복구 프로세스는 Z-Wave 네트워크에서 많은 양의 트래픽을 생성합니다. 이로 인해 치료가 진행되는 동안 장치가 느리게 (또는 전혀 응답하지 않을) 수 있습니다." + }, "logs": { "log_level": "로그 레벨", "log_level_changed": "로그 레벨이 변경되었습니다: {level}", diff --git a/translations/frontend/nb.json b/translations/frontend/nb.json index cf43e1e937..4238eb0c6c 100644 --- a/translations/frontend/nb.json +++ b/translations/frontend/nb.json @@ -2319,7 +2319,7 @@ "none": "Ingenting er konfigurert enda", "none_found": "Ingen integrasjoner funnet", "none_found_detail": "Juster dine søkekriterier", - "note_about_integrations": "Ikke alle integrasjoner kan konfigureres via brukergrensesnittet ennå.", + "note_about_integrations": "Ingen integrasjoner samsvarte med søket, integreringen du vil konfigurere, er kanskje ikke tilgjengelig for konfigurering via brukergrensesnittet ennå.", "note_about_website_reference": "Flere er tilgjengelige på", "reconfigure": "Konfigurer på nytt", "rename_dialog": "Redigere navnet på denne config-oppføringen", @@ -2962,6 +2962,7 @@ "common": { "add_node": "Legg til node", "close": "Lukk", + "heal_network": "Helbrede nettverk", "home_id": "Hjem-ID", "network": "Nettverk", "node_id": "Node-ID", @@ -2988,6 +2989,18 @@ "node_status": "Node status", "zwave_info": "Z-Wave Informasjon" }, + "heal_network": { + "healing_cancelled": "Nettverkshelbredelse er avbrutt.", + "healing_complete": "Nettverksheling er fullført.", + "healing_failed": "Helbredelse mislyktes. Ytterligere informasjon kan være tilgjengelig i loggene.", + "in_progress": "Nettverkshelbredelse pågår. Dette vil ta litt tid.", + "introduction": "Start en nettverkshelbredelse på Z-Wave-nettverket. En nettverkshelbredelse vil føre til at alle enheter beregner rutene sine tilbake til kontrolleren, og anbefales hvis du nylig har flyttet enheter eller kontrolleren din.", + "run_in_background": "Du kan lukke denne dialogboksen, og nettverksreparasjonen fortsetter i bakgrunnen.", + "start_heal": "Begynn å helbrede", + "stop_heal": "Stopp helbredelse", + "title": "Helbred ditt Z-Wave-nettverk", + "traffic_warning": "Helbredelsesprosessen genererer stor trafikk på Z-Wave-nettverket. Dette kan føre til at enheter reagerer sakte (eller ikke i det hele tatt) mens legingen pågår." + }, "logs": { "log_level": "Loggnivå", "log_level_changed": "Loggnivå endret til: {level}", diff --git a/translations/frontend/pl.json b/translations/frontend/pl.json index 53a5147026..09348f01b7 100644 --- a/translations/frontend/pl.json +++ b/translations/frontend/pl.json @@ -2962,6 +2962,7 @@ "common": { "add_node": "Dodaj węzeł", "close": "Zamknij", + "heal_network": "Uzdrawiaj sieć", "home_id": "Identyfikator domu", "network": "Sieć", "node_id": "Identyfikator węzła", @@ -2988,6 +2989,18 @@ "node_status": "Stan węzła", "zwave_info": "Informacje Z-Wave" }, + "heal_network": { + "healing_cancelled": "Uzdrawianie sieci zostało anulowane.", + "healing_complete": "Uzdrawianie sieci zostało zakończone.", + "healing_failed": "Uzdrawianie nie powiodło się. Dodatkowe informacje mogą być dostępne w logach.", + "in_progress": "Trwa uzdrawianie sieci. To zajmie trochę czasu.", + "introduction": "Rozpocznij uzdrawianie sieci Z-Wave. Uzdrawianie sieci spowoduje, że wszystkie urządzenia ponownie obliczą swoje trasy z powrotem do kontrolera i jest zalecane, jeśli niedawno przeniesiono urządzenia lub kontroler.", + "run_in_background": "Możesz zamknąć to okno, a uzdrawianie sieci będzie kontynuowane w tle.", + "start_heal": "Rozpocznij uzdrawianie", + "stop_heal": "Zatrzymaj uzdrawianie", + "title": "Uzdrawianie sieci Z-Wave", + "traffic_warning": "Proces uzdrawiania generuje duży ruch w sieci Z-Wave. Może to spowodować, że urządzenia będą reagować powoli (lub wcale) podczas trwania uzdrawiania." + }, "logs": { "log_level": "Poziom loga", "log_level_changed": "Poziom dziennika zmieniony na: {level}", diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index 61e3e07537..057fb98a3e 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -2319,7 +2319,7 @@ "none": "Пока ничего не настроено", "none_found": "Интеграции не найдены", "none_found_detail": "Измените критерии поиска", - "note_about_integrations": "Пока что не все интеграции могут быть настроены через пользовательский интерфейс.", + "note_about_integrations": "Не найдено соответствий по Вашему запросу. Интеграция, которую Вы хотели бы настроить, может быть недоступна для настройки через пользовательский интерфейс.", "note_about_website_reference": "Все доступные интеграции Вы можете найти на ", "reconfigure": "Перенастроить", "rename_dialog": "Название интеграции", diff --git a/translations/frontend/zh-Hant.json b/translations/frontend/zh-Hant.json index cf81b2140b..6b5419e37d 100644 --- a/translations/frontend/zh-Hant.json +++ b/translations/frontend/zh-Hant.json @@ -2319,7 +2319,7 @@ "none": "尚未設定", "none_found": "找不到相關整合。", "none_found_detail": "調整搜尋條件。", - "note_about_integrations": "目前並非所有整合皆可以透過 UI 進行設定。", + "note_about_integrations": "沒有找到符合的整合,所要設定的整合可能尚未支援透過 UI 進行設定。", "note_about_website_reference": "更多資訊請參閱", "reconfigure": "重新設定", "rename_dialog": "編輯設定實體名稱", @@ -2962,6 +2962,7 @@ "common": { "add_node": "新增節點", "close": "關閉", + "heal_network": "修復網路", "home_id": "家庭 ID", "network": "網路", "node_id": "節點 ID", @@ -2988,6 +2989,18 @@ "node_status": "節點狀態", "zwave_info": "Z-Wave 資訊" }, + "heal_network": { + "healing_cancelled": "網路修復已取消。", + "healing_complete": "網路修復已完成。", + "healing_failed": "修復失敗。日誌中可能包含其他相關資訊。", + "in_progress": "網路修復進行中,可能需要一點時間。", + "introduction": "於 Z-Wave 網路開始網路修復。網路修復將導致所有裝置重新計算其連回控制器的路徑,檢如近期有移動裝置或控制器的話,建議執行此動作。", + "run_in_background": "可以關閉此對話框、網路修復將於背景繼續執行。", + "start_heal": "開始修復", + "stop_heal": "停止修復", + "title": "修復 Z-Wave 網路", + "traffic_warning": "修復過程將對 Z-Wave 網路產生大量流量,過程中可能會導致裝置回應減緩(或失去回應)。" + }, "logs": { "log_level": "日誌記錄等級", "log_level_changed": "日誌等級變更為:{level}", From 36c20e43485312c2f81b81804a5a1a21d73a44c9 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 1 Jul 2021 07:54:17 +0200 Subject: [PATCH 03/14] Limit height of charts to 400px (#9487) --- src/components/chart/ha-chart-base.ts | 5 ++++- src/components/chart/state-history-chart-line.ts | 2 +- src/components/chart/state-history-chart-timeline.ts | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/chart/ha-chart-base.ts b/src/components/chart/ha-chart-base.ts index 142f8252f7..62fc29352b 100644 --- a/src/components/chart/ha-chart-base.ts +++ b/src/components/chart/ha-chart-base.ts @@ -20,7 +20,7 @@ interface Tooltip extends TooltipModel { export default class HaChartBase extends LitElement { public chart?: Chart; - @property() + @property({ attribute: "chart-type", reflect: true }) public chartType: ChartType = "line"; @property({ attribute: false }) @@ -228,6 +228,9 @@ export default class HaChartBase extends LitElement { height: 0; transition: height 300ms cubic-bezier(0.4, 0, 0.2, 1); } + :host(:not([chart-type="timeline"])) canvas { + max-height: 400px; + } .chartLegend { text-align: center; } diff --git a/src/components/chart/state-history-chart-line.ts b/src/components/chart/state-history-chart-line.ts index 24733ce3f4..9b0a704f86 100644 --- a/src/components/chart/state-history-chart-line.ts +++ b/src/components/chart/state-history-chart-line.ts @@ -30,7 +30,7 @@ class StateHistoryChartLine extends LitElement { `; } diff --git a/src/components/chart/state-history-chart-timeline.ts b/src/components/chart/state-history-chart-timeline.ts index ee2fc7d007..fe6873ed0b 100644 --- a/src/components/chart/state-history-chart-timeline.ts +++ b/src/components/chart/state-history-chart-timeline.ts @@ -98,7 +98,7 @@ export class StateHistoryChartTimeline extends LitElement { `; } From dc781da93a271d4040df61281d8524b50e099a0d Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 1 Jul 2021 09:27:02 +0200 Subject: [PATCH 04/14] Use ES5 build for Supervisor on Safari 12 and below (#9485) --- build-scripts/gulp/entry-html.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/build-scripts/gulp/entry-html.js b/build-scripts/gulp/entry-html.js index eeb1b57ecc..c98b6d6acb 100644 --- a/build-scripts/gulp/entry-html.js +++ b/build-scripts/gulp/entry-html.js @@ -302,15 +302,23 @@ gulp.task("gen-index-hassio-prod", async () => { function writeHassioEntrypoint(latestEntrypoint, es5Entrypoint) { fs.mkdirSync(paths.hassio_output_root, { recursive: true }); + // Safari 12 and below does not have a compliant ES2015 implementation of template literals, so we ship ES5 fs.writeFileSync( path.resolve(paths.hassio_output_root, "entrypoint.js"), ` -try { - new Function("import('${latestEntrypoint}')")(); -} catch (err) { +function loadES5() { var el = document.createElement('script'); el.src = '${es5Entrypoint}'; document.body.appendChild(el); +} +if (/.*Version\/(?:11|12)(?:\.\d+)*.*Safari\//.test(navigator.userAgent)) { + loadES5(); +} else { + try { + new Function("import('${latestEntrypoint}')")(); + } catch (err) { + loadES5(); + } } `, { encoding: "utf-8" } From 30d6c6890871fc06941b3a6f9df84d4e340db440 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Thu, 1 Jul 2021 11:34:22 +0200 Subject: [PATCH 05/14] Fix writing supervisor entrypoint (#9489) --- build-scripts/gulp/entry-html.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-scripts/gulp/entry-html.js b/build-scripts/gulp/entry-html.js index c98b6d6acb..8627d61713 100644 --- a/build-scripts/gulp/entry-html.js +++ b/build-scripts/gulp/entry-html.js @@ -311,7 +311,7 @@ function loadES5() { el.src = '${es5Entrypoint}'; document.body.appendChild(el); } -if (/.*Version\/(?:11|12)(?:\.\d+)*.*Safari\//.test(navigator.userAgent)) { +if (/.*Version\\/(?:11|12)(?:\\.\\d+)*.*Safari\\//.test(navigator.userAgent)) { loadES5(); } else { try { From 1f377d43c59253bb50848b51440ded70c01bd434 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 2 Jul 2021 00:47:14 +0000 Subject: [PATCH 06/14] Translation update --- translations/frontend/ja.json | 17 ++++++++++++++++- translations/frontend/pl.json | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/translations/frontend/ja.json b/translations/frontend/ja.json index a1c7643e4e..ce80408975 100644 --- a/translations/frontend/ja.json +++ b/translations/frontend/ja.json @@ -865,8 +865,10 @@ "related-filter-menu": { "filter_by_area": "エリアで絞り込む", "filter_by_device": "デバイスで絞り込む", + "filter_by_entity": "エンティティで絞り込む", "filtered_by_area": "エリア: {area_name}", - "filtered_by_device": "デバイス: {device_name}" + "filtered_by_device": "デバイス: {device_name}", + "filtered_by_entity": "エンティティ: {entity_name}" }, "related-items": { "area": "エリア", @@ -2952,6 +2954,7 @@ "common": { "add_node": "ノードの追加", "close": "閉じる", + "heal_network": "ネットワークの修復", "home_id": "ホームID", "network": "ネットワーク", "node_id": "ノードID", @@ -2978,6 +2981,18 @@ "node_status": "ノードの状態", "zwave_info": "Z-Wave情報" }, + "heal_network": { + "healing_cancelled": "ネットワークの修復がキャンセルされました。", + "healing_complete": "ネットワークの修復が完了しました。", + "healing_failed": "修復に失敗しました。追加情報はログで利用できる場合があります。", + "in_progress": "ネットワークの修復が進行中です。これには少し時間がかかります。", + "introduction": "Z-Wave ネットワークでネットワーク修復を開始します。ネットワークの修復は、すべてのデバイスがコントローラに戻ってルートを再計算し、最近デバイスまたはコントローラを移動した場合に推奨されます。", + "run_in_background": "このダイアログを閉じると、ネットワークの修復がバックグラウンドで続行されます。", + "start_heal": "修復を開始する", + "stop_heal": "修復をやめる", + "title": "Z-Waveネットワークの修復", + "traffic_warning": "この修復プロセスでは、Z-Wave ネットワーク上に大量のトラフィックが生成されます。これにより、修復が進行中のデバイスの応答が遅くなる (またはまったく反応しない) ことがあります。" + }, "logs": { "log_level": "ログレベル", "log_level_changed": "ログレベルが変更されました。{level}に変更されました。", diff --git a/translations/frontend/pl.json b/translations/frontend/pl.json index 09348f01b7..2a0d966540 100644 --- a/translations/frontend/pl.json +++ b/translations/frontend/pl.json @@ -2319,7 +2319,7 @@ "none": "Nic jeszcze nie zostało skonfigurowane", "none_found": "Nie znaleziono integracji", "none_found_detail": "Dostosuj kryteria wyszukiwania.", - "note_about_integrations": "Jeszcze nie wszystkie integracje można skonfigurować za pomocą interfejsu użytkownika.", + "note_about_integrations": "Żadne integracje nie pasują do Twojego wyszukiwania. Integracja, którą chcesz skonfigurować, może być jeszcze niedostępna do skonfigurowania za pomocą interfejsu użytkownika.", "note_about_website_reference": "Więcej jest dostępnych na stronie integracji ", "reconfigure": "Zmień konfigurację", "rename_dialog": "Edytuj nazwę tego wpisu konfiguracji", From fcc89a67ba625537492a89278cdf68fc8f0f8ba7 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sat, 3 Jul 2021 00:46:50 +0000 Subject: [PATCH 07/14] Translation update --- translations/frontend/ar.json | 405 ++++++++++++++++++++++++++++++---- translations/frontend/es.json | 2 +- translations/frontend/nl.json | 19 +- 3 files changed, 379 insertions(+), 47 deletions(-) diff --git a/translations/frontend/ar.json b/translations/frontend/ar.json index 874b69ddb8..3d4644c24b 100644 --- a/translations/frontend/ar.json +++ b/translations/frontend/ar.json @@ -14,9 +14,9 @@ "config": "الإعدادات", "developer_tools": "ادوات المطورين", "history": "التاريخ", - "logbook": "سجل", + "logbook": "السجل", "mailbox": "البريد", - "map": "خريطة", + "map": "الخريطة", "media_browser": "متصفح الوسائط", "profile": "الملف الشخصي", "shopping_list": "قائمة التسوق", @@ -26,11 +26,16 @@ "climate": { "fan_mode": { "auto": "تلقائي", - "off": "إيقاف", - "on": "تشغيل" + "off": "متوقف", + "on": "مشغل" }, "hvac_action": { - "drying": "تجفيف" + "cooling": "تبريد", + "drying": "تجفيف", + "fan": "مروحة", + "heating": "تدفئة", + "idle": "خامل", + "off": "متوقف" } }, "humidifier": { @@ -63,7 +68,7 @@ }, "device_tracker": { "home": "في المنزل", - "not_home": "خارج المنزل" + "not_home": "بالخارج" }, "person": { "home": "في المنزل", @@ -79,8 +84,19 @@ } }, "supervisor": { + "addon": { + "dashboard": { + "capability": { + "full_access": { + "description": "تُمنح هذه الوظيفة الإضافية حق الوصول الكامل إلى أجهزة نظامك ، بناءً على طلب مؤلف الوظيفة الإضافية. الوصول مشابه للوضع المميز في Docker. نظرًا لأن هذا يفتح مخاطر أمنية محتملة ، فإن هذه الميزة تؤثر سلبًا على درجة أمان الوظيفة الإضافية. \n\n لا يتم منح هذا المستوى من الوصول تلقائيًا ويجب تأكيده بواسطتك. للقيام بذلك ، تحتاج إلى تعطيل وضع الحماية على الوظيفة الإضافية يدويًا. قم بتعطيل وضع الحماية فقط إذا كنت تعلم وتحتاج وتثق بمصدر هذه الوظيفة الإضافية." + } + }, + "open_web_ui": "افتح واجهة مستخدم الويب", + "visit_addon_page": "قم بزيارة صفحة {name} لمزيد من التفاصيل" + } + }, "common": { - "close": "إغلق" + "close": "إغلاق" }, "dialog": { "network": { @@ -90,6 +106,7 @@ "failed_to_change": "فشل تغيير إعدادات الشبكة", "gateway": "عنوان البوابة", "ip_netmask": "عنوان IP / قناع الشبكة", + "open": "فتح", "static": "ثابتة", "unsaved": "لديك تغييرات غير محفوظة ، ستضيع هذه التغييرات إذا قمت بتغيير علامات التبويب ، هل تريد المتابعة؟", "warning": "إذا كنت تقوم بتغيير عناوين Wi-Fi أو IP أو البوابة ، فقد تفقد الاتصال!" @@ -130,7 +147,9 @@ }, "system": { "supervisor": { - "search": "بحث" + "search": "بحث", + "share_diagonstics_description": "هل تريد مشاركة تقارير الأعطال والمعلومات التشخيصية تلقائيا عندما يواجه Supervisor أخطاء غير متوقعة؟ {line_break} سيسمح لنا هذا بإصلاح المشاكل ، والمعلومات متاحة فقط لفريق Home Assistant Core ولن يتم مشاركتها مع الآخرين. {line_break} لا تتضمن البيانات أي معلومات خاصة/حساسة ويمكنك تعطيلها في الإعدادات في أي وقت تريده.", + "share_diagonstics_title": "ساعد في تحسين Home Assistant" } } }, @@ -157,15 +176,23 @@ "not_available": "الصورة غير متاحة" }, "climate": { + "aux_heat": "حرارة Aux", "away_mode": "خارج المنزل", "currently": "حاليا", "fan_mode": "وضع المروحة", "on_off": "إيقاف/تشغيل", + "operation": "الوضع", + "swing_mode": "وضع الموجه", "target_humidity": "Doelluchtvochtigheid", "target_temperature": "درجة الحرارة المستهدفة" }, + "cover": { + "position": "موضع", + "tilt_position": "وضع الإمالة" + }, "fan": { "direction": "Richting", + "oscillate": "تذبذب", "preset_mode": "وضع الضبط المسبق", "speed": "Snelheid" }, @@ -177,9 +204,11 @@ "light": { "brightness": "Helderheid", "color_temperature": "Kleurtemperatuur", + "effect": "مؤثرات", "white_value": "قيمة البياض" }, "lock": { + "code": "كود", "lock": "قفل", "unlock": "فتح" }, @@ -189,7 +218,7 @@ "text_to_speak": "النص للتحدث" }, "persistent_notification": { - "dismiss": "رفض" + "dismiss": "إخفاء" }, "scene": { "activate": "تفعيل" @@ -226,6 +255,7 @@ "visibility": "الرؤية", "wind_speed": "سرعة الرياح" }, + "day": "يوم", "forecast": "التوقعات", "high": "عالي", "low": "منخفض" @@ -235,6 +265,7 @@ "and": "و", "back": "عودة", "cancel": "إلغاء", + "close": "إغلاق", "delete": "حذف", "error_required": "مطلوب", "loading": "جار التحميل", @@ -279,7 +310,7 @@ }, "entity": { "entity-picker": { - "entity": "الجهاز" + "entity": "كيان" } }, "history_charts": { @@ -288,6 +319,11 @@ "no_history_found": "لم يتم العثور على سجل الحالات." }, "logbook": { + "messages": { + "is_opening": "يفتح", + "was_closed": "كان مغلقاً", + "was_opened": "كان مفتوحاً" + }, "show_trace": "عرض التتبع" }, "related-items": { @@ -295,10 +331,24 @@ }, "relative_time": { "duration": { + "day": "{count} {count, plural,\none {يوم}\nother {أيام}\n}", "hour": "{count} {count, plural,\none {ساعة}\nother {ساعات}\n}", - "minute": "{count} {count, plural,\n one {دقيقة}\n other {دقائق}\n}" + "minute": "{count} {count, plural,\n one {دقيقة}\n other {دقائق}\n}", + "second": "{count} {count, plural,\none {ثانية}\nother {ثواني}\n}", + "week": "{count} {count, plural,\none {أسبوع}\nother {أسابيع}\n}" }, - "never": "Nooit" + "future_duration": { + "day": "خلال {count} {count, plural,\n one {يوم}\n other {ايام}\n}", + "minute": "خلال {count} {count, plural,\n one {دقيقة}\n other {دقيقة}\n}" + }, + "never": "Nooit", + "past_duration": { + "day": "قبل {count} {count, plural,\n one {يوم}\n other {ايام}\n}", + "hour": "قبل {count} {count, plural,\n one {ساعة}\n other {ساعات}\n}", + "minute": "قبل {count} {count, plural,\n one {دقيقة}\n other {دقيقة}\n}", + "second": "قبل {count} {count, plural,\n one {ثانية}\n other {ثواني}\n}", + "week": "قبل {count} {count, plural,\n one {اسبوع}\n other {اسابيع}\n}" + } }, "service-picker": { "service": "خدمة" @@ -320,6 +370,7 @@ "delete": "حذف", "follow_device_area": "اتبع منطقة الجهاز", "note": "ملاحظة: قد لا يعمل مع كافة التكاملات بعد.", + "open_device_settings": "فتح إعدادات الجهاز", "update": "تحديث" }, "related": "ذات صلة" @@ -351,9 +402,24 @@ "platform_not_loaded": "لم يتم تحميل تكامل {platform} . يرجى إضافته إلى التكوين الخاص بك إما عن طريق إضافة ':default_config' أو \"{platform}\"." }, "more_info_control": { + "cover": { + "close_cover": "إغلاق الغطاء", + "close_tile_cover": "إغلاق إمالة الغطاء", + "open_cover": "غطاء مفتوح", + "open_tilt_cover": "فتح إمالة الغطاء" + }, + "details": "التفاصيل", + "script": { + "last_action": "الإجراء الأخير" + }, "sun": { + "elevation": "ارتفاع", + "rising": "ارتفاع", "setting": "ضبط" }, + "updater": { + "title": "تعليمات التحديث" + }, "vacuum": { "fan_speed": "سرعة المروحة", "pause": "إيقاف مؤقت", @@ -394,11 +460,14 @@ }, "zha_reconfigure_device": { "button_hide": "أخف التفاصيل", - "button_show": "إظهار التفاصيل" + "button_show": "إظهار التفاصيل", + "run_in_background": "يمكنك إغلاق هذا الحوار وستستمر إعادة التكوين في الخلفية." } }, "duration": { "day": "{count} {count, plural,\none {يوم}\nother {أيام}\n}", + "hour": "{count} {count, plural,\none {ساعة}\nother {ساعات}\n}", + "minute": "{count} {count, plural,\n one {دقيقة}\n other {دقائق}\n}", "second": "{count} {count, plural,\none {ثانية}\nother {ثواني}\n}", "week": "{count} {count, plural,\none {أسبوع}\nother {أسابيع}\n}" }, @@ -415,22 +484,25 @@ }, "login-form": { "log_in": "تسجيل الدخول", - "password": "كلمة السر", + "password": "كلمة المرور", "remember": "تذكر" }, "notification_drawer": { "click_to_configure": "انقر هنا لتعديل {entity}", + "close": "إغلاق", "empty": "لا إشعارات", "title": "إشعارات" }, "notification_toast": { "connection_lost": "انقطع الاتصال. جارٍ إعادة الاتصال ...", + "service_call_failed": "فشل الاتصال بخدمة {service} .", "started": "Home Assistant بدأ!", "starting": "يبدأ برنامج Home Assistant حاليا ، ولن يكون كل شيء متاحًا حتى الانتهاء." }, "panel": { "config": { "areas": { + "caption": "المناطق", "data_table": { "area": "المنطقة", "devices": "الأجهزة", @@ -440,15 +512,21 @@ "confirmation_text": "سيتم إلغاء تعيين جميع الأجهزة في هذه المنطقة.", "confirmation_title": "هل أنت متأكد أنك تريد حذف هذه المنطقة؟" }, + "description": "تجميع الأجهزة والكيانات في مناطق", "editor": { "area_id": "المنطقة", + "create": "إضافة", + "default_name": "منطقة جديدة", + "delete": "حذف", "linked_entities_caption": "الكيانات", "name": "اسم", "name_required": "الاسم مطلوب", "no_linked_entities": "لا توجد كيانات مرتبطة بهذه المنطقة.", - "unknown_error": "خطأ غير معروف" + "unknown_error": "خطأ غير معروف", + "update": "تحديث" }, "picker": { + "header": "المناطق", "integrations_page": "صفحة التكاملات", "introduction": "يتم استخدام المناطق لتنظيم أمكنة الأجهزة. سيتم استخدام هذه المعلومات في جميع أنحاء Home Assistant لمساعدتك في تنظيم الواجهة والأذونات و التكاملات مع الأنظمة الأخرى.", "introduction2": "لوضع الأجهزة في منطقة ما، إستخدم الرابط أدناه للإنتقال إلى صفحة التكاملات ثم انقر فوق تكامل مكوّن للوصول إلى بطاقات الجهاز." @@ -456,7 +534,7 @@ }, "automation": { "caption": "الأتمتة", - "description": "إنشاء وتحرير التشغيل الألي", + "description": "إنشاء قاعدة سلوكية مخصصة لمنزلك.", "editor": { "actions": { "add": "أضف إجراء", @@ -543,7 +621,13 @@ "before": "قبل", "label": "وقت", "weekdays": { - "mon": "الاثنين" + "fri": "الجمعة", + "mon": "الاثنين", + "sat": "السبت", + "sun": "الأحد", + "thu": "الخميس", + "tue": "الثلاثاء", + "wed": "الأربعاء" } }, "zone": { @@ -554,9 +638,9 @@ }, "unsupported_condition": "شرط غير مدعوم: {condition}" }, - "default_name": "متحكم آلي جديد", + "default_name": "أتمتة جديدة", "enable_disable": "تمكين/تعطيل التنفيذ التلقائي", - "introduction": "استخدم المتحكمات الآلية لتجعل منزلك ينبض بالحياة", + "introduction": "استخدم الأتمتة لإضفاء الحيوية على منزلك.", "max": { "queued": "طول قائمة الإنتظار" }, @@ -577,7 +661,7 @@ "delete_confirm": "هل تريد الحذف فعلا؟", "duplicate": "تكرار", "header": "المشغلات", - "introduction": "المشغلات هي ما يبدأ تشغيل قاعدة المتحكم الآلي. من الممكن تحديد مشغلات متعددة لنفس القاعدة. بمجرد بدء المشغل ، سيقوم Home Assistant بالتحقق من الشروط ، إن وجدت ، واستدعاء الإجراء. \n\n [مزيد من المعلومات حول المشغلات.] (https://home-assistant.io/docs/automation/trigger/)", + "introduction": "المشغلات هي التي تبدأ معالجةقاعدة الأتمتة. من الممكن تحديد عدة مشغلات لنفس القاعدة. بمجرد بدء المشغل ، سيقوم Home Assistant بالتحقق من صحة الشروط ، إن وجدت ، واستدعاء الإجراء.", "learn_more": "معرفة المزيد عن المشغلات", "name": "المشغل", "type_select": "نوع المشغل", @@ -591,6 +675,14 @@ "event_type": "نوع الحدث", "label": "الحدث" }, + "geo_location": { + "enter": "يدخل", + "event": "حدث:", + "label": "الموقع الجغرافي", + "leave": "غادر", + "source": "المصدر", + "zone": "منطقة" + }, "homeassistant": { "event": "الحدث:", "label": "Home Assistant", @@ -627,7 +719,8 @@ }, "time_pattern": { "hours": "ساعات", - "minutes": "الدقائق", + "label": "نمط الوقت", + "minutes": "دقائق", "seconds": "ثواني" }, "time": { @@ -648,15 +741,15 @@ "unsaved_confirm": "لديك تغييرات غير محفوظة. هل أنت متأكد من أنك تريد أن تغادر ؟" }, "picker": { - "add_automation": "أضف متحكم آلي", - "header": "محرر المتحكم الآلي", + "add_automation": "أضف أتمتة", + "header": "محرر الأتمتة", "headers": { "name": "الاسم" }, - "introduction": "محرر المتحكم الآلي يسمح لك بإنشاء وتحرير المتحكمات الآلية. يرجى قراءة [الإرشادات] (https://home-assistant.io/docs/automation/editor/) للتأكد من إعدادك Home Assistant بشكل صحيح.", + "introduction": "يسمح لك محرر الأتمتة بإنشاء وتحرير الأتمتة. يرجى اتباع الرابط أدناه لقراءة التعليمات للتأكد من تهيئة Home Assistant بشكل صحيح.", "learn_more": "معرفة المزيد عن التحكم الآلي", - "no_automations": "لم تعثر على أي متحكم آلي قابل للتعديل", - "pick_automation": "أختر متحكم آلي للتعديل" + "no_automations": "لم نتمكن من العثور على أي أتمتة", + "pick_automation": "اختر الأتمتة لتحريرها" } }, "cloud": { @@ -685,7 +778,11 @@ }, "description_login": "تم تسجيل الدخول كـ {email}", "description_not_login": "لم يتم تسجيل الدخول", + "dialog_certificate": { + "close": "إغلاق" + }, "dialog_cloudhook": { + "close": "إغلاق", "info_disable_webhook": "إذا كنت لم تعد ترغب في استخدام هذا الwebhook ، يمكنك" }, "register": { @@ -695,7 +792,7 @@ }, "core": { "caption": "عام", - "description": "قم بتغيير التكوينات العامة لـ Home Assistant", + "description": "نظام الوحدة والموقع والمنطقة الزمنية والمتغيرات العامة الأخرى", "section": { "core": { "core_config": { @@ -703,18 +800,20 @@ "internal_url": "العنوان المحلي" }, "header": "التحكم بالإعدادات و الخادم", - "introduction": "تغيير الإعدادات يعتبر عملية مزرية. نحن نعلم ذلك . لذا، سيحاول هذا القسم جعل حياتك أكثر سهولة." + "introduction": "تغيير الإعدادات تعتبر عملية مرهقة. نحن نعلم ذلك . هذا القسم سيحاول جعلها اسهل قليلاً." } } }, "customize": { - "caption": "التخصيص", + "caption": "التخصيصات", "description": "تخصيص الكيانات الخاصة بك", "picker": { + "header": "التخصيصات", "introduction": "تعديل السمات لكل كيان. سيتم تفعيل التخصيصات المضافة / المعدلة على الفور. ستسري التخصيصات التي تمت إزالتها عندما يتم تحديث الكيان." } }, "devices": { + "add_prompt": "لم تتم إضافة {name} باستخدام هذا الجهاز حتى الآن. يمكنك إضافة واحدة عن طريق النقر فوق الزر + أعلاه.", "cant_edit": "يمكنك فقط تحرير العناصر التي تم إنشاؤها في واجهة المستخدم.", "confirm_delete": "هل أنت متأكد أنك تريد حذف هذا الجهاز؟", "data_table": { @@ -731,7 +830,10 @@ "no_devices": "لا توجد أجهزة" }, "entities": { + "caption": "الكيانات", + "description": "إدارة الكيانات المعروفة", "picker": { + "header": "الكيانات", "headers": { "integration": "تكامل" }, @@ -854,7 +956,8 @@ "introduction": "يمكنك هنا برمجة المكونات الخاصة بك و إعداد نظام Home Assistant. ليس كل شيء متاح للبرمجة من خلال واجهة المستخدم حتى الآن، ولكننا نعمل على ذلك.", "logs": { "caption": "السجلات", - "description": "عرض سجلات Home Assistant" + "description": "عرض سجلات Home Assistant", + "details": "تفاصيل السجل ({level})" }, "lovelace": { "dashboards": { @@ -921,16 +1024,42 @@ }, "ozw": { "network_status": { + "details": { + "driverallnodesqueried": "تم الاستعلام عن جميع العقد", + "driverallnodesqueriedsomedead": "تم الاستعلام عن جميع العقد. تم العثور على بعض العقد ميتة", + "driverawakenodesqueries": "تم الاستعلام عن جميع العقد المستيقظة", + "driverfailed": "فشل الاتصال بوحدة تحكم Z-Wave", + "driverready": "تهيئة وحدة تحكم Z-Wave", + "driverremoved": "تمت إزالة برنامج التشغيل", + "driverreset": "تم إعادة تعيين برنامج التشغيل", + "offline": "OZWDaemon غير متصل", + "ready": "جاهز للاتصال", + "started": "متصل بـ MQTT", + "starting": "الاتصال بـ MQTT", + "stopped": "توقف OpenZWave" + }, "unknown": "مجهول" + }, + "node_config": { + "wakeup_help": "يجب أن تكون العقد التي تعمل بالبطارية مستيقظة لتغيير تكوينها. إذا لم تكن العقدة مستيقظة، سيحاول OpenZWave تحديث تكوين العقدة في المرة التالية التي تستيقظ فيها، والتي قد تكون عدة ساعات (أو أيام) لاحقا. اتبع الخطوات التالية لتنبيه جهازك:" + }, + "node_query_stages": { + "instances": "الحصول على تفاصيل حول المثيلات أو القنوات التي يدعمها الجهاز" + }, + "node": { + "button": "تفاصيل العقدة" } }, "person": { "caption": "الأشخاص", "description": "إدارة الأشخاص الذين يتتبعهم Home Assistant.", "detail": { + "device_tracker_intro": "حدد الأجهزة التي تخص هذا الشخص.", "device_tracker_pick": "اختر جهاز لتتبع", + "device_tracker_picked": "جهاز التتبع", "link_integrations_page": "صفحة التكاملات", "link_presence_detection_integrations": "تكاملات الكشف عن التواجد", + "name": "الاسم", "name_error_msg": "الاسم مطلوب", "no_device_tracker_available_intro": "عندما يكون لديك أجهزة تشير إلى تواجد شخص ، ستتمكن من تعيينها إلى شخص هنا. يمكنك إضافة جهازك الأول عن طريق إضافة تكامل كشف التواجد من صفحة التكاملات." }, @@ -951,7 +1080,7 @@ }, "script": { "caption": "السكريبت", - "description": "إنشاء و تحرير السكريبت", + "description": "تنفيذ سلسلة من الإجراءات.", "editor": { "alias": "الاسم", "icon": "أيقونة", @@ -976,24 +1105,38 @@ } }, "server_control": { + "caption": "عناصر التحكم بالخادم", + "description": "أعد تشغيل خادم Home Assistant وأوقفه", "section": { "reloading": { "automation": "إعادة تحميل الأتمتة", "core": "إعادة تحميل الموقع والتخصيصات", + "group": "خدمات المجموعات وكيانات المجموعة والاشعارات", + "heading": "إعادة تحميل تكوين YAML", "input_boolean": "إعادة تحميل مدخلات منطقية", "input_datetime": "إعادة تحميل أوقات تاريخ الإدخال", "input_number": "إعادة تحميل أرقام الإدخال", "input_select": "إعادة تحميل تحديدات الإدخال", "input_text": "إعادة تحميل النصوص المدخلة", + "introduction": "يمكن إعادة تحميل بعض أجزاء Home Assistant دون الحاجة إلى إعادة التشغيل. سيؤدي الضغط على إعادة التحميل إلى تفريغ تكوين YAML الحالي وتحميل التكوين الجديد.", "person": "إعادة تحميل الأشخاص", + "script": "السكريبتات", "zone": "إعادة تحميل المناطق" }, "server_management": { "confirm_restart": "هل تريد بالتأكيد اعادة تشغيل Home Assistant؟", - "confirm_stop": "هل تريد بالتأكيد إيقاف Home Assistant؟" + "confirm_stop": "هل تريد بالتأكيد إيقاف Home Assistant؟", + "heading": "إدارة الخادم", + "introduction": "تحكم في خادم Home Assistant ... من Home Assistant.", + "restart": "إعادة التشغيل", + "stop": "ايقاف التشغيل" }, "validation": { - "introduction": "تحقق من صلاحية التكوين الخاص بك إذا قمت مؤخرًا بإجراء بعض التغييرات وتريد التأكد من صلاحية جميعها" + "check_config": "تحقق من التكوين", + "heading": "التحقق من صحة التكوين", + "introduction": "تحقق من صلاحية التكوين الخاص بك إذا قمت مؤخرًا بإجراء بعض التغييرات وتريد التأكد من صلاحية جميعها", + "invalid": "التكوين غير صالح", + "valid": "التكوين صالح!" } } }, @@ -1034,6 +1177,10 @@ "clusters": { "header": "عناقيد" }, + "groups": { + "create_group_details": "أدخل التفاصيل المطلوبة لإنشاء مجموعة zigbee جديدة", + "group_details": "فيما يلي جميع التفاصيل الخاصة بمجموعة Zigbee المحددة." + }, "network": { "caption": "الشبكة" } @@ -1059,17 +1206,31 @@ "cancel_inclusion": "إلغاء التضمين", "controller_in_inclusion_mode": "أصبحت وحدة التحكم Z-Wave الآن في وضع التضمين.", "follow_device_instructions": "اتبع الإرشادات المرفقة مع جهازك لبدء الاقتران على الجهاز.", + "secure_inclusion_warning": "تتطلب الأجهزة الآمنة نطاقًا تردديًا إضافيًا ؛ يمكن أن يؤدي وجود عدد كبير جدًا من الأجهزة الآمنة إلى إبطاء شبكة Z-Wave. نوصي باستخدام التضمين الآمن فقط للأجهزة التي تتطلب ذلك ، مثل الأقفال أو فتاحات أبواب المرآب.", "view_device": "عرض الجهاز" }, + "common": { + "close": "إغلاق" + }, "dashboard": { "dump_not_ready_confirm": "تحميل" }, + "heal_network": { + "healing_cancelled": "تم إلغاء معالجة الشبكة.", + "healing_complete": "اكتملت معالجة الشبكة.", + "healing_failed": "المعالجة فشلت. قد تتوفر معلومات إضافية في السجلات.", + "run_in_background": "يمكنك إغلاق مربع الحوار هذا وستستمر عملية معالجة الشبكة في الخلفية.", + "stop_heal": "أوقف المعالجة." + }, "logs": { "log_level": "مستوى التسجيل في السجل" }, "navigation": { "logs": "السجلات" }, + "reinterview_node": { + "run_in_background": "يمكنك إغلاق مربع الحوار هذا وستستمر المقابلة في الخلفية." + }, "remove_node": { "cancel_exclusion": "إلغاء الاستبعاد", "start_exclusion": "بدء الاستبعاد" @@ -1077,15 +1238,23 @@ }, "zwave": { "button": "كوِن", + "common": { + "unknown": "غير معروف", + "wakeup_interval": "فترة الاستيقاظ" + }, "description": "إدارة شبكة Z-Wave", "migration": { "ozw": { - "header": "الانتقال الى OpenZWave" + "header": "الانتقال الى OpenZWave", + "introduction": "سيساعدك هذا المعالج على الانتقال تكامل Z-Wave القديم إلى تكامل OpenZWave الموجود حاليا في الإصدار التجريبي." } }, "node_config": { + "config_parameter": "معلمة التكوين", + "header": "خيارات تكوين العقدة", "seconds": "ثواني", - "set_config_parameter": "تعيين معلمة التكوين" + "set_config_parameter": "تعيين معلمة التكوين", + "set_wakeup": "تعيين فترة الاستيقاظ" }, "node_management": { "add_to_group": "إضافة إلى المجموعة", @@ -1125,6 +1294,9 @@ "stop_network": "إيقاف الشبكة", "test_network": "اختبار الشبكة", "test_node": "اختبار عقدة" + }, + "values": { + "header": "قيم العقدة" } } }, @@ -1178,7 +1350,11 @@ }, "empty_state": { "go_to_integrations_page": "انتقل إلى صفحة التكاملات.", - "no_devices": "تسمح لك هذه الصفحة بالتحكم في أجهزتك ، ولكن يبدو أنك لم تعد أي أجهزة حتى الآن. توجه إلى صفحة التكاملات للبدء." + "no_devices": "تسمح لك هذه الصفحة بالتحكم في أجهزتك ، ولكن يبدو أنك لم تعد أي أجهزة حتى الآن. توجه إلى صفحة التكاملات للبدء.", + "title": "مرحبًا بك في بيتك" + }, + "picture-elements": { + "url": "فتح النافذة لـ {url_path}" }, "safe-mode": { "description": "واجه Home Assistant مشكلة أثناء تحميل التكوينات الخاصة بك ويتم تشغيله الآن في الوضع الآمن. أنظر إلى سجل الأخطاء لمعرفة الخطأ." @@ -1187,6 +1363,9 @@ "description": "Home Assistant يبدأ، يرجى الانتظار..." } }, + "changed_toast": { + "message": "تم تحديث تكوين واجهة المستخدم Lovelace للوحة المعلومات هذه. هل تريد التحديث لمشاهدة التغييرات؟" + }, "editor": { "card": { "alarm-panel": { @@ -1196,6 +1375,13 @@ "description": "تتيح لك بطاقة الأزرار إضافة أزرار لأداء المهام.", "name": "زر" }, + "calendar": { + "description": "تعرض بطاقة التقويم تقويما يتضمن اليوم والأسبوع وقائمة العرض", + "views": { + "dayGridDay": "يوم", + "dayGridMonth": "شهر" + } + }, "conditional": { "card": "بطاقة", "change_type": "نوع التغيير", @@ -1207,7 +1393,8 @@ "state_not_equal": "الحالة لا تساوي" }, "entities": { - "description": "بطاقة الكيانات هي أكثر أنواع البطاقات شيوعًا. تقوم بتجميع العناصر معًا في قوائم." + "description": "بطاقة الكيانات هي أكثر أنواع البطاقات شيوعًا. تقوم بتجميع العناصر معًا في قوائم.", + "edit_special_row": "اعرض تفاصيل هذا الصف بالنقر على زر التعديل" }, "entity-filter": { "description": "تتيح لك بطاقة تصفية الكيانات تحديد قائمة بالكيانات التي تريد تتبعها فقط عندما تكون في حالة معينة." @@ -1321,7 +1508,9 @@ }, "menu": { "manage_dashboards": "ادارة لوحة المعلومات", - "manage_resources": "ادارة الموارد" + "manage_resources": "ادارة الموارد", + "open": "فتح قائمة واجهة المستخدم Lovelace", + "raw_editor": "محرر التكوين الخام" }, "raw_editor": { "header": "تعديل", @@ -1343,6 +1532,8 @@ } }, "menu": { + "close": "إغلاق", + "help": "مساعدة", "reload_resources": "إعادة تحميل الموارد" }, "reload_lovelace": "إعادة تحميل واجهة المستخدم", @@ -1361,6 +1552,7 @@ }, "warning": { "attribute_not_found": "السمة {attribute} غير متاحة في: {entity}", + "entity_non_numeric": "الكيان غير رقمي: {entity}", "entity_not_found": "الجهاز غير متوفر: {entity}", "entity_unavailable": "العنصر غير متوفر", "starting": "Home Assistant يبدأ، قد لا يكون كل شيء متاح حتى الآن" @@ -1368,23 +1560,83 @@ }, "mailbox": { "delete_button": "حذف", - "delete_prompt": "هل تريد حذف هذه الرسالة؟", + "delete_prompt": "حذف هذه الرسالة؟", "empty": "ليس لديك رسائل", "playback_title": "تشغيل الرسالة" }, "page-authorize": { "abort_intro": "إلغاء الدخول", + "authorizing_client": "أنت على وشك منح {clientId} حق الوصول إلى مثيل Home Assistant الخاص بك.", "form": { "error": "خطأ: {error}", "next": "التالى", "providers": { "command_line": { + "abort": { + "login_expired": "انتهت مدة الجلسة، يرجى تسجيل الدخول مرة أخرى." + }, + "error": { + "invalid_auth": "خطأ في اسم المستخدم أو كلمة المرور" + }, "step": { "init": { "data": { "password": "كلمة السر", "username": "اسم المستخدم" } + }, + "mfa": { + "data": { + "code": "رمز المصادقة الثنائية" + }, + "description": "افتح **{mfa_module_name}** على جهازك لعرض رمز المصادقة الثنائي والتحقق من هويتك:" + } + } + }, + "homeassistant": { + "abort": { + "login_expired": "انتهت مدة الجلسة، يرجى تسجيل الدخول مرة أخرى." + }, + "error": { + "invalid_auth": "خطأ في اسم المستخدم أو كلمة المرور", + "invalid_code": "رمز المصادقة غير صالح" + }, + "step": { + "init": { + "data": { + "password": "كلمة المرور", + "username": "اسم المستخدم" + } + }, + "mfa": { + "data": { + "code": "رمز المصادقة الثنائية" + }, + "description": "افتح **{mfa_module_name}** على جهازك لعرض رمز المصادقة الثنائي والتحقق من هويتك:" + } + } + }, + "legacy_api_password": { + "abort": { + "login_expired": "انتهت مدة الجلسة، يرجى تسجيل الدخول مرة أخرى.", + "no_api_password_set": "لم يتم تكوين كلمة مرور API." + }, + "error": { + "invalid_auth": "كلمة مرور API غير صالحة", + "invalid_code": "رمز المصادقة غير صالح" + }, + "step": { + "init": { + "data": { + "password": "كلمة مرور API" + }, + "description": "الرجاء إدخال كلمة مرور API في تكوين HTTP:" + }, + "mfa": { + "data": { + "code": "رمز المصادقة الثنائية" + }, + "description": "افتح **{mfa_module_name}** على جهازك لعرض رمز المصادقة الثنائي والتحقق من هويتك:" } } }, @@ -1394,26 +1646,72 @@ }, "step": { "init": { + "data": { + "user": "مستخدم" + }, "description": "يرجى تحديد المستخدم الذي تريد تسجيل الدخول باسمه:" } } } }, "start_over": "البدء من جديد", + "unknown_error": "حدث خطأ ما", "working": "الرجاء الانتظار" }, - "initializing": "جار التهيئة" + "initializing": "جار التهيئة", + "logging_in_with": "تسجيل الدخول باستخدام **{authProviderName}**.", + "pick_auth_provider": "أو سجل الدخول باستخدام" }, "page-demo": { + "cards": { + "demo": { + "demo_by": "بواسطة {name}", + "introduction": "مرحبا بك في بيتك! لقد وصلت إلى العرض التوضيحي لـ Home Assistant حيث نعرض أفضل واجهات المستخدم التي أنشأها مجتمعنا.", + "learn_more": "تعرف على المزيد حول Home Assistant", + "next_demo": "العرض التوضيحي التالي" + } + }, "config": { "arsaboo": { "labels": { - "air": "هواء" + "activity": "الانشطة", + "air": "هواء", + "commute_home": "انتقل إلى المنزل", + "entertainment": "ترفيه", + "hdmi_input": "مدخل HDMI", + "hdmi_switcher": "محول HDMI", + "information": "معلومات", + "lights": "أضواء", + "morning_commute": "التنقل الصباحي", + "total_tv_time": "إجمالي وقت التلفزيون", + "volume": "حجم الصوت" + }, + "names": { + "family_room": "غرفة العائلة", + "hallway": "الردهه", + "kitchen": "المطبخ", + "left": "يسار", + "master_bedroom": "غرفة النوم الرئيسية", + "mirror": "مرآة", + "patio": "الفناء", + "right": "يمين", + "upstairs": "الطابق العلوي" + }, + "unit": { + "minutes_abbr": "د" } } } }, "page-onboarding": { + "core-config": { + "button_detect": "كشف", + "finish": "التالى", + "intro": "مرحبًا {name} ، مرحبًا بك في Home Assistant. ماذا تريد تسمية منزلك؟", + "intro_location": "نود أن نعرف أين تعيش. ستساعد هذه المعلومات في عرض المعلومات وإعداد الأتمتة القائمة على الشمس. لا يتم ابدا مشاركة هذه البيانات خارج الشبكة الخاصة بك.", + "intro_location_detect": "يمكننا مساعدتك في ملء هذه المعلومات عن طريق تقديم طلب لمرة واحدة إلى خدمة خارجية.", + "location_name_default": "المنزل " + }, "integration": { "finish": "إنهاء", "intro": "يتم تمثيل الأجهزة والخدمات في Home Assistant كتكاملات. يمكنك إعدادها الآن ، أو القيام بذلك لاحقًا من شاشة التكوين.", @@ -1421,7 +1719,9 @@ }, "intro": "هل أنت مستعد لإيقاظ منزلك واستعادة خصوصيتك والانضمام إلى مجتمع عالمي من اللاعبين؟", "user": { + "create_account": "إنشاء حساب", "data": { + "name": "الاسم", "password": "كلمه السر", "password_confirm": "تأكيد كلمة السر", "username": "المستخدم" @@ -1429,7 +1729,9 @@ "error": { "password_not_match": "كلمة السر غير مطابقة", "required_fields": "املأ جميع الحقول المطلوبة" - } + }, + "intro": "لنبدأ بإنشاء حساب مستخدم.", + "required_field": "مطلوب" } }, "profile": { @@ -1450,12 +1752,22 @@ "dropdown_label": "لوحة المعلومات", "header": "لوحة المعلومات" }, + "force_narrow": { + "description": "سيؤدي ذلك إلى إخفاء الشريط الجانبي افتراضيا، على غرار تجربة الجوال.", + "header": "إخفاء الشريط الجانبي دوما" + }, "is_owner": "أنت مالك", "language": { "dropdown_label": "اللغة", "header": "اللغة", "link_promo": "ساعد في الترجمة" }, + "long_lived_access_tokens": { + "confirm_delete": "هل أنت متأكد أنك تريد حذف رمز الوصول لـ {name} ؟", + "description": "قم بإنشاء رموز وصول طويلة الأمد للسماح لنصوصك بالتفاعل مع مثيل Home Assistant الخاص بك. سيكون كل رمز مميزًا صالحًا لمدة 10 سنوات من تاريخ إنشائه. رموز الوصول طويلة العمر التالية نشطة حاليًا.", + "header": "رموز الوصول طويلة الأمد", + "learn_auth_requests": "تعرف على كيفية عمل طلبات مصادقة." + }, "mfa_setup": { "close": "إغلاق", "step_done": "تم التنصيب لـ {step}", @@ -1471,14 +1783,21 @@ }, "push_notifications": { "description": "إرسال الإشعارات إلى هذا الجهاز", + "error_load_platform": "كون notify.html5.", "error_use_https": "يتطلب تمكين SSL للواجهة الأمامية.", "header": "التنبيهات", "link_promo": "معرفة المزيد", "push_notifications": "التنبيهات" }, "refresh_tokens": { + "confirm_delete": "هل تريد بالتأكيد حذف رمز التحديث المميز لـ {name} ؟", + "created_at": "أنشئ في {date}", + "delete_failed": "فشل حذف الرمز المميز للتحديث.", + "description": "يمثل كل رمز تحديث مميز جلسة تسجيل دخول. ستتم إزالة رموز التحديث تلقائيًا عند النقر فوق تسجيل الخروج. رموز التحديث التالية نشطة حاليًا لحسابك.", + "header": "تحديث الرموز المميزة", "last_used": "آخر استخدام بتاريخ {date} من {location}", - "not_used": "لم يتم استخدامها ابدأ" + "not_used": "لم يتم استخدامها ابدأ", + "token_title": "تحديث الرمز لـ {clientId}" }, "suspend": { "description": "هل نغلق الاتصال بالخادم بعد ان يكون مخفي لمدة 5 دقائق؟", diff --git a/translations/frontend/es.json b/translations/frontend/es.json index 783403fbb1..1c956c6c24 100644 --- a/translations/frontend/es.json +++ b/translations/frontend/es.json @@ -2990,7 +2990,7 @@ "zwave_info": "Información de Z-Wave" }, "heal_network": { - "healing_cancelled": "Se ha cancelado la curación en red.", + "healing_cancelled": "Se ha cancelado la curación de la red.", "healing_complete": "La curación de la red se ha completado.", "healing_failed": "La curación falló. Puede haber información adicional disponible en los registros.", "in_progress": "La curación de la red está en curso. Esto llevará algún tiempo.", diff --git a/translations/frontend/nl.json b/translations/frontend/nl.json index ca8aa52bd0..32a4f5719a 100644 --- a/translations/frontend/nl.json +++ b/translations/frontend/nl.json @@ -942,9 +942,9 @@ }, "dialogs": { "config_entry_system_options": { - "enable_new_entities_description": "Of nieuw ontdekte apparaten voor {integratie} automatisch moeten worden toegevoegd.", + "enable_new_entities_description": "Of nieuw ontdekte apparaten voor {integration} automatisch moeten worden toegevoegd.", "enable_new_entities_label": "Voeg nieuwe entiteiten automatisch toe", - "enable_polling_description": "Of Home Assistant automatisch moet pollen voor updates voor {integration} entiteiten", + "enable_polling_description": "Of Home Assistant automatisch moet pollen voor {integration} entiteiten updates.", "enable_polling_label": "Schakel polling voor updates in.", "restart_home_assistant": "U moet Home Assistant opnieuw starten om uw wijzigingen door te voeren.", "title": "Systeeminstellingen voor {integration}", @@ -2319,7 +2319,7 @@ "none": "Er is nog niets geconfigureerd", "none_found": "Geen integraties gevonden", "none_found_detail": "Pas uw zoekcriteria aan.", - "note_about_integrations": "Nog niet alle integraties kunnen via de UI worden geconfigureerd.", + "note_about_integrations": "Er kwamen geen integraties overeen met uw zoekopdracht. De integratie die u wilt instellen, is mogelijk nog niet beschikbaar om via de gebruikersinterface in te stellen.", "note_about_website_reference": "Meer zijn beschikbaar op de ", "reconfigure": "Herconfigureer", "rename_dialog": "Bewerk de naam van dit configuratie item", @@ -2962,6 +2962,7 @@ "common": { "add_node": "Knooppunt toevoegen", "close": "Sluiten", + "heal_network": "Herstel netwerk", "home_id": "Home ID", "network": "Netwerk", "node_id": "Knooppunt-ID", @@ -2988,6 +2989,18 @@ "node_status": "Knooppuntstatus", "zwave_info": "Z-Wave info" }, + "heal_network": { + "healing_cancelled": "Netwerkherstel is geannuleerd.", + "healing_complete": "Netwerkherstel is compleet.", + "healing_failed": "Herstellen mislukt. Aanvullende informatie is mogelijk beschikbaar in de logboeken.", + "in_progress": "Netwerkherstel wordt uitgevoerd. Dit zal eveen duren.", + "introduction": "Start een netwerkherstel op uw Z-Wave netwerk. Een netwerkherstel zorgt ervoor dat alle apparaten hun routes naar de controller opnieuw berekenen en wordt aanbevolen als je recent apparaten of uw controller hebt verplaatst.", + "run_in_background": "U kunt dit dialoogvenster sluiten en het netwerkherstel zal voortzetten op de achtergrond.", + "start_heal": "Start herstellen", + "stop_heal": "Stop herstellen", + "title": "Herstel uw Z-Wave netwerk", + "traffic_warning": "Het herstelproces genereert een grote hoeveelheid verkeer op het Z-wave netwerk. Dit kan ertoe leiden dat apparaten traag reageren (of helemaal niet) als het herstel wordt uitgevoerd." + }, "logs": { "log_level": "Log niveau", "log_level_changed": "Logboekniveau gewijzigd in: {level}", From 8ca9a0f40981654573a575121c9cb1b8c7d2590d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 4 Jul 2021 00:47:10 +0000 Subject: [PATCH 08/14] Translation update --- translations/frontend/ar.json | 1028 +++++++++++++++++++++++++--- translations/frontend/hu.json | 22 +- translations/frontend/zh-Hans.json | 15 +- 3 files changed, 976 insertions(+), 89 deletions(-) diff --git a/translations/frontend/ar.json b/translations/frontend/ar.json index 3d4644c24b..24dc0eb711 100644 --- a/translations/frontend/ar.json +++ b/translations/frontend/ar.json @@ -1,7 +1,10 @@ { "config_entry": { "disabled_by": { - "integration": "تكامل" + "config_entry": "إدخال التكوين", + "device": "جهاز", + "integration": "تكامل", + "user": "مستخدم" } }, "groups": { @@ -36,6 +39,16 @@ "heating": "تدفئة", "idle": "خامل", "off": "متوقف" + }, + "preset_mode": { + "activity": "الانشطة", + "away": "بعيد", + "boost": "معزز", + "comfort": "مريح", + "eco": "اقتصادي", + "home": "المنزل", + "none": "لاشيء", + "sleep": "نوم" } }, "humidifier": { @@ -58,11 +71,13 @@ "armed_night": "مفعل", "arming": "جاري التفعيل", "disarmed": "غير مفعّل", - "disarming": "إيقاف الإنذار", - "pending": "إنتظار", - "triggered": "مفعّل" + "disarming": "تعطيل", + "pending": "معلق", + "triggered": "تشغيل" }, "default": { + "entity_not_found": "لم يتم العثور على الكيان", + "error": "خطأ", "unavailable": "غير متوفر", "unknown": "غير معروف" }, @@ -85,12 +100,18 @@ }, "supervisor": { "addon": { + "configuration": { + "network": { + "disabled": "معطل" + } + }, "dashboard": { "capability": { "full_access": { "description": "تُمنح هذه الوظيفة الإضافية حق الوصول الكامل إلى أجهزة نظامك ، بناءً على طلب مؤلف الوظيفة الإضافية. الوصول مشابه للوضع المميز في Docker. نظرًا لأن هذا يفتح مخاطر أمنية محتملة ، فإن هذه الميزة تؤثر سلبًا على درجة أمان الوظيفة الإضافية. \n\n لا يتم منح هذا المستوى من الوصول تلقائيًا ويجب تأكيده بواسطتك. للقيام بذلك ، تحتاج إلى تعطيل وضع الحماية على الوظيفة الإضافية يدويًا. قم بتعطيل وضع الحماية فقط إذا كنت تعلم وتحتاج وتثق بمصدر هذه الوظيفة الإضافية." } }, + "not_available_arch": "هذه الوظيفة الإضافية غير متوافقة مع معالج جهازك أو نظام التشغيل الذي قمت بتثبيته على جهازك.", "open_web_ui": "افتح واجهة مستخدم الويب", "visit_addon_page": "قم بزيارة صفحة {name} لمزيد من التفاصيل" } @@ -99,6 +120,9 @@ "close": "إغلاق" }, "dialog": { + "hardware": { + "device_path": "مسار الجهاز" + }, "network": { "dhcp": "DHCP", "disabled": "معطل", @@ -108,6 +132,7 @@ "ip_netmask": "عنوان IP / قناع الشبكة", "open": "فتح", "static": "ثابتة", + "title": "إعدادات الشبكة", "unsaved": "لديك تغييرات غير محفوظة ، ستضيع هذه التغييرات إذا قمت بتغيير علامات التبويب ، هل تريد المتابعة؟", "warning": "إذا كنت تقوم بتغيير عناوين Wi-Fi أو IP أو البوابة ، فقد تفقد الاتصال!" }, @@ -143,34 +168,60 @@ "error_addon_not_found": "لم يتم العثور على الإضافة" }, "snapshot": { - "created": "خلقت" + "confirm_password": "تأكيد كلمة مرور اللقطة", + "created": "خلقت", + "delete_selected": "حذف اللقطات المحددة", + "delete_snapshot_confirm": "حذف", + "delete_snapshot_title": "حذف لقطة", + "failed_to_delete": "فشل الحذف", + "folders": "المجلدات", + "password": "كلمة مرور اللقطة", + "passwords_not_matching": "كلمات المرور غير متطابقة", + "select_type": "تحديد ما يجب استعادته" + }, + "store": { + "missing_addons": "الإضافات المفقودة؟ مكن الوضع المتقدم في صفحة ملف تعريف المستخدم" }, "system": { + "core": { + "cpu_usage": "استخدام وحدة المعالجة المركزية الأساسية", + "ram_usage": "استخدام ذاكرة الوصول العشوائي الأساسية" + }, "supervisor": { + "beta_join_confirm": "هل تريد الانضمام إلى النسخ التجريبية؟", + "failed_to_reload": "فشل في إعادة تحميل supervisor", + "failed_to_update": "فشل في تحديث supervisor", "search": "بحث", "share_diagonstics_description": "هل تريد مشاركة تقارير الأعطال والمعلومات التشخيصية تلقائيا عندما يواجه Supervisor أخطاء غير متوقعة؟ {line_break} سيسمح لنا هذا بإصلاح المشاكل ، والمعلومات متاحة فقط لفريق Home Assistant Core ولن يتم مشاركتها مع الآخرين. {line_break} لا تتضمن البيانات أي معلومات خاصة/حساسة ويمكنك تعطيلها في الإعدادات في أي وقت تريده.", - "share_diagonstics_title": "ساعد في تحسين Home Assistant" + "share_diagonstics_title": "ساعد في تحسين Home Assistant", + "unhealthy_title": "التثبيت الخاص بك غير صحي", + "unsupported_reason": { + "content-trust": "تم تعطيل التحقق من صحة المحتوى" + }, + "unsupported_title": "أنت تقوم بتشغيل تثبيت غير مدعوم", + "update_supervisor": "تحديث supervisor" } } }, "ui": { "auth_store": { - "ask": "هل تريد حفظ هذا الدخول؟", + "ask": "هل تريد البقاء مسجلا الدخول؟", "confirm": "نعم", - "decline": "لا شكرا" + "decline": "لا" }, "card": { "alarm_control_panel": { "arm_away": "تفعيل خارج المنزل", "arm_custom_bypass": "تجاوز مخصص", "arm_home": "تفعيل في المنزل", + "arm_night": "تفعيل بالليل", "clear_code": "مسح", "code": "الرمز", "disarm": "تعطيل" }, "automation": { "last_triggered": "آخر تشغيل", - "trigger": "تشغيل" + "trigger": "تشغيل الإجراءات" }, "camera": { "not_available": "الصورة غير متاحة" @@ -178,13 +229,28 @@ "climate": { "aux_heat": "حرارة Aux", "away_mode": "خارج المنزل", + "cooling": "تبريد {name}", + "current_temperature": "{name} درجة الحرارة الحالية", "currently": "حاليا", "fan_mode": "وضع المروحة", + "heating": "{name} تدفئة", + "high": "عالي", + "low": "منخفض", "on_off": "إيقاف/تشغيل", "operation": "الوضع", + "preset_mode": "الضبط المسبق", "swing_mode": "وضع الموجه", - "target_humidity": "Doelluchtvochtigheid", - "target_temperature": "درجة الحرارة المستهدفة" + "target_humidity": "الرطوبة المستهدفة", + "target_temperature": "درجة الحرارة المستهدفة", + "target_temperature_entity": "{name} درجة الحرارة المستهدفة", + "target_temperature_mode": "{name} درجة الحرارة المستهدفة {mode}" + }, + "counter": { + "actions": { + "decrement": "انقاص", + "increment": "زياده", + "reset": "اعاده تعيين" + } }, "cover": { "position": "موضع", @@ -192,8 +258,10 @@ }, "fan": { "direction": "Richting", + "forward": "أمامي", "oscillate": "تذبذب", "preset_mode": "وضع الضبط المسبق", + "reverse": "عكس", "speed": "Snelheid" }, "humidifier": { @@ -230,6 +298,14 @@ "service": { "run": "تشغيل" }, + "timer": { + "actions": { + "cancel": "إلغاء", + "finish": "إنهاء", + "pause": "إيقاف مؤقت", + "start": "بدء" + } + }, "vacuum": { "actions": { "resume_cleaning": "استئناف التنظيف", @@ -255,6 +331,24 @@ "visibility": "الرؤية", "wind_speed": "سرعة الرياح" }, + "cardinal_direction": { + "e": "شرق", + "ene": "شرق شمال شرقي", + "ese": "شرق جنوب شرقي", + "n": "شمال", + "ne": "شمال شرق", + "nne": "شمال شمال شرقي", + "nnw": "شمال شمال غربي", + "nw": "شمال غرب", + "s": "جنوب", + "se": "جنوب غرب", + "sse": "جنوب جنوب شرقي", + "ssw": "جنوب جنوب غربي", + "sw": "جنوب غرب", + "w": "غرب", + "wnw": "غرب شمال غربي", + "wsw": "غرب جنوب غربي" + }, "day": "يوم", "forecast": "التوقعات", "high": "عالي", @@ -267,15 +361,26 @@ "cancel": "إلغاء", "close": "إغلاق", "delete": "حذف", + "disable": "تعطيل", + "enable": "تغعيل", "error_required": "مطلوب", + "leave": "غادر", "loading": "جار التحميل", "menu": "القائمه", "next": "التالى", + "no": "لا", + "not_now": "ليس الان", "overflow_menu": "قائمة تجاوز السعة", "previous": "السابق", "refresh": "تحديث", + "remove": "إزالة", + "rename": "إعادة تسمية", + "save": "حفظ", + "stay": "بقى", "successfully_deleted": "تم الحذف بنجاح", - "undo": "تراجع" + "successfully_saved": "تم الحفظ بنجاح", + "undo": "تراجع", + "yes": "نعم" }, "components": { "area-picker": { @@ -291,6 +396,9 @@ "no_match": "لم يتم العثور على مناطق مطابقة", "show_areas": "إظهار المناطق" }, + "blueprint-picker": { + "remove_user": "إزالة مستخدم" + }, "calendar": { "my_calendars": "التقويمات الخاصة بي", "today": "اليوم" @@ -301,16 +409,23 @@ }, "date-range-picker": { "end_date": "تاريخ الإنتهاء", + "select": "اختر", "start_date": "تاريخ البدء" }, "device-picker": { + "clear": "مسح", + "device": "جهاز", "no_area": "لا مجال", + "no_devices": "ليس لديك أي أجهزة", "no_match": "لم يتم العثور على أجهزة مطابقة", + "show_devices": "عرض الأجهزة", "toggle": "تبديل" }, "entity": { "entity-picker": { - "entity": "كيان" + "clear": "مسح", + "entity": "كيان", + "show_entities": "إظهار الكيانات" } }, "history_charts": { @@ -320,13 +435,37 @@ }, "logbook": { "messages": { + "became_unavailable": "أصبح غير متوفر", + "changed_to_state": "تغير إلى {state}", + "detected_device_class": "تم الكشف عن {device_class}", "is_opening": "يفتح", + "rose": "وردة", + "set": "اضبط", + "turned_off": "أطفئ", + "turned_on": "تم تشغيله", + "was_at_home": "تم اكتشافه في المنزل", + "was_at_state": "تم اكتشافه في {state}", + "was_away": "تم اكتشافه بعيدًا", "was_closed": "كان مغلقاً", - "was_opened": "كان مفتوحاً" + "was_connected": "كان متصلا", + "was_disconnected": "كان مفصولاً", + "was_locked": "كان مؤمناً", + "was_low": "كان منخفضا", + "was_normal": "كان طبيعيا", + "was_opened": "كان مفتوحاً", + "was_plugged_in": "كان موصلاً في", + "was_safe": "كان آمنا", + "was_unlocked": "كان غير مؤمن", + "was_unplugged": "كان غير موصل", + "was_unsafe": "كان غير امن" }, + "retrieval_error": "خطأ أثناء استرداد إدخال السجل", "show_trace": "عرض التتبع" }, "related-items": { + "automation": "جزء من الأتمتة التالية", + "device": "جهاز", + "entity": "الكيانات ذات الصلة", "integration": "تكامل" }, "relative_time": { @@ -350,13 +489,22 @@ "week": "قبل {count} {count, plural,\n one {اسبوع}\n other {اسابيع}\n}" } }, + "service-control": { + "target_description": "ما الذي يجب أن تستخدمه هذه الخدمة كمناطق أو أجهزة أو كيانات مستهدفة." + }, "service-picker": { "service": "خدمة" + }, + "target-picker": { + "add_area_id": "اختر منطقة", + "add_device_id": "اختر جهاز", + "remove_entity_id": "إزالة الكيان" } }, "dialogs": { "config_entry_system_options": { - "enable_new_entities_description": "إذا تم تعطيله ، فلن تتم إضافة الكيانات المكتشفة حديثًا لـ {integration} تلقائيًا إلى Home Assistant.", + "enable_new_entities_description": "إذا كان يجب إضافة الأجهزة المكتشفة حديثًا لـ {integration}", + "enable_new_entities_label": "تمكين الكيانات المضافة حديثًا.", "title": "خيارات النظام لـ {integration}", "update": "تحديث" }, @@ -365,15 +513,24 @@ "editor": { "advanced": "إعدادات متقدمة", "area": "حدد منطقة العنصر فقط", + "area_note": "بشكل افتراضي ، تكون كيانات الجهاز في نفس منطقة الجهاز. إذا قمت بتغيير منطقة هذا الكيان ، فلن يتبع بعد ذلك منطقة الجهاز.", "change_device_area": "تغيير منطقة الجهاز", "confirm_delete": "هل أنت متأكد أنك تريد حذف هذا الإدخال؟", "delete": "حذف", + "device_disabled": "جهاز هذا الكيان معطل.", + "enabled_cause": "معطل بسبب {cause} .", + "enabled_description": "لن تتم إضافة الكيانات المعطلة إلى Home Assistant.", + "enabled_restart_confirm": "أعد تشغيل Home Assistant لإنهاء تمكين الكيانات", "follow_device_area": "اتبع منطقة الجهاز", "note": "ملاحظة: قد لا يعمل مع كافة التكاملات بعد.", "open_device_settings": "فتح إعدادات الجهاز", + "unavailable": "هذا الكيان غير متوفر حاليا.", "update": "تحديث" }, - "related": "ذات صلة" + "info_customize": "يمكنك الكتابة فوق بعض السمات في قسم {customize_link} .", + "no_unique_id": "لا يحتوي هذا الكيان (\"{entity_id}\") على معرف فريد، ولذلك لا يمكن إدارة إعداداته من واجهة المستخدم. راجع {faq_link} لمزيد من التفاصيل.", + "related": "ذات صلة", + "settings": "إعدادات" }, "generic": { "cancel": "إلغاء الأمر", @@ -382,8 +539,16 @@ "ok": "موافق" }, "helper_settings": { + "counter": { + "initial": "القيمة الأولية", + "maximum": "القيمة القصوى", + "minimum": "القيمة الدنيا", + "restore": "قم باستعادة آخر قيمة معروفة عند بدء تشغيل Home Assistant", + "step": "حجم الخطوة" + }, "generic": { - "icon": "أيقونة" + "icon": "أيقونة", + "name": "الاسم" }, "input_datetime": { "date": "تاريخ", @@ -391,27 +556,55 @@ "mode": "ما الذي تريد إدخاله", "time": "الوقت" }, + "input_number": { + "box": "حقل الإدخال", + "max": "القيمة القصوى", + "min": "القيمة الدنيا", + "mode": "وضع العرض", + "slider": "شريط التمرير", + "step": "حجم الخطوة", + "unit_of_measurement": "وحدة القياس" + }, "input_select": { - "add": "إضافة" + "add": "إضافة", + "add_option": "إضافة خيار", + "no_options": "لا توجد خيارات حتى الآن.", + "options": "الخيارات" }, "input_text": { "max": "الحد الأقصى للطول", "min": "الحد الأدنى للطول", - "password": "كلمة المرور" + "mode": "وضع العرض", + "password": "كلمة المرور", + "pattern": "نمط Regex للتحقق من جانب العميل", + "text": "النص" }, - "platform_not_loaded": "لم يتم تحميل تكامل {platform} . يرجى إضافته إلى التكوين الخاص بك إما عن طريق إضافة ':default_config' أو \"{platform}\"." + "platform_not_loaded": "لم يتم تحميل تكامل {platform} . يرجى إضافته إلى التكوين الخاص بك إما عن طريق إضافة ':default_config' أو \"{platform}\".", + "required_error_msg": "هذه الخانة مطلوبه", + "timer": { + "duration": "المدة" + }, + "yaml_not_editable": "لا يمكن تحرير إعدادات هذا الكيان من واجهة المستخدم. يمكن تكوين الكيانات التي تم إعدادها من واجهة المستخدم فقط من واجهة المستخدم." }, "more_info_control": { "cover": { "close_cover": "إغلاق الغطاء", "close_tile_cover": "إغلاق إمالة الغطاء", "open_cover": "غطاء مفتوح", - "open_tilt_cover": "فتح إمالة الغطاء" + "open_tilt_cover": "فتح إمالة الغطاء", + "stop_cover": "إيقاف الغطاء عن الحركة" }, "details": "التفاصيل", - "script": { - "last_action": "الإجراء الأخير" + "last_changed": "آخر تعديل", + "last_updated": "آخر تحديث", + "restored": { + "not_provided": "هذا الكيان غير متاح حاليًا وهو معزول عن تكامل أو جهاز تمت إزالته أو تغييره أو اختلال وظيفته." }, + "script": { + "last_action": "الإجراء الأخير", + "last_triggered": "آخر تشغيل" + }, + "settings": "إعدادات الكيان", "sun": { "elevation": "ارتفاع", "rising": "ارتفاع", @@ -441,26 +634,53 @@ "title": "{device} معلومات تصحيح الأخطاء", "triggers": "محفزات" }, + "options_flow": { + "form": { + "header": "الخيارات" + }, + "success": { + "description": "تم حفظ الخيارات بنجاح." + } + }, "voice_command": { - "did_not_hear": "Home Assistant لم يسمع أي شيء" + "did_not_hear": "Home Assistant لم يسمع أي شيء", + "label": "اكتب سؤالاً واضغط على \"إدخال\"", + "label_voice": "اكتب واضغط على \"إدخال\" أو انقر على الميكروفون للتحدث" }, "zha_device_info": { "buttons": { "add": "أضف أجهزة عبر هذا الجهاز", "clusters": "إدارة العناقيد", + "reconfigure": "إعادة تكوين الجهاز", + "remove": "إزالة الجهاز", + "view_in_visualization": "عرض في التصور", "zigbee_information": "معلومات جهاز Zigbee" }, + "confirmations": { + "remove": "هل أنت متأكد أنك تريد إزالة الجهاز؟" + }, "device_signature": "توقيع جهاز Zigbee", + "last_seen": "اخر ظهور", + "manuf": "بواسطة {manufacturer}", + "no_area": "لا توجد منطقة", + "power_source": "مصدر الطاقة", "services": { + "reconfigure": "إعادة تكوين جهاز ZHA (معالجة الجهاز). استخدم هذا إذا كنت تواجه مشكلات مع الجهاز. إذا كان الجهاز المعني جهازًا يعمل بالبطارية ، فيرجى التأكد من أنه مستيقظ ويقبل الأوامر عند استخدام هذه الخدمة.", + "remove": "إزالة جهاز من شبكة Zigbee.", + "updateDeviceName": "قم بتعيين اسم مخصص لهذا الجهاز في سجل الجهاز.", "zigbee_information": "عرض معلومات Zigbee للجهاز." }, + "unknown": "غير معروف ", "zha_device_card": { "device_name_placeholder": "تغيير اسم الجهاز" } }, "zha_reconfigure_device": { + "attribute": "السمه", "button_hide": "أخف التفاصيل", "button_show": "إظهار التفاصيل", + "configuration_complete": "اكتمال إعادة تكوين الجهاز.", + "configuration_failed": "فشلت إعادة تكوين الجهاز. قد تتوفر معلومات إضافية في السجلات.", "run_in_background": "يمكنك إغلاق هذا الحوار وستستمر إعادة التكوين في الخلفية." } }, @@ -490,17 +710,22 @@ "notification_drawer": { "click_to_configure": "انقر هنا لتعديل {entity}", "close": "إغلاق", - "empty": "لا إشعارات", - "title": "إشعارات" + "empty": "لاتوجد إشعارات", + "title": "الاشعارات" }, "notification_toast": { - "connection_lost": "انقطع الاتصال. جارٍ إعادة الاتصال ...", + "connection_lost": "انقطع الاتصال. جاري إعادة الاتصال ...", "service_call_failed": "فشل الاتصال بخدمة {service} .", "started": "Home Assistant بدأ!", - "starting": "يبدأ برنامج Home Assistant حاليا ، ولن يكون كل شيء متاحًا حتى الانتهاء." + "starting": "يبدأ برنامج Home Assistant حاليا ، ولن يكون كل شيء متاحًا حتى الانتهاء.", + "triggered": "تم تشغيل {name}" }, "panel": { "config": { + "advanced_mode": { + "hint_enable": "خيارات التكوين مفقودة؟ مكن الوضع المتقدم على", + "link_profile_page": "صفحة ملفك الشخصي" + }, "areas": { "caption": "المناطق", "data_table": { @@ -526,10 +751,12 @@ "update": "تحديث" }, "picker": { + "create_area": "إنشاء منطقة", "header": "المناطق", "integrations_page": "صفحة التكاملات", "introduction": "يتم استخدام المناطق لتنظيم أمكنة الأجهزة. سيتم استخدام هذه المعلومات في جميع أنحاء Home Assistant لمساعدتك في تنظيم الواجهة والأذونات و التكاملات مع الأنظمة الأخرى.", - "introduction2": "لوضع الأجهزة في منطقة ما، إستخدم الرابط أدناه للإنتقال إلى صفحة التكاملات ثم انقر فوق تكامل مكوّن للوصول إلى بطاقات الجهاز." + "introduction2": "لوضع الأجهزة في منطقة ما، إستخدم الرابط أدناه للإنتقال إلى صفحة التكاملات ثم انقر فوق تكامل مكوّن للوصول إلى بطاقات الجهاز.", + "no_areas": "يبدو أنه ليس لديك مناطق بعد!" } }, "automation": { @@ -542,7 +769,7 @@ "delete_confirm": "هل تريد الحذف فعلا؟", "duplicate": "تكرار", "header": "الإجراءات", - "introduction": "الإجراءات هي ما سيفعله Home Assistant عندما يتفعّل الجهاز المُتحَكم به.\n\n [مزيد من المعلومات حول الإجراءات.] (https://home-assistant.io/docs/automation/action/)", + "introduction": "الإجراءات هي ما سيفعله Home Assistant عند تشغيل الأتمتة.", "learn_more": "معرفة المزيد عن الإجراءات", "type_select": "نوع الإجراء", "type": { @@ -556,15 +783,24 @@ "device_id": { "action": "أضف إجراء", "extra_fields": { + "code": "الرمز", + "humidity": "الرطوبة", + "message": "رسالة", "mode": "الوضع", - "position": "مكان" - } + "position": "مكان", + "title": "عنوان", + "value": "قيمة" + }, + "label": "جهاز" }, "event": { "event": "الحدث", "label": "إجراء الحريق", "service_data": "بيانات الخدمة" }, + "scene": { + "label": "تنشيط مشهد" + }, "service": { "label": "طلب خدمة" }, @@ -574,7 +810,7 @@ "wait_template": "نموذج الانتظار" } }, - "unsupported_action": "إجراء غير مدعوم: {action}" + "unsupported_action": "لا يوجد محرر مرئي يدعم الإجراء: {action}" }, "alias": "الاسم", "conditions": { @@ -587,8 +823,19 @@ "learn_more": "معرفة المزيد عن الشروط", "type_select": "نوع الشرط", "type": { + "and": { + "label": "و" + }, "device": { - "condition": "الشرط" + "condition": "الشرط", + "extra_fields": { + "above": "فوق", + "below": "تحت", + "for": "المدة", + "hvac_mode": "وضع HVAC", + "preset_mode": "وضع الضبط المسبق" + }, + "label": "جهاز" }, "not": { "label": "ليس" @@ -596,9 +843,12 @@ "numeric_state": { "above": "فوق", "below": "تحت", - "label": "حالة القيمة الرقمية", + "label": "الوضع الرقمي", "value_template": "نموذج القيمة (إختياري)" }, + "or": { + "label": "أو" + }, "state": { "label": "الحالة", "state": "الحالة" @@ -639,8 +889,14 @@ "unsupported_condition": "شرط غير مدعوم: {condition}" }, "default_name": "أتمتة جديدة", + "description": { + "label": "الوصف", + "placeholder": "وصف اختياري" + }, "enable_disable": "تمكين/تعطيل التنفيذ التلقائي", "introduction": "استخدم الأتمتة لإضفاء الحيوية على منزلك.", + "load_error_not_editable": "الأتمتة فقط في automations.yaml قابلة للتحرير.", + "load_error_unknown": "خطأ في تحميل الأتمتة ({err_no}).", "max": { "queued": "طول قائمة الإنتظار" }, @@ -658,7 +914,7 @@ "triggers": { "add": "أضف مشغل", "delete": "حذف", - "delete_confirm": "هل تريد الحذف فعلا؟", + "delete_confirm": "هل أنت متأكد أنك تريد حذف هذا؟", "duplicate": "تكرار", "header": "المشغلات", "introduction": "المشغلات هي التي تبدأ معالجةقاعدة الأتمتة. من الممكن تحديد عدة مشغلات لنفس القاعدة. بمجرد بدء المشغل ، سيقوم Home Assistant بالتحقق من صحة الشروط ، إن وجدت ، واستدعاء الإجراء.", @@ -667,6 +923,12 @@ "type_select": "نوع المشغل", "type": { "device": { + "extra_fields": { + "above": "فوق", + "below": "تحت", + "for": "المدة" + }, + "label": "جهاز", "trigger": "نوع المشغل" }, "event": { @@ -725,7 +987,12 @@ }, "time": { "at": "عند", - "label": "الوقت" + "label": "الوقت", + "type_input": "قيمة مساعد التاريخ/الوقت" + }, + "webhook": { + "label": "Webhook", + "webhook_id": "معرف Webhook" }, "zone": { "enter": "دخول", @@ -736,12 +1003,15 @@ "zone": "المنطقة" } }, - "unsupported_platform": "منصة غير مدعومة: {platform}" + "unsupported_platform": "لا يوجد محرر مرئي يدعم النظام الأساسي: {platform}" }, "unsaved_confirm": "لديك تغييرات غير محفوظة. هل أنت متأكد من أنك تريد أن تغادر ؟" }, "picker": { "add_automation": "أضف أتمتة", + "delete_automation": "حذف الأتمتة", + "delete_confirm": "هل أنت متأكد أنك تريد حذف هذه الأتمتة؟", + "edit_automation": "تحرير الأتمتة", "header": "محرر الأتمتة", "headers": { "name": "الاسم" @@ -749,22 +1019,85 @@ "introduction": "يسمح لك محرر الأتمتة بإنشاء وتحرير الأتمتة. يرجى اتباع الرابط أدناه لقراءة التعليمات للتأكد من تهيئة Home Assistant بشكل صحيح.", "learn_more": "معرفة المزيد عن التحكم الآلي", "no_automations": "لم نتمكن من العثور على أي أتمتة", - "pick_automation": "اختر الأتمتة لتحريرها" + "pick_automation": "اختر الأتمتة لتحريرها", + "show_info_automation": "عرض معلومات حول الأتمتة" + }, + "thingtalk": { + "link_devices": { + "header": "عظيم! الآن نحن بحاجة لربط بعض الأجهزة" + }, + "task_selection": { + "error_empty": "أدخل أمرًا أو انقر فوق تخطي.", + "error_unsupported": "لم نتمكن من إنشاء أتمتة لذلك (حتى الآن؟).", + "for_example": "على سبيل المثال:", + "language_note": "ملاحظة: اللغة الإنجليزية فقط مدعومة في الوقت الحالي." + } + } + }, + "blueprint": { + "add": { + "save_btn": "استورد Blueprint ...", + "saving": "جاري استيراد Blueprint ..." } }, "cloud": { "account": { + "alexa": { + "config_documentation": "وثائق التكوين", + "disable": "تعطيل", + "enable": "تمكين", + "enable_ha_skill": "تمكين مهارة Home Assistant لـ Alexa", + "enable_state_reporting": "تمكين تقارير الحالة", + "info": "من خلال تكامل Alexa مع Home Assistant Cloud ، ستتمكن من التحكم في جميع أجهزة Home Assistant الخاصة بك عبر أي جهاز يدعم Alexa.", + "info_state_reporting": "إذا قمت بتمكين تقارير الحالة ، فسيرسل Home Assistant جميع تغييرات الحالة للكيانات المكشوفة إلى Amazon. يتيح لك ذلك دائمًا الاطلاع على أحدث الحالات في تطبيق Alexa واستخدام تغييرات الحالة لإنشاء إجراءات روتينية.", + "manage_entities": "إدارة الكيانات", + "state_reporting_error": "تعذر {enable_disable} الابلاغ عن الحالة.", + "sync_entities": "مزامنة الكيانات مع Amazon", + "sync_entities_error": "فشلت مزامنة الكيانات:", + "title": "Alexa" + }, + "connected": "متصل", + "connecting": "الاتصال...", + "connection_status": "حالة الاتصال السحابي", + "fetching_subscription": "جاري إحضار الاشتراك...", + "google": { + "config_documentation": "وثائق التكوين", + "devices_pin": "رقم التعريف الشخصي لأجهزة الأمان", + "enable_ha_skill": "قم بتنشيط مهارة Home Assistant Cloud لـ Google Assistant", + "enable_state_reporting": "تمكين تقارير الحالة", + "enter_pin_error": "تعذر تخزين رقم التعريف الشخصي:", + "enter_pin_hint": "إدخال رقم تعريف شخصي لاستخدام أجهزة الأمان", + "enter_pin_info": "الرجاء إدخال رقم التعريف الشخصي للتفاعل مع أجهزة الأمان. أجهزة الأمن هي الأبواب وأبواب المرآب والأقفال. سيطلب منك أن تقول/ تدخل رقم التعريف الشخصي هذا عند التفاعل مع هذه الأجهزة عبر مساعد Google.", + "info": "مع تكامل Google Assistant لـ Home Assistant Cloud ، ستتمكن من التحكم في جميع أجهزة Home Assistant الخاصة بك عبر أي جهاز يدعم Google Assistant.", + "info_state_reporting": "إذا قمت بتمكين الإبلاغ عن الحالة ، فسيرسل Home Assistant جميع تغييرات حالة الكيانات المكشوفة إلى Google. يتيح لك هذا دائمًا الاطلاع على أحدث الحالات في تطبيق Google.", + "manage_entities": "إدارة الكيانات", + "security_devices": "أجهزة الأمان", + "sync_entities": "مزامنة الكيانات مع Google", + "sync_entities_404_message": "فشل مزامنة الكيانات الخاصة بك مع Google ، اطلب من Google \"Hey Google ، مزامنة أجهزتي\" لمزامنة الكيانات الخاصة بك.", + "title": "Google Assistant" + }, "integrations": "تكاملات", - "integrations_introduction2": "تحقق من الموقع ل", + "integrations_introduction2": "تحقق من موقع الويب بحثا عن ", "integrations_link_all_features": " جميع الميزات المتوفرة", + "nabu_casa_account": "حساب Nabu Casa", + "not_connected": "غير متصل", "remote": { + "access_is_being_prepared": "يتم تحضير جهاز التحكم عن بعد. سنعلمك عندما يكون جاهزًا.", + "certificate_info": "معلومات الشهادة", "connected": "متصل", + "info": "يوفر Home Assistant Cloud اتصالاً آمنًا عن بُعد بالمثيل الخاص بك أثناء تواجدك بعيدًا عن المنزل.", + "instance_is_available": "المثيل الخاص بك متاح في", + "instance_will_be_available": "سيكون المثيل الخاص بك متاحا على", + "link_learn_how_it_works": "تعرف على كيفية عملها", "not_connected": "غير متصل", "remote_enabled": { "caption": "الاتصال تلقائيا", "description": "قم بتفعيل هذا الخيار للتأكد من أن Home Assistant الخاص بك يمكن الوصول إليه دائمًا عن بُعد." - } + }, + "title": "التحكم عن بعد" }, + "sign_out": "تسجيل الخروج", + "thank_you_note": "شكرًا لك على كونك جزءًا من Home Assistant Cloud. بفضل أشخاص مثلك ، يمكننا تقديم تجربة أتمتة منزلية رائعة للجميع. شكرا لك!", "tts": { "dialog": { "example_message": "مرحبًا {name} ، يمكنك تشغيل أي نص على أي مشغل وسائط مدعوم!", @@ -774,20 +1107,108 @@ "target_browser": "تصفح" }, "try": "حاول" + }, + "webhooks": { + "disable_hook_error_msg": "فشل تعطيل webhook:", + "info": "يمكن إعطاء أي شيء تم تكوينه ليتم تشغيله بواسطة webhook عنوان URL يمكن الوصول إليه بشكل عام للسماح لك بإرسال البيانات مرة أخرى إلى Home Assistant من أي مكان ، دون تعريض المثيل الخاص بك إلى الإنترنت.", + "link_learn_more": "تعرف على المزيد حول إنشاء عمليات اتمتة مدعومة بwebhook.", + "loading": "جار التحميل...", + "manage": "أدر", + "no_hooks_yet": "يبدو أنه ليس لديك webhook حتى الآن. ابدأ بتكوين", + "no_hooks_yet_link_automation": "أتمتة webhook", + "no_hooks_yet_link_integration": "التكامل المستند إلى webhook", + "no_hooks_yet2": "أو عن طريق إنشاء", + "title": "webhook" } }, + "alexa": { + "banner": "تم تعطيل تحرير الكيانات التي يتم كشفها عبر واجهة المستخدم هذه لأنك قمت بتكوين عوامل تصفية الكيان في configuration.yaml.", + "exposed_entities": "الكيانات المكشوفة", + "not_exposed_entities": "الكيانات غير المكشوفة", + "title": "Alexa" + }, + "description_features": "تحكم في المنزل عندما تكون بعيدًا وتكامل مع Alexa و Google Assistant", "description_login": "تم تسجيل الدخول كـ {email}", "description_not_login": "لم يتم تسجيل الدخول", "dialog_certificate": { - "close": "إغلاق" + "certificate_expiration_date": "تاريخ انتهاء صلاحية الشهادة:", + "close": "إغلاق", + "fingerprint": "بصمة الشهادة:", + "will_be_auto_renewed": "سيتم تجديده تلقائيًا" }, "dialog_cloudhook": { + "available_at": "يتوفر webhook في URL التالي:", "close": "إغلاق", - "info_disable_webhook": "إذا كنت لم تعد ترغب في استخدام هذا الwebhook ، يمكنك" + "confirm_disable": "هل تريد بالتأكيد تعطيل webhook هذا؟", + "copied_to_clipboard": "نسخ إلى الحافظة", + "info_disable_webhook": "إذا كنت لم تعد ترغب في استخدام هذا الwebhook ، يمكنك", + "link_disable_webhook": "عطله", + "managed_by_integration": "تتم إدارة webhook هذا بواسطة تكامل ولا يمكن تعطيله.", + "view_documentation": "عرض الوثائق" + }, + "forgot_password": { + "check_your_email": "تحقق من بريدك الإلكتروني للحصول على إرشادات حول كيفية إعادة تعيين كلمة المرور الخاصة بك.", + "email": "البريد الإلكتروني", + "email_error_msg": "بريد إلكتروني غير صالح", + "instructions": "أدخل عنوان بريدك الإلكتروني وسنرسل لك رابطا لإعادة تعيين كلمة المرور الخاصة بك.", + "send_reset_email": "إرسال بريد إلكتروني لإعادة التعيين", + "subtitle": "نسيت كلمة مرورك", + "title": "نسيت كلمة المرور" + }, + "google": { + "banner": "تم تعطيل تحرير الكيانات التي يتم كشفها عبر واجهة المستخدم هذه لأنك قمت بتكوين عوامل تصفية الكيان في configuration.yaml.", + "disable_2FA": "تعطيل المصادقة الثنائية", + "expose": "كشف لـ Google Assistant", + "exposed_entities": "الكيانات المكشوفة", + "not_exposed_entities": "الكيانات غير المكشوفة", + "title": "Google Assistant" + }, + "login": { + "alert_email_confirm_necessary": "تحتاج إلى تأكيد بريدك الإلكتروني قبل تسجيل الدخول.", + "alert_password_change_required": "تحتاج إلى تغيير كلمة المرور الخاصة بك قبل تسجيل الدخول.", + "dismiss": "إخفاء", + "email": "البريد الإلكتروني", + "email_error_msg": "بريد إلكتروني غير صالح", + "forgot_password": "نسيت كلمة المرور؟", + "introduction": "يوفر لك Home Assistant Cloud اتصالاً آمنًا عن بُعد بالمثيل الخاص بك أثناء تواجدك بعيدًا عن المنزل. كما يتيح لك الاتصال بخدمات السحابة فقط: Amazon Alexa و Google Assistant.", + "introduction2": "يتم تشغيل هذه الخدمة من قبل شريكنا", + "introduction2a": "، وهي شركة أسسها مؤسسو Home Assistant و Hass.io.", + "introduction3": "Home Assistant Cloud هي خدمة اشتراك مع إصدار تجريبي مجاني لمدة شهر واحد. لا توجد معلومات دفع ضرورية.", + "learn_more_link": "تعرف على المزيد حول Home Assistant Cloud", + "password": "كلمة المرور", + "password_error_msg": "كلمة مرور لا تقل عن 8 أحرف", + "sign_in": "تسجيل الدخول", + "start_trial": "ابدأ تجربتك المجانية لمدة شهر واحد", + "title": "تسجيل الدخول إلى السحابة", + "trial_info": "لا معلومات دفع ضرورية" }, "register": { + "account_created": "تم إنشاء الحساب! تحقق من بريدك الإلكتروني للحصول على إرشادات حول كيفية تنشيط حسابك.", + "create_account": "إنشاء حساب", + "email_address": "عنوان البريد الإلكتروني", + "email_error_msg": "بريد إلكتروني غير صالح", "feature_amazon_alexa": "التكامل مع Amazon Alexa", - "feature_google_home": "التكامل مع Google Assistant" + "feature_google_home": "التكامل مع Google Assistant", + "feature_remote_control": "التحكم في Home Assistant بعيدًا عن المنزل", + "feature_webhook_apps": "سهولة التكامل مع التطبيقات المستندة إلى الويب هوك مثل OwnTracks", + "headline": "ابدأ تجربتك المجانية", + "information": "أنشئ حسابا لبدء الإصدار التجريبي المجاني لمدة شهر واحد باستخدام Home Assistant Cloud. لامعلومات مطلوبة للدفع.", + "information2": "ستمنحك التجربة إمكانية الوصول إلى جميع مزايا Home Assistant Cloud، بما في ذلك:", + "information3": "يتم تشغيل هذه الخدمة من قبل شريكنا", + "information3a": "، وهي شركة أسسها مؤسسو Home Assistant و Hass.io.", + "information4": "بتسجيلك حساب فإنك توافق على الشروط والأحكام التالية.", + "link_privacy_policy": "سياسة الخصوصية", + "link_terms_conditions": "الشروط والأحكام", + "password": "كلمة المرور", + "password_error_msg": "كلمة مرور لا تقل عن 8 أحرف", + "resend_confirm_email": "إعادة إرسال رسالة تأكيد البريد الإلكتروني", + "start_trial": "بدء التجربة", + "title": "تسجيل حساب" + } + }, + "common": { + "editor": { + "confirm_unsaved": "لديك تغييرات غير محفوظة. هل أنت متأكد من أنك تريد أن تغادر ؟" } }, "core": { @@ -795,55 +1216,172 @@ "description": "نظام الوحدة والموقع والمنطقة الزمنية والمتغيرات العامة الأخرى", "section": { "core": { - "core_config": { - "external_url": "العنوان الخارجي", - "internal_url": "العنوان المحلي" + "analytics": { + "preference": { + "statistics": { + "title": "إحصائيات الاستخدام" + }, + "usage_supervisor": { + "description": "الأسماء والإصدارات والقدرات.", + "title": "عمليات التكامل والإضافات المستخدمة" + }, + "usage": { + "description": "الأسماء ومعلومات الإصدار.", + "title": "التكاملات المستخدمة" + } + } }, - "header": "التحكم بالإعدادات و الخادم", + "core_config": { + "edit_requires_storage": "تم تعطيل المحرر بسبب تخزين التكوين في configuration.yaml.", + "elevation": "ارتفاع", + "elevation_meters": "أمتار", + "external_url": "العنوان الخارجي", + "imperial_example": "فهرنهايت، رطل", + "internal_url": "العنوان المحلي", + "latitude": "خط العرض", + "location_name": "اسم تثبيت Home Assistant الخاص بك", + "longitude": "خط الطول", + "metric_example": "مئوية ، كيلوغرامات", + "save_button": "حفظ", + "time_zone": "المنطقة الزمنية", + "unit_system": "نظام الوحدة", + "unit_system_imperial": "ميل", + "unit_system_metric": "متري" + }, + "header": "التكوين العام", "introduction": "تغيير الإعدادات تعتبر عملية مرهقة. نحن نعلم ذلك . هذا القسم سيحاول جعلها اسهل قليلاً." } } }, "customize": { + "attributes_override": "يمكنك تجاوزها إذا أردت.", "caption": "التخصيصات", "description": "تخصيص الكيانات الخاصة بك", "picker": { "header": "التخصيصات", "introduction": "تعديل السمات لكل كيان. سيتم تفعيل التخصيصات المضافة / المعدلة على الفور. ستسري التخصيصات التي تمت إزالتها عندما يتم تحديث الكيان." + }, + "warning": { + "include_link": "تشمل customize.yaml" } }, "devices": { "add_prompt": "لم تتم إضافة {name} باستخدام هذا الجهاز حتى الآن. يمكنك إضافة واحدة عن طريق النقر فوق الزر + أعلاه.", + "automation": { + "actions": { + "caption": "عندما يتم تشغيل شيء ما ...", + "no_actions": "لا توجد إجراءات", + "unknown_action": "إجراء غير معروف" + }, + "automations": "الأتمتة", + "conditions": { + "caption": "افعل شيئًا فقط إذا ...", + "no_conditions": "لا شروط", + "unknown_condition": "شروط غير معروفة" + }, + "create": "إنشاء أتمتة مع جهاز", + "create_disable": "لا يمكن إنشاء أتمتة مع جهاز معطل", + "no_automations": "لا أتمتة", + "no_device_automations": "لا توجد أتمتة متاحة لهذا الجهاز.", + "triggers": { + "caption": "افعل شيئًا عندما ...", + "unknown_trigger": "مشغل غير معروف" + }, + "unknown_automation": "أتمتة غير معروفة" + }, "cant_edit": "يمكنك فقط تحرير العناصر التي تم إنشاؤها في واجهة المستخدم.", + "caption": "الأجهزة", "confirm_delete": "هل أنت متأكد أنك تريد حذف هذا الجهاز؟", + "confirm_disable_config_entry": "لا توجد أجهزة أخرى لإدخال التكوين {entry_name} ، فهل تريد بدلاً من ذلك تعطيل إدخال التكوين؟", + "confirm_rename_entity_ids_warning": "هذا لن يغير أي تكوين (مثل الأتمتة ، والسكربتات ، والمشاهد ، ولوحات المعلومات) التي تستخدم حاليا هذه الكيانات! سيكون عليك تحديثها بنفسك لاستخدام معرف الكيان الجديد!", "data_table": { + "area": "المنطقة", + "battery": "بطارية", + "device": "جهاز", "integration": "تكامل", + "manufacturer": "الشركه المصنعه", + "model": "الموديل", "no_devices": "لا توجد أجهزة" }, "delete": "حذف", + "description": "إدارة الأجهزة المكونة", "device_info": "معلومات الجهاز", + "device_not_found": "لم يتم العثور على الجهاز.", + "disabled": "معطل", + "disabled_by": { + "config_entry": "إدخال التكوين", + "integration": "تكامل", + "user": "مستخدم" + }, + "enabled_cause": "تم تعطيل الجهاز بواسطة {cause}.", + "enabled_description": "لن يتم عرض الأجهزة المعطلة وسيتم تعطيل الكيانات التي تنتمي إلى الجهاز ولن تتم إضافتها إلى Home Assistant.", + "enabled_label": "تمكين الجهاز", "entities": { "add_entities_lovelace": "أضف إلى Lovelace", "disabled_entities": "{count} {count, plural,\n one {كيان}\n other {كيانات}\n}", - "hide_disabled": "إخفاء معطل" + "entities": "الكيانات", + "hide_disabled": "إخفاء معطل", + "none": "هذا الجهاز ليس له كيانات" }, - "no_devices": "لا توجد أجهزة" + "no_devices": "لا توجد أجهزة", + "picker": { + "filter": { + "filter": "فلتر", + "show_all": "إظهار الكل", + "show_disabled": "إظهار الأجهزة المعطلة" + }, + "search": "ابحث عن الاجهزة" + }, + "scene": { + "create": "إنشاء مشاهد مع جهاز", + "create_disable": "لا يمكن إنشاء مشهد بجهاز معطل", + "no_scenes": "لايوجد مشاهد", + "scenes": "مشاهد" + }, + "scenes": "مشاهد", + "script": { + "create": "إنشاء سكريبت مع جهاز", + "create_disable": "لا يمكن إنشاء سكريبت بجهاز معطل", + "no_scripts": "لايوجد سكريبتات", + "scripts": "السكريبتات" + }, + "scripts": "السكريبتات", + "unknown_error": "خطأ غير معروف", + "unnamed_device": "جهاز غير مسمى", + "update": "تحديث" }, "entities": { "caption": "الكيانات", "description": "إدارة الكيانات المعروفة", "picker": { + "disable_selected": { + "button": "تعطيل المحدد", + "confirm_text": "لن تتم إضافة الكيانات المعطلة إلى Home Assistant." + }, + "enable_selected": { + "confirm_text": "سيؤدي ذلك إلى جعلها متاحة في Home Assistant مرة أخرى إذا تم تعطيلها الآن." + }, + "filter": { + "show_disabled": "إظهار الكيانات المعطلة", + "show_unavailable": "إظهار الكيانات غير المتوفرة" + }, "header": "الكيانات", "headers": { - "integration": "تكامل" + "entity_id": "معرف الكيان", + "integration": "تكامل", + "name": "الاسم" }, + "introduction": "يحتفظ Home Assistant بسجل لكل كيان يراه على الإطلاق ويمكن تحديده بشكل فريد. سيكون لكل من هذه الكيانات معرف كيان معين سيتم حجزه لهذا الكيان فقط.", + "introduction2": "استخدم سجل الكيان لتجاوز الاسم أو تغيير معرّف الكيان أو إزالة الإدخال من Home Assistant.", "remove_selected": { "confirm_partly_text": "يمكنك فقط إزالة {removable} من الكيانات {selected} . لا يمكن إزالة الكيانات إلا عندما يتوقف التكامل عن توفير الكيانات. في بعض الأحيان ، يتعين عليك إعادة تشغيل Home Assistant قبل أن تتمكن من إزالة كيانات التكامل الذي تمت إزالته. هل أنت متأكد من أنك تريد إزالة الكيانات القابلة للإزالة؟", "confirm_partly_title": "يمكن فقط إزالة {number} الكيانات المحددة." }, "search": "إبحث عن الكيانات", "status": { - "restored": "مستعاد" + "disabled": "معطل", + "restored": "مستعاد", + "unavailable": "غير متوفر" } } }, @@ -866,19 +1404,35 @@ }, "types": { "input_boolean": "تبديل", + "input_datetime": "التاريخ و / أو الوقت", "input_number": "رقم", "input_select": "القائمه المنسدله", "input_text": "النص" } }, "info": { + "built_using": "بنيت باستخدام", "caption": "معلومات", + "custom_uis": "واجهات مستخدم مخصصة:", "description": "معلومات حول تثبيت Home Assistant", + "developed_by": "تم تطويره بواسطة مجموعة من الأشخاص الرائعين.", "documentation": "الوثائق", + "frontend": "واجهة Frontend", + "frontend_version": "إصدار الواجهة الأمامية: {version} - {type}", "home_assistant_logo": "شعار Home Assistant", + "icons_by": "الايقونات بواسطة", "integrations": "تكاملات", "issues": "الاعطال", - "setup_time": "وقت التنصيب" + "license": "نشرت تحت رخصة Apache 2.0", + "path_configuration": "المسار إلى configuration.yaml: {path}", + "server": "الخادم", + "setup_time": "وقت التنصيب", + "source": "مصدر:", + "system_health_error": "لم يتم تحميل مكون \"صحة النظام\". إضافة 'system_health:' إلى configuration.yaml", + "system_health": { + "manage": "أدر", + "more_info": "مزيد من المعلومات" + } }, "integration_panel_move": { "link_integration_page": "صفحة التكاملات", @@ -893,6 +1447,14 @@ "delete_confirm": "هل تريد حقا حذف هذا التكامل؟", "device_unavailable": "الجهاز غير متوفر", "devices": "{count} {count, plural,\n one {جهاز}\n other {أجهزة}\n}", + "disable_error": "فشل تمكين التكامل أو تعطيله", + "disable": { + "disable_confirm": "هل أنت متأكد أنك تريد تعطيل إدخال التكوين هذا؟ سيتم تعطيل أجهزتها وكياناتها.", + "disabled_by": { + "device": "جهاز" + } + }, + "disabled_polling": "تم تعطيل السحب التلقائي للبيانات المحدثة", "documentation": "الوثائق", "entities": "{count} {count, plural,\n one {كيان}\n other {كيانات}\n}", "entity_unavailable": "الكيان غير متوفر", @@ -925,8 +1487,12 @@ }, "configure": "إعداد", "configured": "تم التكوين", - "description": "إعداد وإدارة التكاملات", + "description": "إدارة التكاملات مع الخدمات أو الأجهزة", "details": "تفاصيل التكامل", + "disable": { + "show": "عرض", + "show_disabled": "إظهار عمليات التكامل المعطلة" + }, "discovered": "مكتشف", "home_assistant_website": "موقع Home Assistant", "ignore": { @@ -956,12 +1522,21 @@ "introduction": "يمكنك هنا برمجة المكونات الخاصة بك و إعداد نظام Home Assistant. ليس كل شيء متاح للبرمجة من خلال واجهة المستخدم حتى الآن، ولكننا نعمل على ذلك.", "logs": { "caption": "السجلات", + "clear": "مسح", "description": "عرض سجلات Home Assistant", - "details": "تفاصيل السجل ({level})" + "details": "تفاصيل السجل ({level})", + "load_full_log": "تحميل سجل Home Assistant الكامل", + "loading_log": "جارٍ تحميل سجل الأخطاء ...", + "multiple_messages": "ظهرت الرسالة لأول مرة في {time} وتظهر {counter} مرات", + "no_errors": "لم يتم الإبلاغ عن أي أخطاء", + "no_issues": "لا توجد مشاكل جديدة!", + "refresh": "تحديث" }, "lovelace": { + "caption": "لوحات معلومات Lovelace", "dashboards": { "cant_edit_default": "لا يمكن تعديل لوحة تحكم لوفليس القياسية من واجهة المستخدم. يمكنك إخفائه عن طريق تعيين لوحة تحكم أخرى كإعداد افتراضي.", + "cant_edit_yaml": "لا يمكن تحرير لوحات المعلومات المعرفة في YAML من واجهة المستخدم. تغييرها في configuration.yaml.", "caption": "لوحات التحكم", "confirm_delete": "هل أنت متأكد أنك تريد حذف لوحة التحكم ؟", "default_dashboard": "هذه هي لوحة المعلومات الافتراضية", @@ -984,6 +1559,7 @@ "picker": { "add_dashboard": "أضافة لوحة تحكم جديدة", "headers": { + "conf_mode": "أسلوب التكوين", "default": "الافتراضي", "filename": "اسم الملف", "require_admin": "المسؤول فقط", @@ -1020,9 +1596,20 @@ }, "mqtt": { "button": "كوِن", + "message_received": "الرسالة {id} التي تم تلقيها على {topic} في {time}:", "title": "MQTT" }, "ozw": { + "device_info": { + "node_failed": "العقدة فشلت", + "stage": "مرحلة", + "zwave_info": "معلومات Z-Wave" + }, + "navigation": { + "node": { + "dashboard": "لوحة المعلومات" + } + }, "network_status": { "details": { "driverallnodesqueried": "تم الاستعلام عن جميع العقد", @@ -1044,42 +1631,76 @@ "wakeup_help": "يجب أن تكون العقد التي تعمل بالبطارية مستيقظة لتغيير تكوينها. إذا لم تكن العقدة مستيقظة، سيحاول OpenZWave تحديث تكوين العقدة في المرة التالية التي تستيقظ فيها، والتي قد تكون عدة ساعات (أو أيام) لاحقا. اتبع الخطوات التالية لتنبيه جهازك:" }, "node_query_stages": { - "instances": "الحصول على تفاصيل حول المثيلات أو القنوات التي يدعمها الجهاز" + "instances": "الحصول على تفاصيل حول المثيلات أو القنوات التي يدعمها الجهاز", + "static": "الحصول على قيم ثابتة من الجهاز" }, "node": { "button": "تفاصيل العقدة" + }, + "refresh_node": { + "description": "سيؤدي هذا إلى إخبار OpenZWave بإعادة إجراء مقابلة مع عقدة وتحديث فئات أوامر العقدة وقدراتها وقيمها.", + "wakeup_instructions_source": "يتم الحصول على تعليمات التنبيه من قاعدة بيانات جهاز مجتمع OpenZWave." } }, "person": { + "add_person": "إضافة شخص", "caption": "الأشخاص", + "confirm_delete": "هل أنت متأكد أنك تريد حذف هذا الشخص؟", + "confirm_delete2": "ستصبح جميع الأجهزة الخاصة بهذا الشخص غير محددة.", + "create_person": "إنشاء شخص", "description": "إدارة الأشخاص الذين يتتبعهم Home Assistant.", "detail": { + "create": "إنشاء", + "delete": "حذف", "device_tracker_intro": "حدد الأجهزة التي تخص هذا الشخص.", "device_tracker_pick": "اختر جهاز لتتبع", "device_tracker_picked": "جهاز التتبع", "link_integrations_page": "صفحة التكاملات", "link_presence_detection_integrations": "تكاملات الكشف عن التواجد", + "linked_user": "مستخدم مرتبط", "name": "الاسم", "name_error_msg": "الاسم مطلوب", - "no_device_tracker_available_intro": "عندما يكون لديك أجهزة تشير إلى تواجد شخص ، ستتمكن من تعيينها إلى شخص هنا. يمكنك إضافة جهازك الأول عن طريق إضافة تكامل كشف التواجد من صفحة التكاملات." + "new_person": "شخص جديد", + "no_device_tracker_available_intro": "عندما يكون لديك أجهزة تشير إلى تواجد شخص ، ستتمكن من تعيينها إلى شخص هنا. يمكنك إضافة جهازك الأول عن طريق إضافة تكامل كشف التواجد من صفحة التكاملات.", + "update": "تحديث" }, + "introduction": "هنا يمكنك تحديد كل شخص مهتم بـ Home Assistant.", "no_persons_created_yet": "يبدو أنك لم تقم بإنشاء أي شخص حتى الآن.", "note_about_persons_configured_in_yaml": "ملاحظة: لا يمكن تعديل الأشخاص الذين تم تكوينهم عبر config.yaml عبر واجهة المستخدم." }, "scene": { + "activated": "المشهد المنشط {name}.", + "caption": "مشاهد", + "description": "التقط حالات الجهاز واستدعها بسهولة لاحقًا", "editor": { - "icon": "أيقونة" + "devices": { + "add": "إضافة جهاز", + "delete": "حذف جهاز", + "header": "الأجهزة", + "introduction": "أضف الأجهزة التي تريد تضمينها في المشهد الخاص بك. اضبط جميع الأجهزة على الحالة التي تريدها لهذا المشهد." + }, + "entities": { + "device_entities": "إذا قمت بإضافة كيان ينتمي إلى جهاز ، فستتم إضافة الجهاز.", + "introduction": "يمكن هنا تعيين الكيانات التي لا تنتمي إلى جهاز.", + "without_device": "كيانات بدون جهاز" + }, + "icon": "أيقونة", + "save": "حفظ", + "unsaved_confirm": "لديك تغييرات غير محفوظة. هل أنت متأكد من أنك تريد أن تغادر ؟" }, "picker": { "duplicate": "تكرار", "duplicate_scene": "تكرار بطاقة", + "header": "محرر المشهد", "headers": { "name": "الاسم" - } + }, + "learn_more": "تعرف على المزيد حول المشاهد", + "pick_scene": "اختر مشهدًا لتحريره" } }, "script": { - "caption": "السكريبت", + "caption": "السكريبتات", "description": "تنفيذ سلسلة من الإجراءات.", "editor": { "alias": "الاسم", @@ -1095,12 +1716,16 @@ "queued": "في قائمة الإنتظار", "restart": "إعادة تشغيل", "single": "فردي (إفتراضي)" - } + }, + "save_script": "حفظ السكربت", + "sequence": "تسلسل" }, "picker": { + "add_script": "اضف سكريبت", "headers": { "name": "الاسم" }, + "no_scripts": "لم نتمكن من العثور على أي سكريبت", "show_info": "عرض معلومات حول السكربت" } }, @@ -1109,18 +1734,20 @@ "description": "أعد تشغيل خادم Home Assistant وأوقفه", "section": { "reloading": { - "automation": "إعادة تحميل الأتمتة", - "core": "إعادة تحميل الموقع والتخصيصات", + "automation": "الأتمتة", + "core": "الموقع والتخصيصات", "group": "خدمات المجموعات وكيانات المجموعة والاشعارات", "heading": "إعادة تحميل تكوين YAML", "input_boolean": "إعادة تحميل مدخلات منطقية", - "input_datetime": "إعادة تحميل أوقات تاريخ الإدخال", + "input_datetime": "مدخل الوقت والتاريخ", "input_number": "إعادة تحميل أرقام الإدخال", "input_select": "إعادة تحميل تحديدات الإدخال", "input_text": "إعادة تحميل النصوص المدخلة", "introduction": "يمكن إعادة تحميل بعض أجزاء Home Assistant دون الحاجة إلى إعادة التشغيل. سيؤدي الضغط على إعادة التحميل إلى تفريغ تكوين YAML الحالي وتحميل التكوين الجديد.", "person": "إعادة تحميل الأشخاص", + "scene": "مشاهد", "script": "السكريبتات", + "universal": "كيانات مشغل الوسائط العالمي", "zone": "إعادة تحميل المناطق" }, "server_management": { @@ -1134,12 +1761,22 @@ "validation": { "check_config": "تحقق من التكوين", "heading": "التحقق من صحة التكوين", - "introduction": "تحقق من صلاحية التكوين الخاص بك إذا قمت مؤخرًا بإجراء بعض التغييرات وتريد التأكد من صلاحية جميعها", + "introduction": "تحقق من صحة التكوين الخاص بك إذا قمت مؤخرًا بإجراء بعض التغييرات على التكوين الخاص بك وتريد التأكد من أنها كلها صالحة.", "invalid": "التكوين غير صالح", "valid": "التكوين صالح!" } } }, + "tag": { + "confirm_remove": "هل أنت متأكد أنك تريد إزالة العلامة {tag} ؟", + "confirm_remove_title": "إزالة العلامة؟", + "detail": { + "update": "تحديث" + }, + "headers": { + "last_scanned": "آخر فحص" + } + }, "users": { "add_user": { "caption": "أضف مستخدم", @@ -1147,16 +1784,24 @@ "password": "كلمه السر" }, "caption": "المستخدمين", - "description": "ادارة المستخدمين", + "description": "إدارة حسابات مستخدمي Home Assistant", "editor": { "activate_user": "تفعيل المستخدم", + "active": "مفعل", "admin": "مدير", "caption": "عرض المستخدم", "change_password": "تغيير كلمة السر", + "confirm_user_deletion": "هل أنت متأكد أنك تريد حذف {name} ؟", "deactivate_user": "إلغاء تنشيط المستخدم", "delete_user": "حذف المستخدم", + "group": "مجموعة", + "id": "معرف", "name": "الاسم", + "owner": "مالك", + "system_generated": "منشئ من قبل النظام", "system_generated_users_not_editable": "غير قادر على تحديث المستخدمين الذين تم إنشاؤهم بواسطة النظام.", + "system_generated_users_not_removable": "غير قادر على إزالة المستخدمين الذين تم إنشاؤهم من قبل النظام.", + "unnamed_user": "مستخدم غير مسمى", "update_user": "تحديث" }, "picker": { @@ -1169,20 +1814,42 @@ "users_privileges_note": "مجموعة المستخدمين هي عمل قيد التقدم. لن يتمكن المستخدم من إدارة المثيل عبر واجهة المستخدم. ما زلنا نقوم بتدقيق جميع نقاط نهاية واجهة برمجة تطبيقات الإدارة للتأكد من أنها تحد من الوصول إلى المسؤولين بشكل صحيح." }, "zha": { + "add_device": "إضافة جهاز", "add_device_page": { "discovered_text": "ستظهر الأجهزة هنا عند إكتشافها.", - "no_devices_found": "لم يتم العثور على أجهزة ، تأكد من أنها في وضع الاقتران(pairing) واجعلها مستيقظة أثناء اكتشافها قيد التشغيل." + "no_devices_found": "لم يتم العثور على أجهزة ، تأكد من أنها في وضع الاقتران(pairing) واجعلها مستيقظة أثناء اكتشافها قيد التشغيل.", + "pairing_mode": "تأكد من أن أجهزتك في وضع الاقتران. تحقق من تعليمات جهازك حول كيفية القيام بذلك.", + "search_again": "ابحث مرة أخرى", + "spinner": "البحث عن أجهزة ZHA Zigbee ..." }, "button": "كوِن", "clusters": { "header": "عناقيد" }, + "common": { + "value": "قيمة" + }, + "configuration_page": { + "zha_options": { + "enable_identify_on_join": "تمكين تأثير التعريف عند انضمام الأجهزة إلى الشبكة" + } + }, + "device_pairing_card": { + "INTERVIEW_COMPLETE": "اكتملت المقابلة", + "INTERVIEW_COMPLETE_status_text": "تكوين", + "PAIRED": "تم العثور على الجهاز", + "PAIRED_status_text": "بدء المقابلة" + }, "groups": { "create_group_details": "أدخل التفاصيل المطلوبة لإنشاء مجموعة zigbee جديدة", "group_details": "فيما يلي جميع التفاصيل الخاصة بمجموعة Zigbee المحددة." }, "network": { "caption": "الشبكة" + }, + "visualization": { + "highlight_label": "تمييز الأجهزة", + "zoom_label": "تكبير على الجهاز" } }, "zone": { @@ -1210,20 +1877,32 @@ "view_device": "عرض الجهاز" }, "common": { - "close": "إغلاق" + "close": "إغلاق", + "heal_network": "عالج الشبكة", + "reconfigure_server": "أعد تكوين الخادم" }, "dashboard": { "dump_not_ready_confirm": "تحميل" }, + "device_info": { + "device_config": "تكوين جهاز", + "node_ready": "عقدة جاهزة", + "node_status": "حالة العقدة", + "zwave_info": "معلومات Z-Wave" + }, "heal_network": { "healing_cancelled": "تم إلغاء معالجة الشبكة.", "healing_complete": "اكتملت معالجة الشبكة.", "healing_failed": "المعالجة فشلت. قد تتوفر معلومات إضافية في السجلات.", + "in_progress": "معالجة الشبكة جارية. سيستغرق هذا بعض الوقت.", + "introduction": "ابدأ معالجة الشبكة على شبكة Z-Wave الخاصة بك. سيؤدي علاج الشبكة إلى إعادة حساب جميع الأجهزة لمساراتها مرة أخرى إلى وحدة التحكم ويوصى بذلك إذا قمت مؤخرًا بنقل الأجهزة أو وحدة التحكم الخاصة بك.", "run_in_background": "يمكنك إغلاق مربع الحوار هذا وستستمر عملية معالجة الشبكة في الخلفية.", + "start_heal": "ابدأ المعالجة", "stop_heal": "أوقف المعالجة." }, "logs": { - "log_level": "مستوى التسجيل في السجل" + "log_level": "مستوى التسجيل في السجل", + "subscribed_to_logs": "اشترك في Z-Wave JS سجل الرسائل..." }, "navigation": { "logs": "السجلات" @@ -1233,13 +1912,17 @@ }, "remove_node": { "cancel_exclusion": "إلغاء الاستبعاد", + "follow_device_instructions": "اتبع الإرشادات المرفقة مع جهازك لبدء الاستبعاد على الجهاز.", + "introduction": "قم بإزالة عقدة من شبكة Z-Wave الخاصة بك ، وقم بإزالة الجهاز والكيانات المرتبطة بها من Home Assistant.", "start_exclusion": "بدء الاستبعاد" } }, "zwave": { "button": "كوِن", "common": { + "index": "فهرس", "unknown": "غير معروف", + "value": "قيمة", "wakeup_interval": "فترة الاستيقاظ" }, "description": "إدارة شبكة Z-Wave", @@ -1249,12 +1932,25 @@ "introduction": "سيساعدك هذا المعالج على الانتقال تكامل Z-Wave القديم إلى تكامل OpenZWave الموجود حاليا في الإصدار التجريبي." } }, + "network_management": { + "header": "إدارة شبكة Z-Wave", + "introduction": "قم بتشغيل الأوامر التي تؤثر على شبكة Z-Wave. لن تحصل على تعليقات حول ما إذا كانت معظم الأوامر قد نجحت ، ولكن يمكنك التحقق من سجل OZW لمحاولة اكتشاف ذلك." + }, + "network_status": { + "network_started": "بدء تشغيل شبكة Z-Wave", + "network_starting": "جارٍ بدء تشغيل شبكة Z-Wave ...", + "network_starting_note": "قد يستغرق هذا بعض الوقت اعتمادا على حجم الشبكة.", + "network_stopped": "توقفت شبكة Z-Wave" + }, "node_config": { "config_parameter": "معلمة التكوين", + "config_value": "قيمة التكوين", + "false": "خطأ", "header": "خيارات تكوين العقدة", "seconds": "ثواني", "set_config_parameter": "تعيين معلمة التكوين", - "set_wakeup": "تعيين فترة الاستيقاظ" + "set_wakeup": "تعيين فترة الاستيقاظ", + "true": "صح" }, "node_management": { "add_to_group": "إضافة إلى المجموعة", @@ -1278,11 +1974,13 @@ "set_protection": "تعيين الحماية" }, "ozw_log": { + "introduction": "اعرض السجل. 0 هو الحد الأدنى (تحميل السجل بالكامل) و 1000 هو الحد الأقصى. سيعرض التحميل سجلاً ثابتًا وسيتم تحديث الذيل تلقائيًا بآخر عدد محدد من الأسطر من السجل.", "last_log_lines": "عدد أسطر السجل الأخيرة", "load": "حمل", "tail": "الذيل" }, "services": { + "heal_network": "عالج الشبكة", "heal_node": "اختبار عقدة", "node_info": "معلومات العقدة", "print_node": "طباعة عقدة", @@ -1290,6 +1988,8 @@ "refresh_node": "تحديث العقدة", "remove_failed_node": "إزالة العقدة الفاشلة", "replace_failed_node": "استبدال العقدة الفاشلة", + "save_config": "حفظ التكوين", + "soft_reset": "إعادة تشغيل بسيطه", "start_network": "بدء تشغيل الشبكة", "stop_network": "إيقاف الشبكة", "test_network": "اختبار الشبكة", @@ -1300,6 +2000,11 @@ } } }, + "custom": { + "external_panel": { + "hide_message": "تحقق من المستندات لمكون panel_custom لإخفاء هذه الرسالة" + } + }, "developer-tools": { "tabs": { "events": { @@ -1310,6 +2015,8 @@ }, "states": { "description2": "لن يتواصل هذا مع الجهاز الفعلي.", + "last_changed": "آخر تعديل", + "last_updated": "آخر تحديث", "title": "الحالات" }, "templates": { @@ -1344,20 +2051,36 @@ } }, "lovelace": { + "add_entities": { + "saving_failed": "فشل حفظ تكوين واجهة المستخدم Lovelace." + }, "cards": { "actions": { "no_url": "لم يتم تحديد عنوان URL لفتحه" }, + "confirm_delete": "هل أنت متأكد أنك تريد حذف هذه البطاقة؟", "empty_state": { "go_to_integrations_page": "انتقل إلى صفحة التكاملات.", "no_devices": "تسمح لك هذه الصفحة بالتحكم في أجهزتك ، ولكن يبدو أنك لم تعد أي أجهزة حتى الآن. توجه إلى صفحة التكاملات للبدء.", "title": "مرحبًا بك في بيتك" }, "picture-elements": { + "call_service": "اتصل بخدمة {name}", + "hold": "تعليق:", + "more_info": "إظهار المزيد من المعلومات: {name}", + "navigate_to": "انتقل إلى {location}", + "tap": "ضغط:", + "toggle": "تبديل {name}", "url": "فتح النافذة لـ {url_path}" }, "safe-mode": { - "description": "واجه Home Assistant مشكلة أثناء تحميل التكوينات الخاصة بك ويتم تشغيله الآن في الوضع الآمن. أنظر إلى سجل الأخطاء لمعرفة الخطأ." + "description": "واجه Home Assistant مشكلة أثناء تحميل التكوينات الخاصة بك ويتم تشغيله الآن في الوضع الآمن. أنظر إلى سجل الأخطاء لمعرفة الخطأ.", + "header": "الوضع الآمن منشط" + }, + "shopping-list": { + "add_item": "إضافة عنصر", + "checked_items": "العناصر المحددة", + "clear_items": "مسح العناصر المحددة" }, "starting": { "description": "Home Assistant يبدأ، يرجى الانتظار..." @@ -1369,7 +2092,9 @@ "editor": { "card": { "alarm-panel": { - "description": "تسمح لك بطاقة لوحة الإنذار بتفعيل وتعطيل لوحة التحكم الخاصة بالانذار ." + "available_states": "الحالات المتاحة", + "description": "تسمح لك بطاقة لوحة الإنذار بتفعيل وتعطيل لوحة التحكم الخاصة بالانذار .", + "name": "لوحة الإنذار" }, "button": { "description": "تتيح لك بطاقة الأزرار إضافة أزرار لأداء المهام.", @@ -1392,9 +2117,19 @@ "state_equal": "الحالة تساوي", "state_not_equal": "الحالة لا تساوي" }, + "config": { + "optional": "اختياري", + "required": "مطلوب" + }, "entities": { "description": "بطاقة الكيانات هي أكثر أنواع البطاقات شيوعًا. تقوم بتجميع العناصر معًا في قوائم.", - "edit_special_row": "اعرض تفاصيل هذا الصف بالنقر على زر التعديل" + "edit_special_row": "اعرض تفاصيل هذا الصف بالنقر على زر التعديل", + "secondary_info_values": { + "last-changed": "آخر تعديل", + "last-triggered": "آخر تشغيل", + "last-updated": "آخر تحديث" + }, + "show_header_toggle": "إظهار الزر العلوي؟" }, "entity-filter": { "description": "تتيح لك بطاقة تصفية الكيانات تحديد قائمة بالكيانات التي تريد تتبعها فقط عندما تكون في حالة معينة." @@ -1404,21 +2139,48 @@ "name": "الكيان" }, "gauge": { - "description": "بطاقة القياس هي بطاقة أساسية تسمح برؤية بيانات الاستشعار بصريًا." + "description": "بطاقة القياس هي بطاقة أساسية تسمح برؤية بيانات الاستشعار بصريًا.", + "severity": { + "define": "عرف الخطورة؟", + "green": "أخضر", + "red": "أحمر", + "yellow": "أصفر" + } }, "generic": { + "aspect_ratio": "نسبة العرض إلى الارتفاع", "attribute": "السمه", + "camera_image": "كيان الكاميرا", "camera_view": "عرض الكاميرا", "double_tap_action": "تأثير النقر المزدوج", + "entities": "الكيانات", + "entity": "كيان", + "hold_action": "تعليق الإجراء", + "hours_to_show": "ساعات العرض", + "icon": "أيقونة", + "icon_height": "ارتفاع الأيقونة", + "image": "مسار الصورة", "manual": "يدويا", "manual_description": "هل تريد إضافة بطاقة مخصصة أو ترغب فقط في كتابة yaml يدويًا؟", + "maximum": "الحد الاقصي", + "minimum": "الحد الأدنى", + "name": "الاسم", "no_theme": "لا توجد تصاميم متاحة", + "refresh_interval": "مدة التحديث", "search": "بحث", "secondary_info_attribute": "سمة المعلومات الثانوية", + "show_icon": "إظهار الأيقونة؟", "show_name": "أظهر الاسم؟", - "state": "الحالة" + "show_state": "إظهار الحالة؟", + "state": "الحالة", + "tap_action": "إجراء النقر", + "theme": "سمة", + "title": "عنوان", + "unit": "وحدة", + "url": "URL" }, "glance": { + "columns": "الأعمدة", "description": "بطاقة اللمحة مفيدة لتجميع أجهزة استشعار متعددة في نظرة عامة مدمجة." }, "grid": { @@ -1428,7 +2190,8 @@ "description": "تسمح لك بطاقة الرسم البياني التاريخي بعرض رسم بياني لكل من الكيانات المذكورة." }, "horizontal-stack": { - "description": "تتيح لك بطاقة التكديس الأفقي تجميع عدة بطاقات معًا ، بحيث تكون دائمًا بجانب بعضها البعض في مساحة عمود واحد." + "description": "تتيح لك بطاقة التكديس الأفقي تجميع عدة بطاقات معًا ، بحيث تكون دائمًا بجانب بعضها البعض في مساحة عمود واحد.", + "name": "المكدس الأفقي" }, "humidifier": { "description": "تتيح بطاقة المرطب التحكم في كيان المرطب. يسمح لك بتغيير الرطوبة ووضع الكيان.", @@ -1441,11 +2204,17 @@ "description": "تسمح لك بطاقة الضوء بتغيير سطوع الضوء." }, "map": { + "dark_mode": "الوضع المظلم؟", + "default_zoom": "التكبير الافتراضي", "description": "بطاقة الخريطة التي تتيح لك عرض الكيانات على الخريطة.", - "hours_to_show": "ساعات للعرض" + "geo_location_sources": "مصادر تحديد الموقع الجغرافي", + "hours_to_show": "ساعات للعرض", + "source": "المصدر" }, "markdown": { - "description": "يتم استخدام بطاقة Markdown لعرض Markdown." + "content": "محتوى", + "description": "يتم استخدام بطاقة Markdown لعرض Markdown.", + "name": "Markdown" }, "media-control": { "description": "يتم استخدام بطاقة التحكم بالوسائط لعرض كيانات مشغل الوسائط على واجهة مع عناصر تحكم سهلة الاستخدام." @@ -1472,13 +2241,16 @@ "description": "تتيح لك بطاقة قائمة التسوق إضافة عناصر وتحريرها وإلغاء تحديدها ومسحها من قائمة التسوق الخاصة بك." }, "thermostat": { - "description": "تتيح بطاقة الترموستات التحكم في كيان المناخ لديك. يسمح لك بتغيير درجة حرارة الكيان ووضعه." + "description": "تتيح بطاقة الترموستات التحكم في كيان المناخ لديك. يسمح لك بتغيير درجة حرارة الكيان ووضعه.", + "name": "منظم التكييف" }, "vertical-stack": { - "description": "تسمح لك بطاقة التكديس الرأسي بتجميع بطاقات متعددة بحيث تكون دائمًا في نفس العمود." + "description": "تسمح لك بطاقة التكديس الرأسي بتجميع بطاقات متعددة بحيث تكون دائمًا في نفس العمود.", + "name": "المكدس العمودي" }, "weather-forecast": { "description": "تعرض بطاقة توقعات الطقس حالة الطقس. من المفيد جدًا تضمينه في الواجهات التي يعرضها الأشخاص على الحائط.", + "name": "النشرة الجوية", "show_forecast": "التوقعات" } }, @@ -1487,32 +2259,65 @@ "no_description": "لا يوجد وصف متاح." }, "edit_card": { + "add": "إضافة بطاقة", "confirm_cancel": "هل أنت متأكد من الإلغاء؟", "delete": "حذف", "duplicate": "بطاقة مكررة", "edit": "تصحيح", + "header": "تكوين البطاقة", "move": "نقل", "options": "المزيد من الخيارات", + "pick_card": "ما هي البطاقة التي ترغب في إضافتها؟", + "pick_card_view_title": "ما هي البطاقة التي تريد إضافتها إلى طريقة العرض {name} ؟", + "toggle_editor": "تبديل المحرر", "typed_header": "{type} تكوين البطاقة", "unsaved_changes": "لديك تغييرات غير محفوظة" }, "edit_lovelace": { + "explanation": "يظهر هذا العنوان فوق كل صفحات واجهة المستخدم Lovelace.", + "header": "عنوان واجهة مستخدم Lovelace الخاصة بك", "title": "عنوان" }, "edit_view": { + "add": "إضافة عرض", + "delete": "حذف العرض", + "edit": "تحرير عرض", + "header": "عرض التكوين", "header_name": "{name} عرض التكوين", + "tab_settings": "إعدادات", "tab_visibility": "الرؤية", "visibility": { "select_users": "تحديد المستخدمين الذين يجب أن يروا طريقة العرض هذه في التنقل" } }, + "header": "تحرير واجهة المستخدم", + "header-footer": { + "types": { + "buttons": { + "name": "أزرار" + }, + "picture": { + "name": "صورة" + } + } + }, "menu": { "manage_dashboards": "ادارة لوحة المعلومات", "manage_resources": "ادارة الموارد", "open": "فتح قائمة واجهة المستخدم Lovelace", "raw_editor": "محرر التكوين الخام" }, + "migrate": { + "header": "التكوين غير متوافق", + "migrate": "ترحيل التكوين", + "para_migrate": "يمكن لـ Home Assistant إضافة معرفات إلى جميع بطاقاتك وطرق العرض تلقائيًا لك بالضغط على زر \"ترحيل التكوين\".", + "para_no_id": "هذا العنصر ليس له معرّف ID . الرجاء إضافة معرف ID لهذا العنصر في \"ui-lovelace.yaml\"." + }, "raw_editor": { + "confirm_remove_config_text": "سنقوم تلقائيا بإنشاء طرق عرض واجهة مستخدم Lovelace الخاصة بك مع المناطق والأجهزة الخاصة بك إذا قمت بإزالة تكوين واجهة مستخدم Lovelace.", + "confirm_unsaved_changes": "لديك تغييرات غير محفوظة ، هل أنت متأكد أنك تريد الخروج؟", + "confirm_unsaved_comments": "قد يحتوي التكوين الخاص بك على تعليق (تعليقات) ، ولن يتم حفظها. هل تريد الاستمرار؟", + "error_save_yaml": "تعذر حفظ YAML: {error}", "header": "تعديل", "save": "حفظ", "saved": "تم الحفظ", @@ -1522,19 +2327,29 @@ "cancel": "لا يهم", "close": "إغلاق", "empty_config": "ابدأ بلوحة معلومات فارغة", + "header": "تحكم في واجهة مستخدم Lovelace", + "para": "يتم صيانة لوحة المعلومات هذه حاليًا بواسطة Home Assistant. يتم تحديثه تلقائيًا عند توفر كيانات جديدة أو مكونات Lovelace UI. إذا كنت تتحكم ، فلن يتم تحديث لوحة التحكم هذه تلقائيًا بعد الآن. يمكنك دائمًا إنشاء لوحة تحكم جديدة في التكوين للتلاعب بها.", "para_sure": "هل أنت متأكد أنك تريد التحكم في واجهة المستخدم الخاصة بك؟", + "save": "تحكم", "yaml_mode": "أنت تستخدم وضع YAML للوحة البيانات هذه ، مما يعني أنه لا يمكنك تغيير تكوين Lovelace من واجهة المستخدم. إذا كنت تريد إدارة لوحة التحكم هذه من واجهة المستخدم ، فقم بإزالة \"الوضع: yaml\" من تكوين Lovelace في \"config.yaml.\"." }, + "select_view": { + "dashboard_label": "لوحة المعلومات" + }, "view": { "panel_mode": { + "description": "هذا يجعل البطاقة الأولى بالعرض الكامل. لن يتم عرض البطاقات الأخرى في هذا العرض بالإضافة إلى الشارات.", + "title": "وضع اللوحة؟", "warning_multiple_cards": "تحتوي طريقة العرض هذه على أكثر من بطاقة ، ولكن يمكن أن تعرض طريقة عرض اللوحة بطاقة واحدة فقط." } } }, "menu": { "close": "إغلاق", + "configure_ui": "تحرير لوحة المعلومات", "help": "مساعدة", - "reload_resources": "إعادة تحميل الموارد" + "reload_resources": "إعادة تحميل الموارد", + "start_conversation": "ابدأ المحادثة" }, "reload_lovelace": "إعادة تحميل واجهة المستخدم", "reload_resources": { @@ -1542,10 +2357,12 @@ "refresh_header": "هل تريد التحديث؟" }, "unused_entities": { + "last_changed": "آخر تعديل", "no_data": "لم يعثر على كيانات غير مستخدمة", "search": "إبحث عن الكيانات" }, "views": { + "confirm_delete": "حذف العرض؟", "confirm_delete_existing_cards": "سيؤدي حذف هذا العرض إلى إزالة البطاقات أيضًا", "confirm_delete_existing_cards_text": "هل أنت متأكد من أنك تريد حذف طريقة عرض ''{name}''؟ تحتوي طريقة العرض على {number} بطاقات سيتم حذفها. لا يمكن التراجع عن هذا الإجراء.", "confirm_delete_text": "هل أنت متأكد من أنك تريد حذف عرض \"{name}\" ؟" @@ -1554,7 +2371,7 @@ "attribute_not_found": "السمة {attribute} غير متاحة في: {entity}", "entity_non_numeric": "الكيان غير رقمي: {entity}", "entity_not_found": "الجهاز غير متوفر: {entity}", - "entity_unavailable": "العنصر غير متوفر", + "entity_unavailable": "الكيان غير متاح حاليًا: {entity}", "starting": "Home Assistant يبدأ، قد لا يكون كل شيء متاح حتى الآن" } }, @@ -1684,6 +2501,7 @@ "lights": "أضواء", "morning_commute": "التنقل الصباحي", "total_tv_time": "إجمالي وقت التلفزيون", + "turn_tv_off": "إيقاف تشغيل التلفزيون", "volume": "حجم الصوت" }, "names": { @@ -1695,10 +2513,12 @@ "mirror": "مرآة", "patio": "الفناء", "right": "يمين", + "temperature_study": "دراسة درجة الحرارة", "upstairs": "الطابق العلوي" }, "unit": { - "minutes_abbr": "د" + "minutes_abbr": "د", + "watching": "يشاهد" } } } @@ -1736,7 +2556,9 @@ }, "profile": { "advanced_mode": { - "link_promo": "معرفة المزيد" + "description": "يفتح الميزات المتقدمة.", + "link_promo": "معرفة المزيد", + "title": "الوضع المتقدم" }, "change_password": { "confirm_new_password": "تأكيد كلمة السر الجديدة", @@ -1752,6 +2574,9 @@ "dropdown_label": "لوحة المعلومات", "header": "لوحة المعلومات" }, + "enable_shortcuts": { + "description": "قم بتمكين أو تعطيل اختصارات لوحة المفاتيح لتنفيذ إجراءات متنوعة في واجهة المستخدم." + }, "force_narrow": { "description": "سيؤدي ذلك إلى إخفاء الشريط الجانبي افتراضيا، على غرار تجربة الجوال.", "header": "إخفاء الشريط الجانبي دوما" @@ -1762,11 +2587,19 @@ "header": "اللغة", "link_promo": "ساعد في الترجمة" }, + "logout": "تسجيل الخروج", "long_lived_access_tokens": { "confirm_delete": "هل أنت متأكد أنك تريد حذف رمز الوصول لـ {name} ؟", + "create": "إنشاء رمز مميز", + "create_failed": "فشل إنشاء رمز الوصول المميز.", + "created": "أنشئ في {date}", + "delete_failed": "فشل حذف رمز الوصول المميز.", "description": "قم بإنشاء رموز وصول طويلة الأمد للسماح لنصوصك بالتفاعل مع مثيل Home Assistant الخاص بك. سيكون كل رمز مميزًا صالحًا لمدة 10 سنوات من تاريخ إنشائه. رموز الوصول طويلة العمر التالية نشطة حاليًا.", + "empty_state": "ليس لديك رموز وصول طويلة الأمد حتى الآن.", "header": "رموز الوصول طويلة الأمد", - "learn_auth_requests": "تعرف على كيفية عمل طلبات مصادقة." + "learn_auth_requests": "تعرف على كيفية عمل طلبات مصادقة.", + "prompt_copy_token": "نسخ رمز الوصول الخاص بك. لن يتم عرضه مرة أخرى.", + "prompt_name": "إعط الرمز المميز اسماً" }, "mfa_setup": { "close": "إغلاق", @@ -1781,8 +2614,16 @@ "enable": "تفعيل", "header": "وحدات التحقق متعددة العوامل" }, + "number_format": { + "dropdown_label": "تنسيق الأرقام", + "header": "تنسيق الأرقام" + }, "push_notifications": { - "description": "إرسال الإشعارات إلى هذا الجهاز", + "add_device_prompt": { + "input_label": "اسم الجهاز", + "title": "ماذا يجب أن يسمى هذا الجهاز؟" + }, + "description": "إرسال الإشعارات إلى هذا الجهاز.", "error_load_platform": "كون notify.html5.", "error_use_https": "يتطلب تمكين SSL للواجهة الأمامية.", "header": "التنبيهات", @@ -1792,6 +2633,7 @@ "refresh_tokens": { "confirm_delete": "هل تريد بالتأكيد حذف رمز التحديث المميز لـ {name} ؟", "created_at": "أنشئ في {date}", + "current_token_tooltip": "غير قادر على حذف الرمز المميز للتحديث الحالي", "delete_failed": "فشل حذف الرمز المميز للتحديث.", "description": "يمثل كل رمز تحديث مميز جلسة تسجيل دخول. ستتم إزالة رموز التحديث تلقائيًا عند النقر فوق تسجيل الخروج. رموز التحديث التالية نشطة حاليًا لحسابك.", "header": "تحديث الرموز المميزة", @@ -1808,8 +2650,22 @@ "error_no_theme": "لا توجد تصاميم متاحة.", "header": "التصميم", "link_promo": "تعرف على التصاميم" + }, + "time_format": { + "dropdown_label": "تنسيق الوقت", + "header": "تنسيق الوقت" + }, + "vibrate": { + "description": "تمكين أو تعطيل الاهتزاز على هذا الجهاز عند التحكم في الأجهزة.", + "header": "اهتزاز" } + }, + "shopping_list": { + "start_conversation": "ابدأ المحادثة" } + }, + "sidebar": { + "external_app_configuration": "تكوين التطبيق" } } } \ No newline at end of file diff --git a/translations/frontend/hu.json b/translations/frontend/hu.json index 7d62d2a650..32d196d9a3 100644 --- a/translations/frontend/hu.json +++ b/translations/frontend/hu.json @@ -121,7 +121,8 @@ "edit_in_ui": "Szerkesztés a felhasználói felületen", "edit_in_yaml": "Szerkesztés YAML-ben", "header": "Lehetőségek", - "invalid_yaml": "Érvénytelen YAML" + "invalid_yaml": "Érvénytelen YAML", + "show_unused_optional": "A nem használt opcionális konfigurációs lehetőségek megjelenítése" } }, "dashboard": { @@ -194,6 +195,7 @@ "hostname": "Gazdagép neve", "install": "telepítés", "new_update_available": "{name} {version} elérhető", + "not_available_arch": "Ez a kiegészítő nem kompatibilis a készülék processzorával vagy az eszközre telepített operációs rendszerrel.", "not_available_version": "A(z) {core_version_installed} otthoni segédet futtatja, hogy frissítse az Otthoni segéd legalább {core_version_needed} verzióját.", "open_web_ui": "Webes felhasználói felület megnyitása", "option": { @@ -328,6 +330,7 @@ "add_new_registry": "Hozzáadás új rendszerleíró adatbázishoz", "add_registry": "Hozzáadás a rendszerleíró adatbázishoz", "failed_to_add": "Nem sikerült hozzáadni a rendszerleíró adatbázishoz", + "no_registries": "Nincsenek konfigurálva regiszterek", "password": "Jelszó", "registry": "Regisztrálás", "remove": "Eltávolítás", @@ -678,6 +681,7 @@ "addon": "Bővítmény", "error": { "fetch_addons": { + "description": "A kiegészítők lekérése hibát eredményezett.", "title": "Hiba történt a bővítmények beolvasása közben" }, "no_supervisor": { @@ -746,6 +750,7 @@ } }, "history_charts": { + "history_disabled": "Előzményintegráció letiltva", "loading_history": "Állapot előzmények betöltése...", "no_history_found": "Nem található előzmény." }, @@ -929,6 +934,7 @@ "enabled_label": "Entitás engedélyezése", "enabled_restart_confirm": "Az entitások engedélyezésének befejezéséhez indítsd újra a Home Assistant-et", "entity_id": "Entitás ID", + "follow_device_area": "Kövesse a készülék területét", "icon": "Ikon", "icon_error": "Az ikonokat a 'prefix:ikonnév' formátumban kell megadni, pl.: 'mdi:home'", "name": "Név", @@ -1214,6 +1220,8 @@ "no_type_provided": "Nincs megadva típus." }, "supervisor": { + "ask": "Kérjen segítséget", + "observer": "Ellenőrizze a Figyelőt", "reboot": "Próbálja újraindítani a gazdagépet", "system_health": "Rendszerállapot ellenőrzése" } @@ -1742,6 +1750,7 @@ "target_browser": "Böngésző" }, "female": "Nő", + "info": "Csinálj az otthonodnak személyiséget azzal, hogy a szövegfelolvasó szolgáltatásaink segítségével beszélhessünk veled. Ez használható az automatizálásokban és a szkriptekben a(z) {service} szolgáltatás használatával.", "male": "Férfi", "title": "Szövegről beszédre", "try": "Próbálja meg" @@ -1879,6 +1888,7 @@ "title": "Alapvető elemzés" }, "diagnostics": { + "description": "Megosztja az összeomlási jelentéseket, ha váratlan hibák lépnek fel.", "title": "Diagnosztika" }, "statistics": { @@ -2188,8 +2198,10 @@ "services": "{count} {count, plural,\n one {szolgáltatás}\n other {szolgáltatás}\n}", "state": { "loaded": "Betöltve", + "migration_error": "Migrációs hiba", "not_loaded": "Nincs betöltve", - "setup_error": "Nem sikerült beállítani" + "setup_error": "Nem sikerült beállítani", + "setup_retry": "A beállítás újbóli megkísérlése" }, "system_options": "Rendszerbeállítások", "unnamed_entry": "Névtelen bejegyzés" @@ -2212,6 +2224,7 @@ "not_all_required_fields": "Nincs kitöltve minden szükséges mező.", "not_loaded": "Az integrációt nem sikerült betölteni. Próbálja meg újraindítani a Home Assistantot.", "pick_flow_step": { + "new_flow": "Nem, állítson be egy másik {integration}", "title": "Felfedeztük ezeket, be akarod állítani őket?" }, "submit": "Küldés" @@ -2869,6 +2882,7 @@ "zwave_js": { "add_node": { "inclusion_finished": "A csomópont hozzá lett adva.", + "introduction": "Ez a varázsló végigvezeti Önt egy csomópont hozzáadásán a Z-Wave-hálózathoz.", "title": "Adjon hozzá egy Z-Wave csomópontot", "view_device": "Eszköz megtekintése" }, @@ -2885,8 +2899,10 @@ "dashboard": { "driver_version": "Illesztőprogram verzió", "dump_not_ready_confirm": "Letöltés", + "dump_not_ready_title": "Még nem minden csomópont áll készen", "header": "Kezelje Z-Wave hálózatát", "home_id": "Otthon azonosító", + "introduction": "A Z-Wave hálózat és a Z-Wave csomópontok kezelése", "nodes_ready": "Csomópontok készen állnak", "server_version": "Szerver verzió" }, @@ -3703,6 +3719,7 @@ "working": "Kérlek várj" }, "initializing": "Inicializálás", + "logging_in_to_with": "Bejelentkezés a következőhöz: ** {locationName} ** a ** {authProviderName} ** szolgáltatással.", "logging_in_with": "Bejelentkezés **{authProviderName}** használatával.", "pick_auth_provider": "Vagy válassz a következő bejelentkezési módok közül" }, @@ -3875,6 +3892,7 @@ "header": "Többfaktoros Hitelesítési Modulok" }, "number_format": { + "description": "Válassza ki a számok formátumát.", "dropdown_label": "Számformátum", "formats": { "comma_decimal": "1 234 567,89", diff --git a/translations/frontend/zh-Hans.json b/translations/frontend/zh-Hans.json index 3c0917b41d..ae0e5929d2 100644 --- a/translations/frontend/zh-Hans.json +++ b/translations/frontend/zh-Hans.json @@ -2319,7 +2319,7 @@ "none": "尚未配置任何集成", "none_found": "未找到集成", "none_found_detail": "请调整搜索条件。", - "note_about_integrations": "并非所有集成都可以通过 UI 进行配置。", + "note_about_integrations": "未搜索到相关集成,可能是您要配置的集成还不支持通过 UI 配置。", "note_about_website_reference": "更多可用信息,尽在 ", "reconfigure": "重新配置", "rename_dialog": "编辑此配置项的名称", @@ -2962,6 +2962,7 @@ "common": { "add_node": "添加节点", "close": "关闭", + "heal_network": "修复网络", "home_id": "家庭 ID", "network": "网络", "node_id": "节点 ID", @@ -2988,6 +2989,18 @@ "node_status": "节点状态", "zwave_info": "Z-Wave 信息" }, + "heal_network": { + "healing_cancelled": "网络修复已取消。", + "healing_complete": "网络修复完成。", + "healing_failed": "修复失败。日志中会有更多信息。", + "in_progress": "正在修复网络。可能需要一段时间。", + "introduction": "在此 Z-Wave 网络上启动网络修复。网络修复会使所有设备重新计算它们到控制器的路由。如果您最近挪动了设备或控制器,建议使用此功能。", + "run_in_background": "您可以关闭此对话框,网络修复将在后台继续进行。", + "start_heal": "开始修复", + "stop_heal": "停止修复", + "title": "修复 Z-Wave 网络", + "traffic_warning": "修复过程会在 Z-Wave 网络上产生大量流量。修复期间,设备可能会响应缓慢或完全无响应。" + }, "logs": { "log_level": "日志级别", "log_level_changed": "日志级别更改为: {level}", From 2a1e31b5e922de3c8c4ea1cddc24d97ae39f721f Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 5 Jul 2021 00:47:09 +0000 Subject: [PATCH 09/14] Translation update --- translations/frontend/cs.json | 2 +- translations/frontend/he.json | 15 ++++++++++++++- translations/frontend/pl.json | 12 ++++++------ 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/translations/frontend/cs.json b/translations/frontend/cs.json index 771f43d5b5..d69d0058c8 100644 --- a/translations/frontend/cs.json +++ b/translations/frontend/cs.json @@ -2319,7 +2319,7 @@ "none": "Zatím nic nastaveno", "none_found": "Žádné integrace nenalezeny.", "none_found_detail": "Upravte kritéria vyhledávání.", - "note_about_integrations": "Některé integrace zatím nelze nastavit prostřednictvím uživatelského rozhraní.", + "note_about_integrations": "Vašemu vyhledávání neodpovídá žádná integrace, je možné, že integraci, kterou chcete nastavit, ještě nelze nastavit prostřednictvím uživatelského rozhraní.", "note_about_website_reference": "Další jsou k dispozici na ", "reconfigure": "Přenastavit", "rename_dialog": "Upravit název této položky nastavení", diff --git a/translations/frontend/he.json b/translations/frontend/he.json index d2a5d123bf..ef7e3a97c9 100644 --- a/translations/frontend/he.json +++ b/translations/frontend/he.json @@ -2319,7 +2319,7 @@ "none": "כלום אינו הוגדר עדיין", "none_found": "לא נמצאו אינטגרציות", "none_found_detail": "התאם את קריטריוני החיפוש שלך.", - "note_about_integrations": "לא ניתן להגדיר עדיין את כל השילובים דרך ממשק המשתמש.", + "note_about_integrations": "אין שילובים שתאמו לחיפוש שלך, ייתכן שהשילוב שברצונך להגדיר לא יהיה זמין עדיין להגדרה באמצעות ממשק המשתמש.", "note_about_website_reference": "מידע נוסף זמין ב:", "reconfigure": "קביעת תצורה מחדש", "rename_dialog": "ערוך את שם ישות התצורה הזו", @@ -2962,6 +2962,7 @@ "common": { "add_node": "הוסף צומת", "close": "סגור", + "heal_network": "ריפוי רשת", "home_id": "מזהה בית", "network": "רשת", "node_id": "מזהה צומת", @@ -2988,6 +2989,18 @@ "node_status": "מצב הצומת", "zwave_info": "מידע Z-Wave" }, + "heal_network": { + "healing_cancelled": "ריפוי הרשת בוטל.", + "healing_complete": "ריפוי הרשת הושלם.", + "healing_failed": "הריפוי נכשל. מידע נוסף עשוי להיות זמין ביומנים.", + "in_progress": "ריפוי הרשת בעיצומו. זה ייקח קצת זמן.", + "introduction": "התחל ריפוי רשת ברשת Z-Wave שלך. ריפוי רשת יגרום לכל ההתקנים לחשב מחדש את הנתיבים שלהם בחזרה לבקר ומומלץ אם העברת לאחרונה התקנים או הבקר שלך.", + "run_in_background": "באפשרותך לסגור תיבת דו שיח זו וריפוי הרשת ימשיך ברקע.", + "start_heal": "התחל ריפוי", + "stop_heal": "הפסק ריפוי", + "title": "רפא את רשת Z-Wave שלך", + "traffic_warning": "תהליך הריפוי מייצר כמות גדולה של תעבורה ברשת Z-Wave. הדבר עלול לגרום להתקנים להגיב באיטיות (או בכלל לא) בזמן שהריפוי מתבצע." + }, "logs": { "log_level": "רמת יומן", "log_level_changed": "רמת היומן שונתה ל: {level}", diff --git a/translations/frontend/pl.json b/translations/frontend/pl.json index 2a0d966540..2ba7b2486f 100644 --- a/translations/frontend/pl.json +++ b/translations/frontend/pl.json @@ -205,7 +205,7 @@ } }, "changelog": "Lista zmian", - "cpu_usage": "Zużycie procesora przez dodatek", + "cpu_usage": "Użycie procesora przez dodatek", "hostname": "Nazwa hosta", "install": "zainstaluj", "new_update_available": "{name} {version} jest dostępna", @@ -239,7 +239,7 @@ "enable": "Włącz tryb ochrony", "title": "Ostrzeżenie: Tryb ochrony jest wyłączony!" }, - "ram_usage": "Zużycie pamięci przez dodatek", + "ram_usage": "Użycie pamięci przez dodatek", "rebuild": "przeinstaluj", "restart": "uruchom ponownie", "start": "uruchom", @@ -433,8 +433,8 @@ }, "system": { "core": { - "cpu_usage": "Zużycie procesora przez HA Core", - "ram_usage": "Zużycie pamięci przez HA Core" + "cpu_usage": "Użycie procesora przez HA Core", + "ram_usage": "Użycie pamięci przez HA Core" }, "host": { "change": "Zmień", @@ -469,7 +469,7 @@ "beta_release_items": "Obejmuje to wersje beta dla:", "beta_warning": "Wersje beta są przeznaczone dla testerów i wczesnych użytkowników i mogą zawierać niestabilne zmiany w kodzie", "channel": "Kanał", - "cpu_usage": "Zużycie procesora przez Supervisora", + "cpu_usage": "Użycie procesora przez Supervisora", "failed_to_reload": "Nie udało się wczytać ponownie Supervisora", "failed_to_set_option": "Nie udało się ustawić opcji Supervisora", "failed_to_update": "Nie udało się zaktualizować Supervisora", @@ -477,7 +477,7 @@ "join_beta_description": "Pobieraj aktualizacje beta dla Home Assistanta (RC), Supervisora i hosta", "leave_beta_action": "Opuść kanał beta", "leave_beta_description": "Pobieraj stabilne aktualizacje dla Home Assistanta, Supervisora i hosta", - "ram_usage": "Zużycie pamięci przez Supervisora", + "ram_usage": "Użycie pamięci przez Supervisora", "reload_supervisor": "Wczytaj ponownie", "search": "Szukaj", "share_diagnostics": "Udostępnij dane diagnostyczne", From 18996535b73b9c0fb65522b6782aef0072a9ccf1 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 5 Jul 2021 11:05:49 +0200 Subject: [PATCH 10/14] Fix race in translations loading (#9499) --- src/state/translations-mixin.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/state/translations-mixin.ts b/src/state/translations-mixin.ts index 7e0ee332f2..e8fbed6413 100644 --- a/src/state/translations-mixin.ts +++ b/src/state/translations-mixin.ts @@ -126,7 +126,7 @@ export default >(superClass: T) => this._applyTranslations(this.hass!); } - protected panelUrlChanged(newPanelUrl) { + protected panelUrlChanged(newPanelUrl: string) { super.panelUrlChanged(newPanelUrl); // this may be triggered before hassConnected this._loadFragmentTranslations( @@ -339,13 +339,16 @@ export default >(superClass: T) => ...data, }, }; - const changes: Partial = { - resources, - localize: await computeLocalize(this, language, resources), - }; + + // Update resources immediately, so when a new update comes in we don't miss values + this._updateHass({ resources }); + + const localize = await computeLocalize(this, language, resources); if (language === (this.hass ?? this._pendingHass).language) { - this._updateHass(changes); + this._updateHass({ + localize, + }); } } From 4970f640fa6abc163a014979d2f7883515903dc9 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 6 Jul 2021 00:47:02 +0000 Subject: [PATCH 11/14] Translation update --- translations/frontend/ar.json | 942 ++++++++++++++++++++++++++++++---- 1 file changed, 851 insertions(+), 91 deletions(-) diff --git a/translations/frontend/ar.json b/translations/frontend/ar.json index 24dc0eb711..fb02fbde99 100644 --- a/translations/frontend/ar.json +++ b/translations/frontend/ar.json @@ -8,6 +8,7 @@ } }, "groups": { + "owner": "المالك", "system-admin": "مسؤولين", "system-read-only": "مستخدمين للعرض فقط", "system-users": "مستخدمين" @@ -54,11 +55,14 @@ "humidifier": { "mode": { "auto": "تلقائي", + "away": "بعيد", "baby": "الطفل", + "boost": "عزز", "comfort": "الراحة", "eco": "اقتصادي", "home": "في المنزل", - "normal": "عادي" + "normal": "عادي", + "sleep": "نوم" } } }, @@ -103,27 +107,113 @@ "configuration": { "network": { "disabled": "معطل" + }, + "options": { + "show_unused_optional": "إظهار خيارات التكوين الاختيارية غير المستخدمة" } }, "dashboard": { "capability": { + "auth_api": { + "description": "يمكن للوظيفة الإضافية المصادقة على المستخدمين مقابل Home Assistant ، مما يسمح للوظائف الإضافية بمنح المستخدمين إمكانية تسجيل الدخول إلى التطبيقات التي تعمل داخل الوظائف الإضافية ، باستخدام اسم المستخدم / كلمة المرور الخاصة بـ Home Assistant. تشير هذه الشارة إلى ما إذا كان مؤلف الوظيفة الإضافية يطلب هذه الإمكانية.", + "title": "مصادقة Home Assistant" + }, + "docker_api": { + "description": "طلب مؤلف الوظيفة الإضافية الحصول على وصول إداري إلى مثيل Docker الذي يعمل على نظامك. يمنح هذا الوضع الوظيفة الإضافية وصولاً كاملاً وتحكمًا كاملاً في نظام Home Assistant بالكامل ، مما يضيف مخاطر أمنية ، وقد يؤدي إلى إتلاف نظامك عند إساءة استخدامه. لذلك ، تؤثر هذه الميزة سلبًا على درجة أمان الوظيفة الإضافية. \n\n لا يتم منح هذا المستوى من الوصول تلقائيًا ويجب تأكيده بواسطتك. للقيام بذلك ، تحتاج إلى تعطيل وضع الحماية على الوظيفة الإضافية يدويًا. قم بتعطيل وضع الحماية فقط إذا كنت تعلم ، تحتاج وتثق بمصدر هذه الوظيفة الإضافية.", + "title": "الوصول الكامل إلى Docker" + }, "full_access": { - "description": "تُمنح هذه الوظيفة الإضافية حق الوصول الكامل إلى أجهزة نظامك ، بناءً على طلب مؤلف الوظيفة الإضافية. الوصول مشابه للوضع المميز في Docker. نظرًا لأن هذا يفتح مخاطر أمنية محتملة ، فإن هذه الميزة تؤثر سلبًا على درجة أمان الوظيفة الإضافية. \n\n لا يتم منح هذا المستوى من الوصول تلقائيًا ويجب تأكيده بواسطتك. للقيام بذلك ، تحتاج إلى تعطيل وضع الحماية على الوظيفة الإضافية يدويًا. قم بتعطيل وضع الحماية فقط إذا كنت تعلم وتحتاج وتثق بمصدر هذه الوظيفة الإضافية." + "description": "تُمنح هذه الوظيفة الإضافية حق الوصول الكامل إلى أجهزة نظامك ، بناءً على طلب مؤلف الوظيفة الإضافية. الوصول مشابه للوضع المميز في Docker. نظرًا لأن هذا يفتح مخاطر أمنية محتملة ، فإن هذه الميزة تؤثر سلبًا على درجة أمان الوظيفة الإضافية. \n\n لا يتم منح هذا المستوى من الوصول تلقائيًا ويجب تأكيده بواسطتك. للقيام بذلك ، تحتاج إلى تعطيل وضع الحماية على الوظيفة الإضافية يدويًا. قم بتعطيل وضع الحماية فقط إذا كنت تعلم وتحتاج وتثق بمصدر هذه الوظيفة الإضافية.", + "title": "الوصول الكامل إلى العتاد" + }, + "hassio_api": { + "description": "تم منح الوظيفة الإضافية حق الوصول إلى Supervisor API ، بناءً على طلب مؤلف الوظيفة الإضافية. بشكل افتراضي ، يمكن للوظيفة الإضافية الوصول إلى معلومات الإصدار العامة لنظامك. عندما تطلب الوظيفة الإضافية وصول \"مدير\" أو \"مسؤول\" إلى واجهة برمجة التطبيقات ، فإنها ستحصل على حق الوصول للتحكم في أجزاء متعددة من نظام Home Assistant الخاص بك. يشار إلى هذا الإذن من خلال هذه الشارة وسيؤثر سلبًا على درجة أمان الاضافات.", + "title": "وصول supervisor API" + }, + "homeassistant_api": { + "description": "يُسمح لهذه الوظيفة الإضافية بالوصول إلى مثيل Home Assistant قيد التشغيل مباشرةً عبر واجهة برمجة تطبيقات Home Assistant. يعالج هذا الوضع المصادقة للوظيفة الإضافية أيضًا ، مما يمكّن الوظيفة الإضافية من التفاعل مع Home Assistant دون الحاجة إلى رموز مصادقة إضافية." + }, + "host_pid": { + "title": "مساحة عمليات المضيف" + }, + "ingress": { + "description": "تستخدم هذه الوظيفة الإضافية Ingress لتضمين واجهتها بشكل آمن في Home Assistant.", + "title": "مدخل" + }, + "label": { + "auth": "المصادقة", + "docker": "docker", + "hardware": "عتاد", + "hass": "hass", + "hassio": "hassio", + "host": "مضيف", + "ingress": "مدخل", + "rating": "تقييم", + "stage": "مرحلة" + }, + "role": { + "backup": "نسخ احتياطي", + "default": "إفتراضي", + "homeassistant": "homeassistant", + "manager": "مدير" } }, + "hostname": "اسم المضيف", + "new_update_available": "{name} {version} متاح", "not_available_arch": "هذه الوظيفة الإضافية غير متوافقة مع معالج جهازك أو نظام التشغيل الذي قمت بتثبيته على جهازك.", + "not_available_version": "أنت تقوم بتشغيل Home Assistant {core_version_installed} ، للتحديث إلى هذا الإصدار من الوظيفة الإضافية تحتاج على الأقل الإصدار {core_version_needed} من Home Assistant", "open_web_ui": "افتح واجهة مستخدم الويب", + "protection_mode": { + "enable": "تفعيل وضع الحماية" + }, "visit_addon_page": "قم بزيارة صفحة {name} لمزيد من التفاصيل" } }, "common": { - "close": "إغلاق" + "cancel": "الغاء", + "close": "إغلاق", + "error": { + "unknown": "خطأ غير معروف", + "update_failed": "فشل التحديث" + }, + "failed_to_restart_name": "فشل في إعادة تشغيل {name}", + "failed_to_update_name": "فشل في تحديث {name}", + "reset_defaults": "إعادة التعيين إلى الإعدادات الافتراضية", + "reset_options": "خيارات إعادة التعيين", + "restart": "إعادة التشغيل", + "restart_name": "أعد تشغيل {name}", + "running_version": "تقوم حاليا بتشغيل الإصدار {version}", + "save": "حفظ", + "show_more": "أظهر المزيد من المعلومات حول هذا" + }, + "confirm": { + "reset_options": { + "text": "هل أنت متأكد أنك تريد إعادة تعيين جميع خياراتك؟", + "title": "خيارات إعادة التعيين" + }, + "restart": { + "text": "هل أنت متأكد أنك تريد إعادة تشغيل {name} ؟", + "title": "أعد تشغيل {name}" + }, + "update": { + "text": "هل تريد بالتأكيد تحديث {name} إلى الإصدار {version} ؟", + "title": "تحديث {name}" + } + }, + "dashboard": { + "addons": "الوظائف الإضافية المثبتة" }, "dialog": { "hardware": { - "device_path": "مسار الجهاز" + "attributes": "سمات", + "device_path": "مسار الجهاز", + "id": "معرف", + "search": "البحث عن العتاد", + "subsystem": "النظام الفرعي", + "title": "العتاد" }, "network": { + "connected_to": "متصل بـ {ssid}", "dhcp": "DHCP", "disabled": "معطل", "dns_servers": "خوادم DNS", @@ -131,10 +221,13 @@ "gateway": "عنوان البوابة", "ip_netmask": "عنوان IP / قناع الشبكة", "open": "فتح", + "scan_ap": "ابحث عن نقاط الوصول", "static": "ثابتة", "title": "إعدادات الشبكة", "unsaved": "لديك تغييرات غير محفوظة ، ستضيع هذه التغييرات إذا قمت بتغيير علامات التبويب ، هل تريد المتابعة؟", - "warning": "إذا كنت تقوم بتغيير عناوين Wi-Fi أو IP أو البوابة ، فقد تفقد الاتصال!" + "warning": "إذا كنت تقوم بتغيير عناوين Wi-Fi أو IP أو البوابة ، فقد تفقد الاتصال!", + "wep": "WEP", + "wpa": "WPA PSK" }, "registries": { "add_new_registry": "إضافة سجل جديد", @@ -150,6 +243,7 @@ "username": "اسم المستخدم" }, "repositories": { + "add": "إضافة", "remove": "إزالة", "title": "إدارة مستودعات الإضافات" }, @@ -165,38 +259,104 @@ } }, "my": { - "error_addon_not_found": "لم يتم العثور على الإضافة" + "error_addon_no_ingress": "الوظيفة الإضافية المطلوبة لا تدعم الإدخال", + "error_addon_not_found": "لم يتم العثور على الإضافة", + "error_addon_not_installed": "لم يتم تثبيت الوظيفة الإضافية المطلوبة. الرجاء تثبيتها أولا", + "error_addon_not_started": "الوظيفة الإضافية المطلوبة ليست قيد التشغيل. يرجى تشغيلها أولاً" }, "snapshot": { + "addons": "الإضافات", + "available_snapshots": "اللقطات المتوفرة", "confirm_password": "تأكيد كلمة مرور اللقطة", + "could_not_create": "تعذر إنشاء لقطة", + "create": "إنشاء", + "create_blocked_not_running": "إنشاء لقطة غير ممكن الآن لأن النظام في حالة {state}.", + "create_snapshot": "إنشاء لقطة", "created": "خلقت", "delete_selected": "حذف اللقطات المحددة", "delete_snapshot_confirm": "حذف", "delete_snapshot_title": "حذف لقطة", + "description": "تسمح لك اللقطات بالنسخ الاحتياطي واستعادة جميع بيانات مثيل Home Assistant الخاص بك بسهولة.", + "enter_password": "الرجاء إدخال كلمة المرور.", "failed_to_delete": "فشل الحذف", + "folder": { + "addons/local": "الإضافات المحلية", + "homeassistant": "تكوين Home Assistant", + "media": "وسائط", + "share": "شارك", + "ssl": "SSL" + }, "folders": "المجلدات", + "full_snapshot": "لقطة كاملة", + "name": "اسم اللقطة", + "no_snapshots": "ليس لديك أي لقطات حتى الآن.", + "partial_snapshot": "لقطة جزئية", "password": "كلمة مرور اللقطة", + "password_protected": "محمي بكلمة مرور", + "password_protection": "حماية كلمة المرور", "passwords_not_matching": "كلمات المرور غير متطابقة", - "select_type": "تحديد ما يجب استعادته" + "security": "حماية", + "select_type": "تحديد ما يجب استعادته", + "selected": "{number} حدد", + "type": "نوع اللقطة", + "upload_snapshot": "تحميل لقطة" }, "store": { - "missing_addons": "الإضافات المفقودة؟ مكن الوضع المتقدم في صفحة ملف تعريف المستخدم" + "missing_addons": "الإضافات المفقودة؟ مكن الوضع المتقدم في صفحة ملف تعريف المستخدم", + "no_results_found": "لم يتم العثور على نتائج في {repository} .", + "registries": "المسجلات", + "repositories": "مستودعات" }, "system": { "core": { "cpu_usage": "استخدام وحدة المعالجة المركزية الأساسية", "ram_usage": "استخدام ذاكرة الوصول العشوائي الأساسية" }, + "host": { + "change_hostname": "تغيير اسم المضيف", + "confirm_reboot": "هل تريد بالتأكيد إعادة تشغيل المضيف؟", + "confirm_shutdown": "هل تريد بالتأكيد إيقاف تشغيل المضيف؟", + "emmc_lifetime_used": "مدة حياة eMMC المستخدمة", + "failed_to_set_hostname": "فشل إعداد اسم المضيف", + "hardware": "العتاد", + "hostname": "اسم المضيف", + "import_from_usb": "الاستيراد من USB", + "new_hostname": "الرجاء إدخال اسم مضيف جديد:", + "reboot_host": "إعادة تشغيل المضيف", + "shutdown_host": "إيقاف تشغيل المضيف" + }, + "log": { + "get_logs": "فشل الحصول على سجلات {provider} {error}", + "log_provider": "مزود السجل" + }, "supervisor": { "beta_join_confirm": "هل تريد الانضمام إلى النسخ التجريبية؟", + "channel": "قناة", + "cpu_usage": "استخدام supervisor لـ CPU", "failed_to_reload": "فشل في إعادة تحميل supervisor", + "failed_to_set_option": "فشل في تعيين خيار supervisor", "failed_to_update": "فشل في تحديث supervisor", + "join_beta_action": "انضم إلى النسخ التجريبية", + "join_beta_description": "احصل على تحديثات تجريبية لـ Home Assistant (RCs) وsupervisor والمضيف", + "leave_beta_action": "غادر النسخ التجريبية", + "leave_beta_description": "احصل على تحديثات ثابتة لـ Home Assistant و supervisor والمضيف", + "ram_usage": "استخدام supervisor لـ RAM", + "reload_supervisor": "إعادة تحميل supervisor", "search": "بحث", + "share_diagnostics": "شارك التشخيصات", + "share_diagnostics_description": "شارك تقارير الأعطال ومعلومات التشخيص.", "share_diagonstics_description": "هل تريد مشاركة تقارير الأعطال والمعلومات التشخيصية تلقائيا عندما يواجه Supervisor أخطاء غير متوقعة؟ {line_break} سيسمح لنا هذا بإصلاح المشاكل ، والمعلومات متاحة فقط لفريق Home Assistant Core ولن يتم مشاركتها مع الآخرين. {line_break} لا تتضمن البيانات أي معلومات خاصة/حساسة ويمكنك تعطيلها في الإعدادات في أي وقت تريده.", "share_diagonstics_title": "ساعد في تحسين Home Assistant", + "unhealthy_description": "سيؤدي تشغيل التثبيت غير الصحي إلى حدوث مشكلات. يوجد أدناه قائمة بالمشكلات التي تم العثور عليها في التثبيت الخاص بك ، انقر فوق الارتباطات لمعرفة كيفية حل المشكلات.", + "unhealthy_reason": { + "untrusted": "تم الكشف عن محتوى غير موثوق به" + }, "unhealthy_title": "التثبيت الخاص بك غير صحي", + "unsupported_description": "يوجد أدناه قائمة بالمشكلات التي تم العثور عليها في التثبيت الخاص بك ، انقر فوق الارتباطات لمعرفة كيفية حل المشكلات.", "unsupported_reason": { - "content-trust": "تم تعطيل التحقق من صحة المحتوى" + "apparmor": "لم يتم تمكين AppArmor على المضيف", + "content-trust": "تم تعطيل التحقق من صحة المحتوى", + "network_manager": "مدير الشبكة" }, "unsupported_title": "أنت تقوم بتشغيل تثبيت غير مدعوم", "update_supervisor": "تحديث supervisor" @@ -267,13 +427,17 @@ "humidifier": { "humidity": "الرطوبة المستهدفة", "mode": "الوضع", + "on_entity": "{name} يعمل", "target_humidity_entity": "{name} الرطوبة المستهدفة" }, "light": { "brightness": "Helderheid", + "cold_white_value": "سطوع أبيض بارد", + "color_brightness": "سطوع اللون", "color_temperature": "Kleurtemperatuur", "effect": "مؤثرات", - "white_value": "قيمة البياض" + "warm_white_value": "سطوع أبيض دافئ", + "white_value": "سطوع الأبيض" }, "lock": { "code": "كود", @@ -281,9 +445,16 @@ "unlock": "فتح" }, "media_player": { + "browse_media": "تصفح الوسائط", + "media_next_track": "التالى", + "media_play": "تشغيل", + "media_play_pause": "تشغيل/إيقاف مؤقت", + "media_previous_track": "السابق", "sound_mode": "وضع الصوت", "source": "المصدر", - "text_to_speak": "النص للتحدث" + "text_to_speak": "النص للتحدث", + "turn_off": "إيقاف تشغيل", + "turn_on": "تشغيل" }, "persistent_notification": { "dismiss": "إخفاء" @@ -360,6 +531,8 @@ "back": "عودة", "cancel": "إلغاء", "close": "إغلاق", + "continue": "استمر", + "copied_clipboard": "نسخت إلى الحافظة", "delete": "حذف", "disable": "تعطيل", "enable": "تغعيل", @@ -376,6 +549,7 @@ "remove": "إزالة", "rename": "إعادة تسمية", "save": "حفظ", + "skip": "تخطي", "stay": "بقى", "successfully_deleted": "تم الحذف بنجاح", "successfully_saved": "تم الحفظ بنجاح", @@ -383,6 +557,15 @@ "yes": "نعم" }, "components": { + "addon-picker": { + "addon": "الاضافات", + "error": { + "no_supervisor": { + "description": "لم يتم العثور على supervisor ، لذلك لا يمكن تحميل الوظائف الإضافية.", + "title": "لا supervisor" + } + } + }, "area-picker": { "add_dialog": { "add": "إضافة", @@ -390,13 +573,18 @@ "text": "أدخل اسم المنطقة الجديدة.", "title": "أضف منطقة جديدة" }, - "add_new": "إضافة منطقة جديدة ...", + "add_new": "اضف منطقة جديدة...", "area": "المنطقة", "clear": "مسح", + "no_areas": "ليس لديك أي مناطق", "no_match": "لم يتم العثور على مناطق مطابقة", "show_areas": "إظهار المناطق" }, + "attributes": { + "expansion_header": "سمات" + }, "blueprint-picker": { + "add_user": "أضف مستخدم", "remove_user": "إزالة مستخدم" }, "calendar": { @@ -422,6 +610,10 @@ "toggle": "تبديل" }, "entity": { + "entity-attribute-picker": { + "attribute": "السمه", + "show_attributes": "إظهار السمات" + }, "entity-picker": { "clear": "مسح", "entity": "كيان", @@ -434,6 +626,7 @@ "no_history_found": "لم يتم العثور على سجل الحالات." }, "logbook": { + "entries_not_found": "لم يتم العثور على إدخالات في دفتر السجلات.", "messages": { "became_unavailable": "أصبح غير متوفر", "changed_to_state": "تغير إلى {state}", @@ -462,7 +655,41 @@ "retrieval_error": "خطأ أثناء استرداد إدخال السجل", "show_trace": "عرض التتبع" }, + "media-browser": { + "audio_not_supported": "متصفحك لا يدعم عنصر الصوت.", + "class": { + "album": "البوم", + "app": "التطبيق", + "artist": "الفنان", + "channel": "القناة", + "composer": "الملحن", + "url": "URL" + }, + "media_browsing_error": "خطأ في استعراض الوسائط", + "media_not_supported": "لا يدعم مشغل الوسائط هذا النوع من الوسائط", + "media_player": "مشغل الوسائط", + "media-player-browser": "متصفح مشغل الوسائط", + "no_items": "لا توجد عناصر", + "pick": "اختار", + "pick-media": "اختر الوسائط", + "play": "تشغيل", + "play-media": "تشغيل الوسائط", + "video_not_supported": "متصفحك لا يدعم عنصر الفيديو." + }, + "picture-upload": { + "label": "صورة", + "unsupported_format": "تنسيق غير مدعوم ، يرجى اختيار صورة JPEG أو PNG أو GIF." + }, + "related-filter-menu": { + "filter_by_area": "تصفية حسب المنطقة", + "filter_by_device": "تصفية حسب الجهاز", + "filter_by_entity": "تصفية حسب الكيان", + "filtered_by_area": "المنطقة: {area_name}", + "filtered_by_device": "الجهاز: {device_name}", + "filtered_by_entity": "الكيان: {entity_name}" + }, "related-items": { + "area": "المنطقة", "automation": "جزء من الأتمتة التالية", "device": "جهاز", "entity": "الكيانات ذات الصلة", @@ -477,9 +704,10 @@ "week": "{count} {count, plural,\none {أسبوع}\nother {أسابيع}\n}" }, "future_duration": { - "day": "خلال {count} {count, plural,\n one {يوم}\n other {ايام}\n}", + "day": "خلال {count, plural,\n one {يوم}\n two {يومين}\n other {{count} يوم}\n}", "minute": "خلال {count} {count, plural,\n one {دقيقة}\n other {دقيقة}\n}" }, + "just_now": "في هذة اللحظة", "never": "Nooit", "past_duration": { "day": "قبل {count} {count, plural,\n one {يوم}\n other {ايام}\n}", @@ -490,6 +718,8 @@ } }, "service-control": { + "integration_doc": "وثائق التكامل", + "target": "الأهداف", "target_description": "ما الذي يجب أن تستخدمه هذه الخدمة كمناطق أو أجهزة أو كيانات مستهدفة." }, "service-picker": { @@ -498,6 +728,11 @@ "target-picker": { "add_area_id": "اختر منطقة", "add_device_id": "اختر جهاز", + "add_entity_id": "اختر الكيان", + "expand_area_id": "قم بتوسيع هذه المنطقة إلى الأجهزة والكيانات المنفصلة التي تحتوي عليها. بعد التوسيع ، لن يتم تحديث الأجهزة والكيانات عندما تتغير المنطقة.", + "expand_device_id": "قم بتوسيع هذا الجهاز إلى الكيانات المنفصلة التي يحتوي عليها. بعد التوسيع ، لن يتم تحديث الكيانات عندما يتغير الجهاز.", + "remove_area_id": "إزالة المنطقة", + "remove_device_id": "إزالة الجهاز", "remove_entity_id": "إزالة الكيان" } }, @@ -505,11 +740,19 @@ "config_entry_system_options": { "enable_new_entities_description": "إذا كان يجب إضافة الأجهزة المكتشفة حديثًا لـ {integration}", "enable_new_entities_label": "تمكين الكيانات المضافة حديثًا.", + "enable_polling_description": "إذا كان يجب على Home Assistant تلقائيًا سحب {integration} للحصول على التحديثات.", + "enable_polling_label": "تمكين سحب التحديثات.", + "restart_home_assistant": "تحتاج إلى إعادة تشغيل Home Assistant حتى تصبح التغييرات سارية المفعول.", "title": "خيارات النظام لـ {integration}", "update": "تحديث" }, + "domain_toggler": { + "reset_entities": "إعادة تعيين الكيانات" + }, "entity_registry": { + "control": "تحكم", "customize_link": "تخصيصات العنصر", + "dismiss": "إخفاء", "editor": { "advanced": "إعدادات متقدمة", "area": "حدد منطقة العنصر فقط", @@ -519,9 +762,13 @@ "delete": "حذف", "device_disabled": "جهاز هذا الكيان معطل.", "enabled_cause": "معطل بسبب {cause} .", + "enabled_delay_confirm": "ستتم إضافة الكيانات الممكّنة إلى Home Assistant في غضون {delay} ثانية", "enabled_description": "لن تتم إضافة الكيانات المعطلة إلى Home Assistant.", "enabled_restart_confirm": "أعد تشغيل Home Assistant لإنهاء تمكين الكيانات", "follow_device_area": "اتبع منطقة الجهاز", + "icon": "أيقونة", + "icon_error": "يجب أن تكون الرموز بتنسيق 'prefix:iconname'، على سبيل المثال \"mdi: home\"", + "name": "الاسم", "note": "ملاحظة: قد لا يعمل مع كافة التكاملات بعد.", "open_device_settings": "فتح إعدادات الجهاز", "unavailable": "هذا الكيان غير متوفر حاليا.", @@ -586,6 +833,9 @@ }, "yaml_not_editable": "لا يمكن تحرير إعدادات هذا الكيان من واجهة المستخدم. يمكن تكوين الكيانات التي تم إعدادها من واجهة المستخدم فقط من واجهة المستخدم." }, + "image_cropper": { + "crop": "اقتصاص" + }, "more_info_control": { "cover": { "close_cover": "إغلاق الغطاء", @@ -595,9 +845,19 @@ "stop_cover": "إيقاف الغطاء عن الحركة" }, "details": "التفاصيل", + "dismiss": "استبعاد الحوار", + "edit": "تحرير الكيان", + "history": "التاريخ", "last_changed": "آخر تعديل", "last_updated": "آخر تحديث", + "person": { + "create_zone": "إنشاء منطقة من الموقع الحالي" + }, + "remote": { + "activity": "النشاط الحالي" + }, "restored": { + "confirm_remove_text": "هل أنت متأكد أنك تريد إزالة هذا الكيان؟", "not_provided": "هذا الكيان غير متاح حاليًا وهو معزول عن تكامل أو جهاز تمت إزالته أو تغييره أو اختلال وظيفته." }, "script": { @@ -614,7 +874,10 @@ "title": "تعليمات التحديث" }, "vacuum": { + "clean_spot": "بقعة نظيفة", + "commands": "أوامر المكنسة الكهربائية:", "fan_speed": "سرعة المروحة", + "locate": "حدد", "pause": "إيقاف مؤقت", "return_home": "العودة للرئيسية", "start": "بدء", @@ -642,6 +905,17 @@ "description": "تم حفظ الخيارات بنجاح." } }, + "quick-bar": { + "commands": { + "navigation": { + "navigate_to": "انتقل إلى {panel}" + }, + "server_control": { + "perform_action": "{action} الخادم" + } + }, + "filter_placeholder": "عامل تصفية الكيان" + }, "voice_command": { "did_not_hear": "Home Assistant لم يسمع أي شيء", "label": "اكتب سؤالاً واضغط على \"إدخال\"", @@ -677,19 +951,28 @@ }, "zha_reconfigure_device": { "attribute": "السمه", + "battery_device_warning": "ستحتاج إلى تنبيه او تشغيل الأجهزة التي تعمل بالبطاريات قبل بدء عملية إعادة التكوين. ارجع إلى دليل جهازك للحصول على إرشادات حول كيفية تنبيه او تشغيل الجهاز.", + "bind_header": "ربط", "button_hide": "أخف التفاصيل", "button_show": "إظهار التفاصيل", + "cluster_header": "تجمع", "configuration_complete": "اكتمال إعادة تكوين الجهاز.", "configuration_failed": "فشلت إعادة تكوين الجهاز. قد تتوفر معلومات إضافية في السجلات.", - "run_in_background": "يمكنك إغلاق هذا الحوار وستستمر إعادة التكوين في الخلفية." + "configuring_alt": "تكوين", + "heading": "إعادة تكوين الجهاز", + "in_progress": "يتم إعادة تكوين الجهاز. هذا قد يستغرق بعض الوقت.", + "introduction": "أعد تكوين جهاز على شبكة Zigbee الخاصة بك. استخدم هذه الميزة إذا كان جهازك لا يعمل بشكل صحيح.", + "reporting_header": "إبلاغ", + "run_in_background": "يمكنك إغلاق هذا الحوار وستستمر إعادة التكوين في الخلفية.", + "start_reconfiguration": "بدء إعادة التكوين" } }, "duration": { "day": "{count} {count, plural,\none {يوم}\nother {أيام}\n}", "hour": "{count} {count, plural,\none {ساعة}\nother {ساعات}\n}", "minute": "{count} {count, plural,\n one {دقيقة}\n other {دقائق}\n}", - "second": "{count} {count, plural,\none {ثانية}\nother {ثواني}\n}", - "week": "{count} {count, plural,\none {أسبوع}\nother {أسابيع}\n}" + "second": "{count, plural,\n one {ثانية}\n two {ثانيتين}\n other {{count} ثانية}\n}", + "week": "{count, plural,\n one {اسبوع}\n two {اسبوعين}\n other {{count} اسابيع}\n}" }, "errors": { "config": { @@ -699,7 +982,17 @@ "error_detected": "تم الكشف عن أخطاء التكوين", "key_missing": "المفتاح المطلوب \" {key} \" مفقود.", "key_not_expected": "المفتاح \" {key} \" غير متوقع أو غير مدعوم بواسطة المحرر المرئي.", + "key_wrong_type": "القيمة المتوفرة ل \"{key}\" غير معتمدة من قبل المحرر المرئي. نحن ندعم ({type_correct}) ولكن تلقينا ({type_wrong}).", + "no_template_editor_support": "القوالب غير مدعومة في المحرر المرئي", "no_type_provided": "لم يتم تقديم أي نوع." + }, + "supervisor": { + "ask": "اطلب المساعدة", + "observer": "تحقق من المراقب", + "reboot": "حاول إعادة تشغيل المضيف", + "system_health": "تحقق من صحة النظام", + "title": "تعذر تحميل لوحة supervisor!", + "wait": "إذا كنت قد بدأت للتو ، فتأكد من منح supervisor الوقت الكافي للبدء." } }, "login-form": { @@ -710,15 +1003,18 @@ "notification_drawer": { "click_to_configure": "انقر هنا لتعديل {entity}", "close": "إغلاق", + "dismiss_all": "إخفي الكل", "empty": "لاتوجد إشعارات", "title": "الاشعارات" }, "notification_toast": { "connection_lost": "انقطع الاتصال. جاري إعادة الاتصال ...", + "integration_starting": "بدء {integration}، لن يتوفر كل شيء حتى يتم الانتهاء منه.", "service_call_failed": "فشل الاتصال بخدمة {service} .", "started": "Home Assistant بدأ!", "starting": "يبدأ برنامج Home Assistant حاليا ، ولن يكون كل شيء متاحًا حتى الانتهاء.", - "triggered": "تم تشغيل {name}" + "triggered": "تم تشغيل {name}", + "wrapping_up_startup": "اختتام بدء التشغيل، لن يكون كل شيء متاحا حتى يتم الانتهاء منه." }, "panel": { "config": { @@ -762,6 +1058,20 @@ "automation": { "caption": "الأتمتة", "description": "إنشاء قاعدة سلوكية مخصصة لمنزلك.", + "dialog_new": { + "blueprint": { + "use_blueprint": "استخدم مخططًا" + }, + "header": "إنشاء أتمتة جديدة", + "how": "كيف تريد إنشاء الأتمتة الجديدة الخاصة بك؟", + "start_empty": "ابدأ بأتمتة فارغة", + "thingtalk": { + "create": "إنشاء", + "header": "صِف الأتمتة التي تريد إنشاءها", + "input_label": "ماذا يجب أن تفعل هذه الأتمتة؟", + "intro": "وسنحاول إنشائه من أجلك. على سبيل المثال: أطفئ الأنوار عندما أغادر." + } + }, "editor": { "actions": { "add": "أضف إجراء", @@ -771,6 +1081,7 @@ "header": "الإجراءات", "introduction": "الإجراءات هي ما سيفعله Home Assistant عند تشغيل الأتمتة.", "learn_more": "معرفة المزيد عن الإجراءات", + "name": "إجراء", "type_select": "نوع الإجراء", "type": { "condition": { @@ -784,6 +1095,7 @@ "action": "أضف إجراء", "extra_fields": { "code": "الرمز", + "flash": "فلاش", "humidity": "الرطوبة", "message": "رسالة", "mode": "الوضع", @@ -798,12 +1110,18 @@ "label": "إجراء الحريق", "service_data": "بيانات الخدمة" }, + "repeat": { + "label": "كرر" + }, "scene": { "label": "تنشيط مشهد" }, "service": { "label": "طلب خدمة" }, + "wait_for_trigger": { + "label": "انتظر المشغل" + }, "wait_template": { "label": "الإنتظار", "timeout": "الحد الأقصى (إختياري)", @@ -813,14 +1131,21 @@ "unsupported_action": "لا يوجد محرر مرئي يدعم الإجراء: {action}" }, "alias": "الاسم", + "blueprint": { + "blueprint_to_use": "مخطط للاستخدام", + "header": "مخطط", + "no_blueprints": "ليس لديك أي مخططات", + "no_inputs": "لا يحتوي هذا المخطط على أي مدخلات." + }, "conditions": { "add": "إضافة شرط", "delete": "حذف", "delete_confirm": "هل تريد الحذف فعلا؟", "duplicate": "تكرار", "header": "الشروط", - "introduction": "الشروط هي جزء اختياري من قواعد المتحكم الآلي ويمكن استخدامها لمنع تفعّل الإجراء بالمشغل. الشروط تبدو متشابهة جدًا مع المشغلات ولكنها مختلفة جدًا. سينظر المشغل في الأحداث التي تحدث في النظام بينما ينظر الشرط فقط إلى كيفية ظهور النظام الآن. يستطيع المشغل ملاحظة أن مفتاح التشغيل تم تشغيله. بينما الشرط يرى فقط ما إذا كان أحد المفاتيح هل هو قيد التشغيل أو الإيقاف حاليًا. \n\n [مزيد من المعلومات حول الشروط.] (https://home-assistant.io/docs/scripts/conditions/)", + "introduction": "الشروط اختيارية وستمنع تشغيل الأتمتة ما لم يتم استيفاء جميع الشروط.", "learn_more": "معرفة المزيد عن الشروط", + "name": "الشرط", "type_select": "نوع الشرط", "type": { "and": { @@ -870,6 +1195,7 @@ "after": "بعد", "before": "قبل", "label": "وقت", + "type_value": "وقت ثابت", "weekdays": { "fri": "الجمعة", "mon": "الاثنين", @@ -886,21 +1212,26 @@ "zone": "المنطقة" } }, - "unsupported_condition": "شرط غير مدعوم: {condition}" + "unsupported_condition": "لا يوجد محرر مرئي يدعم الشرط: {condition}" }, + "copy_to_clipboard": "نسخ إلى الحافظة", "default_name": "أتمتة جديدة", "description": { "label": "الوصف", "placeholder": "وصف اختياري" }, + "edit_ui": "تحرير في المحرر المرئي", + "edit_yaml": "تحرير في YAML", "enable_disable": "تمكين/تعطيل التنفيذ التلقائي", "introduction": "استخدم الأتمتة لإضفاء الحيوية على منزلك.", "load_error_not_editable": "الأتمتة فقط في automations.yaml قابلة للتحرير.", "load_error_unknown": "خطأ في تحميل الأتمتة ({err_no}).", "max": { + "parallel": "أقصى عدد من التشغيلات المتوازية", "queued": "طول قائمة الإنتظار" }, "modes": { + "description": "يتحكم الوضع في ما يحدث عند تشغيل الأتمتة أثناء استمرار تشغيل الإجراءات من مشغل سابق. تحقق من {documentation_link} للحصول على مزيد من المعلومات.", "documentation": "وثائق الأتمتة", "label": "وضع", "parallel": "موازي", @@ -911,6 +1242,7 @@ "move_down": "تحرك لأسفل", "move_up": "تحريك لأعلى", "save": "حفظ", + "show_trace": "عرض التتبع", "triggers": { "add": "أضف مشغل", "delete": "حذف", @@ -975,6 +1307,9 @@ "sunrise": "شروق الشمس", "sunset": "غروب الشمس" }, + "tag": { + "label": "علامه" + }, "template": { "label": "نموذج", "value_template": "نموذج القيمة" @@ -988,7 +1323,8 @@ "time": { "at": "عند", "label": "الوقت", - "type_input": "قيمة مساعد التاريخ/الوقت" + "type_input": "قيمة مساعد التاريخ/الوقت", + "type_value": "وقت ثابت" }, "webhook": { "label": "Webhook", @@ -1011,6 +1347,10 @@ "add_automation": "أضف أتمتة", "delete_automation": "حذف الأتمتة", "delete_confirm": "هل أنت متأكد أنك تريد حذف هذه الأتمتة؟", + "dev_automation": "تصحيح الأتمتة", + "dev_only_editable": "فقط عمليات الاتمتة التي تم تعيين معرف فريد لها يمكن تصحيح أخطاءها.", + "duplicate": "تكرار", + "duplicate_automation": "تكرار الاتمتة", "edit_automation": "تحرير الأتمتة", "header": "محرر الأتمتة", "headers": { @@ -1036,8 +1376,39 @@ }, "blueprint": { "add": { + "community_forums": "منتديات المجتمع", + "error_no_url": "الرجاء إدخال عنوان URL للمخطط.", + "file_name": "مسار Blueprint", + "header": "استيراد مخطط", + "import_btn": "معاينة مخطط", + "import_header": "Blueprint \"{name}\"", + "import_introduction_link": "يمكنك استيراد مخططات المستخدمين الآخرين من Github و {community_link} . أدخل عنوان URL للمخطط أدناه.", + "importing": "تحميل المخطط ...", + "raw_blueprint": "محتوى المخطط", "save_btn": "استورد Blueprint ...", - "saving": "جاري استيراد Blueprint ..." + "saving": "جاري استيراد Blueprint ...", + "unsupported_blueprint": "هذا المخطط غير مدعوم", + "url": "عنوان URL للمخطط" + }, + "caption": "المخططات", + "description": "إدارة المخططات", + "overview": { + "add_blueprint": "استورد مخطط...", + "confirm_delete_header": "حذف هذا المخطط؟", + "confirm_delete_text": "هل أنت متأكد أنك تريد حذف هذا المخطط؟", + "delete_blueprint": "حذف المخطط", + "discover_more": "اكتشف المزيد من المخططات", + "header": "محرر المخطط", + "headers": { + "domain": "المجال", + "file_name": "اسم الملف", + "name": "الاسم" + }, + "introduction": "يسمح لك تكوين المخطط باستيراد المخططات الخاصة بك وإدارتها.", + "learn_more": "تعرف على المزيد حول استخدام المخططات", + "share_blueprint": "شارك المخطط", + "share_blueprint_no_url": "تعذرت مشاركة المخطط: لا يوجد عنوان url للمصدر", + "use_blueprint": "إنشاء أتمتة" } }, "cloud": { @@ -1071,6 +1442,8 @@ "info": "مع تكامل Google Assistant لـ Home Assistant Cloud ، ستتمكن من التحكم في جميع أجهزة Home Assistant الخاصة بك عبر أي جهاز يدعم Google Assistant.", "info_state_reporting": "إذا قمت بتمكين الإبلاغ عن الحالة ، فسيرسل Home Assistant جميع تغييرات حالة الكيانات المكشوفة إلى Google. يتيح لك هذا دائمًا الاطلاع على أحدث الحالات في تطبيق Google.", "manage_entities": "إدارة الكيانات", + "not_configured_text": "قبل أن تتمكن من استخدام Google Assistant ، تحتاج إلى تنشيط مهارة Home Assistant Cloud لـ Google Assistant في تطبيق Google Home.", + "not_configured_title": "لم يتم تنشيط Google Assistant", "security_devices": "أجهزة الأمان", "sync_entities": "مزامنة الكيانات مع Google", "sync_entities_404_message": "فشل مزامنة الكيانات الخاصة بك مع Google ، اطلب من Google \"Hey Google ، مزامنة أجهزتي\" لمزامنة الكيانات الخاصة بك.", @@ -1099,6 +1472,7 @@ "sign_out": "تسجيل الخروج", "thank_you_note": "شكرًا لك على كونك جزءًا من Home Assistant Cloud. بفضل أشخاص مثلك ، يمكننا تقديم تجربة أتمتة منزلية رائعة للجميع. شكرا لك!", "tts": { + "default_language": "اللغة الافتراضية لاستخدامها", "dialog": { "example_message": "مرحبًا {name} ، يمكنك تشغيل أي نص على أي مشغل وسائط مدعوم!", "header": "جرب تحويل النص إلى كلام", @@ -1106,6 +1480,10 @@ "target": "الهدف", "target_browser": "تصفح" }, + "female": "أنثى", + "info": "قم بإضفاء الطابع الشخصي على منزلك من خلال جعله يتحدث إليك باستخدام خدمات تحويل النص إلى كلام الخاصة بنا. يمكنك استخدام هذا في الأتمتة والبرامج النصية باستخدام {service} .", + "male": "ذكر", + "title": "النص إلى الكلام", "try": "حاول" }, "webhooks": { @@ -1123,7 +1501,13 @@ }, "alexa": { "banner": "تم تعطيل تحرير الكيانات التي يتم كشفها عبر واجهة المستخدم هذه لأنك قمت بتكوين عوامل تصفية الكيان في configuration.yaml.", + "dont_expose_entity": "عدم كشف الكيان", + "expose_entity": "كشف الكيان", + "exposed": "{selected} مكشوف", "exposed_entities": "الكيانات المكشوفة", + "follow_domain": "تابع المجال", + "manage_domains": "إدارة المجالات", + "not_exposed": "{selected} غير مكشوف", "not_exposed_entities": "الكيانات غير المكشوفة", "title": "Alexa" }, @@ -1144,7 +1528,8 @@ "info_disable_webhook": "إذا كنت لم تعد ترغب في استخدام هذا الwebhook ، يمكنك", "link_disable_webhook": "عطله", "managed_by_integration": "تتم إدارة webhook هذا بواسطة تكامل ولا يمكن تعطيله.", - "view_documentation": "عرض الوثائق" + "view_documentation": "عرض الوثائق", + "webhook_for": "Webhook لـ{name}" }, "forgot_password": { "check_your_email": "تحقق من بريدك الإلكتروني للحصول على إرشادات حول كيفية إعادة تعيين كلمة المرور الخاصة بك.", @@ -1158,8 +1543,14 @@ "google": { "banner": "تم تعطيل تحرير الكيانات التي يتم كشفها عبر واجهة المستخدم هذه لأنك قمت بتكوين عوامل تصفية الكيان في configuration.yaml.", "disable_2FA": "تعطيل المصادقة الثنائية", + "dont_expose_entity": "عدم كشف الكيان", "expose": "كشف لـ Google Assistant", + "expose_entity": "كشف الكيان", + "exposed": "{selected} مكشوف", "exposed_entities": "الكيانات المكشوفة", + "follow_domain": "تابع المجال", + "manage_domains": "إدارة المجالات", + "not_exposed": "{selected} غير مكشوف", "not_exposed_entities": "الكيانات غير المكشوفة", "title": "Google Assistant" }, @@ -1217,8 +1608,23 @@ "section": { "core": { "analytics": { + "documentation": "قبل تمكين هذا ، تأكد من زيارة صفحة وثائق التحليلات {link} لفهم ما ترسله وكيفية تخزينه.", + "header": "تحليلات", + "instance_id": "معرف المثيل: {huuid}", + "introduction": "شارك معلومات التثبيت للمساعدة في تحسين Home Assistant ومساعدتنا في إقناع الشركات المصنعة بإضافة ميزات تحكم محلية وميزات تركز على الخصوصية.", + "learn_more": "كيف نعالج بياناتك", + "needs_base": "تحتاج إلى تمكين التحليلات الأساسية حتى يكون هذا الخيار متاحًا", "preference": { + "base": { + "description": "معرف المثيل والإصدار ونوع التثبيت.", + "title": "التحليلات الأساسية" + }, + "diagnostics": { + "description": "مشاركة تقارير الأعطال عند حدوث أخطاء غير متوقعة.", + "title": "التشخيص" + }, "statistics": { + "description": "إجمالي الكيانات المستخدمة والمستخدمين والعناصر الأخرى.", "title": "إحصائيات الاستخدام" }, "usage_supervisor": { @@ -1285,6 +1691,7 @@ "no_device_automations": "لا توجد أتمتة متاحة لهذا الجهاز.", "triggers": { "caption": "افعل شيئًا عندما ...", + "no_triggers": "لا مستهدفات", "unknown_trigger": "مشغل غير معروف" }, "unknown_automation": "أتمتة غير معروفة" @@ -1293,6 +1700,7 @@ "caption": "الأجهزة", "confirm_delete": "هل أنت متأكد أنك تريد حذف هذا الجهاز؟", "confirm_disable_config_entry": "لا توجد أجهزة أخرى لإدخال التكوين {entry_name} ، فهل تريد بدلاً من ذلك تعطيل إدخال التكوين؟", + "confirm_rename_entity_ids": "هل تريد أيضًا إعادة تسمية معرفات الكيانات الخاصة بكياناتك؟", "confirm_rename_entity_ids_warning": "هذا لن يغير أي تكوين (مثل الأتمتة ، والسكربتات ، والمشاهد ، ولوحات المعلومات) التي تستخدم حاليا هذه الكيانات! سيكون عليك تحديثها بنفسك لاستخدام معرف الكيان الجديد!", "data_table": { "area": "المنطقة", @@ -1323,6 +1731,7 @@ "hide_disabled": "إخفاء معطل", "none": "هذا الجهاز ليس له كيانات" }, + "name": "الاسم", "no_devices": "لا توجد أجهزة", "picker": { "filter": { @@ -1348,7 +1757,8 @@ "scripts": "السكريبتات", "unknown_error": "خطأ غير معروف", "unnamed_device": "جهاز غير مسمى", - "update": "تحديث" + "update": "تحديث", + "update_device_error": "فشل تحديث الجهاز" }, "entities": { "caption": "الكيانات", @@ -1359,14 +1769,17 @@ "confirm_text": "لن تتم إضافة الكيانات المعطلة إلى Home Assistant." }, "enable_selected": { + "button": "تمكين المحدد", "confirm_text": "سيؤدي ذلك إلى جعلها متاحة في Home Assistant مرة أخرى إذا تم تعطيلها الآن." }, "filter": { + "show_all": "إظهار الكل", "show_disabled": "إظهار الكيانات المعطلة", "show_unavailable": "إظهار الكيانات غير المتوفرة" }, "header": "الكيانات", "headers": { + "area": "المنطقة", "entity_id": "معرف الكيان", "integration": "تكامل", "name": "الاسم" @@ -1374,8 +1787,10 @@ "introduction": "يحتفظ Home Assistant بسجل لكل كيان يراه على الإطلاق ويمكن تحديده بشكل فريد. سيكون لكل من هذه الكيانات معرف كيان معين سيتم حجزه لهذا الكيان فقط.", "introduction2": "استخدم سجل الكيان لتجاوز الاسم أو تغيير معرّف الكيان أو إزالة الإدخال من Home Assistant.", "remove_selected": { + "button": "ازل المحدد", "confirm_partly_text": "يمكنك فقط إزالة {removable} من الكيانات {selected} . لا يمكن إزالة الكيانات إلا عندما يتوقف التكامل عن توفير الكيانات. في بعض الأحيان ، يتعين عليك إعادة تشغيل Home Assistant قبل أن تتمكن من إزالة كيانات التكامل الذي تمت إزالته. هل أنت متأكد من أنك تريد إزالة الكيانات القابلة للإزالة؟", - "confirm_partly_title": "يمكن فقط إزالة {number} الكيانات المحددة." + "confirm_partly_title": "فقط {number} {number, plural,\n one {كيان محدد}\n other {كيان محدد}\n} يمكن حذفه.", + "confirm_text": "يجب عليك إزالتها من إعدادات Lovelace والأتمتة إذا كانت تحتوي على هذه الكيانات." }, "search": "إبحث عن الكيانات", "status": { @@ -1387,10 +1802,15 @@ }, "filtering": { "clear": "محو", - "filtering_by": "التصفية حسب" + "filtering_by": "التصفية حسب", + "show": "عرض" + }, + "hassio": { + "button": "تكوين" }, "header": "تكوين Home Assistant", "helpers": { + "description": "العناصر التي تساعد في بناء الأتمتة", "dialog": { "create": "إضافة" }, @@ -1403,18 +1823,20 @@ } }, "types": { + "counter": "العداد", "input_boolean": "تبديل", "input_datetime": "التاريخ و / أو الوقت", "input_number": "رقم", "input_select": "القائمه المنسدله", - "input_text": "النص" + "input_text": "النص", + "timer": "الموقت" } }, "info": { "built_using": "بنيت باستخدام", "caption": "معلومات", "custom_uis": "واجهات مستخدم مخصصة:", - "description": "معلومات حول تثبيت Home Assistant", + "description": "الإصدار وصحة النظام وروابط للوثائق", "developed_by": "تم تطويره بواسطة مجموعة من الأشخاص الرائعين.", "documentation": "الوثائق", "frontend": "واجهة Frontend", @@ -1440,18 +1862,24 @@ }, "integrations": { "add_integration": "أضف تكامل", + "attention": "مطلوب الانتباه", "caption": "التكاملات", "config_entry": { "area": "في {area}", + "check_the_logs": "تحقق من السجلات", + "configure": "إعداد", "delete": "حذف", "delete_confirm": "هل تريد حقا حذف هذا التكامل؟", + "depends_on_cloud": "يعتمد على السحابة", "device_unavailable": "الجهاز غير متوفر", "devices": "{count} {count, plural,\n one {جهاز}\n other {أجهزة}\n}", "disable_error": "فشل تمكين التكامل أو تعطيله", + "disable_restart_confirm": "أعد تشغيل Home Assistant لإنهاء تعطيل هذا التكامل", "disable": { "disable_confirm": "هل أنت متأكد أنك تريد تعطيل إدخال التكوين هذا؟ سيتم تعطيل أجهزتها وكياناتها.", "disabled_by": { - "device": "جهاز" + "device": "جهاز", + "integration": "تكامل" } }, "disabled_polling": "تم تعطيل السحب التلقائي للبيانات المحدثة", @@ -1460,13 +1888,24 @@ "entity_unavailable": "الكيان غير متوفر", "firmware": "نظام التشغيل {version}", "hub": "متصل عبر", + "logs": "السجلات", "manuf": "بواسطة {manufacturer}", "no_area": "لا توجد منطقة", + "not_loaded": "لم يُحمل", "options": "خيارات", + "provided_by_custom_integration": "يتم توفيره من خلال تكامل مخصص", + "reload": "إعادة تحميل", + "reload_confirm": "تم إعادة تحميل التكامل", + "reload_restart_confirm": "أعد تشغيل Home Assistant لإنهاء إعادة تحميل هذا التكامل", "rename": "إعادة تسمية", "restart_confirm": "أعد تشغيل Home Assistant لإنهاء حذف هذا التكامل", "state": { - "setup_error": "فشل في التنصيب" + "failed_unload": "فشل إلغاء التحميل", + "loaded": "محمل", + "migration_error": "خطأ في الترحيل", + "not_loaded": "لم يُحمل", + "setup_error": "فشل في التنصيب", + "setup_retry": "إعادة محاولة الإعداد" }, "system_options": "خيارات النظام", "unnamed_entry": "إدخال بدون اسم" @@ -1474,7 +1913,9 @@ "config_flow": { "aborted": "تم الإلغاء", "close": "إغلاق", + "could_not_load": "لا يمكن تحميل تدفق التكوين", "created_config": "تم إنشاء تكوين لـ {name}.", + "error": "خطأ", "error_saving_area": "خطأ في حفظ المنطقة: {error}", "external_step": { "description": "تتطلب هذه الخطوة زيارة موقع خارجي للإكمال.", @@ -1483,20 +1924,24 @@ "finish": "إنهاء", "loading_first_time": "يرجى الانتظار بينما يتم تثبيت الـintegration", "next": "التالى", - "not_all_required_fields": "لم يتم تعبئة جميع الحقول المطلوبة." + "not_all_required_fields": "لم يتم تعبئة جميع الحقول المطلوبة.", + "not_loaded": "تعذر تحميل التكامل ، حاول إعادة تشغيل Home Assistant" }, "configure": "إعداد", "configured": "تم التكوين", + "confirm_new": "هل تريد إعداد {integration} ؟", "description": "إدارة التكاملات مع الخدمات أو الأجهزة", "details": "تفاصيل التكامل", "disable": { + "disabled_integrations": "تم تعطيل {number}", + "hide_disabled": "إخفاء عمليات التكامل المعطلة", "show": "عرض", "show_disabled": "إظهار عمليات التكامل المعطلة" }, "discovered": "مكتشف", "home_assistant_website": "موقع Home Assistant", "ignore": { - "confirm_delete_ignore": "سيؤدي ذلك إلى ظهور التكامل في عمليات التكامل المكتشفة مرة أخرى عند اكتشافها. قد يتطلب هذا إعادة تشغيل أو يستغرق بعض الوقت.", + "confirm_delete_ignore": "سيؤدي هذا إلى ظهور التكامل في عمليات الدمج المكتشفة مرة أخرى عند اكتشافها. قد يتطلب هذا إعادة التشغيل أو يستغرق بعض الوقت.", "confirm_delete_ignore_title": "توقف عن تجاهل {name} ؟", "confirm_ignore": "هل أنت متأكد أنك لا تريد إعداد هذا التكامل؟ يمكنك التراجع بالنقر على \"إظهار عمليات التكامل التي تم تجاهلها\" في القائمة بأعلى اليسار.", "confirm_ignore_title": "تجاهل اكتشاف {name} ؟", @@ -1509,12 +1954,13 @@ "integration": "تكامل", "integration_not_found": "لم يتم العثور على التكامل.", "new": "إعداد تكامل جديد", - "no_integrations": "يبدو أنه لم يتم تكوين أي تكاملات بعد. انقر على الزر أدناه لإضافة تكاملك الأول!", + "no_integrations": "يبدو أنه ليس لديك أي عمليات تكامل تمت تهيئتها حتى الآن. انقر فوق الزر أدناه لإضافة التكامل الأول الخاص بك!", "none": "لم يتم تكوين أي شيء حتى الآن", "none_found": "لم يتم العثور على تكاملات", "none_found_detail": "إضبط معايير بحثك.", - "note_about_integrations": "لا يمكن تكوين جميع التكاملات عبر واجهة المستخدم حتى الآن.", + "note_about_integrations": "لا توجد عمليات تكامل مطابقة لبحثك ، فقد لا يكون التكامل الذي تريد إعداده متاحًا للإعداد عبر واجهة المستخدم حتى الآن.", "note_about_website_reference": "يتوفر المزيد على ", + "reconfigure": "إعادة التكوين", "rename_dialog": "تحرير إسم إدخال هذا التكوين", "rename_input_label": "الاسم", "search": "إبحث عن التكاملات" @@ -1525,6 +1971,14 @@ "clear": "مسح", "description": "عرض سجلات Home Assistant", "details": "تفاصيل السجل ({level})", + "error_from_custom_integration": "نشأ هذا الخطأ من تكامل مخصص.", + "level": { + "critical": "حرج", + "debug": "تصحيح", + "error": "خطأ", + "info": "معلومات", + "warning": "تحذير" + }, "load_full_log": "تحميل سجل Home Assistant الكامل", "loading_log": "جارٍ تحميل سجل الأخطاء ...", "multiple_messages": "ظهرت الرسالة لأول مرة في {time} وتظهر {counter} مرات", @@ -1554,7 +2008,8 @@ "title": "عنوان", "title_required": "العنوان مطلوب.", "update": "تحديث", - "url": "عنوان Url" + "url": "URL", + "url_error_msg": "يجب أن يحتوي عنوان URL على - ولا يمكن أن يحتوي على مسافات أو أحرف خاصة ، باستثناء _ و -" }, "picker": { "add_dashboard": "أضافة لوحة تحكم جديدة", @@ -1569,7 +2024,9 @@ "open": "فتح" } }, + "description": "قم بإنشاء مجموعات مخصصة من البطاقات للتحكم في منزلك", "resources": { + "cant_edit_yaml": "انت تستخدم Lovelace في وضع YAML، ولذلك لا يمكنك إدارة الموارد الخاصة بك من خلال واجهة المستخدم. إدرها في configuration.yaml.", "confirm_delete": "هل أنت متأكد أنك تريد حذف هذا المورد؟", "detail": { "create": "إنشاء", @@ -1577,17 +2034,18 @@ "dismiss": "اغلاق", "type": "نوع الموارد", "update": "تحديث", - "url": "عنوان url", + "url": "URL", "url_error_msg": "عنوان URL هو حقل مطلوب" }, "picker": { "add_resource": "إضافة مورد", "headers": { "type": "النوع", - "url": "عنوان Url" + "url": "URL" }, "no_resources": "لا توجد موارد" }, + "refresh_body": "يجب عليك تحديث الصفحة لإكمال الإزالة. هل تريد التحديث الآن؟", "refresh_header": "هل تريد التحديث؟", "types": { "module": "وحدة جافا سكريبت" @@ -1600,15 +2058,24 @@ "title": "MQTT" }, "ozw": { + "button": "كوِن", + "common": { + "controller": "وحده تحكم", + "instance": "مثيل", + "network": "الشبكة" + }, "device_info": { "node_failed": "العقدة فشلت", "stage": "مرحلة", "zwave_info": "معلومات Z-Wave" }, "navigation": { + "network": "الشبكة", "node": { "dashboard": "لوحة المعلومات" - } + }, + "nodes": "العقد", + "select_instance": "حدد مثيل" }, "network_status": { "details": { @@ -1625,21 +2092,60 @@ "starting": "الاتصال بـ MQTT", "stopped": "توقف OpenZWave" }, + "offline": "غير متصل", + "online": "متصل", + "starting": "يبدء", "unknown": "مجهول" }, + "network": { + "header": "إدارة الشبكة", + "introduction": "إدارة وظائف الشبكة.", + "node_count": "{count} عقدة" + }, "node_config": { "wakeup_help": "يجب أن تكون العقد التي تعمل بالبطارية مستيقظة لتغيير تكوينها. إذا لم تكن العقدة مستيقظة، سيحاول OpenZWave تحديث تكوين العقدة في المرة التالية التي تستيقظ فيها، والتي قد تكون عدة ساعات (أو أيام) لاحقا. اتبع الخطوات التالية لتنبيه جهازك:" }, "node_query_stages": { + "complete": "اكتملت عملية المقابلة", + "configuration": "الحصول على قيم التكوين من العقدة", + "dynamic": "الحصول على القيم المتغيرة بشكل متكرر من العقدة", "instances": "الحصول على تفاصيل حول المثيلات أو القنوات التي يدعمها الجهاز", - "static": "الحصول على قيم ثابتة من الجهاز" + "probe": "التحقق مما إذا كانت العقدة مستيقظة / حية", + "static": "الحصول على قيم ثابتة من الجهاز", + "wakeup": "إعداد الدعم لقوائم انتظار التنبيه والرسائل" }, "node": { - "button": "تفاصيل العقدة" + "button": "تفاصيل العقدة", + "not_found": "لم يتم العثور على العقدة" + }, + "nodes_table": { + "failed": "فشل", + "id": "معرف", + "manufacturer": "الشركه المصنعه", + "model": "الموديل", + "query_stage": "مرحلة الاستعلام", + "zwave_plus": "Z-Wave Plus" }, "refresh_node": { + "battery_note": "إذا كانت العقدة تعمل بالبطارية ، فتأكد من تنشيطها قبل المتابعة", + "button": "تحديث العقدة", + "complete": "اكتمل تحديث العقدة", "description": "سيؤدي هذا إلى إخبار OpenZWave بإعادة إجراء مقابلة مع عقدة وتحديث فئات أوامر العقدة وقدراتها وقيمها.", + "node_status": "حالة العقدة", + "refreshing_description": "جاري تحديث معلومات العقدة ...", + "start_refresh_button": "ابدأ التحديث", + "step": "خطوة", + "title": "تحديث معلومات العقدة", + "wakeup_header": "تعليمات الاستيقاظ لـ", "wakeup_instructions_source": "يتم الحصول على تعليمات التنبيه من قاعدة بيانات جهاز مجتمع OpenZWave." + }, + "select_instance": { + "header": "حدد مثيل OpenZWave", + "introduction": "لديك أكثر من مثيل OpenZWave قيد التشغيل. ما هو المثال الذي تريد إدارته؟" + }, + "services": { + "add_node": "إضافة عقدة", + "remove_node": "إزالة عقدة" } }, "person": { @@ -1650,6 +2156,7 @@ "create_person": "إنشاء شخص", "description": "إدارة الأشخاص الذين يتتبعهم Home Assistant.", "detail": { + "confirm_delete_user": "هل أنت متأكد أنك تريد حذف حساب المستخدم لـ {name} ؟ لا يزال بإمكانك تتبع المستخدم ، ولكن لن يتمكن الشخص من تسجيل الدخول مرة أخرى.", "create": "إنشاء", "delete": "حذف", "device_tracker_intro": "حدد الأجهزة التي تخص هذا الشخص.", @@ -1665,14 +2172,18 @@ "update": "تحديث" }, "introduction": "هنا يمكنك تحديد كل شخص مهتم بـ Home Assistant.", - "no_persons_created_yet": "يبدو أنك لم تقم بإنشاء أي شخص حتى الآن.", - "note_about_persons_configured_in_yaml": "ملاحظة: لا يمكن تعديل الأشخاص الذين تم تكوينهم عبر config.yaml عبر واجهة المستخدم." + "learn_more": "تعلم المزيد عن الناس", + "no_persons_created_yet": "يبدو أنك لم تنشئ أي أشخاص حتى الآن.", + "note_about_persons_configured_in_yaml": "ملاحظة: لا يمكن تحرير الأشخاص الذين تم تكوينهم عبر configuration.yaml عبر واجهة المستخدم.", + "person_not_found": "لم نتمكن من العثور على الشخص الذي كنت تحاول تحريره.", + "person_not_found_title": "لم يتم العثور على الشخص" }, "scene": { "activated": "المشهد المنشط {name}.", "caption": "مشاهد", "description": "التقط حالات الجهاز واستدعها بسهولة لاحقًا", "editor": { + "default_name": "مشهد جديد", "devices": { "add": "إضافة جهاز", "delete": "حذف جهاز", @@ -1685,6 +2196,8 @@ "without_device": "كيانات بدون جهاز" }, "icon": "أيقونة", + "introduction": "استخدم المشاهد لإضفاء الحيوية على منزلك.", + "name": "الاسم", "save": "حفظ", "unsaved_confirm": "لديك تغييرات غير محفوظة. هل أنت متأكد من أنك تريد أن تغادر ؟" }, @@ -1696,6 +2209,7 @@ "name": "الاسم" }, "learn_more": "تعرف على المزيد حول المشاهد", + "no_scenes": "لم نتمكن من العثور على أي مشاهد", "pick_scene": "اختر مشهدًا لتحريره" } }, @@ -1704,13 +2218,18 @@ "description": "تنفيذ سلسلة من الإجراءات.", "editor": { "alias": "الاسم", + "default_name": "سكريبت جديد", + "header": "سكريبت: {name}", "icon": "أيقونة", "id": "معرف الكيان", "id_already_exists": "هذا المعرف موجود بالفعل", + "introduction": "استخدم البرامج النصية لتشغيل سلسلة من الإجراءات.", "max": { + "parallel": "أقصى عدد من التشغيلات المتوازية", "queued": "طول قائمة الإنتظار" }, "modes": { + "description": "يتحكم الوضع في ما يحدث عند استدعاء البرنامج النصي بينما لا يزال قيد التشغيل من استدعاء واحد أو أكثر من الاستدعاءات السابقة. تحقق من {documentation_link} للحصول على مزيد من المعلومات.", "label": "وضع", "parallel": "موازي", "queued": "في قائمة الإنتظار", @@ -1735,20 +2254,36 @@ "section": { "reloading": { "automation": "الأتمتة", + "command_line": "كيانات سطر الأوامر", "core": "الموقع والتخصيصات", + "filesize": "كيانات حجم الملف", + "filter": "تصفية الكيانات", + "generic": "كيانات كاميرا IP عامة", + "generic_thermostat": "كيانات ترموستات عامة", "group": "خدمات المجموعات وكيانات المجموعة والاشعارات", "heading": "إعادة تحميل تكوين YAML", - "input_boolean": "إعادة تحميل مدخلات منطقية", + "history_stats": "كيانات احصائيات التاريخ", + "homekit": "HomeKit", + "input_boolean": "قيم الإدخال المنطقية", "input_datetime": "مدخل الوقت والتاريخ", - "input_number": "إعادة تحميل أرقام الإدخال", - "input_select": "إعادة تحميل تحديدات الإدخال", - "input_text": "إعادة تحميل النصوص المدخلة", + "input_number": "أرقام الإدخال", + "input_select": "تحديد المدخلات", + "input_text": "نصوص الإدخال", "introduction": "يمكن إعادة تحميل بعض أجزاء Home Assistant دون الحاجة إلى إعادة التشغيل. سيؤدي الضغط على إعادة التحميل إلى تفريغ تكوين YAML الحالي وتحميل التكوين الجديد.", - "person": "إعادة تحميل الأشخاص", + "min_max": "الحد الأدنى/الأقصى للكيانات", + "mqtt": "كيانات MQTT المكونة يدويًا", + "person": "الناس", + "reload": "{domain}", + "rest": "اعادة ضبط الكيانات وإخطار الخدمات", + "rpi_gpio": "كيانات Raspberry Pi GPIO", "scene": "مشاهد", "script": "السكريبتات", + "smtp": "خدمات إعلام SMTP", + "statistics": "الكيانات الإحصائية", + "telegram": "خدمات اشعارات Telegram", + "template": "كيانات القالب", "universal": "كيانات مشغل الوسائط العالمي", - "zone": "إعادة تحميل المناطق" + "zone": "المناطق" }, "server_management": { "confirm_restart": "هل تريد بالتأكيد اعادة تشغيل Home Assistant؟", @@ -1768,20 +2303,42 @@ } }, "tag": { + "add_tag": "إضافة علامة", + "automation_title": "تم فحص العلامة {name}", + "caption": "العلامات", "confirm_remove": "هل أنت متأكد أنك تريد إزالة العلامة {tag} ؟", "confirm_remove_title": "إزالة العلامة؟", + "create_automation": "إنشاء أتمتة مع العلامة", + "description": "تشغيل الأتمتة عند فحص علامة NFC أو رمز الاستجابة السريعة وما إلى ذلك", "detail": { + "companion_apps": "التطبيقات المصاحبة", + "create": "انشئ", + "create_and_write": "أنشئ واكتب", + "delete": "حذف", + "description": "وصف", + "name": "الاسم", + "new_tag": "علامة جديدة", + "tag_id": "معرف العلامة", + "tag_id_placeholder": "تولد تلقائيًا عند تركها فارغة", "update": "تحديث" }, + "edit": "تعديل", "headers": { - "last_scanned": "آخر فحص" - } + "last_scanned": "آخر فحص", + "name": "الاسم" + }, + "learn_more": "تعرف على المزيد حول العلامات", + "never_scanned": "لم يتم البحث أبدا", + "no_tags": "لا توجد علامات", + "write": "كتابة" }, "users": { "add_user": { "caption": "أضف مستخدم", "create": "إنشاء", - "password": "كلمه السر" + "password": "كلمه السر", + "password_confirm": "تأكيد كلمة المرور", + "password_not_match": "كلمات المرور غير متطابقة" }, "caption": "المستخدمين", "description": "إدارة حسابات مستخدمي Home Assistant", @@ -1796,58 +2353,87 @@ "delete_user": "حذف المستخدم", "group": "مجموعة", "id": "معرف", - "name": "الاسم", + "name": "اسم العرض", + "new_password": "كلمة مرور جديدة", "owner": "مالك", + "password_changed": "تم تغيير كلمة المرور بنجاح", "system_generated": "منشئ من قبل النظام", "system_generated_users_not_editable": "غير قادر على تحديث المستخدمين الذين تم إنشاؤهم بواسطة النظام.", "system_generated_users_not_removable": "غير قادر على إزالة المستخدمين الذين تم إنشاؤهم من قبل النظام.", "unnamed_user": "مستخدم غير مسمى", - "update_user": "تحديث" + "update_user": "تحديث", + "username": "اسم المستخدم" }, "picker": { "headers": { "group": "مجموعة", - "name": "الاسم", - "system": "نظام" + "is_active": "نشط", + "is_owner": "المالك", + "name": "اسم العرض", + "system": "منشئ من قبل النظام", + "username": "اسم المستخدم" } }, - "users_privileges_note": "مجموعة المستخدمين هي عمل قيد التقدم. لن يتمكن المستخدم من إدارة المثيل عبر واجهة المستخدم. ما زلنا نقوم بتدقيق جميع نقاط نهاية واجهة برمجة تطبيقات الإدارة للتأكد من أنها تحد من الوصول إلى المسؤولين بشكل صحيح." + "users_privileges_note": "ميزة مجموعة المستخدم هي عمل قيد التقدم. لن يتمكن المستخدم من إدارة المثيل عبر واجهة المستخدم. ما زلنا نراجع جميع نقاط نهاية واجهة برمجة التطبيقات للإدارة للتأكد من أنها تقيد الوصول بشكل صحيح إلى المسؤولين." }, "zha": { "add_device": "إضافة جهاز", "add_device_page": { "discovered_text": "ستظهر الأجهزة هنا عند إكتشافها.", - "no_devices_found": "لم يتم العثور على أجهزة ، تأكد من أنها في وضع الاقتران(pairing) واجعلها مستيقظة أثناء اكتشافها قيد التشغيل.", + "no_devices_found": "لم يتم العثور على أي أجهزة ، تأكد من أنها في وضع الاقتران واجعلها مستيقظة أثناء اكتشافها قيد التشغيل.", "pairing_mode": "تأكد من أن أجهزتك في وضع الاقتران. تحقق من تعليمات جهازك حول كيفية القيام بذلك.", "search_again": "ابحث مرة أخرى", "spinner": "البحث عن أجهزة ZHA Zigbee ..." }, "button": "كوِن", "clusters": { - "header": "عناقيد" + "header": "عناقيد", + "introduction": "الكتل هي لبنات البناء لوظائف Zigbee. وهي تفصل الوظائف إلى وحدات منطقية. هناك أنواع العميل والخادم والتي تتألف من سمات وأوامر." }, "common": { "value": "قيمة" }, "configuration_page": { + "shortcuts_title": "الاختصارات", + "update_button": "تحديث التكوين", "zha_options": { - "enable_identify_on_join": "تمكين تأثير التعريف عند انضمام الأجهزة إلى الشبكة" + "default_light_transition": "وقت انتقال الضوء الافتراضي (بالثواني)", + "enable_identify_on_join": "تمكين تأثير التعريف عند انضمام الأجهزة إلى الشبكة", + "title": "الخيارات العامة" } }, "device_pairing_card": { + "CONFIGURED_status_text": "قيد التهيئة", + "INITIALIZED": "اكتملت التهيئة", + "INITIALIZED_status_text": "الجهاز جاهز للاستخدام", "INTERVIEW_COMPLETE": "اكتملت المقابلة", "INTERVIEW_COMPLETE_status_text": "تكوين", "PAIRED": "تم العثور على الجهاز", "PAIRED_status_text": "بدء المقابلة" }, "groups": { + "add_group": "أضف مجموعة", + "add_members": "إضافة أعضاء", + "create": "إنشاء مجموعة", + "create_group": "Zigbee أتمتة المنزل -- إنشاء مجموعة", "create_group_details": "أدخل التفاصيل المطلوبة لإنشاء مجموعة zigbee جديدة", - "group_details": "فيما يلي جميع التفاصيل الخاصة بمجموعة Zigbee المحددة." + "group_details": "فيما يلي جميع التفاصيل الخاصة بمجموعة Zigbee المحددة.", + "group_id": "معرف المجموعة", + "group_info": "معلومات المجموعة", + "group_name_placeholder": "أسم المجموعة", + "group_not_found": "لم يتم العثور على المجموعة!", + "groups": "المجموعات", + "members": "الأعضاء", + "remove_members": "إزالة الأعضاء", + "removing_members": "جاري إزالة الأعضاء" }, "network": { "caption": "الشبكة" }, "visualization": { + "auto_zoom": "تكبير تلقائي", + "caption": "التصور", + "header": "تصور الشبكة", "highlight_label": "تمييز الأجهزة", "zoom_label": "تكبير على الجهاز" } @@ -1856,16 +2442,21 @@ "add_zone": "إضافة المنطقة", "caption": "المناطق", "configured_in_yaml": "لا يمكن تحرير المناطق التي تم تكوينها بواسطة configuration.yaml عبر واجهة المستخدم.", - "description": "إدارة المناطق التي تريد تتبع الأشخاص فيها.", + "description": "إدارة المناطق التي تريد تتبع الأشخاص فيها", "detail": { "create": "إضافة", "delete": "حذف", "icon": "أيقونة", + "icon_error_msg": "يجب أن يكون الرمز بالتنسيق ''prefix:iconname''، على سبيل المثال:\" mdi: home \"", + "latitude": "خط العرض", + "longitude": "خط الطول", "name": "الاسم", "new_zone": "منطقة جديدة", + "passive_note": "يتم إخفاء المناطق السلبية في الواجهة الأمامية ولا يتم استخدامها كموقع لتتبع الأجهزة. هذا مفيد إذا كنت ترغب فقط في استخدامه للأتمتة.", "required_error_msg": "هذا الحقل مطلوب", "update": "تحديث" }, + "edit_home_zone": "لا يمكن تعديل نصف قطر المنطقة الرئيسية من Frontend بعد. اسحب العلامة على الخريطة لتحريك المنطقة الرئيسية.", "introduction": "تسمح لك المناطق بتحديد مناطق معينة على وجه الأرض. عندما يكون الشخص داخل منطقة ما ، ستأخذ الحالة الاسم من المنطقة. يمكن أيضًا استخدام المناطق كمشغل أو حالة داخل إعدادات الأتمتة." }, "zwave_js": { @@ -1873,16 +2464,36 @@ "cancel_inclusion": "إلغاء التضمين", "controller_in_inclusion_mode": "أصبحت وحدة التحكم Z-Wave الآن في وضع التضمين.", "follow_device_instructions": "اتبع الإرشادات المرفقة مع جهازك لبدء الاقتران على الجهاز.", + "inclusion_finished": "تم إضافة العقدة.", + "interview_failed": "فشلت مقابلة الجهاز. قد تتوفر معلومات إضافية في السجلات.", + "interview_started": "الجهاز قيد المقابلة. هذا قد يستغرق بعض الوقت.", "secure_inclusion_warning": "تتطلب الأجهزة الآمنة نطاقًا تردديًا إضافيًا ؛ يمكن أن يؤدي وجود عدد كبير جدًا من الأجهزة الآمنة إلى إبطاء شبكة Z-Wave. نوصي باستخدام التضمين الآمن فقط للأجهزة التي تتطلب ذلك ، مثل الأقفال أو فتاحات أبواب المرآب.", "view_device": "عرض الجهاز" }, + "button": "تكوين", "common": { + "add_node": "إضافة عقدة", "close": "إغلاق", "heal_network": "عالج الشبكة", - "reconfigure_server": "أعد تكوين الخادم" + "home_id": "معرف المنزل", + "network": "الشبكة", + "node_id": "معرف العقدة", + "reconfigure_server": "أعد تكوين الخادم", + "remove_node": "إزالة عقدة" }, "dashboard": { - "dump_not_ready_confirm": "تحميل" + "driver_version": "إصدار برنامج التشغيل", + "dump_dead_nodes_text": "بعض العقد الخاصة بك لم تستجب ويفترض أنها ميتة. لن يتم تصديرها بالكامل.", + "dump_dead_nodes_title": "بعض العقد الخاصة بك ميتة", + "dump_debug": "قم بتنزيل ملف تفريغ لشبكتك للمساعدة في تشخيص المشكلات", + "dump_not_ready_confirm": "تحميل", + "dump_not_ready_text": "إذا أنشأت تصديرًا بينما لم تكن جميع العقد جاهزة ، فقد تفوتك البيانات المطلوبة. امنح شبكتك بعض الوقت للاستعلام عن جميع العقد. هل تريد الاستمرار في التفريغ؟", + "dump_not_ready_title": "ليست كل العقد جاهزة بعد", + "header": "إدارة شبكة Z-Wave", + "home_id": "معرف المنزل", + "introduction": "إدارة شبكة Z-Wave وعقد Z-Wave", + "nodes_ready": "العقد جاهزة", + "server_version": "إصدار الخادم" }, "device_info": { "device_config": "تكوين جهاز", @@ -1898,17 +2509,42 @@ "introduction": "ابدأ معالجة الشبكة على شبكة Z-Wave الخاصة بك. سيؤدي علاج الشبكة إلى إعادة حساب جميع الأجهزة لمساراتها مرة أخرى إلى وحدة التحكم ويوصى بذلك إذا قمت مؤخرًا بنقل الأجهزة أو وحدة التحكم الخاصة بك.", "run_in_background": "يمكنك إغلاق مربع الحوار هذا وستستمر عملية معالجة الشبكة في الخلفية.", "start_heal": "ابدأ المعالجة", - "stop_heal": "أوقف المعالجة." + "stop_heal": "أوقف المعالجة.", + "title": "عالج شبكة Z-Wave الخاصة بك", + "traffic_warning": "تولد عملية المعالجة قدرًا كبيرًا من حركة المرور على شبكة Z-Wave. قد يتسبب هذا في استجابة الأجهزة ببطء (أو عدم الاستجابة على الإطلاق) أثناء تقدم المعالجة." }, "logs": { "log_level": "مستوى التسجيل في السجل", - "subscribed_to_logs": "اشترك في Z-Wave JS سجل الرسائل..." + "log_level_changed": "تم تغيير مستوى السجل إلى: {level}", + "subscribed_to_logs": "اشترك في Z-Wave JS سجل الرسائل...", + "title": "سجلات Z-Wave JS" }, "navigation": { - "logs": "السجلات" + "logs": "السجلات", + "network": "الشبكة" + }, + "node_config": { + "header": "تكوين جهاز Z-Wave", + "introduction": "إدارة وضبط معلمات التكوين الخاصة بالجهاز (العقدة) للجهاز المحدد", + "set_param_accepted": "تم تحديث المعلمة.", + "set_param_error": "حدث خطأ.", + "set_param_queued": "تم وضع تغيير المعلمة في قائمة الانتظار ، وسيتم تحديثه عند تنبيه الجهاز." + }, + "node_status": { + "asleep": "نائم", + "awake": "مستيقظ", + "dead": "ميت", + "unknown": "غير معروف" }, "reinterview_node": { - "run_in_background": "يمكنك إغلاق مربع الحوار هذا وستستمر المقابلة في الخلفية." + "battery_device_warning": "ستحتاج إلى تنبيه الأجهزة التي تعمل بالبطارية قبل بدء إعادة المقابلة. ارجع إلى دليل جهازك للحصول على إرشادات حول كيفية تنبيه الجهاز.", + "in_progress": "الجهاز قيد المقابلة. هذا قد يستغرق بعض الوقت.", + "interview_complete": "اكتملت مقابلة الجهاز.", + "interview_failed": "فشلت مقابلة الجهاز. قد تتوفر معلومات إضافية في السجلات.", + "introduction": "إعادة مقابلة جهاز على شبكة Z-Wave. استخدم هذه الميزة إذا كان جهازك يحتوي على وظائف مفقودة أو غير صحيحة.", + "run_in_background": "يمكنك إغلاق مربع الحوار هذا وستستمر المقابلة في الخلفية.", + "start_reinterview": "ابدأ إعادة المقابلة", + "title": "أعد إجراء مقابلة مع جهاز Z-Wave" }, "remove_node": { "cancel_exclusion": "إلغاء الاستبعاد", @@ -2002,29 +2638,47 @@ }, "custom": { "external_panel": { - "hide_message": "تحقق من المستندات لمكون panel_custom لإخفاء هذه الرسالة" + "complete_access": "سيكون لديه حق الوصول إلى جميع البيانات في Home Assistant.", + "hide_message": "تحقق من المستندات لمكون panel_custom لإخفاء هذه الرسالة", + "question_trust": "هل تثق باللوحة الخارجية {name} في {link} ؟" } }, "developer-tools": { "tabs": { "events": { + "documentation": "وثائق الأحداث", + "event_fired": "تم تشغيل الحدث {name}", + "notification_event_fired": "الحدث {type} تم إطلاقه بنجاح!", "title": "أحداث" }, "services": { - "title": "الخدمات" + "accepts_target": "تقبل هذه الخدمة هدفًا ، على سبيل المثال: `entity_id: light.bed_light`", + "all_parameters": "جميع المعلمات المتاحة", + "title": "الخدمات", + "ui_mode": "انتقل إلى وضع واجهة المستخدم", + "yaml_mode": "انتقل إلى وضع YAML", + "yaml_parameters": "المعلمات متاحة فقط في وضع YAML" }, "states": { - "description2": "لن يتواصل هذا مع الجهاز الفعلي.", + "copy_id": "انسخ المعرف إلى الحافظة", + "description1": "قم بتعيين تمثيل الحالة الحالية لكيان داخل Home Assistant.", + "description2": "إذا كان الكيان ينتمي إلى جهاز، فلن يكون هناك اتصال فعلي مع هذا الجهاز.", "last_changed": "آخر تعديل", "last_updated": "آخر تحديث", "title": "الحالات" }, "templates": { + "domain": "المجال", + "entity": "الكيان", + "no_listeners": "لا يستمع هذا القالب لأي أحداث ولن يتم تحديثه تلقائيا.", + "reset": "إعادة التعيين إلى القالب التجريبي", + "time": "يتم تحديث هذا القالب في بداية كل دقيقة.", "title": "نماذج" } } }, "error": { + "go_back": "الرجوع للخلف", "supervisor": { "ask": "طلب المساعدة", "observer": "تحقق من المراقب", @@ -2052,10 +2706,14 @@ }, "lovelace": { "add_entities": { - "saving_failed": "فشل حفظ تكوين واجهة المستخدم Lovelace." + "generated_unsupported": "لا يمكنك استخدام هذه الوظيفة إلا عندما تتحكم في واجهة مستخدم Lovelace.", + "saving_failed": "فشل حفظ تكوين واجهة المستخدم Lovelace.", + "yaml_unsupported": "لا يمكنك استخدام هذه الوظيفة عند استخدام واجهة مستخدم Lovelace في وضع YAML." }, "cards": { "actions": { + "action_confirmation": "هل أنت متأكد أنك تريد تشغيل الإجراء \" {action} \"؟", + "no_service": "لا توجد خدمة لتشغيل محددة", "no_url": "لم يتم تحديد عنوان URL لفتحه" }, "confirm_delete": "هل أنت متأكد أنك تريد حذف هذه البطاقة؟", @@ -2064,6 +2722,9 @@ "no_devices": "تسمح لك هذه الصفحة بالتحكم في أجهزتك ، ولكن يبدو أنك لم تعد أي أجهزة حتى الآن. توجه إلى صفحة التكاملات للبدء.", "title": "مرحبًا بك في بيتك" }, + "entities": { + "never_triggered": "لم يتم تشغيله أبدا" + }, "picture-elements": { "call_service": "اتصل بخدمة {name}", "hold": "تعليق:", @@ -2080,7 +2741,9 @@ "shopping-list": { "add_item": "إضافة عنصر", "checked_items": "العناصر المحددة", - "clear_items": "مسح العناصر المحددة" + "clear_items": "مسح العناصر المحددة", + "drag_and_drop": "السحب والإفلات", + "reorder_items": "إعادة ترتيب العناصر" }, "starting": { "description": "Home Assistant يبدأ، يرجى الانتظار..." @@ -2089,7 +2752,19 @@ "changed_toast": { "message": "تم تحديث تكوين واجهة المستخدم Lovelace للوحة المعلومات هذه. هل تريد التحديث لمشاهدة التغييرات؟" }, + "components": { + "timestamp-display": { + "invalid": "الطابع الزمني غير صالح", + "invalid_format": "تنسيق العرض غير صالح" + } + }, "editor": { + "action-editor": { + "actions": { + "url": "URL" + }, + "url_path": "مسار URL" + }, "card": { "alarm-panel": { "available_states": "الحالات المتاحة", @@ -2097,11 +2772,13 @@ "name": "لوحة الإنذار" }, "button": { + "default_action_help": "يعتمد الإجراء الافتراضي على إمكانيات الكيان ، وسيتم إما تبديله أو عرض مربع حوار مزيد من المعلومات.", "description": "تتيح لك بطاقة الأزرار إضافة أزرار لأداء المهام.", "name": "زر" }, "calendar": { "description": "تعرض بطاقة التقويم تقويما يتضمن اليوم والأسبوع وقائمة العرض", + "name": "التقويم", "views": { "dayGridDay": "يوم", "dayGridMonth": "شهر" @@ -2114,6 +2791,7 @@ "conditions": "شروط", "current_state": "الحالي", "description": "تعرض البطاقة الشرطية بطاقة أخرى استنادًا إلى حالات الكيان.", + "name": "الشرط", "state_equal": "الحالة تساوي", "state_not_equal": "الحالة لا تساوي" }, @@ -2124,6 +2802,7 @@ "entities": { "description": "بطاقة الكيانات هي أكثر أنواع البطاقات شيوعًا. تقوم بتجميع العناصر معًا في قوائم.", "edit_special_row": "اعرض تفاصيل هذا الصف بالنقر على زر التعديل", + "name": "الكيانات", "secondary_info_values": { "last-changed": "آخر تعديل", "last-triggered": "آخر تشغيل", @@ -2132,7 +2811,8 @@ "show_header_toggle": "إظهار الزر العلوي؟" }, "entity-filter": { - "description": "تتيح لك بطاقة تصفية الكيانات تحديد قائمة بالكيانات التي تريد تتبعها فقط عندما تكون في حالة معينة." + "description": "تتيح لك بطاقة تصفية الكيانات تحديد قائمة بالكيانات التي تريد تتبعها فقط عندما تكون في حالة معينة.", + "name": "عامل تصفية الكيان" }, "entity": { "description": "تمنحك بطاقة الكيان نظرة عامة سريعة عن حالة الكيان.", @@ -2140,6 +2820,7 @@ }, "gauge": { "description": "بطاقة القياس هي بطاقة أساسية تسمح برؤية بيانات الاستشعار بصريًا.", + "name": "مقياس", "severity": { "define": "عرف الخطورة؟", "green": "أخضر", @@ -2161,7 +2842,7 @@ "icon_height": "ارتفاع الأيقونة", "image": "مسار الصورة", "manual": "يدويا", - "manual_description": "هل تريد إضافة بطاقة مخصصة أو ترغب فقط في كتابة yaml يدويًا؟", + "manual_description": "هل تحتاج إلى إضافة بطاقة مخصصة أو ترغب فقط في كتابة YAML يدويًا؟", "maximum": "الحد الاقصي", "minimum": "الحد الأدنى", "name": "الاسم", @@ -2173,6 +2854,7 @@ "show_name": "أظهر الاسم؟", "show_state": "إظهار الحالة؟", "state": "الحالة", + "state_color": "تلويين الايقونات بناء على الحالة ؟", "tap_action": "إجراء النقر", "theme": "سمة", "title": "عنوان", @@ -2181,13 +2863,16 @@ }, "glance": { "columns": "الأعمدة", - "description": "بطاقة اللمحة مفيدة لتجميع أجهزة استشعار متعددة في نظرة عامة مدمجة." + "description": "بطاقة اللمحة مفيدة لتجميع أجهزة استشعار متعددة في نظرة عامة مدمجة.", + "name": "Glance" }, "grid": { - "columns": "الأعمدة" + "columns": "الأعمدة", + "name": "شبكة" }, "history-graph": { - "description": "تسمح لك بطاقة الرسم البياني التاريخي بعرض رسم بياني لكل من الكيانات المذكورة." + "description": "تسمح لك بطاقة الرسم البياني التاريخي بعرض رسم بياني لكل من الكيانات المذكورة.", + "name": "الرسم البياني للمحفوظات" }, "horizontal-stack": { "description": "تتيح لك بطاقة التكديس الأفقي تجميع عدة بطاقات معًا ، بحيث تكون دائمًا بجانب بعضها البعض في مساحة عمود واحد.", @@ -2198,10 +2883,15 @@ "name": "المرطب" }, "iframe": { - "description": "تسمح لك بطاقة صفحة الويب بتضمين صفحة ويب مباشرةً في Home Assistant." + "description": "تسمح لك بطاقة صفحة الويب بتضمين صفحة ويب مباشرةً في Home Assistant.", + "name": "صفحة ويب" }, "light": { - "description": "تسمح لك بطاقة الضوء بتغيير سطوع الضوء." + "description": "تسمح لك بطاقة الضوء بتغيير سطوع الضوء.", + "name": "الضوء" + }, + "logbook": { + "name": "السجل" }, "map": { "dark_mode": "الوضع المظلم؟", @@ -2209,6 +2899,7 @@ "description": "بطاقة الخريطة التي تتيح لك عرض الكيانات على الخريطة.", "geo_location_sources": "مصادر تحديد الموقع الجغرافي", "hours_to_show": "ساعات للعرض", + "name": "الخريطة", "source": "المصدر" }, "markdown": { @@ -2217,28 +2908,37 @@ "name": "Markdown" }, "media-control": { - "description": "يتم استخدام بطاقة التحكم بالوسائط لعرض كيانات مشغل الوسائط على واجهة مع عناصر تحكم سهلة الاستخدام." + "description": "يتم استخدام بطاقة التحكم بالوسائط لعرض كيانات مشغل الوسائط على واجهة مع عناصر تحكم سهلة الاستخدام.", + "name": "التحكم في الوسائط" }, "picture-elements": { - "description": "بطاقة عناصر الصورة هي واحدة من أكثر أنواع البطاقات تنوعا. تسمح لك البطاقات بوضع الرموز أو النص وحتى الخدمات! على صورة تستند إلى إحداثيات." + "description": "بطاقة عناصر الصورة هي واحدة من أكثر أنواع البطاقات تنوعا. تسمح لك البطاقات بوضع الرموز أو النص وحتى الخدمات! على صورة تستند إلى إحداثيات.", + "name": "عناصر الصورة" }, "picture-entity": { - "description": "تعرض بطاقة كيان الصورة كيانًا في شكل صورة. بدلاً من الصور من عنوان URL، يمكنه أيضًا عرض صورة كيانات الكاميرا." + "description": "تعرض بطاقة كيان الصورة كيانًا في شكل صورة. بدلاً من الصور من عنوان URL، يمكنه أيضًا عرض صورة كيانات الكاميرا.", + "name": "كيان الصورة" }, "picture-glance": { - "description": "تعرض بطاقة \"لمحة الصورة\" صورة وحالات كيان مقابلة كرمز. تسمح الكيانات الموجودة على الجانب الأيمن بإجراءات التبديل ، بينما تظهر جهات أخرى حوار المعلومات أكثر." + "description": "تُظهر بطاقة Picture Glance صورة وحالات الكيان المقابلة كرمز. تسمح الكيانات الموجودة على الجانب الأيمن بإجراءات التبديل ، بينما تعرض الكيانات الأخرى مربع حوار \"مزيد من المعلومات\".", + "name": "Picture Glance" }, "picture": { - "description": "تسمح لك بطاقة الصورة بتعيين صورة لاستخدامها في التنقل إلى مسارات مختلفة في واجهتك أو لاستدعاء خدمة." + "description": "تسمح لك بطاقة الصورة بتعيين صورة لاستخدامها في التنقل إلى مسارات مختلفة في واجهتك أو لاستدعاء خدمة.", + "name": "صورة" }, "plant-status": { - "description": "بطاقة حالة النبات هي لجميع محبين النباتات." + "description": "بطاقة حالة النبات هي لجميع محبين النباتات.", + "name": "حالة النبات" }, "sensor": { - "description": "تمنحك بطاقة المستشعر لمحة عامة سريعة عن حالة المستشعرات الخاصة بك مع رسم بياني اختياري لتصور التغيير بمرور الوقت." + "description": "تمنحك بطاقة المستشعر لمحة عامة سريعة عن حالة المستشعرات الخاصة بك مع رسم بياني اختياري لتصور التغيير بمرور الوقت.", + "name": "مستشعر" }, "shopping-list": { - "description": "تتيح لك بطاقة قائمة التسوق إضافة عناصر وتحريرها وإلغاء تحديدها ومسحها من قائمة التسوق الخاصة بك." + "description": "تتيح لك بطاقة قائمة التسوق إضافة عناصر وتحريرها وإلغاء تحديدها ومسحها من قائمة التسوق الخاصة بك.", + "integration_not_loaded": "تتطلب هذه البطاقة إعداد تكامل \"shopping_list\".", + "name": "قائمة التسوق" }, "thermostat": { "description": "تتيح بطاقة الترموستات التحكم في كيان المناخ لديك. يسمح لك بتغيير درجة حرارة الكيان ووضعه.", @@ -2255,20 +2955,30 @@ } }, "cardpicker": { + "by_entity": "حسب الكيان", "custom_card": "معدل", + "domain": "المجال", + "entity": "الكيان", "no_description": "لا يوجد وصف متاح." }, + "common": { + "edit": "تعديل" + }, + "edit_badges": { + "panel_mode": "لن يتم عرض هذه الشارات لأن هذا العرض في \"وضع اللوحة\"." + }, "edit_card": { "add": "إضافة بطاقة", "confirm_cancel": "هل أنت متأكد من الإلغاء؟", - "delete": "حذف", - "duplicate": "بطاقة مكررة", + "delete": "حذف البطاقة", + "duplicate": "كرر البطاقة", "edit": "تصحيح", "header": "تكوين البطاقة", - "move": "نقل", + "move": "نقل الى عرض", "options": "المزيد من الخيارات", "pick_card": "ما هي البطاقة التي ترغب في إضافتها؟", "pick_card_view_title": "ما هي البطاقة التي تريد إضافتها إلى طريقة العرض {name} ؟", + "search_cards": "ابحث عن البطاقات", "toggle_editor": "تبديل المحرر", "typed_header": "{type} تكوين البطاقة", "unsaved_changes": "لديك تغييرات غير محفوظة" @@ -2284,6 +2994,8 @@ "edit": "تحرير عرض", "header": "عرض التكوين", "header_name": "{name} عرض التكوين", + "move_left": "حرك العرض لليسار", + "move_right": "حرك العرض لليمين", "tab_settings": "إعدادات", "tab_visibility": "الرؤية", "visibility": { @@ -2292,10 +3004,14 @@ }, "header": "تحرير واجهة المستخدم", "header-footer": { + "choose_header_footer": "اختر {type}", "types": { "buttons": { "name": "أزرار" }, + "graph": { + "name": "الرسم البياني" + }, "picture": { "name": "صورة" } @@ -2315,10 +3031,13 @@ }, "raw_editor": { "confirm_remove_config_text": "سنقوم تلقائيا بإنشاء طرق عرض واجهة مستخدم Lovelace الخاصة بك مع المناطق والأجهزة الخاصة بك إذا قمت بإزالة تكوين واجهة مستخدم Lovelace.", + "confirm_remove_config_title": "هل تريد بالتأكيد إزالة تكوين واجهة مستخدم Lovelace؟", "confirm_unsaved_changes": "لديك تغييرات غير محفوظة ، هل أنت متأكد أنك تريد الخروج؟", "confirm_unsaved_comments": "قد يحتوي التكوين الخاص بك على تعليق (تعليقات) ، ولن يتم حفظها. هل تريد الاستمرار؟", + "error_invalid_config": "التكوين الخاص بك غير صالح: {error}", + "error_remove": "تعذر إزالة التكوين: {error}", "error_save_yaml": "تعذر حفظ YAML: {error}", - "header": "تعديل", + "header": "تعديل التكوين", "save": "حفظ", "saved": "تم الحفظ", "unsaved_changes": "التغييرات غير محفوظة" @@ -2331,11 +3050,16 @@ "para": "يتم صيانة لوحة المعلومات هذه حاليًا بواسطة Home Assistant. يتم تحديثه تلقائيًا عند توفر كيانات جديدة أو مكونات Lovelace UI. إذا كنت تتحكم ، فلن يتم تحديث لوحة التحكم هذه تلقائيًا بعد الآن. يمكنك دائمًا إنشاء لوحة تحكم جديدة في التكوين للتلاعب بها.", "para_sure": "هل أنت متأكد أنك تريد التحكم في واجهة المستخدم الخاصة بك؟", "save": "تحكم", + "yaml_control": "للتحكم في وضع YAML ، قم بإنشاء ملف YAML بالاسم الذي حددته في التكوين الخاص بك للوحة القيادة هذه ، أو الافتراضي \"ui-lovelace.yaml\".", "yaml_mode": "أنت تستخدم وضع YAML للوحة البيانات هذه ، مما يعني أنه لا يمكنك تغيير تكوين Lovelace من واجهة المستخدم. إذا كنت تريد إدارة لوحة التحكم هذه من واجهة المستخدم ، فقم بإزالة \"الوضع: yaml\" من تكوين Lovelace في \"config.yaml.\"." }, "select_view": { "dashboard_label": "لوحة المعلومات" }, + "suggest_card": { + "add": "إضافة إلى واجهة مستخدم Lovelace", + "create_own": "اختر بطاقة مختلفة" + }, "view": { "panel_mode": { "description": "هذا يجعل البطاقة الأولى بالعرض الكامل. لن يتم عرض البطاقات الأخرى في هذا العرض بالإضافة إلى الشارات.", @@ -2381,6 +3105,12 @@ "empty": "ليس لديك رسائل", "playback_title": "تشغيل الرسالة" }, + "my": { + "documentation": "الوثائق", + "error": "حدث خطأ غير معروف", + "faq_link": "الأسئلة الشائعة حول My Home Assistant", + "not_supported": "لا يدعم مثيل Home Assistant إعادة التوجيه هذه. تحقق من {link} لعمليات إعادة التوجيه المدعومة والإصدار الذي تم تقديمه فيه." + }, "page-authorize": { "abort_intro": "إلغاء الدخول", "authorizing_client": "أنت على وشك منح {clientId} حق الوصول إلى مثيل Home Assistant الخاص بك.", @@ -2476,6 +3206,7 @@ "working": "الرجاء الانتظار" }, "initializing": "جار التهيئة", + "logging_in_to_with": "تسجيل الدخول إلى ** {locationName} ** باستخدام ** {authProviderName} **.", "logging_in_with": "تسجيل الدخول باستخدام **{authProviderName}**.", "pick_auth_provider": "أو سجل الدخول باستخدام" }, @@ -2524,20 +3255,27 @@ } }, "page-onboarding": { + "analytics": { + "finish": "التالى", + "intro": "شارك التحليلات من المثيل الخاص بك. ستكون هذه البيانات متاحة للجمهور على {link}" + }, "core-config": { "button_detect": "كشف", "finish": "التالى", "intro": "مرحبًا {name} ، مرحبًا بك في Home Assistant. ماذا تريد تسمية منزلك؟", "intro_location": "نود أن نعرف أين تعيش. ستساعد هذه المعلومات في عرض المعلومات وإعداد الأتمتة القائمة على الشمس. لا يتم ابدا مشاركة هذه البيانات خارج الشبكة الخاصة بك.", "intro_location_detect": "يمكننا مساعدتك في ملء هذه المعلومات عن طريق تقديم طلب لمرة واحدة إلى خدمة خارجية.", + "location_name": "اسم تثبيت Home Assistant الخاص بك", "location_name_default": "المنزل " }, + "finish": "انتهى", "integration": { "finish": "إنهاء", "intro": "يتم تمثيل الأجهزة والخدمات في Home Assistant كتكاملات. يمكنك إعدادها الآن ، أو القيام بذلك لاحقًا من شاشة التكوين.", "more_integrations": "المزيد" }, "intro": "هل أنت مستعد لإيقاظ منزلك واستعادة خصوصيتك والانضمام إلى مجتمع عالمي من اللاعبين؟", + "next": "التالى", "user": { "create_account": "إنشاء حساب", "data": { @@ -2563,19 +3301,25 @@ "change_password": { "confirm_new_password": "تأكيد كلمة السر الجديدة", "current_password": "كلمة السر الحالية", + "error_new_mismatch": "كلمة المرور الجديدة التي تم إدخالها غير متطابقة", "error_required": "مطلوب", "header": "تغيير كلمة السر", "new_password": "كلمة السر الجديدة", "submit": "إرسال" }, "current_user": "أنت مسجّل الدخول حاليًا كـ {fullName} .", + "customize_sidebar": { + "button": "تعديل", + "description": "يمكنك أيضًا الضغط مع الاستمرار على رأس الشريط الجانبي لتنشيط وضع التعديل." + }, "dashboard": { "description": "اختر لوحة معلومات افتراضية لهذا الجهاز.", "dropdown_label": "لوحة المعلومات", "header": "لوحة المعلومات" }, "enable_shortcuts": { - "description": "قم بتمكين أو تعطيل اختصارات لوحة المفاتيح لتنفيذ إجراءات متنوعة في واجهة المستخدم." + "description": "قم بتمكين أو تعطيل اختصارات لوحة المفاتيح لتنفيذ إجراءات متنوعة في واجهة المستخدم.", + "header": "اختصارات لوحة المفاتيح" }, "force_narrow": { "description": "سيؤدي ذلك إلى إخفاء الشريط الجانبي افتراضيا، على غرار تجربة الجوال.", @@ -2588,6 +3332,8 @@ "link_promo": "ساعد في الترجمة" }, "logout": "تسجيل الخروج", + "logout_text": "هل أنت متأكد أنك تريد تسجيل الخروج؟", + "logout_title": "تسجيل الخروج؟", "long_lived_access_tokens": { "confirm_delete": "هل أنت متأكد أنك تريد حذف رمز الوصول لـ {name} ؟", "create": "إنشاء رمز مميز", @@ -2598,6 +3344,7 @@ "empty_state": "ليس لديك رموز وصول طويلة الأمد حتى الآن.", "header": "رموز الوصول طويلة الأمد", "learn_auth_requests": "تعرف على كيفية عمل طلبات مصادقة.", + "name": "الاسم", "prompt_copy_token": "نسخ رمز الوصول الخاص بك. لن يتم عرضه مرة أخرى.", "prompt_name": "إعط الرمز المميز اسماً" }, @@ -2616,6 +3363,11 @@ }, "number_format": { "dropdown_label": "تنسيق الأرقام", + "formats": { + "decimal_comma": "1.234.567،89", + "none": "لاشيء", + "space_comma": "1 234 567,89" + }, "header": "تنسيق الأرقام" }, "push_notifications": { @@ -2652,7 +3404,14 @@ "link_promo": "تعرف على التصاميم" }, "time_format": { + "description": "اختر كيفية تنسيق الأوقات.", "dropdown_label": "تنسيق الوقت", + "formats": { + "12": "12 ساعة (صباحا/ مساء)", + "24": "24 ساعة", + "language": "تلقائي (استخدام إعدادات اللغة)", + "system": "استخدم لغة النظام" + }, "header": "تنسيق الوقت" }, "vibrate": { @@ -2665,6 +3424,7 @@ } }, "sidebar": { + "done": "أُنجز", "external_app_configuration": "تكوين التطبيق" } } From de5a817953288b05b1136e1e90e66113c104c2d1 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Tue, 6 Jul 2021 10:43:07 +0200 Subject: [PATCH 12/14] Add UI for trigger condition (#9505) --- src/data/automation.ts | 77 ++++++++------- src/data/device_automation.ts | 8 +- .../ha-automation-condition-editor.ts | 2 + .../types/ha-automation-condition-trigger.ts | 99 +++++++++++++++++++ .../types/ha-automation-condition-zone.ts | 1 - .../config/automation/ha-automation-editor.ts | 31 +++++- .../trigger/ha-automation-trigger-row.ts | 36 ++++++- src/translations/en.json | 6 ++ 8 files changed, 215 insertions(+), 45 deletions(-) create mode 100644 src/panels/config/automation/condition/types/ha-automation-condition-trigger.ts diff --git a/src/data/automation.ts b/src/data/automation.ts index d6e308ccf3..da6a12ddba 100644 --- a/src/data/automation.ts +++ b/src/data/automation.ts @@ -51,7 +51,18 @@ export interface ForDict { seconds?: number | string; } -export interface StateTrigger { +export interface ContextConstraint { + context_id?: string; + parent_id?: string; + user_id?: string | string[]; +} + +export interface BaseTrigger { + platform: string; + id?: string; +} + +export interface StateTrigger extends BaseTrigger { platform: "state"; entity_id: string; attribute?: string; @@ -60,25 +71,25 @@ export interface StateTrigger { for?: string | number | ForDict; } -export interface MqttTrigger { +export interface MqttTrigger extends BaseTrigger { platform: "mqtt"; topic: string; payload?: string; } -export interface GeoLocationTrigger { +export interface GeoLocationTrigger extends BaseTrigger { platform: "geo_location"; source: string; zone: string; event: "enter" | "leave"; } -export interface HassTrigger { +export interface HassTrigger extends BaseTrigger { platform: "homeassistant"; event: "start" | "shutdown"; } -export interface NumericStateTrigger { +export interface NumericStateTrigger extends BaseTrigger { platform: "numeric_state"; entity_id: string; attribute?: string; @@ -88,54 +99,48 @@ export interface NumericStateTrigger { for?: string | number | ForDict; } -export interface SunTrigger { +export interface SunTrigger extends BaseTrigger { platform: "sun"; offset: number; event: "sunrise" | "sunset"; } -export interface TimePatternTrigger { +export interface TimePatternTrigger extends BaseTrigger { platform: "time_pattern"; hours?: number | string; minutes?: number | string; seconds?: number | string; } -export interface WebhookTrigger { +export interface WebhookTrigger extends BaseTrigger { platform: "webhook"; webhook_id: string; } -export interface ZoneTrigger { +export interface ZoneTrigger extends BaseTrigger { platform: "zone"; entity_id: string; zone: string; event: "enter" | "leave"; } -export interface TagTrigger { +export interface TagTrigger extends BaseTrigger { platform: "tag"; tag_id: string; device_id?: string; } -export interface TimeTrigger { +export interface TimeTrigger extends BaseTrigger { platform: "time"; at: string; } -export interface TemplateTrigger { +export interface TemplateTrigger extends BaseTrigger { platform: "template"; value_template: string; } -export interface ContextConstraint { - context_id?: string; - parent_id?: string; - user_id?: string | string[]; -} - -export interface EventTrigger { +export interface EventTrigger extends BaseTrigger { platform: "event"; event_type: string; event_data?: any; @@ -158,24 +163,26 @@ export type Trigger = | EventTrigger | DeviceTrigger; -export interface LogicalCondition { - condition: "and" | "not" | "or"; +interface BaseCondition { + condition: string; alias?: string; +} + +export interface LogicalCondition extends BaseCondition { + condition: "and" | "not" | "or"; conditions: Condition | Condition[]; } -export interface StateCondition { +export interface StateCondition extends BaseCondition { condition: "state"; - alias?: string; entity_id: string; attribute?: string; state: string | number; for?: string | number | ForDict; } -export interface NumericStateCondition { +export interface NumericStateCondition extends BaseCondition { condition: "numeric_state"; - alias?: string; entity_id: string; attribute?: string; above?: number; @@ -183,36 +190,37 @@ export interface NumericStateCondition { value_template?: string; } -export interface SunCondition { +export interface SunCondition extends BaseCondition { condition: "sun"; - alias?: string; after_offset: number; before_offset: number; after: "sunrise" | "sunset"; before: "sunrise" | "sunset"; } -export interface ZoneCondition { +export interface ZoneCondition extends BaseCondition { condition: "zone"; - alias?: string; entity_id: string; zone: string; } -export interface TimeCondition { +export interface TimeCondition extends BaseCondition { condition: "time"; - alias?: string; after?: string; before?: string; weekday?: string | string[]; } -export interface TemplateCondition { +export interface TemplateCondition extends BaseCondition { condition: "template"; - alias?: string; value_template: string; } +export interface TriggerCondition extends BaseCondition { + condition: "trigger"; + id: string; +} + export type Condition = | StateCondition | NumericStateCondition @@ -221,7 +229,8 @@ export type Condition = | TimeCondition | TemplateCondition | DeviceCondition - | LogicalCondition; + | LogicalCondition + | TriggerCondition; export const triggerAutomationActions = ( hass: HomeAssistant, diff --git a/src/data/device_automation.ts b/src/data/device_automation.ts index 4392fa529e..0131a451a2 100644 --- a/src/data/device_automation.ts +++ b/src/data/device_automation.ts @@ -1,6 +1,7 @@ import { computeStateName } from "../common/entity/compute_state_name"; import { HaFormSchema } from "../components/ha-form/ha-form"; import { HomeAssistant } from "../types"; +import { BaseTrigger } from "./automation"; export interface DeviceAutomation { alias?: string; @@ -20,9 +21,10 @@ export interface DeviceCondition extends DeviceAutomation { condition: "device"; } -export interface DeviceTrigger extends DeviceAutomation { - platform: "device"; -} +export type DeviceTrigger = DeviceAutomation & + BaseTrigger & { + platform: "device"; + }; export interface DeviceCapabilities { extra_fields: HaFormSchema[]; diff --git a/src/panels/config/automation/condition/ha-automation-condition-editor.ts b/src/panels/config/automation/condition/ha-automation-condition-editor.ts index 014e40c55b..7ebec7a416 100644 --- a/src/panels/config/automation/condition/ha-automation-condition-editor.ts +++ b/src/panels/config/automation/condition/ha-automation-condition-editor.ts @@ -20,6 +20,7 @@ import "./types/ha-automation-condition-state"; import "./types/ha-automation-condition-sun"; import "./types/ha-automation-condition-template"; import "./types/ha-automation-condition-time"; +import "./types/ha-automation-condition-trigger"; import "./types/ha-automation-condition-zone"; const OPTIONS = [ @@ -32,6 +33,7 @@ const OPTIONS = [ "sun", "template", "time", + "trigger", "zone", ]; diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-trigger.ts b/src/panels/config/automation/condition/types/ha-automation-condition-trigger.ts new file mode 100644 index 0000000000..3d7f2a3b81 --- /dev/null +++ b/src/panels/config/automation/condition/types/ha-automation-condition-trigger.ts @@ -0,0 +1,99 @@ +import { html, LitElement } from "lit"; +import { customElement, property, state } from "lit/decorators"; +import { fireEvent } from "../../../../../common/dom/fire_event"; +import { + AutomationConfig, + Trigger, + TriggerCondition, +} from "../../../../../data/automation"; +import { HomeAssistant } from "../../../../../types"; +import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light"; +import { ensureArray } from "../../../../../common/ensure-array"; +import { UnsubscribeFunc } from "home-assistant-js-websocket"; + +@customElement("ha-automation-condition-trigger") +export class HaTriggerCondition extends LitElement { + @property({ attribute: false }) public hass!: HomeAssistant; + + @property({ attribute: false }) public condition!: TriggerCondition; + + @state() private _triggers?: Trigger | Trigger[]; + + private _unsub?: UnsubscribeFunc; + + public static get defaultConfig() { + return { + id: "", + }; + } + + connectedCallback() { + super.connectedCallback(); + const details = { callback: (config) => this._automationUpdated(config) }; + fireEvent(this, "subscribe-automation-config", details); + this._unsub = (details as any).unsub; + } + + disconnectedCallback() { + super.disconnectedCallback(); + if (this._unsub) { + this._unsub(); + } + } + + protected render() { + const { id } = this.condition; + if (!this._triggers) { + return this.hass.localize( + "ui.panel.config.automation.editor.conditions.type.trigger.no_triggers" + ); + } + return html` + + ${ensureArray(this._triggers).map((trigger) => + trigger.id + ? html` + + ${trigger.id} + + ` + : "" + )} + + `; + } + + private _automationUpdated(config?: AutomationConfig) { + this._triggers = config?.trigger; + } + + private _triggerPicked(ev: CustomEvent) { + ev.stopPropagation(); + if (!ev.detail.value) { + return; + } + const newTrigger = ev.detail.value.dataset.triggerId; + if (this.condition.id === newTrigger) { + return; + } + fireEvent(this, "value-changed", { + value: { ...this.condition, id: newTrigger }, + }); + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-automation-condition-trigger": HaTriggerCondition; + } +} diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-zone.ts b/src/panels/config/automation/condition/types/ha-automation-condition-zone.ts index 7511b1ff0d..cf79928402 100644 --- a/src/panels/config/automation/condition/types/ha-automation-condition-zone.ts +++ b/src/panels/config/automation/condition/types/ha-automation-condition-zone.ts @@ -1,4 +1,3 @@ -import "@polymer/paper-radio-button/paper-radio-button"; import { html, LitElement } from "lit"; import { customElement, property } from "lit/decorators"; import { fireEvent } from "../../../../../common/dom/fire_event"; diff --git a/src/panels/config/automation/ha-automation-editor.ts b/src/panels/config/automation/ha-automation-editor.ts index 8d6057762d..cc12a47099 100644 --- a/src/panels/config/automation/ha-automation-editor.ts +++ b/src/panels/config/automation/ha-automation-editor.ts @@ -11,6 +11,7 @@ import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light"; import "@polymer/paper-input/paper-textarea"; +import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { css, CSSResultGroup, @@ -51,12 +52,9 @@ import { HomeAssistant, Route } from "../../../types"; import { showToast } from "../../../util/toast"; import "../ha-config-section"; import { configSections } from "../ha-panel-config"; -import "./action/ha-automation-action"; import { HaDeviceAction } from "./action/types/ha-automation-action-device_id"; import "./blueprint-automation-editor"; -import "./condition/ha-automation-condition"; import "./manual-automation-editor"; -import "./trigger/ha-automation-trigger"; import { HaDeviceTrigger } from "./trigger/types/ha-automation-trigger-device"; declare global { @@ -65,6 +63,10 @@ declare global { } // for fire event interface HASSDomEvents { + "subscribe-automation-config": { + callback: (config: AutomationConfig) => void; + unsub?: UnsubscribeFunc; + }; "ui-mode-not-available": Error; duplicate: undefined; } @@ -95,6 +97,13 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) { @query("ha-yaml-editor", true) private _editor?: HaYamlEditor; + private _configSubscriptions: Record< + string, + (config?: AutomationConfig) => void + > = {}; + + private _configSubscriptionsId = 1; + protected render(): TemplateResult { const stateObj = this._entityId ? this.hass.states[this._entityId] @@ -200,6 +209,7 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) { class="content ${classMap({ "yaml-mode": this._mode === "yaml", })}" + @subscribe-automation-config=${this._subscribeAutomationConfig} > ${this._errors ? html`
${this._errors}
` @@ -336,6 +346,12 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) { ) { this._setEntityId(); } + + if (changedProps.has("_config")) { + Object.values(this._configSubscriptions).forEach((sub) => + sub(this._config) + ); + } } private _setEntityId() { @@ -516,6 +532,15 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) { ); } + private _subscribeAutomationConfig(ev) { + const id = this._configSubscriptionsId++; + this._configSubscriptions[id] = ev.detail.callback; + ev.detail.unsub = () => { + delete this._configSubscriptions[id]; + }; + ev.detail.callback(this._config); + } + protected handleKeyboardSave() { this._saveAutomation(); } diff --git a/src/panels/config/automation/trigger/ha-automation-trigger-row.ts b/src/panels/config/automation/trigger/ha-automation-trigger-row.ts index 07b8b7373f..8cd132ce3f 100644 --- a/src/panels/config/automation/trigger/ha-automation-trigger-row.ts +++ b/src/panels/config/automation/trigger/ha-automation-trigger-row.ts @@ -162,6 +162,14 @@ export default class HaAutomationTriggerRow extends LitElement { )} + +
${dynamicElement( `ha-automation-trigger-${this.trigger.platform}`, @@ -212,15 +220,35 @@ export default class HaAutomationTriggerRow extends LitElement { const elClass = customElements.get(`ha-automation-trigger-${type}`); if (type !== this.trigger.platform) { + const value = { + platform: type, + ...elClass.defaultConfig, + }; + if (this.trigger.id) { + value.id = this.trigger.id; + } fireEvent(this, "value-changed", { - value: { - platform: type, - ...elClass.defaultConfig, - }, + value, }); } } + private _idChanged(ev: CustomEvent) { + const newId = ev.detail.value; + if (newId === this.trigger.id) { + return; + } + const value = { ...this.trigger }; + if (!newId) { + delete value.id; + } else { + value.id = newId; + } + fireEvent(this, "value-changed", { + value, + }); + } + private _onYamlChange(ev: CustomEvent) { ev.stopPropagation(); if (!ev.detail.isValid) { diff --git a/src/translations/en.json b/src/translations/en.json index c5bc152a6a..c556a89876 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -1308,6 +1308,7 @@ "introduction": "Triggers are what starts the processing of an automation rule. It is possible to specify multiple triggers for the same rule. Once a trigger starts, Home Assistant will validate the conditions, if any, and call the action.", "learn_more": "Learn more about triggers", "add": "Add trigger", + "id": "Trigger ID (used by the trigger condition)", "duplicate": "Duplicate", "delete": "[%key:ui::panel::mailbox::delete_button%]", "delete_confirm": "Are you sure you want to delete this?", @@ -1475,6 +1476,11 @@ "sun": "Sunday" } }, + "trigger": { + "label": "Trigger", + "no_triggers": "No triggers available", + "id": "Trigger Id" + }, "zone": { "label": "[%key:ui::panel::config::automation::editor::triggers::type::zone::label%]", "entity": "[%key:ui::panel::config::automation::editor::triggers::type::zone::entity%]", From 4b9487183b5237a6f5dd04cd337045d53ab3ee67 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Tue, 6 Jul 2021 10:46:51 +0200 Subject: [PATCH 13/14] Add tracing to scripts (#9486) --- .../trace/ha-trace-blueprint-config.ts} | 16 +- .../trace/ha-trace-config.ts} | 16 +- .../trace/ha-trace-logbook.ts} | 19 +- .../trace/ha-trace-path-details.ts} | 36 +- .../trace/ha-trace-timeline.ts} | 22 +- src/components/trace/hat-graph-node.ts | 8 +- src/components/trace/hat-graph.ts | 10 +- src/components/trace/hat-logbook-note.ts | 6 +- src/components/trace/hat-script-graph.ts | 142 +++-- .../trace/trace-tab-styles.ts} | 0 src/data/script.ts | 5 + src/data/trace.ts | 38 +- .../{trace => }/ha-automation-trace.ts | 62 ++- .../config/automation/ha-config-automation.ts | 2 +- src/panels/config/script/ha-config-script.ts | 6 +- src/panels/config/script/ha-script-editor.ts | 11 +- src/panels/config/script/ha-script-picker.ts | 16 + src/panels/config/script/ha-script-trace.ts | 502 ++++++++++++++++++ src/translations/en.json | 4 +- 19 files changed, 768 insertions(+), 153 deletions(-) rename src/{panels/config/automation/trace/ha-automation-trace-blueprint-config.ts => components/trace/ha-trace-blueprint-config.ts} (50%) rename src/{panels/config/automation/trace/ha-automation-trace-config.ts => components/trace/ha-trace-config.ts} (55%) rename src/{panels/config/automation/trace/ha-automation-trace-logbook.ts => components/trace/ha-trace-logbook.ts} (66%) rename src/{panels/config/automation/trace/ha-automation-trace-path-details.ts => components/trace/ha-trace-path-details.ts} (87%) rename src/{panels/config/automation/trace/ha-automation-trace-timeline.ts => components/trace/ha-trace-timeline.ts} (55%) rename src/{panels/config/automation/trace/styles.ts => components/trace/trace-tab-styles.ts} (100%) rename src/panels/config/automation/{trace => }/ha-automation-trace.ts (89%) create mode 100644 src/panels/config/script/ha-script-trace.ts diff --git a/src/panels/config/automation/trace/ha-automation-trace-blueprint-config.ts b/src/components/trace/ha-trace-blueprint-config.ts similarity index 50% rename from src/panels/config/automation/trace/ha-automation-trace-blueprint-config.ts rename to src/components/trace/ha-trace-blueprint-config.ts index bc3117114b..64e4bbc810 100644 --- a/src/panels/config/automation/trace/ha-automation-trace-blueprint-config.ts +++ b/src/components/trace/ha-trace-blueprint-config.ts @@ -1,16 +1,16 @@ import { dump } from "js-yaml"; import { html, LitElement, TemplateResult } from "lit"; import { customElement, property } from "lit/decorators"; -import "../../../../components/ha-code-editor"; -import "../../../../components/ha-icon-button"; -import { AutomationTraceExtended } from "../../../../data/trace"; -import { HomeAssistant } from "../../../../types"; +import "../ha-code-editor"; +import "../ha-icon-button"; +import { TraceExtended } from "../../data/trace"; +import { HomeAssistant } from "../../types"; -@customElement("ha-automation-trace-blueprint-config") -export class HaAutomationTraceBlueprintConfig extends LitElement { +@customElement("ha-trace-blueprint-config") +export class HaTraceBlueprintConfig extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; - @property() public trace!: AutomationTraceExtended; + @property({ attribute: false }) public trace!: TraceExtended; protected render(): TemplateResult { return html` @@ -24,6 +24,6 @@ export class HaAutomationTraceBlueprintConfig extends LitElement { declare global { interface HTMLElementTagNameMap { - "ha-automation-trace-blueprint-config": HaAutomationTraceBlueprintConfig; + "ha-trace-blueprint-config": HaTraceBlueprintConfig; } } diff --git a/src/panels/config/automation/trace/ha-automation-trace-config.ts b/src/components/trace/ha-trace-config.ts similarity index 55% rename from src/panels/config/automation/trace/ha-automation-trace-config.ts rename to src/components/trace/ha-trace-config.ts index c97bb47f8b..237a051110 100644 --- a/src/panels/config/automation/trace/ha-automation-trace-config.ts +++ b/src/components/trace/ha-trace-config.ts @@ -1,16 +1,16 @@ import { dump } from "js-yaml"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property } from "lit/decorators"; -import "../../../../components/ha-code-editor"; -import "../../../../components/ha-icon-button"; -import { AutomationTraceExtended } from "../../../../data/trace"; -import { HomeAssistant } from "../../../../types"; +import "../ha-code-editor"; +import "../ha-icon-button"; +import { TraceExtended } from "../../data/trace"; +import { HomeAssistant } from "../../types"; -@customElement("ha-automation-trace-config") -export class HaAutomationTraceConfig extends LitElement { +@customElement("ha-trace-config") +export class HaTraceConfig extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; - @property() public trace!: AutomationTraceExtended; + @property({ attribute: false }) public trace!: TraceExtended; protected render(): TemplateResult { return html` @@ -28,6 +28,6 @@ export class HaAutomationTraceConfig extends LitElement { declare global { interface HTMLElementTagNameMap { - "ha-automation-trace-config": HaAutomationTraceConfig; + "ha-trace-config": HaTraceConfig; } } diff --git a/src/panels/config/automation/trace/ha-automation-trace-logbook.ts b/src/components/trace/ha-trace-logbook.ts similarity index 66% rename from src/panels/config/automation/trace/ha-automation-trace-logbook.ts rename to src/components/trace/ha-trace-logbook.ts index 675d355662..2f4da4de66 100644 --- a/src/panels/config/automation/trace/ha-automation-trace-logbook.ts +++ b/src/components/trace/ha-trace-logbook.ts @@ -1,16 +1,19 @@ import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property } from "lit/decorators"; -import "../../../../components/trace/hat-logbook-note"; -import type { LogbookEntry } from "../../../../data/logbook"; -import type { HomeAssistant } from "../../../../types"; -import "../../../logbook/ha-logbook"; +import { LogbookEntry } from "../../data/logbook"; +import { HomeAssistant } from "../../types"; +import "./hat-logbook-note"; +import "../../panels/logbook/ha-logbook"; +import { TraceExtended } from "../../data/trace"; -@customElement("ha-automation-trace-logbook") -export class HaAutomationTraceLogbook extends LitElement { +@customElement("ha-trace-logbook") +export class HaTraceLogbook extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; @property({ type: Boolean, reflect: true }) public narrow!: boolean; + @property({ attribute: false }) public trace!: TraceExtended; + @property({ attribute: false }) public logbookEntries!: LogbookEntry[]; protected render(): TemplateResult { @@ -22,7 +25,7 @@ export class HaAutomationTraceLogbook extends LitElement { .entries=${this.logbookEntries} .narrow=${this.narrow} > - + ` : html`
No Logbook entries found for this step. @@ -42,6 +45,6 @@ export class HaAutomationTraceLogbook extends LitElement { declare global { interface HTMLElementTagNameMap { - "ha-automation-trace-logbook": HaAutomationTraceLogbook; + "ha-trace-logbook": HaTraceLogbook; } } diff --git a/src/panels/config/automation/trace/ha-automation-trace-path-details.ts b/src/components/trace/ha-trace-path-details.ts similarity index 87% rename from src/panels/config/automation/trace/ha-automation-trace-path-details.ts rename to src/components/trace/ha-trace-path-details.ts index dc0412b149..45134c532a 100644 --- a/src/panels/config/automation/trace/ha-automation-trace-path-details.ts +++ b/src/components/trace/ha-trace-path-details.ts @@ -2,33 +2,33 @@ import { dump } from "js-yaml"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; import { classMap } from "lit/directives/class-map"; -import { formatDateTimeWithSeconds } from "../../../../common/datetime/format_date_time"; -import "../../../../components/ha-code-editor"; -import "../../../../components/ha-icon-button"; -import type { NodeInfo } from "../../../../components/trace/hat-graph"; -import "../../../../components/trace/hat-logbook-note"; -import { LogbookEntry } from "../../../../data/logbook"; +import { formatDateTimeWithSeconds } from "../../common/datetime/format_date_time"; +import "../ha-code-editor"; +import "../ha-icon-button"; +import type { NodeInfo } from "./hat-graph"; +import "./hat-logbook-note"; +import { LogbookEntry } from "../../data/logbook"; import { ActionTraceStep, - AutomationTraceExtended, ChooseActionTraceStep, getDataFromPath, -} from "../../../../data/trace"; -import { HomeAssistant } from "../../../../types"; -import "../../../logbook/ha-logbook"; -import { traceTabStyles } from "./styles"; + TraceExtended, +} from "../../data/trace"; +import "../../panels/logbook/ha-logbook"; +import { traceTabStyles } from "./trace-tab-styles"; +import { HomeAssistant } from "../../types"; -@customElement("ha-automation-trace-path-details") -export class HaAutomationTracePathDetails extends LitElement { +@customElement("ha-trace-path-details") +export class HaTracePathDetails extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; @property({ type: Boolean, reflect: true }) public narrow!: boolean; - @property() private selected!: NodeInfo; + @property({ attribute: false }) public trace!: TraceExtended; - @property() public trace!: AutomationTraceExtended; + @property({ attribute: false }) public logbookEntries!: LogbookEntry[]; - @property() public logbookEntries!: LogbookEntry[]; + @property({ attribute: false }) public selected!: NodeInfo; @property() renderedNodes: Record = {}; @@ -230,7 +230,7 @@ export class HaAutomationTracePathDetails extends LitElement { .entries=${entries} .narrow=${this.narrow} > - + ` : html`
No Logbook entries found for this step. @@ -267,6 +267,6 @@ export class HaAutomationTracePathDetails extends LitElement { declare global { interface HTMLElementTagNameMap { - "ha-automation-trace-path-details": HaAutomationTracePathDetails; + "ha-trace-path-details": HaTracePathDetails; } } diff --git a/src/panels/config/automation/trace/ha-automation-trace-timeline.ts b/src/components/trace/ha-trace-timeline.ts similarity index 55% rename from src/panels/config/automation/trace/ha-automation-trace-timeline.ts rename to src/components/trace/ha-trace-timeline.ts index d379dc6934..2680254f93 100644 --- a/src/panels/config/automation/trace/ha-automation-trace-timeline.ts +++ b/src/components/trace/ha-trace-timeline.ts @@ -1,17 +1,17 @@ import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property } from "lit/decorators"; -import type { NodeInfo } from "../../../../components/trace/hat-graph"; -import "../../../../components/trace/hat-logbook-note"; -import "../../../../components/trace/hat-trace-timeline"; -import type { LogbookEntry } from "../../../../data/logbook"; -import type { AutomationTraceExtended } from "../../../../data/trace"; -import type { HomeAssistant } from "../../../../types"; +import type { NodeInfo } from "./hat-graph"; +import "./hat-logbook-note"; +import "./hat-trace-timeline"; +import type { LogbookEntry } from "../../data/logbook"; +import type { TraceExtended } from "../../data/trace"; +import type { HomeAssistant } from "../../types"; -@customElement("ha-automation-trace-timeline") -export class HaAutomationTraceTimeline extends LitElement { +@customElement("ha-trace-timeline") +export class HaTraceTimeline extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; - @property({ attribute: false }) public trace!: AutomationTraceExtended; + @property({ attribute: false }) public trace!: TraceExtended; @property({ attribute: false }) public logbookEntries!: LogbookEntry[]; @@ -27,7 +27,7 @@ export class HaAutomationTraceTimeline extends LitElement { allowPick > - + `; } @@ -45,6 +45,6 @@ export class HaAutomationTraceTimeline extends LitElement { declare global { interface HTMLElementTagNameMap { - "ha-automation-trace-timeline": HaAutomationTraceTimeline; + "ha-trace-timeline": HaTraceTimeline; } } diff --git a/src/components/trace/hat-graph-node.ts b/src/components/trace/hat-graph-node.ts index 5b0ba7ca64..bb418dc23e 100644 --- a/src/components/trace/hat-graph-node.ts +++ b/src/components/trace/hat-graph-node.ts @@ -8,7 +8,7 @@ export class HatGraphNode extends LitElement { @property({ reflect: true, type: Boolean }) disabled?: boolean; - @property({ reflect: true, type: Boolean }) graphstart?: boolean; + @property({ reflect: true, type: Boolean }) graphStart?: boolean; @property({ reflect: true, type: Boolean }) nofocus?: boolean; @@ -21,20 +21,20 @@ export class HatGraphNode extends LitElement { } render() { - const height = NODE_SIZE + (this.graphstart ? 2 : SPACING + 1); + const height = NODE_SIZE + (this.graphStart ? 2 : SPACING + 1); const width = SPACING + NODE_SIZE; return svg` ${ - this.graphstart + this.graphStart ? `` : svg` - ${this.branching + ${this.branching && branches.some((branch) => !branch.start) ? svg` -
+
key in node) || "other"; - const nodeEl = NODE_TYPES[type].bind(this)(node, path); + const nodeEl = NODE_TYPES[type].bind(this)(node, path, graphStart); this.renderedNodes[path] = { config: node, path }; if (this.trace && path in this.trace.trace) { this.trackedNodes[path] = this.renderedNodes[path]; @@ -423,35 +460,47 @@ class HatScriptGraph extends LitElement { const paths = Object.keys(this.trackedNodes); const manual_triggered = this.trace && "trigger" in this.trace.trace; let track_path = manual_triggered ? undefined : [0]; - const trigger_nodes = ensureArray(this.trace.config.trigger).map( - (trigger, i) => { - if (this.trace && `trigger/${i}` in this.trace.trace) { - track_path = [i]; - } - return this.render_trigger(trigger, i); - } - ); + const trigger_nodes = + "trigger" in this.trace.config + ? ensureArray(this.trace.config.trigger).map((trigger, i) => { + if (this.trace && `trigger/${i}` in this.trace.trace) { + track_path = [i]; + } + return this.render_trigger(trigger, i); + }) + : undefined; try { return html`
- - ${trigger_nodes} - - - ${ensureArray(this.trace.config.condition)?.map((condition, i) => - this.render_condition(condition!, i) - )} - - ${ensureArray(this.trace.config.action).map((action, i) => - this.render_node(action, `action/${i}`) - )} + ${trigger_nodes + ? html` + ${trigger_nodes} + ` + : ""} + ${"condition" in this.trace.config + ? html` + ${ensureArray( + this.trace.config.condition + )?.map((condition, i) => this.render_condition(condition!, i))} + ` + : ""} + ${"action" in this.trace.config + ? html`${ensureArray(this.trace.config.action).map((action, i) => + this.render_node(action, `action/${i}`) + )}` + : ""} + ${"sequence" in this.trace.config + ? html`${ensureArray(this.trace.config.sequence).map((action, i) => + this.render_node(action, `sequence/${i}`, i === 0) + )}` + : ""}
; + context: Context; + error?: string; +} + +export interface AutomationTrace extends BaseTrace { + domain: "automation"; trigger: string; } -export interface AutomationTraceExtended extends AutomationTrace { - trace: Record; - context: Context; +export interface AutomationTraceExtended + extends AutomationTrace, + BaseTraceExtended { config: ManualAutomationConfig; blueprint_inputs?: BlueprintAutomationConfig; - error?: string; } +export interface ScriptTrace extends BaseTrace { + domain: "script"; +} + +export interface ScriptTraceExtended extends ScriptTrace, BaseTraceExtended { + config: ScriptConfig; + blueprint_inputs?: BlueprintScriptConfig; +} + +export type TraceExtended = AutomationTraceExtended | ScriptTraceExtended; + interface TraceTypes { automation: { short: AutomationTrace; extended: AutomationTraceExtended; }; + script: { + short: ScriptTrace; + extended: ScriptTraceExtended; + }; } export const loadTrace = ( @@ -141,7 +165,7 @@ export const loadTraceContexts = ( }); export const getDataFromPath = ( - config: ManualAutomationConfig, + config: TraceExtended["config"], path: string ): any => { const parts = path.split("/").reverse(); diff --git a/src/panels/config/automation/trace/ha-automation-trace.ts b/src/panels/config/automation/ha-automation-trace.ts similarity index 89% rename from src/panels/config/automation/trace/ha-automation-trace.ts rename to src/panels/config/automation/ha-automation-trace.ts index fefffacb80..91ef868d31 100644 --- a/src/panels/config/automation/trace/ha-automation-trace.ts +++ b/src/panels/config/automation/ha-automation-trace.ts @@ -9,31 +9,28 @@ import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; import { classMap } from "lit/directives/class-map"; import { repeat } from "lit/directives/repeat"; -import { isComponentLoaded } from "../../../../common/config/is_component_loaded"; -import { formatDateTimeWithSeconds } from "../../../../common/datetime/format_date_time"; -import type { NodeInfo } from "../../../../components/trace/hat-graph"; -import "../../../../components/trace/hat-script-graph"; -import { AutomationEntity } from "../../../../data/automation"; -import { - getLogbookDataForContext, - LogbookEntry, -} from "../../../../data/logbook"; +import { isComponentLoaded } from "../../../common/config/is_component_loaded"; +import { formatDateTimeWithSeconds } from "../../../common/datetime/format_date_time"; +import type { NodeInfo } from "../../../components/trace/hat-graph"; +import "../../../components/trace/hat-script-graph"; +import { AutomationEntity } from "../../../data/automation"; +import { getLogbookDataForContext, LogbookEntry } from "../../../data/logbook"; import { AutomationTrace, AutomationTraceExtended, loadTrace, loadTraces, -} from "../../../../data/trace"; -import { showAlertDialog } from "../../../../dialogs/generic/show-dialog-box"; -import { haStyle } from "../../../../resources/styles"; -import { HomeAssistant, Route } from "../../../../types"; -import { configSections } from "../../ha-panel-config"; -import "./ha-automation-trace-blueprint-config"; -import "./ha-automation-trace-config"; -import "./ha-automation-trace-logbook"; -import "./ha-automation-trace-path-details"; -import "./ha-automation-trace-timeline"; -import { traceTabStyles } from "./styles"; +} from "../../../data/trace"; +import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; +import { haStyle } from "../../../resources/styles"; +import { HomeAssistant, Route } from "../../../types"; +import { configSections } from "../ha-panel-config"; +import "../../../components/trace/ha-trace-blueprint-config"; +import "../../../components/trace/ha-trace-config"; +import "../../../components/trace/ha-trace-logbook"; +import "../../../components/trace/ha-trace-path-details"; +import "../../../components/trace/ha-trace-timeline"; +import { traceTabStyles } from "../../../components/trace/trace-tab-styles"; @customElement("ha-automation-trace") export class HaAutomationTrace extends LitElement { @@ -209,7 +206,7 @@ export class HaAutomationTrace extends LitElement { @click=${this._showTab} > Blueprint Config -
+ ` : ""}
@@ -219,46 +216,47 @@ export class HaAutomationTrace extends LitElement { ? "" : this._view === "details" ? html` - + .renderedNodes=${renderedNodes!} + > ` : this._view === "config" ? html` - + > ` : this._view === "logbook" ? html` - + > ` : this._view === "blueprint" ? html` - + > ` : html` - + > `}
diff --git a/src/panels/config/automation/ha-config-automation.ts b/src/panels/config/automation/ha-config-automation.ts index 8a61fabf57..a4fa5d38ab 100644 --- a/src/panels/config/automation/ha-config-automation.ts +++ b/src/panels/config/automation/ha-config-automation.ts @@ -51,7 +51,7 @@ class HaConfigAutomation extends HassRouterPage { }, trace: { tag: "ha-automation-trace", - load: () => import("./trace/ha-automation-trace"), + load: () => import("./ha-automation-trace"), }, }, }; diff --git a/src/panels/config/script/ha-config-script.ts b/src/panels/config/script/ha-config-script.ts index f1c11a2b84..4b8f9aefa8 100644 --- a/src/panels/config/script/ha-config-script.ts +++ b/src/panels/config/script/ha-config-script.ts @@ -42,6 +42,10 @@ class HaConfigScript extends HassRouterPage { edit: { tag: "ha-script-editor", }, + trace: { + tag: "ha-script-trace", + load: () => import("./ha-script-trace"), + }, }, }; @@ -81,7 +85,7 @@ class HaConfigScript extends HassRouterPage { if ( (!changedProps || changedProps.has("route")) && - this._currentPage === "edit" + this._currentPage !== "dashboard" ) { pageEl.creatingNew = undefined; const scriptEntityId = this.routeTail.path.substr(1); diff --git a/src/panels/config/script/ha-script-editor.ts b/src/panels/config/script/ha-script-editor.ts index dc7abce376..2b22bd69ef 100644 --- a/src/panels/config/script/ha-script-editor.ts +++ b/src/panels/config/script/ha-script-editor.ts @@ -297,7 +297,16 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
- + + + ${this.hass.localize( + "ui.panel.config.script.editor.show_trace" + )} + + `, }; + columns.trace = { + title: "", + type: "icon-button", + template: (_info, script: any) => html` + + + + + + `, + }; columns.edit = { title: "", type: "icon-button", diff --git a/src/panels/config/script/ha-script-trace.ts b/src/panels/config/script/ha-script-trace.ts new file mode 100644 index 0000000000..786dfb9d9e --- /dev/null +++ b/src/panels/config/script/ha-script-trace.ts @@ -0,0 +1,502 @@ +import { + mdiDownload, + mdiPencil, + mdiRayEndArrow, + mdiRayStartArrow, + mdiRefresh, +} from "@mdi/js"; +import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; +import { customElement, property, state } from "lit/decorators"; +import { classMap } from "lit/directives/class-map"; +import { repeat } from "lit/directives/repeat"; +import { isComponentLoaded } from "../../../common/config/is_component_loaded"; +import { formatDateTimeWithSeconds } from "../../../common/datetime/format_date_time"; +import type { NodeInfo } from "../../../components/trace/hat-graph"; +import "../../../components/trace/hat-script-graph"; +import { getLogbookDataForContext, LogbookEntry } from "../../../data/logbook"; +import { ScriptEntity } from "../../../data/script"; +import { + loadTrace, + loadTraces, + ScriptTrace, + ScriptTraceExtended, +} from "../../../data/trace"; +import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; +import { haStyle } from "../../../resources/styles"; +import { HomeAssistant, Route } from "../../../types"; +import { traceTabStyles } from "../../../components/trace/trace-tab-styles"; +import { configSections } from "../ha-panel-config"; +import "../../../components/trace/ha-trace-blueprint-config"; +import "../../../components/trace/ha-trace-config"; +import "../../../components/trace/ha-trace-logbook"; +import "../../../components/trace/ha-trace-path-details"; +import "../../../components/trace/ha-trace-timeline"; + +@customElement("ha-script-trace") +export class HaScriptTrace extends LitElement { + @property({ attribute: false }) public hass!: HomeAssistant; + + @property() public scriptEntityId!: string; + + @property({ attribute: false }) public scripts!: ScriptEntity[]; + + @property({ type: Boolean }) public isWide?: boolean; + + @property({ type: Boolean, reflect: true }) public narrow!: boolean; + + @property({ attribute: false }) public route!: Route; + + @state() private _traces?: ScriptTrace[]; + + @state() private _runId?: string; + + @state() private _selected?: NodeInfo; + + @state() private _trace?: ScriptTraceExtended; + + @state() private _logbookEntries?: LogbookEntry[]; + + @state() private _view: + | "details" + | "config" + | "timeline" + | "logbook" + | "blueprint" = "details"; + + protected render(): TemplateResult { + const stateObj = this.scriptEntityId + ? this.hass.states[this.scriptEntityId] + : undefined; + + const graph = this.shadowRoot!.querySelector("hat-script-graph"); + const trackedNodes = graph?.trackedNodes; + const renderedNodes = graph?.renderedNodes; + + const title = stateObj?.attributes.friendly_name || this.scriptEntityId; + + let devButtons: TemplateResult | string = ""; + if (__DEV__) { + devButtons = html`
+ + +
`; + } + + const actionButtons = html` + this._loadTraces()}> + + + + + + `; + + return html` + ${devButtons} + + ${this.narrow + ? html` ${title} +
${actionButtons}
` + : ""} +
+ ${!this.narrow + ? html`
+ ${title} + + + + + +
` + : ""} + ${this._traces && this._traces.length > 0 + ? html` +
+ + + + + + + +
+ ` + : ""} + ${!this.narrow ? html`
${actionButtons}
` : ""} +
+ + ${this._traces === undefined + ? html`
Loading…
` + : this._traces.length === 0 + ? html`
No traces found
` + : this._trace === undefined + ? "" + : html` +
+
+ +
+ +
+
+ ${[ + ["details", "Step Details"], + ["timeline", "Trace Timeline"], + ["logbook", "Related logbook entries"], + ["config", "Script Config"], + ].map( + ([view, label]) => html` + + ` + )} + ${this._trace.blueprint_inputs + ? html` + + ` + : ""} +
+ ${this._selected === undefined || + this._logbookEntries === undefined || + trackedNodes === undefined + ? "" + : this._view === "details" + ? html` + + ` + : this._view === "config" + ? html` + + ` + : this._view === "logbook" + ? html` + + ` + : this._view === "blueprint" + ? html` + + ` + : html` + + `} +
+
+ `} +
+ `; + } + + protected firstUpdated(changedProps) { + super.firstUpdated(changedProps); + + if (!this.scriptEntityId) { + return; + } + + const params = new URLSearchParams(location.search); + this._loadTraces(params.get("run_id") || undefined); + } + + protected updated(changedProps) { + super.updated(changedProps); + + // Only reset if automationId has changed and we had one before. + if (changedProps.get("scriptEntityId")) { + this._traces = undefined; + this._runId = undefined; + this._trace = undefined; + this._logbookEntries = undefined; + if (this.scriptEntityId) { + this._loadTraces(); + } + } + + if (changedProps.has("_runId") && this._runId) { + this._trace = undefined; + this._logbookEntries = undefined; + this.shadowRoot!.querySelector("select")!.value = this._runId; + this._loadTrace(); + } + } + + private _pickOlderTrace() { + const curIndex = this._traces!.findIndex((tr) => tr.run_id === this._runId); + this._runId = this._traces![curIndex + 1].run_id; + this._selected = undefined; + } + + private _pickNewerTrace() { + const curIndex = this._traces!.findIndex((tr) => tr.run_id === this._runId); + this._runId = this._traces![curIndex - 1].run_id; + this._selected = undefined; + } + + private _pickTrace(ev) { + this._runId = ev.target.value; + this._selected = undefined; + } + + private _pickNode(ev) { + this._selected = ev.detail; + } + + private async _loadTraces(runId?: string) { + this._traces = await loadTraces( + this.hass, + "script", + this.scriptEntityId.split(".")[1] + ); + // Newest will be on top. + this._traces.reverse(); + + if (runId) { + this._runId = runId; + } + + // Check if current run ID still exists + if ( + this._runId && + !this._traces.some((trace) => trace.run_id === this._runId) + ) { + this._runId = undefined; + this._selected = undefined; + + // If we came here from a trace passed into the url, clear it. + if (runId) { + const params = new URLSearchParams(location.search); + params.delete("run_id"); + history.replaceState( + null, + "", + `${location.pathname}?${params.toString()}` + ); + } + + await showAlertDialog(this, { + text: "Chosen trace is no longer available", + }); + } + + // See if we can set a default runID + if (!this._runId && this._traces.length > 0) { + this._runId = this._traces[0].run_id; + } + } + + private async _loadTrace() { + const trace = await loadTrace( + this.hass, + "script", + this.scriptEntityId.split(".")[1], + this._runId! + ); + this._logbookEntries = isComponentLoaded(this.hass, "logbook") + ? await getLogbookDataForContext( + this.hass, + trace.timestamp.start, + trace.context.id + ) + : []; + + this._trace = trace; + } + + private _downloadTrace() { + const aEl = document.createElement("a"); + aEl.download = `trace ${this.scriptEntityId} ${ + this._trace!.timestamp.start + }.json`; + aEl.href = `data:application/json;charset=utf-8,${encodeURI( + JSON.stringify( + { + trace: this._trace, + logbookEntries: this._logbookEntries, + }, + undefined, + 2 + ) + )}`; + aEl.click(); + } + + private _importTrace() { + const traceText = prompt("Enter downloaded trace"); + if (!traceText) { + return; + } + localStorage.devTrace = traceText; + this._loadLocalTrace(traceText); + } + + private _loadLocalStorageTrace() { + if (localStorage.devTrace) { + this._loadLocalTrace(localStorage.devTrace); + } + } + + private _loadLocalTrace(traceText: string) { + const traceInfo = JSON.parse(traceText); + this._trace = traceInfo.trace; + this._logbookEntries = traceInfo.logbookEntries; + } + + private _showTab(ev) { + this._view = (ev.target as any).view; + } + + private _timelinePathPicked(ev) { + const path = ev.detail.value; + const nodes = this.shadowRoot!.querySelector("hat-script-graph")! + .trackedNodes; + if (nodes[path]) { + this._selected = nodes[path]; + } + } + + static get styles(): CSSResultGroup { + return [ + haStyle, + traceTabStyles, + css` + .toolbar { + display: flex; + align-items: center; + justify-content: space-between; + font-size: 20px; + height: var(--header-height); + padding: 0 16px; + background-color: var(--primary-background-color); + font-weight: 400; + color: var(--app-header-text-color, white); + border-bottom: var(--app-header-border-bottom, none); + box-sizing: border-box; + } + + .toolbar > * { + display: flex; + align-items: center; + } + + :host([narrow]) .toolbar > * { + display: contents; + } + + .main { + height: calc(100% - 56px); + display: flex; + background-color: var(--card-background-color); + } + + :host([narrow]) .main { + height: auto; + flex-direction: column; + } + + .container { + padding: 16px; + } + + .graph { + border-right: 1px solid var(--divider-color); + overflow-x: auto; + max-width: 50%; + } + :host([narrow]) .graph { + max-width: 100%; + } + + .info { + flex: 1; + background-color: var(--card-background-color); + } + + .linkButton { + color: var(--primary-text-color); + } + `, + ]; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-script-trace": HaScriptTrace; + } +} diff --git a/src/translations/en.json b/src/translations/en.json index c556a89876..d7a4efd15d 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -303,7 +303,7 @@ "entries_not_found": "No logbook entries found.", "by": "by", "by_service": "by service", - "show_trace": "Show trace", + "show_trace": "[%key:ui::panel::config::automation::editor::show_trace%]", "retrieval_error": "Error during logbook entry retrieval", "messages": { "was_away": "was detected away", @@ -1640,6 +1640,7 @@ "show_info": "Show info about script", "run_script": "Run script", "edit_script": "Edit script", + "dev_script": "Debug script", "headers": { "name": "Name" }, @@ -1653,6 +1654,7 @@ "id_already_exists_save_error": "You can't save this script because the ID is not unique, pick another ID or leave it blank to automatically generate one.", "id_already_exists": "This ID already exists", "introduction": "Use scripts to run a sequence of actions.", + "show_trace": "[%key:ui::panel::config::automation::editor::show_trace%]", "header": "Script: {name}", "default_name": "New Script", "modes": { From b1b5ab6949bed9a7779fec9052c1df61fe9c4e30 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Tue, 6 Jul 2021 10:47:41 +0200 Subject: [PATCH 14/14] Bumped version to 20210706.0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 4ac42a4d05..374d8bc9e2 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name="home-assistant-frontend", - version="20210630.0", + version="20210706.0", description="The Home Assistant frontend", url="https://github.com/home-assistant/home-assistant-polymer", author="The Home Assistant Authors",