Merge pull request #5900 from home-assistant/dev

This commit is contained in:
Bram Kragten 2020-05-15 22:01:34 +02:00 committed by GitHub
commit 007f8b50b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 172 additions and 112 deletions

View File

@ -24,6 +24,7 @@
"author": "Paulus Schoutsen <Paulus@PaulusSchoutsen.nl> (http://paulusschoutsen.nl)", "author": "Paulus Schoutsen <Paulus@PaulusSchoutsen.nl> (http://paulusschoutsen.nl)",
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@formatjs/intl-pluralrules": "^1.5.8",
"@fullcalendar/core": "^5.0.0-beta.2", "@fullcalendar/core": "^5.0.0-beta.2",
"@fullcalendar/daygrid": "^5.0.0-beta.2", "@fullcalendar/daygrid": "^5.0.0-beta.2",
"@material/chips": "7.0.0-canary.d92d8c93e.0", "@material/chips": "7.0.0-canary.d92d8c93e.0",

View File

@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup( setup(
name="home-assistant-frontend", name="home-assistant-frontend",
version="20200514.1", version="20200515.0",
description="The Home Assistant frontend", description="The Home Assistant frontend",
url="https://github.com/home-assistant/home-assistant-polymer", url="https://github.com/home-assistant/home-assistant-polymer",
author="The Home Assistant Authors", author="The Home Assistant Authors",

View File

@ -12,6 +12,10 @@ export interface FormatsType {
time: FormatType; time: FormatType;
} }
if (!Intl.PluralRules) {
import("@formatjs/intl-pluralrules/polyfill-locales");
}
/** /**
* Adapted from Polymer app-localize-behavior. * Adapted from Polymer app-localize-behavior.
* *

View File

@ -1,7 +1,6 @@
import "@material/mwc-checkbox"; import "@material/mwc-checkbox";
import type { Checkbox } from "@material/mwc-checkbox"; import type { Checkbox } from "@material/mwc-checkbox";
import { style } from "@material/mwc-checkbox/mwc-checkbox-css"; import { customElement } from "lit-element";
import { css, CSSResult, customElement } from "lit-element";
import type { Constructor } from "../types"; import type { Constructor } from "../types";
const MwcCheckbox = customElements.get("mwc-checkbox") as Constructor<Checkbox>; const MwcCheckbox = customElements.get("mwc-checkbox") as Constructor<Checkbox>;
@ -12,18 +11,6 @@ export class HaCheckbox extends MwcCheckbox {
super.firstUpdated(); super.firstUpdated();
this.style.setProperty("--mdc-theme-secondary", "var(--primary-color)"); this.style.setProperty("--mdc-theme-secondary", "var(--primary-color)");
} }
protected static get styles(): CSSResult[] {
return [
style,
css`
.mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate)
~ .mdc-checkbox__background {
border-color: rgba(var(--rgb-primary-text-color), 0.54);
}
`,
];
}
} }
declare global { declare global {

View File

@ -323,6 +323,14 @@ class HAFullCalendar extends LitElement {
font-family: var(--material-font-family); font-family: var(--material-font-family);
content: "X"; content: "X";
} }
.fc-popover {
background-color: var(--primary-background-color) !important;
}
.fc-popover-header {
background-color: var(--secondary-background-color) !important;
}
`, `,
]; ];
} }

View File

@ -43,7 +43,8 @@ export class HaPanelCustom extends UpdatingElement {
this._cleanupPanel(); this._cleanupPanel();
} }
protected updated(changedProps: PropertyValues) { protected update(changedProps: PropertyValues) {
super.update(changedProps);
if (changedProps.has("panel")) { if (changedProps.has("panel")) {
// Clean up old things if we had a panel // Clean up old things if we had a panel
if (changedProps.get("panel")) { if (changedProps.get("panel")) {

View File

@ -131,6 +131,14 @@ class HuiGaugeCard extends LitElement implements LovelaceCard {
const sliderBarColor = this._computeSeverity(state); const sliderBarColor = this._computeSeverity(state);
let value: number | undefined;
if (this._config.max === null || isNaN(this._config.max!)) {
value = undefined;
} else {
value = Math.min(this._config.max!, state);
}
return html` return html`
<ha-card <ha-card
@click=${this._handleClick} @click=${this._handleClick}
@ -143,7 +151,7 @@ class HuiGaugeCard extends LitElement implements LovelaceCard {
readonly readonly
arcLength="180" arcLength="180"
startAngle="180" startAngle="180"
.value=${state} .value=${value}
.min=${this._config.min} .min=${this._config.min}
.max=${this._config.max} .max=${this._config.max}
></round-slider> ></round-slider>
@ -243,6 +251,10 @@ class HuiGaugeCard extends LitElement implements LovelaceCard {
} }
private _measureCard() { private _measureCard() {
if (!this.isConnected) {
return;
}
if (this.offsetWidth < 200) { if (this.offsetWidth < 200) {
this.setAttribute("narrow", ""); this.setAttribute("narrow", "");
} else { } else {
@ -257,6 +269,10 @@ class HuiGaugeCard extends LitElement implements LovelaceCard {
static get styles(): CSSResult { static get styles(): CSSResult {
return css` return css`
:host {
display: block;
}
ha-card { ha-card {
cursor: pointer; cursor: pointer;
height: 100%; height: 100%;

View File

@ -248,19 +248,12 @@ export class HuiThermostatCard extends LitElement implements LovelaceCard {
} }
protected shouldUpdate(changedProps: PropertyValues): boolean { protected shouldUpdate(changedProps: PropertyValues): boolean {
if (changedProps.has("_setTemp")) {
return true;
}
return hasConfigOrEntityChanged(this, changedProps); return hasConfigOrEntityChanged(this, changedProps);
} }
protected updated(changedProps: PropertyValues): void { protected updated(changedProps: PropertyValues): void {
super.updated(changedProps); super.updated(changedProps);
if (changedProps.has("_setTemp")) {
this.rescale_svg();
}
if ( if (
!this._config || !this._config ||
!this.hass || !this.hass ||
@ -283,23 +276,18 @@ export class HuiThermostatCard extends LitElement implements LovelaceCard {
applyThemesOnElement(this, this.hass.themes, this._config.theme); applyThemesOnElement(this, this.hass.themes, this._config.theme);
} }
const stateObj = this.hass!.states[this._config!.entity]; const stateObj = this.hass.states[this._config.entity];
if (!stateObj) { if (!stateObj) {
return; return;
} }
const newTemp = this._getSetTemp(stateObj);
if ( if (!oldHass || oldHass.states[this._config.entity] !== stateObj) {
Array.isArray(this._setTemp) && this._setTemp = this._getSetTemp(stateObj);
Array.isArray(newTemp) && this._rescale_svg();
(this._setTemp[0] !== newTemp[0] || this._setTemp[1] !== newTemp[1])
) {
this._setTemp = newTemp;
} else if (this._setTemp !== newTemp) {
this._setTemp = newTemp;
} }
} }
private rescale_svg() { private _rescale_svg() {
// Set the viewbox of the SVG containing the set temperature to perfectly // Set the viewbox of the SVG containing the set temperature to perfectly
// fit the text // fit the text
// That way it will auto-scale correctly // That way it will auto-scale correctly

View File

@ -1,4 +1,9 @@
import { customElement, property, UpdatingElement } from "lit-element"; import {
customElement,
property,
UpdatingElement,
PropertyValues,
} from "lit-element";
import { HomeAssistant } from "../../../types"; import { HomeAssistant } from "../../../types";
import { ConditionalCardConfig } from "../cards/types"; import { ConditionalCardConfig } from "../cards/types";
import { import {
@ -40,7 +45,8 @@ export class HuiConditionalBase extends UpdatingElement {
this._config = config; this._config = config;
} }
protected update(): void { protected update(changed: PropertyValues): void {
super.update(changed);
if (!this._element || !this.hass || !this._config) { if (!this._element || !this.hass || !this._config) {
return; return;
} }

View File

@ -4,16 +4,16 @@ import { LovelaceCardConfig } from "../../../../data/lovelace";
import { HomeAssistant } from "../../../../types"; import { HomeAssistant } from "../../../../types";
import { createCardElement } from "../../create-element/create-card-element"; import { createCardElement } from "../../create-element/create-card-element";
import { LovelaceCard } from "../../types"; import { LovelaceCard } from "../../types";
import { ConfigError } from "../types";
import { createErrorCardConfig } from "../../create-element/create-element-base"; import { createErrorCardConfig } from "../../create-element/create-element-base";
import { property, PropertyValues, UpdatingElement } from "lit-element";
export class HuiCardPreview extends HTMLElement { export class HuiCardPreview extends UpdatingElement {
private _hass?: HomeAssistant; @property() public hass?: HomeAssistant;
@property() public config?: LovelaceCardConfig;
private _element?: LovelaceCard; private _element?: LovelaceCard;
private _config?: LovelaceCardConfig;
private get _error() { private get _error() {
return this._element?.tagName === "HUI-ERROR-CARD"; return this._element?.tagName === "HUI-ERROR-CARD";
} }
@ -22,59 +22,60 @@ export class HuiCardPreview extends HTMLElement {
super(); super();
this.addEventListener("ll-rebuild", () => { this.addEventListener("ll-rebuild", () => {
this._cleanup(); this._cleanup();
if (this._config) { if (this.config) {
this.config = this._config; this._createCard(this.config);
} }
}); });
} }
set hass(hass: HomeAssistant) { protected update(changedProperties: PropertyValues) {
if (!this._hass || this._hass.language !== hass.language) { super.update(changedProperties);
this.style.direction = computeRTL(hass) ? "rtl" : "ltr";
}
this._hass = hass; if (changedProperties.has("config")) {
if (this._element) { const oldConfig = changedProperties.get("config") as
this._element.hass = hass; | undefined
} | LovelaceCardConfig;
}
set error(error: ConfigError) { if (!this.config) {
this._createCard(
createErrorCardConfig(`${error.type}: ${error.message}`, undefined)
);
}
set config(configValue: LovelaceCardConfig) {
const curConfig = this._config;
this._config = configValue;
if (!configValue) {
this._cleanup(); this._cleanup();
return; return;
} }
if (!configValue.type) { if (!this.config.type) {
this._createCard( this._createCard(
createErrorCardConfig("No card type found", configValue) createErrorCardConfig("No card type found", this.config)
); );
return; return;
} }
if (!this._element) { if (!this._element) {
this._createCard(configValue); this._createCard(this.config);
return; return;
} }
// in case the element was an error element we always want to recreate it // in case the element was an error element we always want to recreate it
if (!this._error && curConfig && configValue.type === curConfig.type) { if (!this._error && oldConfig && this.config.type === oldConfig.type) {
try { try {
this._element.setConfig(configValue); this._element.setConfig(this.config);
} catch (err) { } catch (err) {
this._createCard(createErrorCardConfig(err.message, configValue)); this._createCard(createErrorCardConfig(err.message, this.config));
} }
} else { } else {
this._createCard(configValue); this._createCard(this.config);
}
}
if (changedProperties.has("hass")) {
const oldHass = changedProperties.get("hass") as
| HomeAssistant
| undefined;
if (!oldHass || oldHass.language !== this.hass!.language) {
this.style.direction = computeRTL(this.hass!) ? "rtl" : "ltr";
}
if (this._element) {
this._element.hass = this.hass;
}
} }
} }
@ -82,8 +83,8 @@ export class HuiCardPreview extends HTMLElement {
this._cleanup(); this._cleanup();
this._element = createCardElement(configValue); this._element = createCardElement(configValue);
if (this._hass) { if (this.hass) {
this._element!.hass = this._hass; this._element!.hass = this.hass;
} }
this.appendChild(this._element!); this.appendChild(this._element!);

View File

@ -25,6 +25,7 @@ import type { ConfigChangedEvent, HuiCardEditor } from "./hui-card-editor";
import "./hui-card-picker"; import "./hui-card-picker";
import "./hui-card-preview"; import "./hui-card-preview";
import type { EditCardDialogParams } from "./show-edit-card-dialog"; import type { EditCardDialogParams } from "./show-edit-card-dialog";
import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable";
declare global { declare global {
// for fire event // for fire event

View File

@ -48,6 +48,8 @@ export const derivedStyles = {
"material-body-text-color": "var(--primary-text-color)", "material-body-text-color": "var(--primary-text-color)",
"material-background-color": "var(--card-background-color)", "material-background-color": "var(--card-background-color)",
"material-secondary-background-color": "var(--secondary-background-color)", "material-secondary-background-color": "var(--secondary-background-color)",
"mdc-checkbox-unchecked-color": "rgba(var(--rgb-primary-text-color), 0.54)",
"mdc-checkbox-disabled-color": "var(--disabled-text-color)",
}; };
export const haStyle = css` export const haStyle = css`

View File

@ -1374,7 +1374,8 @@
"restart_confirm": "Reinicia el Home Assistant per acabar d'eliminar aquesta integració", "restart_confirm": "Reinicia el Home Assistant per acabar d'eliminar aquesta integració",
"settings_button": "Edita la configuració de {integration}", "settings_button": "Edita la configuració de {integration}",
"system_options": "Opcions de sistema", "system_options": "Opcions de sistema",
"system_options_button": "Opcions de sistema de {integration}" "system_options_button": "Opcions de sistema de {integration}",
"unnamed_entry": "Entrada sense nom"
}, },
"config_flow": { "config_flow": {
"aborted": "Avortat", "aborted": "Avortat",

View File

@ -617,7 +617,7 @@
"pattern": "Regex pattern for client-side validation", "pattern": "Regex pattern for client-side validation",
"text": "Text" "text": "Text"
}, },
"platform_not_loaded": "The {platform} integration is not loaded. Please add it your configuration either by adding 'default_config:' or '{platform}:'.", "platform_not_loaded": "The {platform} integration is not loaded. Please add it your configuration either by adding 'default_config:' or ''{platform}:''.",
"required_error_msg": "This field is required", "required_error_msg": "This field is required",
"yaml_not_editable": "The settings of this entity cannot be edited from the UI. Only entities set up from the UI are configurable from the UI." "yaml_not_editable": "The settings of this entity cannot be edited from the UI. Only entities set up from the UI are configurable from the UI."
}, },
@ -2285,8 +2285,8 @@
"views": { "views": {
"confirm_delete": "Delete view?", "confirm_delete": "Delete view?",
"confirm_delete_existing_cards": "Deleting this view will also remove the cards", "confirm_delete_existing_cards": "Deleting this view will also remove the cards",
"confirm_delete_existing_cards_text": "Are you sure you want to delete your '{name}' view? The view contains {number} cards that will be deleted. This action cannot be undone.", "confirm_delete_existing_cards_text": "Are you sure you want to delete your ''{name}'' view? The view contains {number} cards that will be deleted. This action cannot be undone.",
"confirm_delete_text": "Are you sure you want to delete your '{name}' view?" "confirm_delete_text": "Are you sure you want to delete your ''{name}'' view?"
}, },
"warning": { "warning": {
"attribute_not_found": "Attribute {attribute} not available in: {entity}", "attribute_not_found": "Attribute {attribute} not available in: {entity}",

View File

@ -1374,7 +1374,8 @@
"restart_confirm": "Reinicia Home Assistant para terminar de eliminar esta integración.", "restart_confirm": "Reinicia Home Assistant para terminar de eliminar esta integración.",
"settings_button": "Editar configuración para {integration}", "settings_button": "Editar configuración para {integration}",
"system_options": "Opciones del sistema", "system_options": "Opciones del sistema",
"system_options_button": "Opciones del sistema para {integration}" "system_options_button": "Opciones del sistema para {integration}",
"unnamed_entry": "Entrada sin nombre"
}, },
"config_flow": { "config_flow": {
"aborted": "Abortado", "aborted": "Abortado",

View File

@ -1374,7 +1374,8 @@
"restart_confirm": "Redémarrer Home Assistant pour terminer la suppression de cette intégration", "restart_confirm": "Redémarrer Home Assistant pour terminer la suppression de cette intégration",
"settings_button": "Modifier les paramètres pour {integration}", "settings_button": "Modifier les paramètres pour {integration}",
"system_options": "Options système", "system_options": "Options système",
"system_options_button": "Options système pour {integration}" "system_options_button": "Options système pour {integration}",
"unnamed_entry": "Entrée sans nom"
}, },
"config_flow": { "config_flow": {
"aborted": "Abandonné", "aborted": "Abandonné",

View File

@ -862,7 +862,8 @@
"rename": "名前を変更", "rename": "名前を変更",
"settings_button": "{integration} の設定を編集", "settings_button": "{integration} の設定を編集",
"system_options": "システムオプション", "system_options": "システムオプション",
"system_options_button": "{integration} のシステムオプション" "system_options_button": "{integration} のシステムオプション",
"unnamed_entry": "名前のないエントリ"
}, },
"config_flow": { "config_flow": {
"aborted": "中止", "aborted": "中止",
@ -1058,7 +1059,8 @@
}, },
"validation": { "validation": {
"check_config": "設定を確認", "check_config": "設定を確認",
"heading": "設定の検証" "heading": "設定の検証",
"valid": "設定は有効です!"
} }
} }
}, },
@ -1157,6 +1159,7 @@
}, },
"info": { "info": {
"frontend_version": "フロントエンドバージョン: {version} - {type}", "frontend_version": "フロントエンドバージョン: {version} - {type}",
"issues": "問題",
"path_configuration": "ディスク上に configuration.yaml へのパス: {path}", "path_configuration": "ディスク上に configuration.yaml へのパス: {path}",
"server": "サーバー", "server": "サーバー",
"system_health_error": "「システムの正常性」コンポーネントが有効されていません、configuration.yaml に 'system_health:' を追加してください。", "system_health_error": "「システムの正常性」コンポーネントが有効されていません、configuration.yaml に 'system_health:' を追加してください。",

View File

@ -1374,7 +1374,8 @@
"restart_confirm": "통합 구성요소 제거 완료를 위해 Home Assistant 웹 페이지를 다시 불러옵니다", "restart_confirm": "통합 구성요소 제거 완료를 위해 Home Assistant 웹 페이지를 다시 불러옵니다",
"settings_button": "{integration} 설정 편집", "settings_button": "{integration} 설정 편집",
"system_options": "시스템 옵션", "system_options": "시스템 옵션",
"system_options_button": "{integration} 시스템 옵션" "system_options_button": "{integration} 시스템 옵션",
"unnamed_entry": "이름이 없는 항목"
}, },
"config_flow": { "config_flow": {
"aborted": "취소됨", "aborted": "취소됨",

View File

@ -1411,7 +1411,7 @@
"integration": "Integratioun", "integration": "Integratioun",
"integration_not_found": "Integratioun net fonnt.", "integration_not_found": "Integratioun net fonnt.",
"new": "Eng nei Integratioun ariichten", "new": "Eng nei Integratioun ariichten",
"no_integrations": "Et gesäit suu ass wéi wann nach keng Integratioun ageriicht ass. Klick de Knäppchen hei ënnen fir déi éischt Integratioun anzeriichten.", "no_integrations": "Et gesäit sou ass wéi wann nach keng Integratioun ageriicht ass. Klick de Knäppchen hei ënnen fir déi éischt Integratioun anzeriichten.",
"none": "Nach näischt konfiguréiert", "none": "Nach näischt konfiguréiert",
"none_found": "Keng Integratioune fonnt", "none_found": "Keng Integratioune fonnt",
"none_found_detail": "Siich Kriterien upassen.", "none_found_detail": "Siich Kriterien upassen.",

View File

@ -1374,7 +1374,8 @@
"restart_confirm": "Start Home Assistant på nytt for å fullføre fjerningen av denne integrasjonen", "restart_confirm": "Start Home Assistant på nytt for å fullføre fjerningen av denne integrasjonen",
"settings_button": "Rediger innstillinger for {integration}", "settings_button": "Rediger innstillinger for {integration}",
"system_options": "Systemalternativer", "system_options": "Systemalternativer",
"system_options_button": "Systemalternativer for {integration}" "system_options_button": "Systemalternativer for {integration}",
"unnamed_entry": "Ikke navngitt oppføring"
}, },
"config_flow": { "config_flow": {
"aborted": "Avbrutt", "aborted": "Avbrutt",

View File

@ -420,7 +420,7 @@
"actions": { "actions": {
"cancel": "anuluj", "cancel": "anuluj",
"finish": "koniec", "finish": "koniec",
"pause": "pauza", "pause": "wstrzymaj",
"start": "start" "start": "start"
} }
}, },
@ -652,10 +652,10 @@
"commands": "Polecenia odkurzacza:", "commands": "Polecenia odkurzacza:",
"fan_speed": "Prędkość wentylatora", "fan_speed": "Prędkość wentylatora",
"locate": "Zlokalizuj", "locate": "Zlokalizuj",
"pause": "Pauza", "pause": "Wstrzymaj",
"return_home": "Powrót do domu", "return_home": "Powrót do domu",
"start": "Start", "start": "Start",
"start_pause": "Start/Pauza", "start_pause": "Start/Wstrzymaj",
"status": "Status", "status": "Status",
"stop": "Zatrzymaj" "stop": "Zatrzymaj"
} }
@ -1374,7 +1374,8 @@
"restart_confirm": "Zrestartuj Home Assistant'a, aby zakończyć usuwanie tej integracji", "restart_confirm": "Zrestartuj Home Assistant'a, aby zakończyć usuwanie tej integracji",
"settings_button": "Edytuj ustawienia dla {integration}", "settings_button": "Edytuj ustawienia dla {integration}",
"system_options": "Opcje systemowe", "system_options": "Opcje systemowe",
"system_options_button": "Opcje systemowe dla {integration}" "system_options_button": "Opcje systemowe dla {integration}",
"unnamed_entry": "Nienazwany wpis"
}, },
"config_flow": { "config_flow": {
"aborted": "Przerwano", "aborted": "Przerwano",

View File

@ -652,6 +652,7 @@
"fan_speed": "Velocidade do ventilador", "fan_speed": "Velocidade do ventilador",
"locate": "Localizar", "locate": "Localizar",
"pause": "Pausa", "pause": "Pausa",
"return_home": "Regresso à base",
"start": "Iniciar", "start": "Iniciar",
"start_pause": "Iniciar / Pausar", "start_pause": "Iniciar / Pausar",
"status": "Estado", "status": "Estado",
@ -1366,7 +1367,8 @@
"restart_confirm": "Reinicie o Home Assistant para concluir a remoção desta integração", "restart_confirm": "Reinicie o Home Assistant para concluir a remoção desta integração",
"settings_button": "Editar configurações para {integration}", "settings_button": "Editar configurações para {integration}",
"system_options": "Opções do sistema", "system_options": "Opções do sistema",
"system_options_button": "Opções do sistema para {integration}" "system_options_button": "Opções do sistema para {integration}",
"unnamed_entry": "Entrada sem nome"
}, },
"config_flow": { "config_flow": {
"aborted": "Abortado", "aborted": "Abortado",
@ -1706,6 +1708,11 @@
"group_binding": { "group_binding": {
"bind_button_help": "Vincule o grupo selecionado aos clusters de dispositivos selecionados.", "bind_button_help": "Vincule o grupo selecionado aos clusters de dispositivos selecionados.",
"bind_button_label": "Vincular grupo", "bind_button_label": "Vincular grupo",
"cluster_selection_help": "Selecione clusters para vincular ao grupo selecionado.",
"group_picker_help": "Selecione um grupo para emitir um comando de vinculação.",
"group_picker_label": "Grupos vinculáveis",
"header": "Vinculação de Grupos",
"introduction": "Vincule e desvincule grupos.",
"unbind_button_help": "Desvincular o grupo selecionado dos clusters de dispositivos selecionados.", "unbind_button_help": "Desvincular o grupo selecionado dos clusters de dispositivos selecionados.",
"unbind_button_label": "Desvincular grupo" "unbind_button_label": "Desvincular grupo"
}, },
@ -1776,6 +1783,7 @@
"edit_home_zone": "O raio da zona casa ainda não pode ser editado a partir do frontend. Arraste o marcador no mapa para mover a zona inicial.", "edit_home_zone": "O raio da zona casa ainda não pode ser editado a partir do frontend. Arraste o marcador no mapa para mover a zona inicial.",
"edit_home_zone_narrow": "O raio da zona casa ainda não pode ser editado a partir do frontend. A localização pode ser modificada a partir da configuração geral.", "edit_home_zone_narrow": "O raio da zona casa ainda não pode ser editado a partir do frontend. A localização pode ser modificada a partir da configuração geral.",
"go_to_core_config": "Ir para a configuração geral?", "go_to_core_config": "Ir para a configuração geral?",
"home_zone_core_config": "A localização da sua zona \"casa\" é editável na página de configuração geral. O raio dessa zona ainda não pode ser editado a partir do frontend. Deseja ir para a configuração geral?",
"introduction": "As zonas permitem especificar determinadas regiões da Terra. Quando uma pessoa está dentro de uma zona, o estado assume o nome da zona. As zonas também podem ser usadas como gatilho ou condição nas configurações de automação.", "introduction": "As zonas permitem especificar determinadas regiões da Terra. Quando uma pessoa está dentro de uma zona, o estado assume o nome da zona. As zonas também podem ser usadas como gatilho ou condição nas configurações de automação.",
"no_zones_created_yet": "Parece que você ainda não criou nenhuma zona." "no_zones_created_yet": "Parece que você ainda não criou nenhuma zona."
}, },
@ -1954,6 +1962,7 @@
}, },
"lovelace": { "lovelace": {
"add_entities": { "add_entities": {
"generated_unsupported": "Você só pode usar esta função quando tiver assumido o controlo do IU Lovelace.",
"saving_failed": "Falha ao salvar a configuração da interface Lovelace.", "saving_failed": "Falha ao salvar a configuração da interface Lovelace.",
"yaml_unsupported": "Você não pode usar esta função ao usar o Lovelace IU no modo YAML." "yaml_unsupported": "Você não pode usar esta função ao usar o Lovelace IU no modo YAML."
}, },
@ -2203,6 +2212,7 @@
}, },
"raw_editor": { "raw_editor": {
"confirm_remove_config_text": "Iremos gerar automaticamente as suas vistas do Lovelace UI com as suas áreas e dispositivos se você remover a sua configuração do Lovelace UI.", "confirm_remove_config_text": "Iremos gerar automaticamente as suas vistas do Lovelace UI com as suas áreas e dispositivos se você remover a sua configuração do Lovelace UI.",
"confirm_remove_config_title": "Tem a certeza que deseja remover a configuração do interface de utilizador do Lovelace? Iremos gerar automaticamente as suas vistas do IU Lovelace com as suas áreas e dispositivos.",
"confirm_unsaved_changes": "Existem alterações não guardadas. De certeza de que quer sair?", "confirm_unsaved_changes": "Existem alterações não guardadas. De certeza de que quer sair?",
"confirm_unsaved_comments": "A sua configuração contém comentário(s), eles não serão salvos. Deseja continuar?", "confirm_unsaved_comments": "A sua configuração contém comentário(s), eles não serão salvos. Deseja continuar?",
"error_invalid_config": "A sua configuração não é válida: {error}", "error_invalid_config": "A sua configuração não é válida: {error}",
@ -2220,7 +2230,7 @@
"close": "Fechar", "close": "Fechar",
"empty_config": "Começar com um painel de instrumentos vazio", "empty_config": "Começar com um painel de instrumentos vazio",
"header": "Assumir controle sobre a interface do Lovelace", "header": "Assumir controle sobre a interface do Lovelace",
"para": "Por omissão o Home Assistant irá manter a sua interface de utilizador, atualizando-a sempre que uma nova entidade ou novos componentes Lovelace fiquem disponíveis. Se assumir o controlo, não faremos mais alterações automáticas por si.", "para": "Por omissão o Home Assistant irá manter a sua interface de utilizador, atualizando-a sempre que uma nova entidade ou novos componentes IU Lovelace fiquem disponíveis. Se assumir o controlo, não faremos mais alterações automáticas por si. Poderá sempre criar um novo dashboard na configuração para fazer testes.",
"para_sure": "Tem certeza que deseja assumir o controlo sobre a interface de utilizador?", "para_sure": "Tem certeza que deseja assumir o controlo sobre a interface de utilizador?",
"save": "Assumir o controlo", "save": "Assumir o controlo",
"yaml_config": "Para o ajudar a começar, aqui está a actual configuração deste dashboard:", "yaml_config": "Para o ajudar a começar, aqui está a actual configuração deste dashboard:",
@ -2346,7 +2356,7 @@
"data": { "data": {
"password": "Palavra-passe para API" "password": "Palavra-passe para API"
}, },
"description": "Por favor, insira a palavra-passe da API na sua configuração http:" "description": "Por favor, insira a palavra-passe da API na sua configuração HTTP:"
}, },
"mfa": { "mfa": {
"data": { "data": {

View File

@ -992,7 +992,9 @@
"edit_requires_storage": "Editorul a fost dezactivat deoarece configurația a fost stocata în configuration.yaml.", "edit_requires_storage": "Editorul a fost dezactivat deoarece configurația a fost stocata în configuration.yaml.",
"elevation": "Altitudine", "elevation": "Altitudine",
"elevation_meters": "metri", "elevation_meters": "metri",
"external_url": "URL extern",
"imperial_example": "Fahrenheit, livre", "imperial_example": "Fahrenheit, livre",
"internal_url": "URL intern",
"latitude": "Latitudine", "latitude": "Latitudine",
"location_name": "Numele instalarii Home Assistant", "location_name": "Numele instalarii Home Assistant",
"longitude": "Longitudine", "longitude": "Longitudine",
@ -1058,6 +1060,7 @@
}, },
"delete": "Șterge", "delete": "Șterge",
"description": "Gestionați dispozitivele conectate", "description": "Gestionați dispozitivele conectate",
"device_info": "Informații despre dispozitiv",
"device_not_found": "Dispozitivul nu a fost găsit.", "device_not_found": "Dispozitivul nu a fost găsit.",
"entities": { "entities": {
"add_entities_lovelace": "Adăugați la Lovelace", "add_entities_lovelace": "Adăugați la Lovelace",
@ -1170,7 +1173,8 @@
"options": "Opțiuni", "options": "Opțiuni",
"rename": "Redenumire", "rename": "Redenumire",
"restart_confirm": "Reporniți Home Assistant pentru a termina eliminarea acestei integrări", "restart_confirm": "Reporniți Home Assistant pentru a termina eliminarea acestei integrări",
"system_options": "Opțiuni de sistem" "system_options": "Opțiuni de sistem",
"unnamed_entry": "Intrare anonimă"
}, },
"config_flow": { "config_flow": {
"aborted": "Anulat", "aborted": "Anulat",
@ -1574,6 +1578,7 @@
"events": { "events": {
"alert_event_type": "Tipul de eveniment este un câmp obligatoriu", "alert_event_type": "Tipul de eveniment este un câmp obligatoriu",
"available_events": "Evenimente disponibile", "available_events": "Evenimente disponibile",
"documentation": "Documentarea evenimentelor.",
"fire_event": "Declansare eveniment", "fire_event": "Declansare eveniment",
"listening_to": "Ascultand", "listening_to": "Ascultand",
"start_listening": "Incepe sa asculti", "start_listening": "Incepe sa asculti",
@ -1583,14 +1588,19 @@
}, },
"info": { "info": {
"built_using": "Construit folosind", "built_using": "Construit folosind",
"documentation": "Documentație",
"frontend": "front-end-ui", "frontend": "front-end-ui",
"icons_by": "Icoane ca", "icons_by": "Icoane ca",
"integrations": "Integrări",
"issues": "Probleme",
"license": "Publicat sub licenta Apache 2.0", "license": "Publicat sub licenta Apache 2.0",
"server": "Server", "server": "Server",
"source": "Sursă:", "source": "Sursă:",
"title": "Info" "title": "Info"
}, },
"logs": { "logs": {
"clear": "Şterge",
"refresh": "Reîmprospătare",
"title": "Jurnale" "title": "Jurnale"
}, },
"mqtt": { "mqtt": {
@ -1726,6 +1736,7 @@
"manual": "Manual", "manual": "Manual",
"manual_description": "Trebuie să adăugați un card personalizat sau doriți doar să scrieți manual yaml?", "manual_description": "Trebuie să adăugați un card personalizat sau doriți doar să scrieți manual yaml?",
"no_theme": "Nicio temă", "no_theme": "Nicio temă",
"secondary_info_attribute": "Atribut informații secundare",
"state": "Stare" "state": "Stare"
}, },
"glance": { "glance": {
@ -1760,7 +1771,8 @@
"description": "Cardul Vertical Stack vă permite să grupați mai multe carduri, astfel încât acestea să stea întotdeauna în aceeași coloană." "description": "Cardul Vertical Stack vă permite să grupați mai multe carduri, astfel încât acestea să stea întotdeauna în aceeași coloană."
}, },
"weather-forecast": { "weather-forecast": {
"description": "Cardul Prognoza meteo afișează vremea. Foarte util pentru a include pe interfețele pe care oamenii le afișează pe perete." "description": "Cardul Prognoza meteo afișează vremea. Foarte util pentru a include pe interfețele pe care oamenii le afișează pe perete.",
"show_forecast": "Afișați prognoza"
} }
}, },
"cardpicker": { "cardpicker": {

View File

@ -1374,7 +1374,8 @@
"restart_confirm": "Перезапустите Home Assistant, чтобы завершить удаление этой интеграции", "restart_confirm": "Перезапустите Home Assistant, чтобы завершить удаление этой интеграции",
"settings_button": "Настройки интеграции {integration}", "settings_button": "Настройки интеграции {integration}",
"system_options": "Настройки интеграции", "system_options": "Настройки интеграции",
"system_options_button": "Системные параметры интеграции {integration}" "system_options_button": "Системные параметры интеграции {integration}",
"unnamed_entry": "Без названия"
}, },
"config_flow": { "config_flow": {
"aborted": "Отменено", "aborted": "Отменено",

View File

@ -1374,7 +1374,8 @@
"restart_confirm": "重啟 Home Assistant 以完成此整合移動", "restart_confirm": "重啟 Home Assistant 以完成此整合移動",
"settings_button": "編輯 {integration} 設定", "settings_button": "編輯 {integration} 設定",
"system_options": "系統選項", "system_options": "系統選項",
"system_options_button": "{integration} 系統選項" "system_options_button": "{integration} 系統選項",
"unnamed_entry": "未命名物件"
}, },
"config_flow": { "config_flow": {
"aborted": "已中止", "aborted": "已中止",

View File

@ -1602,6 +1602,13 @@
lodash "^4.17.13" lodash "^4.17.13"
to-fast-properties "^2.0.0" to-fast-properties "^2.0.0"
"@formatjs/intl-pluralrules@^1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@formatjs/intl-pluralrules/-/intl-pluralrules-1.5.8.tgz#ad8dd9ec669b8dac0e284d51772a65d92efa4ef9"
integrity sha512-OtL/rgKSSGljpxk2lRUC92ZqmzZjabwXO5zbBh2Bj8OM+z4U3H1Q5iK+ZY4k7a6EAoY7hWCr3F4k7EL8tcnQow==
dependencies:
"@formatjs/intl-utils" "^2.2.5"
"@formatjs/intl-unified-numberformat@^3.3.5": "@formatjs/intl-unified-numberformat@^3.3.5":
version "3.3.5" version "3.3.5"
resolved "https://registry.yarnpkg.com/@formatjs/intl-unified-numberformat/-/intl-unified-numberformat-3.3.5.tgz#b150c25eb56c1b09a03bf24fb5d1e394b945a27c" resolved "https://registry.yarnpkg.com/@formatjs/intl-unified-numberformat/-/intl-unified-numberformat-3.3.5.tgz#b150c25eb56c1b09a03bf24fb5d1e394b945a27c"
@ -1614,6 +1621,11 @@
resolved "https://registry.yarnpkg.com/@formatjs/intl-utils/-/intl-utils-2.2.4.tgz#fe62a96799d1f7dbe621fd38a4bd2e5a6a16cb0e" resolved "https://registry.yarnpkg.com/@formatjs/intl-utils/-/intl-utils-2.2.4.tgz#fe62a96799d1f7dbe621fd38a4bd2e5a6a16cb0e"
integrity sha512-83fsJywew0o9wQsW3VuEp33HRiFd0qbQDyFFnwZCwk59eLZ33CtKyJ5ofKMrU2KK6hk1zaIdzisrZeoNfmI3Tw== integrity sha512-83fsJywew0o9wQsW3VuEp33HRiFd0qbQDyFFnwZCwk59eLZ33CtKyJ5ofKMrU2KK6hk1zaIdzisrZeoNfmI3Tw==
"@formatjs/intl-utils@^2.2.5":
version "2.2.5"
resolved "https://registry.yarnpkg.com/@formatjs/intl-utils/-/intl-utils-2.2.5.tgz#eaafd94df3d102ee13e54e80f992a33868a6b1e8"
integrity sha512-p7gcmazKROteL4IECCp03Qrs790fZ8tbemUAjQu0+K0AaAlK49rI1SIFFq3LzDUAqXIshV95JJhRe/yXxkal5g==
"@fullcalendar/core@^5.0.0-beta.2": "@fullcalendar/core@^5.0.0-beta.2":
version "5.0.0-beta.2" version "5.0.0-beta.2"
resolved "https://registry.yarnpkg.com/@fullcalendar/core/-/core-5.0.0-beta.2.tgz#30a9cbbbf2d6476568f53cfa1c0746d06daa9660" resolved "https://registry.yarnpkg.com/@fullcalendar/core/-/core-5.0.0-beta.2.tgz#30a9cbbbf2d6476568f53cfa1c0746d06daa9660"