Compare commits

...

57 Commits

Author SHA1 Message Date
Bram Kragten
5409752817 20201212.0 (#7952)
* [ci skip] Translation update

* Add link to the community forums to find more blueprints (#7947)

* Add link to the community forums to find more blueprints

* Apply suggestions from code review

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* Fix `ha-relative-time` usage for tags and sun (#7944)

* Bumped version to 20201212.0

Co-authored-by: HomeAssistant Azure <hello@home-assistant.io>
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
2020-12-12 20:57:28 +01:00
Bram Kragten
a70e6c49a1 Merge pull request #7940 from home-assistant/dev
20201210.0
2020-12-10 16:56:08 +01:00
Bram Kragten
3d83d5f4b5 Bumped version to 20201210.0 2020-12-10 15:57:13 +01:00
Philip Allgaier
f9dece0743 Add copy YAML (automation & script) fallback without navigator.clipboard (#7900) 2020-12-10 15:55:57 +01:00
Bram Kragten
ac0871d0e8 Use correct device name in target picker (#7939) 2020-12-10 15:12:33 +01:00
HomeAssistant Azure
ffc19e591d [ci skip] Translation update 2020-12-10 00:32:24 +00:00
HomeAssistant Azure
c53380ca3d [ci skip] Translation update 2020-12-09 00:32:38 +00:00
Bram Kragten
7c74a2026a Correct tabs helpers page (#7928)
Fixes https://github.com/home-assistant/frontend/issues/7926
2020-12-08 11:47:30 +01:00
HomeAssistant Azure
adaed438d9 [ci skip] Translation update 2020-12-08 00:32:29 +00:00
uvjustin
baf38305cb Remove use of named groups in regexp (#7921) 2020-12-07 15:18:27 +01:00
HomeAssistant Azure
8254712521 [ci skip] Translation update 2020-12-07 00:33:14 +00:00
HomeAssistant Azure
53214781e3 [ci skip] Translation update 2020-12-06 00:32:39 +00:00
HomeAssistant Azure
88cbbbdf65 [ci skip] Translation update 2020-12-05 00:33:30 +00:00
Bram Kragten
c10dca9c7b Merge pull request #7910 from home-assistant/dev 2020-12-04 21:46:54 +01:00
Bram Kragten
7f2ebb4bde Bumped version to 20201204.0 2020-12-04 21:33:37 +01:00
Bram Kragten
f1abb60e4a Add message when no matches for selectors, clear config when deleted (#7906) 2020-12-04 20:49:24 +01:00
Bram Kragten
e014c7aff6 Entity is not required for button card (#7909)
Fixes https://github.com/home-assistant/frontend/issues/7908
2020-12-04 12:02:58 -06:00
Bram Kragten
b79c03433e Don't update device picker while open (#7903) 2020-12-04 12:05:01 +01:00
HomeAssistant Azure
34eb4d974d [ci skip] Translation update 2020-12-04 00:32:26 +00:00
Zack Barett
3264be3c5e Move main function to events on hui-view for custom views to use (#7861) 2020-12-03 18:16:55 -06:00
Bram Kragten
655f4f75fb Change import blueprint fab icon (#7894) 2020-12-03 22:41:13 +01:00
Bram Kragten
4383f31696 Translation logic tweaks (#7901)
* Translation logic tweaks

* Comments
2020-12-03 22:29:52 +01:00
Paulus Schoutsen
99eb15d15e Improve blueprint translations (#7892) 2020-12-03 18:08:14 +01:00
Bram Kragten
2682c6e150 Merge pull request #7891 from home-assistant/dev 2020-12-03 17:22:08 +01:00
Bram Kragten
3a5d854e6d Bumped version to 20201203.0 2020-12-03 17:00:56 +01:00
Bram Kragten
1e90c6387c More BP tweaks (#7884) 2020-12-03 09:59:43 -06:00
Philip Allgaier
2cca25f4d0 Navigate back to area overview after area deletion (#7890) 2020-12-03 16:52:44 +01:00
Bram Kragten
565724d201 Fix translation race condition? (#7885) 2020-12-03 16:52:09 +01:00
Bram Kragten
3e4955becd UI tweaks for BP (#7883)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2020-12-03 14:18:17 +01:00
Philip Allgaier
7b560c727f Adjust text since entities can now be in areas too (#7880) 2020-12-03 14:05:16 +01:00
HomeAssistant Azure
35abd9dfdb [ci skip] Translation update 2020-12-03 00:32:38 +00:00
Bram Kragten
b7ccf3e0e5 Merge pull request #7875 from home-assistant/dev 2020-12-02 19:51:36 +01:00
Bram Kragten
0d9ab8fdd0 Bumped version to 20201202.0 2020-12-02 19:31:43 +01:00
Bram Kragten
303f9290a8 Add more device disabled ui (#7874) 2020-12-02 19:31:06 +01:00
Bram Kragten
e0c4dc08a1 Tooltip tweak target picker (#7870) 2020-12-02 11:21:51 -06:00
Bram Kragten
8c655883fe Add device disabled reason (#7873) 2020-12-02 18:20:29 +01:00
Bram Kragten
ba90785115 Fix card picker cards (#7871) 2020-12-02 17:46:30 +01:00
Bram Kragten
7b392b626b Hardcode history card stub entity to sun.sun (#7760) 2020-12-02 10:16:46 -06:00
Zack Barett
8e4ceb7d48 Fix View Background Colors (#7823) 2020-12-02 17:08:18 +01:00
Philip Allgaier
2ab1c6e9a9 Make media player card work as square + add to gallery + icon pos tweaks (#7727) 2020-12-02 16:57:19 +01:00
Adam Ernst
dbdced0971 Improve descriptions for Configuration entries (#7606) 2020-12-02 16:36:21 +01:00
Philip Allgaier
5e481880bd Allow empty entities array with entity-filter (#7854) 2020-12-02 16:34:59 +01:00
Kendell R
faec063f34 Add --masonry-view-card-margin (#7395) 2020-12-02 16:22:20 +01:00
Zack Barett
bbea38d227 Lovelace Card Editor: Preview Background (#7678) 2020-12-02 16:19:01 +01:00
Kendell R
a0ef60de49 Make card picker border follow standards (#7162) 2020-12-02 16:14:46 +01:00
Philip Allgaier
3313572606 Improve password change card (#7756)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2020-12-02 16:00:49 +01:00
Philip Allgaier
c4f850cb14 Cleanup created user if person creation is cancelled (#7865) 2020-12-02 15:45:24 +01:00
Erik Montnemery
3bdab738c6 Support disabling devices (#7715)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2020-12-02 15:40:35 +01:00
Philip Allgaier
faaef31b9f Show proper error message if username already used (#7866) 2020-12-02 15:35:38 +01:00
Philip Allgaier
ca7b8b8b4c Add option to deactivate a user (#7757) 2020-12-02 15:33:11 +01:00
Philip Allgaier
9ca84e0694 Ensure "false" is set as default for "continue_on_timeout" (#7862) 2020-12-02 15:22:17 +01:00
Philip Allgaier
daaf2b1796 Ensure push notification description reacts to language change (#7856) 2020-12-02 12:11:47 +01:00
Bram Kragten
25f7cbea5a Add target selector (#7864)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2020-12-02 12:10:31 +01:00
Josh McCarty
c485ea9d7b Add number formatting to counter entity state display (#7868) 2020-12-02 11:51:56 +01:00
HomeAssistant Azure
295390c8e9 [ci skip] Translation update 2020-12-02 00:32:30 +00:00
Bram Kragten
3ebf816ce2 Fix height of ha-icon-input (#7767) 2020-12-01 22:51:15 +01:00
Bram Kragten
50e7410002 Merge pull request #7833 from home-assistant/dev 2020-11-27 00:16:56 +01:00
107 changed files with 5824 additions and 1417 deletions

View File

@@ -7,8 +7,8 @@ export const createMediaPlayerEntities = () => [
media_title: "I Wanna Be A Hippy (Flamman & Abraxas Radio Mix)",
media_artist: "Technohead",
// Pause + Seek + Volume Set + Volume Mute + Previous Track + Next Track + Play Media +
// Select Source + Stop + Clear + Play + Shuffle Set + Browse Media
supported_features: 195135,
// Select Source + Stop + Clear + Play + Shuffle Set
supported_features: 64063,
entity_picture: "/images/album_cover_2.jpg",
media_duration: 300,
media_position: 50,
@@ -24,8 +24,8 @@ export const createMediaPlayerEntities = () => [
media_title: "I Wanna Be A Hippy (Flamman & Abraxas Radio Mix)",
media_artist: "Technohead",
// Pause + Seek + Volume Set + Volume Mute + Previous Track + Next Track + Play Media +
// Select Source + Stop + Clear + Play + Shuffle Set
supported_features: 64063,
// Select Source + Stop + Clear + Play + Shuffle Set + Browse Media
supported_features: 195135,
entity_picture: "/images/album_cover.jpg",
media_duration: 300,
media_position: 0,

View File

@@ -146,6 +146,16 @@ const CONFIGS = [
entity: media_player.receiver_off
`,
},
{
heading: "Grid Full Size",
config: `
- type: grid
columns: 1
cards:
- type: media-control
entity: media_player.music_paused
`,
},
];
class DemoHuiMediControlCard extends PolymerElement {

View File

@@ -74,9 +74,7 @@ export class HassioUpdate extends LitElement {
"Supervisor",
this.supervisor.supervisor,
"hassio/supervisor/update",
`https://github.com//home-assistant/hassio/releases/tag/${
this.supervisor.supervisor.version_latest
}`
`https://github.com//home-assistant/hassio/releases/tag/${this.supervisor.supervisor.version_latest}`
)}
${this.supervisor.host.features.includes("hassos")
? this._renderUpdateCard(

View File

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

View File

@@ -0,0 +1,6 @@
export const ensureArray = (value?: any) => {
if (!value || Array.isArray(value)) {
return value;
}
return [value];
};

View File

@@ -67,6 +67,10 @@ export const computeStateDisplay = (
}
}
if (domain === "counter") {
return formatNumber(compareState, language);
}
return (
// Return device class translation
(stateObj.attributes.device_class &&

View File

@@ -1,8 +1,12 @@
export const copyToClipboard = (str) => {
const el = document.createElement("textarea");
el.value = str;
document.body.appendChild(el);
el.select();
document.execCommand("copy");
document.body.removeChild(el);
if (navigator.clipboard) {
navigator.clipboard.writeText(str);
} else {
const el = document.createElement("textarea");
el.value = str;
document.body.appendChild(el);
el.select();
document.execCommand("copy");
document.body.removeChild(el);
}
};

View File

@@ -98,6 +98,12 @@ export class HaDataTable extends LitElement {
@property({ type: Boolean }) public hasFab = false;
/**
* Add an extra rows at the bottom of the datatabel
* @type {TemplateResult}
*/
@property({ attribute: false }) public appendRow?;
@property({ type: Boolean, attribute: "auto-height" })
public autoHeight = false;
@@ -126,6 +132,8 @@ export class HaDataTable extends LitElement {
@query("slot[name='header']") private _header!: HTMLSlotElement;
private _items: DataTableRowData[] = [];
private _checkableRowsCount?: number;
private _checkedRows: string[] = [];
@@ -318,10 +326,13 @@ export class HaDataTable extends LitElement {
@scroll=${this._saveScrollPos}
>
${scroll({
items: !this.hasFab
? this._filteredData
: [...this._filteredData, ...[{ empty: true }]],
items: this._items,
renderItem: (row: DataTableRowData, index) => {
if (row.append) {
return html`
<div class="mdc-data-table__row">${row.content}</div>
`;
}
if (row.empty) {
return html` <div class="mdc-data-table__row"></div> `;
}
@@ -447,6 +458,20 @@ export class HaDataTable extends LitElement {
if (this.curRequest !== curRequest) {
return;
}
if (this.appendRow || this.hasFab) {
this._items = [...data];
if (this.appendRow) {
this._items.push({ append: true, content: this.appendRow });
}
if (this.hasFab) {
this._items.push({ empty: true });
}
} else {
this._items = data;
}
this._filteredData = data;
}

View File

@@ -139,7 +139,7 @@ export class HaAreaDevicesPicker extends SubscribeMixin(LitElement) {
private _filteredDevices: DeviceRegistryEntry[] = [];
private _getDevices = memoizeOne(
private _getAreasWithDevices = memoizeOne(
(
devices: DeviceRegistryEntry[],
areas: AreaRegistryEntry[],
@@ -277,7 +277,7 @@ export class HaAreaDevicesPicker extends SubscribeMixin(LitElement) {
if (!this._devices || !this._areas || !this._entities) {
return html``;
}
const areas = this._getDevices(
const areas = this._getAreasWithDevices(
this._devices,
this._areas,
this._entities,

View File

@@ -1,4 +1,5 @@
import "../ha-icon-button";
import "../ha-svg-icon";
import "@material/mwc-icon-button/mwc-icon-button";
import "@polymer/paper-input/paper-input";
import "@polymer/paper-item/paper-item";
import "@polymer/paper-item/paper-item-body";
@@ -12,6 +13,8 @@ import {
html,
LitElement,
property,
PropertyValues,
query,
TemplateResult,
} from "lit-element";
import memoizeOne from "memoize-one";
@@ -35,6 +38,7 @@ import {
import { SubscribeMixin } from "../../mixins/subscribe-mixin";
import { PolymerChangedEvent } from "../../polymer-types";
import { HomeAssistant } from "../../types";
import { mdiClose, mdiMenuUp, mdiMenuDown } from "@mdi/js";
interface Device {
name: string;
@@ -111,6 +115,10 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
@property({ type: Boolean })
private _opened?: boolean;
@query("vaadin-combo-box-light", true) private _comboBox!: HTMLElement;
private _init = false;
private _getDevices = memoizeOne(
(
devices: DeviceRegistryEntry[],
@@ -122,18 +130,27 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
deviceFilter: this["deviceFilter"]
): Device[] => {
if (!devices.length) {
return [];
return [
{
id: "",
area: "",
name: this.hass.localize("ui.components.device-picker.no_devices"),
},
];
}
const deviceEntityLookup: DeviceEntityLookup = {};
for (const entity of entities) {
if (!entity.device_id) {
continue;
if (includeDomains || excludeDomains || includeDeviceClasses) {
for (const entity of entities) {
if (!entity.device_id) {
continue;
}
if (!(entity.device_id in deviceEntityLookup)) {
deviceEntityLookup[entity.device_id] = [];
}
deviceEntityLookup[entity.device_id].push(entity);
}
if (!(entity.device_id in deviceEntityLookup)) {
deviceEntityLookup[entity.device_id] = [];
}
deviceEntityLookup[entity.device_id].push(entity);
}
const areaLookup: { [areaId: string]: AreaRegistryEntry } = {};
@@ -141,7 +158,9 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
areaLookup[area.area_id] = area;
}
let inputDevices = [...devices];
let inputDevices = devices.filter(
(device) => device.id === this.value || !device.disabled_by
);
if (includeDomains) {
inputDevices = inputDevices.filter((device) => {
@@ -208,6 +227,15 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
: this.hass.localize("ui.components.device-picker.no_area"),
};
});
if (!outputDevices.length) {
return [
{
id: "",
area: "",
name: this.hass.localize("ui.components.device-picker.no_match"),
},
];
}
if (outputDevices.length === 1) {
return outputDevices;
}
@@ -215,6 +243,18 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
}
);
public open() {
this.updateComplete.then(() => {
(this.shadowRoot?.querySelector("vaadin-combo-box-light") as any)?.open();
});
}
public focus() {
this.updateComplete.then(() => {
this.shadowRoot?.querySelector("paper-input")?.focus();
});
}
public hassSubscribe(): UnsubscribeFunc[] {
return [
subscribeDeviceRegistry(this.hass.connection!, (devices) => {
@@ -229,25 +269,33 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
];
}
protected updated(changedProps: PropertyValues) {
if (
(!this._init && this.devices && this.areas && this.entities) ||
(changedProps.has("_opened") && this._opened)
) {
this._init = true;
(this._comboBox as any).items = this._getDevices(
this.devices!,
this.areas!,
this.entities!,
this.includeDomains,
this.excludeDomains,
this.includeDeviceClasses,
this.deviceFilter
);
}
}
protected render(): TemplateResult {
if (!this.devices || !this.areas || !this.entities) {
return html``;
}
const devices = this._getDevices(
this.devices,
this.areas,
this.entities,
this.includeDomains,
this.excludeDomains,
this.includeDeviceClasses,
this.deviceFilter
);
return html`
<vaadin-combo-box-light
item-value-path="id"
item-id-path="id"
item-label-path="name"
.items=${devices}
.value=${this._value}
.renderer=${rowRenderer}
@opened-changed=${this._openedChanged}
@@ -265,34 +313,30 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
>
${this.value
? html`
<ha-icon-button
aria-label=${this.hass.localize(
<mwc-icon-button
.label=${this.hass.localize(
"ui.components.device-picker.clear"
)}
slot="suffix"
class="clear-button"
icon="hass:close"
@click=${this._clearValue}
no-ripple
>
Clear
</ha-icon-button>
`
: ""}
${devices.length > 0
? html`
<ha-icon-button
aria-label=${this.hass.localize(
"ui.components.device-picker.show_devices"
)}
slot="suffix"
class="toggle-button"
.icon=${this._opened ? "hass:menu-up" : "hass:menu-down"}
>
Toggle
</ha-icon-button>
<ha-svg-icon .path=${mdiClose}></ha-svg-icon>
</mwc-icon-button>
`
: ""}
<mwc-icon-button
.label=${this.hass.localize(
"ui.components.device-picker.show_devices"
)}
slot="suffix"
class="toggle-button"
>
<ha-svg-icon
.path=${this._opened ? mdiMenuUp : mdiMenuDown}
></ha-svg-icon>
</mwc-icon-button>
</paper-input>
</vaadin-combo-box-light>
`;
@@ -329,7 +373,7 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
static get styles(): CSSResult {
return css`
paper-input > ha-icon-button {
paper-input > mwc-icon-button {
--mdc-icon-button-size: 24px;
padding: 2px;
color: var(--secondary-text-color);

View File

@@ -101,6 +101,18 @@ export class HaEntityPicker extends LitElement {
@query("vaadin-combo-box-light", true) private _comboBox!: HTMLElement;
public open() {
this.updateComplete.then(() => {
(this.shadowRoot?.querySelector("vaadin-combo-box-light") as any)?.open();
});
}
public focus() {
this.updateComplete.then(() => {
this.shadowRoot?.querySelector("paper-input")?.focus();
});
}
private _initedStates = false;
private _states: HassEntity[] = [];
@@ -153,6 +165,24 @@ export class HaEntityPicker extends LitElement {
);
}
if (!states.length) {
return [
{
entity_id: "",
state: "",
last_changed: "",
last_updated: "",
context: { id: "", user_id: null },
attributes: {
friendly_name: this.hass!.localize(
"ui.components.entity.entity-picker.no_match"
),
icon: "mdi:magnify",
},
},
];
}
return states;
}
);
@@ -203,7 +233,6 @@ export class HaEntityPicker extends LitElement {
.label=${this.label === undefined
? this.hass.localize("ui.components.entity.entity-picker.entity")
: this.label}
.value=${this._value}
.disabled=${this.disabled}
class="input"
autocapitalize="none"

View File

@@ -1,4 +1,5 @@
import "./ha-icon-button";
import "./ha-svg-icon";
import "@material/mwc-icon-button/mwc-icon-button";
import "@polymer/paper-input/paper-input";
import "@polymer/paper-item/paper-item";
import "@polymer/paper-item/paper-item-body";
@@ -14,6 +15,8 @@ import {
property,
internalProperty,
TemplateResult,
PropertyValues,
query,
} from "lit-element";
import { fireEvent } from "../common/dom/fire_event";
import {
@@ -29,6 +32,18 @@ import { SubscribeMixin } from "../mixins/subscribe-mixin";
import { PolymerChangedEvent } from "../polymer-types";
import { HomeAssistant } from "../types";
import memoizeOne from "memoize-one";
import {
DeviceEntityLookup,
DeviceRegistryEntry,
subscribeDeviceRegistry,
} from "../data/device_registry";
import {
EntityRegistryEntry,
subscribeEntityRegistry,
} from "../data/entity_registry";
import { computeDomain } from "../common/entity/compute_domain";
import type { HaDevicePickerDeviceFilterFunc } from "./device/ha-device-picker";
import { mdiClose, mdiMenuDown, mdiMenuUp } from "@mdi/js";
const rowRenderer = (
root: HTMLElement,
@@ -71,31 +86,250 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) {
@property() public placeholder?: string;
@property() public _areas?: AreaRegistryEntry[];
@property({ type: Boolean, attribute: "no-add" })
public noAdd?: boolean;
/**
* Show only areas with entities from specific domains.
* @type {Array}
* @attr include-domains
*/
@property({ type: Array, attribute: "include-domains" })
public includeDomains?: string[];
/**
* Show no areas with entities of these domains.
* @type {Array}
* @attr exclude-domains
*/
@property({ type: Array, attribute: "exclude-domains" })
public excludeDomains?: string[];
/**
* Show only areas with entities of these device classes.
* @type {Array}
* @attr include-device-classes
*/
@property({ type: Array, attribute: "include-device-classes" })
public includeDeviceClasses?: string[];
@property() public deviceFilter?: HaDevicePickerDeviceFilterFunc;
@property() public entityFilter?: (entity: EntityRegistryEntry) => boolean;
@internalProperty() private _areas?: AreaRegistryEntry[];
@internalProperty() private _devices?: DeviceRegistryEntry[];
@internalProperty() private _entities?: EntityRegistryEntry[];
@internalProperty() private _opened?: boolean;
@query("vaadin-combo-box-light", true) private _comboBox!: HTMLElement;
private _init = false;
public hassSubscribe(): UnsubscribeFunc[] {
return [
subscribeAreaRegistry(this.hass.connection!, (areas) => {
this._areas = this.noAdd
? areas
: [
...areas,
{
area_id: "add_new",
name: this.hass.localize("ui.components.area-picker.add_new"),
},
];
this._areas = areas;
}),
subscribeDeviceRegistry(this.hass.connection!, (devices) => {
this._devices = devices;
}),
subscribeEntityRegistry(this.hass.connection!, (entities) => {
this._entities = entities;
}),
];
}
public open() {
this.updateComplete.then(() => {
(this.shadowRoot?.querySelector("vaadin-combo-box-light") as any)?.open();
});
}
public focus() {
this.updateComplete.then(() => {
this.shadowRoot?.querySelector("paper-input")?.focus();
});
}
private _getAreas = memoizeOne(
(
areas: AreaRegistryEntry[],
devices: DeviceRegistryEntry[],
entities: EntityRegistryEntry[],
includeDomains: this["includeDomains"],
excludeDomains: this["excludeDomains"],
includeDeviceClasses: this["includeDeviceClasses"],
deviceFilter: this["deviceFilter"],
entityFilter: this["entityFilter"],
noAdd: this["noAdd"]
): AreaRegistryEntry[] => {
if (!areas.length) {
return [
{
area_id: "",
name: this.hass.localize("ui.components.area-picker.no_areas"),
},
];
}
const deviceEntityLookup: DeviceEntityLookup = {};
let inputDevices: DeviceRegistryEntry[] | undefined;
let inputEntities: EntityRegistryEntry[] | undefined;
if (includeDomains || excludeDomains || includeDeviceClasses) {
for (const entity of entities) {
if (!entity.device_id) {
continue;
}
if (!(entity.device_id in deviceEntityLookup)) {
deviceEntityLookup[entity.device_id] = [];
}
deviceEntityLookup[entity.device_id].push(entity);
}
inputDevices = devices;
inputEntities = entities.filter((entity) => entity.area_id);
} else if (deviceFilter) {
inputDevices = devices;
} else if (entityFilter) {
inputEntities = entities.filter((entity) => entity.area_id);
}
if (includeDomains) {
inputDevices = inputDevices!.filter((device) => {
const devEntities = deviceEntityLookup[device.id];
if (!devEntities || !devEntities.length) {
return false;
}
return deviceEntityLookup[device.id].some((entity) =>
includeDomains.includes(computeDomain(entity.entity_id))
);
});
inputEntities = inputEntities!.filter((entity) =>
includeDomains.includes(computeDomain(entity.entity_id))
);
}
if (excludeDomains) {
inputDevices = inputDevices!.filter((device) => {
const devEntities = deviceEntityLookup[device.id];
if (!devEntities || !devEntities.length) {
return true;
}
return entities.every(
(entity) =>
!excludeDomains.includes(computeDomain(entity.entity_id))
);
});
inputEntities = inputEntities!.filter(
(entity) => !excludeDomains.includes(computeDomain(entity.entity_id))
);
}
if (includeDeviceClasses) {
inputDevices = inputDevices!.filter((device) => {
const devEntities = deviceEntityLookup[device.id];
if (!devEntities || !devEntities.length) {
return false;
}
return deviceEntityLookup[device.id].some((entity) => {
const stateObj = this.hass.states[entity.entity_id];
if (!stateObj) {
return false;
}
return (
stateObj.attributes.device_class &&
includeDeviceClasses.includes(stateObj.attributes.device_class)
);
});
});
inputEntities = inputEntities!.filter((entity) => {
const stateObj = this.hass.states[entity.entity_id];
return (
stateObj.attributes.device_class &&
includeDeviceClasses.includes(stateObj.attributes.device_class)
);
});
}
if (deviceFilter) {
inputDevices = inputDevices!.filter((device) => deviceFilter!(device));
}
if (entityFilter) {
inputEntities = inputEntities!.filter((entity) =>
entityFilter!(entity)
);
}
let outputAreas = areas;
let areaIds: string[] | undefined;
if (inputDevices) {
areaIds = inputDevices
.filter((device) => device.area_id)
.map((device) => device.area_id!);
}
if (inputEntities) {
areaIds = (areaIds ?? []).concat(
inputEntities
.filter((entity) => entity.area_id)
.map((entity) => entity.area_id!)
);
}
if (areaIds) {
outputAreas = areas.filter((area) => areaIds!.includes(area.area_id));
}
if (!outputAreas.length) {
outputAreas = [
{
area_id: "",
name: this.hass.localize("ui.components.area-picker.no_match"),
},
];
}
return noAdd
? outputAreas
: [
...outputAreas,
{
area_id: "add_new",
name: this.hass.localize("ui.components.area-picker.add_new"),
},
];
}
);
protected updated(changedProps: PropertyValues) {
if (
(!this._init && this._devices && this._areas && this._entities) ||
(changedProps.has("_opened") && this._opened)
) {
this._init = true;
(this._comboBox as any).items = this._getAreas(
this._areas!,
this._devices!,
this._entities!,
this.includeDomains,
this.excludeDomains,
this.includeDeviceClasses,
this.deviceFilter,
this.entityFilter,
this.noAdd
);
}
}
protected render(): TemplateResult {
if (!this._areas) {
if (!this._devices || !this._areas || !this._entities) {
return html``;
}
return html`
@@ -103,7 +337,6 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) {
item-value-path="area_id"
item-id-path="area_id"
item-label-path="name"
.items=${this._areas}
.value=${this._value}
.renderer=${rowRenderer}
@opened-changed=${this._openedChanged}
@@ -124,34 +357,28 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) {
>
${this.value
? html`
<ha-icon-button
aria-label=${this.hass.localize(
<mwc-icon-button
.label=${this.hass.localize(
"ui.components.area-picker.clear"
)}
slot="suffix"
class="clear-button"
icon="hass:close"
@click=${this._clearValue}
no-ripple
>
${this.hass.localize("ui.components.area-picker.clear")}
</ha-icon-button>
`
: ""}
${this._areas.length > 0
? html`
<ha-icon-button
aria-label=${this.hass.localize(
"ui.components.area-picker.show_areas"
)}
slot="suffix"
class="toggle-button"
.icon=${this._opened ? "hass:menu-up" : "hass:menu-down"}
>
${this.hass.localize("ui.components.area-picker.toggle")}
</ha-icon-button>
<ha-svg-icon .path=${mdiClose}></ha-svg-icon>
</mwc-icon-button>
`
: ""}
<mwc-icon-button
.label=${this.hass.localize("ui.components.area-picker.toggle")}
slot="suffix"
class="toggle-button"
>
<ha-svg-icon
.path=${this._opened ? mdiMenuUp : mdiMenuDown}
></ha-svg-icon>
</mwc-icon-button>
</paper-input>
</vaadin-combo-box-light>
`;
@@ -227,7 +454,7 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) {
static get styles(): CSSResult {
return css`
paper-input > ha-icon-button {
paper-input > mwc-icon-button {
--mdc-icon-button-size: 24px;
padding: 2px;
color: var(--secondary-text-color);

View File

@@ -52,6 +52,7 @@ class HaBluePrintPicker extends LitElement {
.label=${this.label ||
this.hass.localize("ui.components.blueprint-picker.label")}
.disabled=${this.disabled}
horizontal-align="left"
>
<paper-listbox
slot="dropdown-content"
@@ -110,6 +111,9 @@ class HaBluePrintPicker extends LitElement {
paper-listbox {
min-width: 200px;
}
paper-item {
cursor: pointer;
}
`;
}
}

View File

@@ -11,6 +11,7 @@ import {
import { fireEvent } from "../common/dom/fire_event";
import type { ToggleButton } from "../types";
import "./ha-svg-icon";
import "@material/mwc-button/mwc-button";
@customElement("ha-button-toggle-group")
export class HaButtonToggleGroup extends LitElement {
@@ -21,17 +22,22 @@ export class HaButtonToggleGroup extends LitElement {
protected render(): TemplateResult {
return html`
<div>
${this.buttons.map(
(button) => html`
<mwc-icon-button
.label=${button.label}
.value=${button.value}
?active=${this.active === button.value}
@click=${this._handleClick}
>
<ha-svg-icon .path=${button.iconPath}></ha-svg-icon>
</mwc-icon-button>
`
${this.buttons.map((button) =>
button.iconPath
? html`<mwc-icon-button
.label=${button.label}
.value=${button.value}
?active=${this.active === button.value}
@click=${this._handleClick}
>
<ha-svg-icon .path=${button.iconPath}></ha-svg-icon>
</mwc-icon-button>`
: html`<mwc-button
.value=${button.value}
?active=${this.active === button.value}
@click=${this._handleClick}
>${button.label}</mwc-button
>`
)}
</div>
`;
@@ -49,13 +55,15 @@ export class HaButtonToggleGroup extends LitElement {
--mdc-icon-button-size: var(--button-toggle-size, 36px);
--mdc-icon-size: var(--button-toggle-icon-size, 20px);
}
mwc-icon-button {
mwc-icon-button,
mwc-button {
border: 1px solid var(--primary-color);
border-right-width: 0px;
position: relative;
cursor: pointer;
}
mwc-icon-button::before {
mwc-icon-button::before,
mwc-button::before {
top: 0;
left: 0;
width: 100%;
@@ -67,17 +75,21 @@ export class HaButtonToggleGroup extends LitElement {
content: "";
transition: opacity 15ms linear, background-color 15ms linear;
}
mwc-icon-button[active]::before {
mwc-icon-button[active]::before,
mwc-button[active]::before {
opacity: var(--mdc-icon-button-ripple-opacity, 0.12);
}
mwc-icon-button:first-child {
mwc-icon-button:first-child,
mwc-button:first-child {
border-radius: 4px 0 0 4px;
}
mwc-icon-button:last-child {
mwc-icon-button:last-child,
mwc-button:last-child {
border-radius: 0 4px 4px 0;
border-right-width: 1px;
}
mwc-icon-button:only-child {
mwc-icon-button:only-child,
mwc-button:only-child {
border-radius: 4px;
border-right-width: 1px;
}

View File

@@ -127,7 +127,7 @@ class HaHLSPlayer extends LitElement {
// Parse playlist assuming it is a master playlist. Match group 1 is whether hevc, match group 2 is regular playlist url
// See https://tools.ietf.org/html/rfc8216 for HLS spec details
const playlistRegexp = /#EXT-X-STREAM-INF:.*?(?:CODECS=".*?(?<isHevc>hev1|hvc1)?\..*?".*?)?(?:\n|\r\n)(?<streamUrl>.+)/g;
const playlistRegexp = /#EXT-X-STREAM-INF:.*?(?:CODECS=".*?(hev1|hvc1)?\..*?".*?)?(?:\n|\r\n)(.+)/g;
const match = playlistRegexp.exec(masterPlaylist);
const matchTwice = playlistRegexp.exec(masterPlaylist);
@@ -136,17 +136,13 @@ class HaHLSPlayer extends LitElement {
let playlist_url: string;
if (match !== null && matchTwice === null) {
// Only send the regular playlist url if we match exactly once
playlist_url = new URL(match.groups!.streamUrl, this.url).href;
playlist_url = new URL(match[2], this.url).href;
} else {
playlist_url = this.url;
}
// If codec is HEVC and ExoPlayer is supported, use ExoPlayer.
if (
this._useExoPlayer &&
match !== null &&
match.groups!.isHevc !== undefined
) {
if (this._useExoPlayer && match !== null && match[1] !== undefined) {
this._renderHLSExoPlayer(playlist_url);
} else if (hls.isSupported()) {
this._renderHLSPolyfill(videoEl, hls, playlist_url);

View File

@@ -60,8 +60,9 @@ export class HaIconInput extends LitElement {
static get styles() {
return css`
ha-icon {
position: relative;
bottom: 4px;
position: absolute;
bottom: 2px;
right: 0;
}
`;
}

View File

@@ -13,7 +13,7 @@ import type { HomeAssistant } from "../types";
class HaRelativeTime extends UpdatingElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public datetime?: string;
@property({ attribute: false }) public datetime?: string | Date;
private _interval?: number;

View File

@@ -0,0 +1,45 @@
import {
css,
CSSResult,
customElement,
html,
LitElement,
property,
} from "lit-element";
import { HomeAssistant } from "../../types";
import { ActionSelector } from "../../data/selector";
import { Action } from "../../data/script";
import "../../panels/config/automation/action/ha-automation-action";
@customElement("ha-selector-action")
export class HaActionSelector extends LitElement {
@property() public hass!: HomeAssistant;
@property() public selector!: ActionSelector;
@property() public value?: Action;
@property() public label?: string;
protected render() {
return html`<ha-automation-action
.actions=${this.value || []}
.hass=${this.hass}
></ha-automation-action>`;
}
static get styles(): CSSResult {
return css`
ha-automation-action {
display: block;
margin-bottom: 16px;
}
`;
}
}
declare global {
interface HTMLElementTagNameMap {
"ha-selector-action": HaActionSelector;
}
}

View File

@@ -1,7 +1,16 @@
import { customElement, html, LitElement, property } from "lit-element";
import {
customElement,
html,
internalProperty,
LitElement,
property,
} from "lit-element";
import { HomeAssistant } from "../../types";
import { AreaSelector } from "../../data/selector";
import "../ha-area-picker";
import { ConfigEntry, getConfigEntries } from "../../data/config_entries";
import { DeviceRegistryEntry } from "../../data/device_registry";
import { EntityRegistryEntry } from "../../data/entity_registry";
@customElement("ha-selector-area")
export class HaAreaSelector extends LitElement {
@@ -13,14 +22,77 @@ export class HaAreaSelector extends LitElement {
@property() public label?: string;
@internalProperty() public _configEntries?: ConfigEntry[];
protected updated(changedProperties) {
if (changedProperties.has("selector")) {
const oldSelector = changedProperties.get("selector");
if (
oldSelector !== this.selector &&
this.selector.area.device?.integration
) {
this._loadConfigEntries();
}
}
}
protected render() {
return html`<ha-area-picker
.hass=${this.hass}
.value=${this.value}
.label=${this.label}
no-add
.deviceFilter=${(device) => this._filterDevices(device)}
.entityFilter=${(entity) => this._filterEntities(entity)}
.includeDeviceClasses=${this.selector.area.entity?.device_class
? [this.selector.area.entity.device_class]
: undefined}
.includeDomains=${this.selector.area.entity?.domain
? [this.selector.area.entity.domain]
: undefined}
></ha-area-picker>`;
}
private _filterEntities(entity: EntityRegistryEntry): boolean {
if (this.selector.area.entity?.integration) {
if (entity.platform !== this.selector.area.entity.integration) {
return false;
}
}
return true;
}
private _filterDevices(device: DeviceRegistryEntry): boolean {
if (
this.selector.area.device?.manufacturer &&
device.manufacturer !== this.selector.area.device.manufacturer
) {
return false;
}
if (
this.selector.area.device?.model &&
device.model !== this.selector.area.device.model
) {
return false;
}
if (this.selector.area.device?.integration) {
if (
this._configEntries &&
!this._configEntries.some((entry) =>
device.config_entries.includes(entry.entry_id)
)
) {
return false;
}
}
return true;
}
private async _loadConfigEntries() {
this._configEntries = (await getConfigEntries(this.hass)).filter(
(entry) => entry.domain === this.selector.area.device?.integration
);
}
}
declare global {

View File

@@ -63,7 +63,8 @@ export class HaDeviceSelector extends LitElement {
}
if (this.selector.device.integration) {
if (
!this._configEntries?.some((entry) =>
this._configEntries &&
!this._configEntries.some((entry) =>
device.config_entries.includes(entry.entry_id)
)
) {

View File

@@ -19,7 +19,7 @@ export class HaEntitySelector extends SubscribeMixin(LitElement) {
@property() public selector!: EntitySelector;
@internalProperty() private _entities?: Record<string, string>;
@internalProperty() private _entityPlaformLookup?: Record<string, string>;
@property() public value?: any;
@@ -45,7 +45,7 @@ export class HaEntitySelector extends SubscribeMixin(LitElement) {
}
entityLookup[confEnt.entity_id] = confEnt.platform;
}
this._entities = entityLookup;
this._entityPlaformLookup = entityLookup;
}),
];
}
@@ -66,8 +66,9 @@ export class HaEntitySelector extends SubscribeMixin(LitElement) {
}
if (this.selector.entity.integration) {
if (
!this._entities ||
this._entities[entity.entity_id] !== this.selector.entity.integration
!this._entityPlaformLookup ||
this._entityPlaformLookup[entity.entity_id] !==
this.selector.entity.integration
) {
return false;
}

View File

@@ -0,0 +1,153 @@
import {
css,
CSSResult,
customElement,
html,
internalProperty,
LitElement,
property,
} from "lit-element";
import { HomeAssistant } from "../../types";
import { TargetSelector } from "../../data/selector";
import { ConfigEntry, getConfigEntries } from "../../data/config_entries";
import { DeviceRegistryEntry } from "../../data/device_registry";
import "../ha-target-picker";
import "@material/mwc-list/mwc-list-item";
import "@polymer/paper-input/paper-input";
import "@material/mwc-list/mwc-list";
import {
EntityRegistryEntry,
subscribeEntityRegistry,
} from "../../data/entity_registry";
import { Target } from "../../data/target";
import "@material/mwc-tab-bar/mwc-tab-bar";
import "@material/mwc-tab/mwc-tab";
import { HassEntity, UnsubscribeFunc } from "home-assistant-js-websocket";
import { SubscribeMixin } from "../../mixins/subscribe-mixin";
@customElement("ha-selector-target")
export class HaTargetSelector extends SubscribeMixin(LitElement) {
@property() public hass!: HomeAssistant;
@property() public selector!: TargetSelector;
@property() public value?: Target;
@property() public label?: string;
@internalProperty() private _entityPlaformLookup?: Record<string, string>;
@internalProperty() private _configEntries?: ConfigEntry[];
public hassSubscribe(): UnsubscribeFunc[] {
return [
subscribeEntityRegistry(this.hass.connection!, (entities) => {
const entityLookup = {};
for (const confEnt of entities) {
if (!confEnt.platform) {
continue;
}
entityLookup[confEnt.entity_id] = confEnt.platform;
}
this._entityPlaformLookup = entityLookup;
}),
];
}
protected updated(changedProperties) {
if (changedProperties.has("selector")) {
const oldSelector = changedProperties.get("selector");
if (
oldSelector !== this.selector &&
this.selector.target.device?.integration
) {
this._loadConfigEntries();
}
}
}
protected render() {
return html`<ha-target-picker
.hass=${this.hass}
.value=${this.value}
.deviceFilter=${(device) => this._filterDevices(device)}
.entityRegFilter=${(entity: EntityRegistryEntry) =>
this._filterRegEntities(entity)}
.entityFilter=${(entity: HassEntity) => this._filterEntities(entity)}
.includeDeviceClasses=${this.selector.target.entity?.device_class
? [this.selector.target.entity.device_class]
: undefined}
.includeDomains=${this.selector.target.entity?.domain
? [this.selector.target.entity.domain]
: undefined}
></ha-target-picker>`;
}
private _filterEntities(entity: HassEntity): boolean {
if (this.selector.target.entity?.integration) {
if (
!this._entityPlaformLookup ||
this._entityPlaformLookup[entity.entity_id] !==
this.selector.target.entity.integration
) {
return false;
}
}
return true;
}
private _filterRegEntities(entity: EntityRegistryEntry): boolean {
if (this.selector.target.entity?.integration) {
if (entity.platform !== this.selector.target.entity.integration) {
return false;
}
}
return true;
}
private _filterDevices(device: DeviceRegistryEntry): boolean {
if (
this.selector.target.device?.manufacturer &&
device.manufacturer !== this.selector.target.device.manufacturer
) {
return false;
}
if (
this.selector.target.device?.model &&
device.model !== this.selector.target.device.model
) {
return false;
}
if (this.selector.target.device?.integration) {
if (
!this._configEntries?.some((entry) =>
device.config_entries.includes(entry.entry_id)
)
) {
return false;
}
}
return true;
}
private async _loadConfigEntries() {
this._configEntries = (await getConfigEntries(this.hass)).filter(
(entry) => entry.domain === this.selector.target.device?.integration
);
}
static get styles(): CSSResult {
return css`
ha-target-picker {
margin: 0 -8px;
display: block;
}
`;
}
}
declare global {
interface HTMLElementTagNameMap {
"ha-selector-target": HaTargetSelector;
}
}

View File

@@ -5,9 +5,11 @@ import { HomeAssistant } from "../../types";
import "./ha-selector-entity";
import "./ha-selector-device";
import "./ha-selector-area";
import "./ha-selector-target";
import "./ha-selector-number";
import "./ha-selector-boolean";
import "./ha-selector-time";
import "./ha-selector-action";
import { Selector } from "../../data/selector";
@customElement("ha-selector")

View File

@@ -18,11 +18,6 @@ export class HaSettingsRow extends LitElement {
protected render(): SVGTemplateResult {
return html`
<style>
paper-item-body {
padding-right: 16px;
}
</style>
<paper-item-body
?two-line=${!this.threeLine}
?three-line=${this.threeLine}
@@ -43,6 +38,14 @@ export class HaSettingsRow extends LitElement {
align-self: auto;
align-items: center;
}
paper-item-body {
padding: 8px 16px 8px 0;
}
paper-item-body[two-line] {
min-height: calc(
var(--paper-item-body-two-line-min-height, 72px) - 16px
);
}
:host([narrow]) {
align-items: normal;
flex-direction: column;
@@ -52,6 +55,9 @@ export class HaSettingsRow extends LitElement {
::slotted(ha-switch) {
padding: 16px 0;
}
div[secondary] {
white-space: normal;
}
`;
}
}

View File

@@ -0,0 +1,605 @@
import {
css,
CSSResult,
customElement,
html,
internalProperty,
LitElement,
property,
query,
unsafeCSS,
} from "lit-element";
import { HomeAssistant } from "../types";
// @ts-ignore
import chipStyles from "@material/chips/dist/mdc.chips.min.css";
import {
mdiSofa,
mdiDevices,
mdiClose,
mdiPlus,
mdiUnfoldMoreVertical,
} from "@mdi/js";
import "./ha-svg-icon";
import "./ha-icon";
import "@material/mwc-icon-button/mwc-icon-button";
import { classMap } from "lit-html/directives/class-map";
import "@material/mwc-button/mwc-button";
import { UnsubscribeFunc } from "home-assistant-js-websocket";
import {
AreaRegistryEntry,
subscribeAreaRegistry,
} from "../data/area_registry";
import {
computeDeviceName,
DeviceRegistryEntry,
subscribeDeviceRegistry,
} from "../data/device_registry";
import {
EntityRegistryEntry,
subscribeEntityRegistry,
} from "../data/entity_registry";
import { SubscribeMixin } from "../mixins/subscribe-mixin";
import { computeStateName } from "../common/entity/compute_state_name";
import { stateIcon } from "../common/entity/state_icon";
import { fireEvent } from "../common/dom/fire_event";
import type { HaDevicePickerDeviceFilterFunc } from "./device/ha-device-picker";
import { computeDomain } from "../common/entity/compute_domain";
import { Target } from "../data/target";
import { ensureArray } from "../common/ensure-array";
import "./entity/ha-entity-picker";
import "./device/ha-device-picker";
import "./ha-area-picker";
import type { HaEntityPickerEntityFilterFunc } from "./entity/ha-entity-picker";
import "@polymer/paper-tooltip/paper-tooltip";
@customElement("ha-target-picker")
export class HaTargetPicker extends SubscribeMixin(LitElement) {
@property() public hass!: HomeAssistant;
@property() public value?: Target;
@property() public label?: string;
/**
* Show only targets with entities from specific domains.
* @type {Array}
* @attr include-domains
*/
@property({ type: Array, attribute: "include-domains" })
public includeDomains?: string[];
/**
* Show only targets with entities of these device classes.
* @type {Array}
* @attr include-device-classes
*/
@property({ type: Array, attribute: "include-device-classes" })
public includeDeviceClasses?: string[];
@property() public deviceFilter?: HaDevicePickerDeviceFilterFunc;
@property() public entityRegFilter?: (entity: EntityRegistryEntry) => boolean;
@property() public entityFilter?: HaEntityPickerEntityFilterFunc;
@internalProperty() private _areas?: { [areaId: string]: AreaRegistryEntry };
@internalProperty() private _devices?: {
[deviceId: string]: DeviceRegistryEntry;
};
@internalProperty() private _entities?: EntityRegistryEntry[];
@internalProperty() private _addMode?: "area_id" | "entity_id" | "device_id";
@query("#input") private _inputElement?;
public hassSubscribe(): UnsubscribeFunc[] {
return [
subscribeAreaRegistry(this.hass.connection!, (areas) => {
const areaLookup: { [areaId: string]: AreaRegistryEntry } = {};
for (const area of areas) {
areaLookup[area.area_id] = area;
}
this._areas = areaLookup;
}),
subscribeDeviceRegistry(this.hass.connection!, (devices) => {
const deviceLookup: { [deviceId: string]: DeviceRegistryEntry } = {};
for (const device of devices) {
deviceLookup[device.id] = device;
}
this._devices = deviceLookup;
}),
subscribeEntityRegistry(this.hass.connection!, (entities) => {
this._entities = entities;
}),
];
}
protected render() {
if (!this._areas || !this._devices || !this._entities) {
return html``;
}
return html`<div class="mdc-chip-set items">
${ensureArray(this.value?.area_id)?.map((area_id) => {
const area = this._areas![area_id];
return this._renderChip(
"area_id",
area_id,
area?.name || area_id,
undefined,
mdiSofa
);
})}
${ensureArray(this.value?.device_id)?.map((device_id) => {
const device = this._devices![device_id];
return this._renderChip(
"device_id",
device_id,
device ? computeDeviceName(device, this.hass) : device_id,
undefined,
mdiDevices
);
})}
${ensureArray(this.value?.entity_id)?.map((entity_id) => {
const entity = this.hass.states[entity_id];
return this._renderChip(
"entity_id",
entity_id,
entity ? computeStateName(entity) : entity_id,
entity ? stateIcon(entity) : undefined
);
})}
</div>
${this._renderPicker()}
<div class="mdc-chip-set">
<div
class="mdc-chip area_id add"
.type=${"area_id"}
@click=${this._showPicker}
>
<div class="mdc-chip__ripple"></div>
<ha-svg-icon
class="mdc-chip__icon mdc-chip__icon--leading"
.path=${mdiPlus}
></ha-svg-icon>
<span role="gridcell">
<span role="button" tabindex="0" class="mdc-chip__primary-action">
<span class="mdc-chip__text"
>${this.hass.localize(
"ui.components.target-picker.add_area_id"
)}</span
>
</span>
</span>
</div>
<div
class="mdc-chip device_id add"
.type=${"device_id"}
@click=${this._showPicker}
>
<div class="mdc-chip__ripple"></div>
<ha-svg-icon
class="mdc-chip__icon mdc-chip__icon--leading"
.path=${mdiPlus}
></ha-svg-icon>
<span role="gridcell">
<span role="button" tabindex="0" class="mdc-chip__primary-action">
<span class="mdc-chip__text"
>${this.hass.localize(
"ui.components.target-picker.add_device_id"
)}</span
>
</span>
</span>
</div>
<div
class="mdc-chip entity_id add"
.type=${"entity_id"}
@click=${this._showPicker}
>
<div class="mdc-chip__ripple"></div>
<ha-svg-icon
class="mdc-chip__icon mdc-chip__icon--leading"
.path=${mdiPlus}
></ha-svg-icon>
<span role="gridcell">
<span role="button" tabindex="0" class="mdc-chip__primary-action">
<span class="mdc-chip__text"
>${this.hass.localize(
"ui.components.target-picker.add_entity_id"
)}</span
>
</span>
</span>
</div>
</div>`;
}
private async _showPicker(ev) {
this._addMode = ev.currentTarget.type;
await this.updateComplete;
setTimeout(() => {
this._inputElement?.open();
this._inputElement?.focus();
}, 0);
}
private _renderChip(
type: string,
id: string,
name: string,
icon?: string,
iconPath?: string
) {
return html`
<div
class="mdc-chip ${classMap({
[type]: true,
})}"
>
${iconPath
? html`<ha-svg-icon
class="mdc-chip__icon mdc-chip__icon--leading"
.path=${iconPath}
></ha-svg-icon>`
: ""}
${icon
? html`<ha-icon
class="mdc-chip__icon mdc-chip__icon--leading"
.icon=${icon}
></ha-icon>`
: ""}
<span role="gridcell">
<span role="button" tabindex="0" class="mdc-chip__primary-action">
<span class="mdc-chip__text">${name}</span>
</span>
</span>
${type === "entity_id"
? ""
: html` <span role="gridcell">
<mwc-icon-button
class="expand-btn mdc-chip__icon mdc-chip__icon--trailing"
tabindex="-1"
role="button"
.label=${"Expand"}
.id=${id}
.type=${type}
@click=${this._handleExpand}
>
<ha-svg-icon .path=${mdiUnfoldMoreVertical}></ha-svg-icon>
</mwc-icon-button>
<paper-tooltip class="expand" animation-delay="0"
>${this.hass.localize(
`ui.components.target-picker.expand_${type}`
)}</paper-tooltip
>
</span>`}
<span role="gridcell">
<mwc-icon-button
class="mdc-chip__icon mdc-chip__icon--trailing"
tabindex="-1"
role="button"
.label=${"Remove"}
.id=${id}
.type=${type}
@click=${this._handleRemove}
>
<ha-svg-icon .path=${mdiClose}></ha-svg-icon>
</mwc-icon-button>
<paper-tooltip animation-delay="0"
>${this.hass.localize(
`ui.components.target-picker.remove_${type}`
)}</paper-tooltip
>
</span>
</div>
`;
}
private _renderPicker() {
switch (this._addMode) {
case "area_id":
return html`<ha-area-picker
.hass=${this.hass}
id="input"
.type=${"area_id"}
.label=${this.hass.localize(
"ui.components.target-picker.add_area_id"
)}
no-add
.deviceFilter=${this.deviceFilter}
.entityFilter=${this.entityRegFilter}
.includeDeviceClasses=${this.includeDeviceClasses}
.includeDomains=${this.includeDomains}
@value-changed=${this._targetPicked}
></ha-area-picker>`;
case "device_id":
return html`<ha-device-picker
.hass=${this.hass}
id="input"
.type=${"device_id"}
.label=${this.hass.localize(
"ui.components.target-picker.add_device_id"
)}
.deviceFilter=${this.deviceFilter}
.entityFilter=${this.entityRegFilter}
.includeDeviceClasses=${this.includeDeviceClasses}
.includeDomains=${this.includeDomains}
@value-changed=${this._targetPicked}
></ha-device-picker>`;
case "entity_id":
return html`<ha-entity-picker
.hass=${this.hass}
id="input"
.type=${"entity_id"}
.label=${this.hass.localize(
"ui.components.target-picker.add_entity_id"
)}
.entityFilter=${this.entityFilter}
.includeDeviceClasses=${this.includeDeviceClasses}
.includeDomains=${this.includeDomains}
@value-changed=${this._targetPicked}
></ha-entity-picker>`;
}
return html``;
}
private _targetPicked(ev) {
ev.stopPropagation();
if (!ev.detail.value) {
return;
}
const value = ev.detail.value;
const target = ev.currentTarget;
target.value = "";
this._addMode = undefined;
fireEvent(this, "value-changed", {
value: this.value
? {
...this.value,
[target.type]: this.value[target.type]
? [...ensureArray(this.value[target.type]), value]
: value,
}
: { [target.type]: value },
});
}
private _handleExpand(ev) {
const target = ev.currentTarget as any;
const newDevices: string[] = [];
const newEntities: string[] = [];
if (target.type === "area_id") {
Object.values(this._devices!).forEach((device) => {
if (
device.area_id === target.id &&
!this.value!.device_id?.includes(device.id) &&
this._deviceMeetsFilter(device)
) {
newDevices.push(device.id);
}
});
this._entities!.forEach((entity) => {
if (
entity.area_id === target.id &&
!this.value!.entity_id?.includes(entity.entity_id) &&
this._entityRegMeetsFilter(entity)
) {
newEntities.push(entity.entity_id);
}
});
} else if (target.type === "device_id") {
this._entities!.forEach((entity) => {
if (
entity.device_id === target.id &&
!this.value!.entity_id?.includes(entity.entity_id) &&
this._entityRegMeetsFilter(entity)
) {
newEntities.push(entity.entity_id);
}
});
} else {
return;
}
let value = this.value;
if (newEntities.length) {
value = this._addItems(value, "entity_id", newEntities);
}
if (newDevices.length) {
value = this._addItems(value, "device_id", newDevices);
}
value = this._removeItem(value, target.type, target.id);
fireEvent(this, "value-changed", { value });
}
private _handleRemove(ev) {
const target = ev.currentTarget as any;
fireEvent(this, "value-changed", {
value: this._removeItem(this.value, target.type, target.id),
});
}
private _addItems(
value: this["value"],
type: string,
ids: string[]
): this["value"] {
return {
...value,
[type]: value![type] ? ensureArray(value![type])!.concat(ids) : ids,
};
}
private _removeItem(
value: this["value"],
type: string,
id: string
): this["value"] {
const newVal = ensureArray(value![type])!.filter((val) => val !== id);
if (newVal.length) {
return {
...value,
[type]: newVal,
};
}
const val = { ...value }!;
delete val[type];
if (Object.keys(val).length) {
return val;
}
return undefined;
}
private _deviceMeetsFilter(device: DeviceRegistryEntry): boolean {
const devEntities = this._entities?.filter(
(entity) => entity.device_id === device.id
);
if (this.includeDomains) {
if (!devEntities || !devEntities.length) {
return false;
}
if (
!devEntities.some((entity) =>
this.includeDomains!.includes(computeDomain(entity.entity_id))
)
) {
return false;
}
}
if (this.includeDeviceClasses) {
if (!devEntities || !devEntities.length) {
return false;
}
if (
!devEntities.some((entity) => {
const stateObj = this.hass.states[entity.entity_id];
if (!stateObj) {
return false;
}
return (
stateObj.attributes.device_class &&
this.includeDeviceClasses!.includes(
stateObj.attributes.device_class
)
);
})
) {
return false;
}
}
if (this.deviceFilter) {
return this.deviceFilter(device);
}
return true;
}
private _entityRegMeetsFilter(entity: EntityRegistryEntry): boolean {
if (
this.includeDomains &&
!this.includeDomains.includes(computeDomain(entity.entity_id))
) {
return false;
}
if (this.includeDeviceClasses) {
const stateObj = this.hass.states[entity.entity_id];
if (!stateObj) {
return false;
}
if (
!stateObj.attributes.device_class ||
!this.includeDeviceClasses!.includes(stateObj.attributes.device_class)
) {
return false;
}
}
if (this.entityRegFilter) {
return this.entityRegFilter(entity);
}
return true;
}
static get styles(): CSSResult {
return css`
${unsafeCSS(chipStyles)}
.mdc-chip {
color: var(--primary-text-color);
}
.items {
z-index: 2;
}
.mdc-chip.add {
color: rgba(0, 0, 0, 0.87);
}
.mdc-chip:not(.add) {
cursor: default;
}
.mdc-chip mwc-icon-button {
--mdc-icon-button-size: 24px;
display: flex;
align-items: center;
outline: none;
}
.mdc-chip mwc-icon-button ha-svg-icon {
border-radius: 50%;
background: var(--secondary-text-color);
}
.mdc-chip__icon.mdc-chip__icon--trailing {
width: 16px;
height: 16px;
--mdc-icon-size: 14px;
color: var(--card-background-color);
}
.mdc-chip__icon--leading {
display: flex;
align-items: center;
justify-content: center;
--mdc-icon-size: 20px;
border-radius: 50%;
padding: 6px;
margin-left: -14px !important;
}
.expand-btn {
margin-right: 0;
}
.mdc-chip.area_id:not(.add) {
border: 2px solid #fed6a4;
background: var(--card-background-color);
}
.mdc-chip.area_id:not(.add) .mdc-chip__icon--leading,
.mdc-chip.area_id.add {
background: #fed6a4;
}
.mdc-chip.device_id:not(.add) {
border: 2px solid #a8e1fb;
background: var(--card-background-color);
}
.mdc-chip.device_id:not(.add) .mdc-chip__icon--leading,
.mdc-chip.device_id.add {
background: #a8e1fb;
}
.mdc-chip.entity_id:not(.add) {
border: 2px solid #d2e7b9;
background: var(--card-background-color);
}
.mdc-chip.entity_id:not(.add) .mdc-chip__icon--leading,
.mdc-chip.entity_id.add {
background: #d2e7b9;
}
.mdc-chip:hover {
z-index: 5;
}
paper-tooltip.expand {
min-width: 200px;
}
`;
}
}
declare global {
interface HTMLElementTagNameMap {
"ha-target-picker": HaTargetPicker;
}
}

View File

@@ -6,7 +6,7 @@ import { navigate } from "../common/navigate";
import { Context, HomeAssistant } from "../types";
import { BlueprintInput } from "./blueprint";
import { DeviceCondition, DeviceTrigger } from "./device_automation";
import { Action } from "./script";
import { Action, MODES } from "./script";
export interface AutomationEntity extends HassEntityBase {
attributes: HassEntityAttributeBase & {
@@ -26,7 +26,7 @@ export interface ManualAutomationConfig {
trigger: Trigger[];
condition?: Condition[];
action: Action[];
mode?: "single" | "restart" | "queued" | "parallel";
mode?: typeof MODES[number];
max?: number;
}

View File

@@ -17,6 +17,7 @@ export interface DeviceRegistryEntry {
area_id?: string;
name_by_user?: string;
entry_type: "service" | null;
disabled_by: string | null;
}
export interface DeviceEntityLookup {
@@ -26,6 +27,7 @@ export interface DeviceEntityLookup {
export interface DeviceRegistryEntryMutableParams {
area_id?: string | null;
name_by_user?: string | null;
disabled_by?: string | null;
}
export const fallbackDeviceName = (

View File

@@ -7,13 +7,13 @@ import { navigate } from "../common/navigate";
import { HomeAssistant } from "../types";
import { Condition, Trigger } from "./automation";
export const MODES = ["single", "restart", "queued", "parallel"];
export const MODES = ["single", "restart", "queued", "parallel"] as const;
export const MODES_MAX = ["queued", "parallel"];
export interface ScriptEntity extends HassEntityBase {
attributes: HassEntityAttributeBase & {
last_triggered: string;
mode: "single" | "restart" | "queued" | "parallel";
mode: typeof MODES[number];
current?: number;
max?: number;
};
@@ -23,7 +23,7 @@ export interface ScriptConfig {
alias: string;
sequence: Action[];
icon?: string;
mode?: "single" | "restart" | "queued" | "parallel";
mode?: typeof MODES[number];
max?: number;
}

View File

@@ -2,9 +2,11 @@ export type Selector =
| EntitySelector
| DeviceSelector
| AreaSelector
| TargetSelector
| NumberSelector
| BooleanSelector
| TimeSelector;
| TimeSelector
| ActionSelector;
export interface EntitySelector {
entity: {
@@ -19,13 +21,41 @@ export interface DeviceSelector {
integration?: string;
manufacturer?: string;
model?: string;
entity?: EntitySelector["entity"];
entity?: {
domain?: EntitySelector["entity"]["domain"];
device_class?: EntitySelector["entity"]["device_class"];
};
};
}
export interface AreaSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
area: {};
area: {
entity?: {
integration?: EntitySelector["entity"]["integration"];
domain?: EntitySelector["entity"]["domain"];
device_class?: EntitySelector["entity"]["device_class"];
};
device?: {
integration?: DeviceSelector["device"]["integration"];
manufacturer?: DeviceSelector["device"]["manufacturer"];
model?: DeviceSelector["device"]["model"];
};
};
}
export interface TargetSelector {
target: {
entity?: {
integration?: EntitySelector["entity"]["integration"];
domain?: EntitySelector["entity"]["domain"];
device_class?: EntitySelector["entity"]["device_class"];
};
device?: {
integration?: DeviceSelector["device"]["integration"];
manufacturer?: DeviceSelector["device"]["manufacturer"];
model?: DeviceSelector["device"]["model"];
};
};
}
export interface NumberSelector {
@@ -47,3 +77,8 @@ export interface TimeSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
time: {};
}
export interface ActionSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
action: {};
}

5
src/data/target.ts Normal file
View File

@@ -0,0 +1,5 @@
export interface Target {
entity_id?: string[];
device_id?: string[];
area_id?: string[];
}

View File

@@ -20,6 +20,7 @@ export interface User {
export interface UpdateUserParams {
name?: User["name"];
is_active?: User["is_active"];
group_ids?: User["group_ids"];
}

View File

@@ -17,17 +17,17 @@ import "../../components/ha-switch";
import { PolymerChangedEvent } from "../../polymer-types";
import { haStyleDialog } from "../../resources/styles";
import { HomeAssistant } from "../../types";
import { DialogParams } from "./show-dialog-box";
import { DialogBoxParams } from "./show-dialog-box";
@customElement("dialog-box")
class DialogBox extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@internalProperty() private _params?: DialogParams;
@internalProperty() private _params?: DialogBoxParams;
@internalProperty() private _value?: string;
public async showDialog(params: DialogParams): Promise<void> {
public async showDialog(params: DialogBoxParams): Promise<void> {
this._params = params;
if (params.prompt) {
this._value = params.defaultValue;
@@ -55,8 +55,8 @@ class DialogBox extends LitElement {
return html`
<ha-dialog
open
?scrimClickAction=${this._params.prompt}
?escapeKeyAction=${this._params.prompt}
?scrimClickAction=${confirmPrompt}
?escapeKeyAction=${confirmPrompt}
@closed=${this._dialogClosed}
defaultAction="ignore"
.heading=${this._params.title
@@ -140,10 +140,10 @@ class DialogBox extends LitElement {
}
private _dialogClosed(ev) {
if (ev.detail.action === "ignore") {
if (this._params?.prompt && ev.detail.action === "ignore") {
return;
}
this.closeDialog();
this._dismiss();
}
private _close(): void {

View File

@@ -1,31 +1,31 @@
import { TemplateResult } from "lit-html";
import { fireEvent } from "../../common/dom/fire_event";
interface BaseDialogParams {
interface BaseDialogBoxParams {
confirmText?: string;
text?: string | TemplateResult;
title?: string;
warning?: boolean;
}
export interface AlertDialogParams extends BaseDialogParams {
export interface AlertDialogParams extends BaseDialogBoxParams {
confirm?: () => void;
}
export interface ConfirmationDialogParams extends BaseDialogParams {
export interface ConfirmationDialogParams extends BaseDialogBoxParams {
dismissText?: string;
confirm?: () => void;
cancel?: () => void;
}
export interface PromptDialogParams extends BaseDialogParams {
export interface PromptDialogParams extends BaseDialogBoxParams {
inputLabel?: string;
inputType?: string;
defaultValue?: string;
confirm?: (out?: string) => void;
}
export interface DialogParams
export interface DialogBoxParams
extends ConfirmationDialogParams,
PromptDialogParams {
confirm?: (out?: string) => void;
@@ -37,10 +37,10 @@ export const loadGenericDialog = () => import("./dialog-box");
const showDialogHelper = (
element: HTMLElement,
dialogParams: DialogParams,
dialogParams: DialogBoxParams,
extra?: {
confirmation?: DialogParams["confirmation"];
prompt?: DialogParams["prompt"];
confirmation?: DialogBoxParams["confirmation"];
prompt?: DialogBoxParams["prompt"];
}
) =>
new Promise((resolve) => {

View File

@@ -44,7 +44,7 @@ class MoreInfoSun extends LitElement {
>
<ha-relative-time
.hass=${this.hass}
.datetimeObj=${item === "ris" ? risingDate : settingDate}
.datetime=${item === "ris" ? risingDate : settingDate}
></ha-relative-time>
</div>
<div class="value">

View File

@@ -60,6 +60,12 @@ export class HaTabsSubpageDataTable extends LitElement {
*/
@property({ type: Boolean }) public hasFab = false;
/**
* Add an extra rows at the bottom of the datatabel
* @type {TemplateResult}
*/
@property({ attribute: false }) public appendRow?;
/**
* Field with a unique id per entry in data.
* @type {String}
@@ -171,6 +177,7 @@ export class HaTabsSubpageDataTable extends LitElement {
.noDataText=${this.noDataText}
.dir=${computeRTLDirection(this.hass)}
.clickable=${this.clickable}
.appendRow=${this.appendRow}
>
${!this.narrow
? html`

View File

@@ -17,6 +17,7 @@ import { PolymerChangedEvent } from "../../../polymer-types";
import { haStyleDialog } from "../../../resources/styles";
import { HomeAssistant } from "../../../types";
import { AreaRegistryDetailDialogParams } from "./show-dialog-area-registry-detail";
import { navigate } from "../../../common/navigate";
class DialogAreaDetail extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@@ -154,6 +155,8 @@ class DialogAreaDetail extends LitElement {
} finally {
this._submitting = false;
}
navigate(this, "/config/areas/dashboard");
}
static get styles(): CSSResult[] {

View File

@@ -39,7 +39,7 @@ export class HaWaitForTriggerAction extends LitElement
)}
>
<ha-switch
.checked=${continue_on_timeout}
.checked=${continue_on_timeout ?? true}
@change=${this._continueChanged}
></ha-switch>
</ha-formfield>

View File

@@ -18,13 +18,9 @@ import "@polymer/paper-input/paper-textarea";
import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light";
import "../../../components/entity/ha-entity-toggle";
import "@material/mwc-button/mwc-button";
import "./trigger/ha-automation-trigger";
import "./condition/ha-automation-condition";
import "./action/ha-automation-action";
import { fireEvent } from "../../../common/dom/fire_event";
import { haStyle } from "../../../resources/styles";
import { HassEntity } from "home-assistant-js-websocket";
import { navigate } from "../../../common/navigate";
import {
BlueprintOrError,
Blueprints,
@@ -63,7 +59,7 @@ export class HaBlueprintAutomationEditor extends LitElement {
protected render() {
const blueprint = this._blueprint;
return html`<ha-config-section .isWide=${this.isWide}>
return html`<ha-config-section vertical .isWide=${this.isWide}>
${!this.narrow
? html` <span slot="header">${this.config.alias}</span> `
: ""}
@@ -119,7 +115,7 @@ export class HaBlueprintAutomationEditor extends LitElement {
</ha-card>
</ha-config-section>
<ha-config-section .isWide=${this.isWide}>
<ha-config-section vertical .isWide=${this.isWide}>
<span slot="header"
>${this.hass.localize(
"ui.panel.config.automation.editor.blueprint.header"
@@ -144,11 +140,6 @@ export class HaBlueprintAutomationEditor extends LitElement {
"ui.panel.config.automation.editor.blueprint.no_blueprints"
)
: html`<ha-circular-progress active></ha-circular-progress>`}
<mwc-button @click=${this._navigateBlueprints}>
${this.hass.localize(
"ui.panel.config.automation.editor.blueprint.manage_blueprints"
)}
</mwc-button>
</div>
${this.config.use_blueprint.path
@@ -157,41 +148,37 @@ export class HaBlueprintAutomationEditor extends LitElement {
There is an error in this Blueprint: ${blueprint.error}
</p>`
: html`${blueprint?.metadata.description
? html`<p>${blueprint.metadata.description}</p>`
? html`<p class="card-content pre-line">
${blueprint.metadata.description}
</p>`
: ""}
${blueprint?.metadata?.input &&
Object.keys(blueprint.metadata.input).length
? html`<h3>
${this.hass.localize(
"ui.panel.config.automation.editor.blueprint.inputs"
)}
</h3>
${Object.entries(blueprint.metadata.input).map(
([key, value]) =>
html`<ha-settings-row .narrow=${this.narrow}>
<span slot="heading">${value?.name || key}</span>
<span slot="description"
>${value?.description}</span
>
${value?.selector
? html`<ha-selector
.hass=${this.hass}
.selector=${value.selector}
.key=${key}
.value=${(this.config.use_blueprint.input &&
this.config.use_blueprint.input[key]) ||
value?.default}
@value-changed=${this._inputChanged}
></ha-selector>`
: html`<paper-input
.key=${key}
.value=${this.config.use_blueprint.input &&
this.config.use_blueprint.input[key]}
@value-changed=${this._inputChanged}
no-label-float
></paper-input>`}
</ha-settings-row>`
)}`
? Object.entries(blueprint.metadata.input).map(
([key, value]) =>
html`<ha-settings-row .narrow=${this.narrow}>
<span slot="heading">${value?.name || key}</span>
<span slot="description">${value?.description}</span>
${value?.selector
? html`<ha-selector
.hass=${this.hass}
.selector=${value.selector}
.key=${key}
.value=${(this.config.use_blueprint.input &&
this.config.use_blueprint.input[key]) ||
value?.default}
@value-changed=${this._inputChanged}
></ha-selector>`
: html`<paper-input
.key=${key}
required
.value=${this.config.use_blueprint.input &&
this.config.use_blueprint.input[key]}
@value-changed=${this._inputChanged}
no-label-float
></paper-input>`}
</ha-settings-row>`
)
: html`<p class="padding">
${this.hass.localize(
"ui.panel.config.automation.editor.blueprint.no_inputs"
@@ -237,12 +224,18 @@ export class HaBlueprintAutomationEditor extends LitElement {
) {
return;
}
const input = { ...this.config.use_blueprint.input, [key]: value };
if (value === "" || value === undefined) {
delete input[key];
}
fireEvent(this, "value-changed", {
value: {
...this.config!,
use_blueprint: {
...this.config.use_blueprint,
input: { ...this.config.use_blueprint.input, [key]: value },
input,
},
},
});
@@ -267,25 +260,18 @@ export class HaBlueprintAutomationEditor extends LitElement {
});
}
private _navigateBlueprints() {
navigate(this, "/config/blueprint");
}
static get styles(): CSSResult[] {
return [
haStyle,
css`
ha-card {
overflow: hidden;
}
.padding {
padding: 16px;
}
.pre-line {
white-space: pre-line;
}
.blueprint-picker-container {
padding: 16px;
display: flex;
align-items: center;
justify-content: space-between;
}
h3 {
margin: 16px;
@@ -304,10 +290,10 @@ export class HaBlueprintAutomationEditor extends LitElement {
border-top: 1px solid var(--divider-color);
}
:host(:not([narrow])) ha-settings-row paper-input {
width: 50%;
width: 60%;
}
:host(:not([narrow])) ha-settings-row ha-selector {
width: 50%;
width: 60%;
}
`,
];

View File

@@ -32,6 +32,7 @@ import "../../../components/ha-svg-icon";
import "../../../components/ha-yaml-editor";
import { showToast } from "../../../util/toast";
import type { HaYamlEditor } from "../../../components/ha-yaml-editor";
import { copyToClipboard } from "../../../common/util/copy-clipboard";
import {
AutomationConfig,
AutomationEntity,
@@ -206,6 +207,7 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) {
? html`<blueprint-automation-editor
.hass=${this.hass}
.narrow=${this.narrow}
.isWide=${this.isWide}
.stateObj=${stateObj}
.config=${this._config}
@value-changed=${this._valueChanged}
@@ -213,6 +215,7 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) {
: html`<manual-automation-editor
.hass=${this.hass}
.narrow=${this.narrow}
.isWide=${this.isWide}
.stateObj=${stateObj}
.config=${this._config}
@value-changed=${this._valueChanged}
@@ -394,7 +397,7 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) {
private async _copyYaml() {
if (this._editor?.yaml) {
navigator.clipboard.writeText(this._editor.yaml);
copyToClipboard(this._editor.yaml);
}
}

View File

@@ -12,6 +12,7 @@ import {
internalProperty,
query,
TemplateResult,
css,
} from "lit-element";
import "../../../components/ha-dialog";
import { haStyleDialog } from "../../../resources/styles";
@@ -73,7 +74,9 @@ class DialogImportBlueprint extends LitElement {
this._result.blueprint.metadata.domain
)}
<br />
${this._result.blueprint.metadata.description}
<p class="pre-line">
${this._result.blueprint.metadata.description}
</p>
${this._result.validation_errors
? html`
<p class="error">
@@ -104,7 +107,16 @@ class DialogImportBlueprint extends LitElement {
<pre>${this._result.raw_data}</pre>
</ha-expansion-panel>`
: html`${this.hass.localize(
"ui.panel.config.blueprint.add.import_introduction"
"ui.panel.config.blueprint.add.import_introduction_link",
"community_link",
html`<a
href="https://www.home-assistant.io/get-blueprints"
target="_blank"
rel="noreferrer noopener"
>${this.hass.localize(
"ui.panel.config.blueprint.add.community_forums"
)}</a
>`
)}<paper-input
id="input"
.label=${this.hass.localize(
@@ -199,8 +211,15 @@ class DialogImportBlueprint extends LitElement {
}
}
static get styles(): CSSResult {
return haStyleDialog;
static get styles(): CSSResult[] {
return [
haStyleDialog,
css`
.pre-line {
white-space: pre-line;
}
`,
];
}
}

View File

@@ -1,6 +1,6 @@
import "../../../components/ha-fab";
import "@material/mwc-icon-button";
import { mdiPlus, mdiHelpCircle, mdiDelete, mdiRobot } from "@mdi/js";
import { mdiHelpCircle, mdiDelete, mdiRobot, mdiDownload } from "@mdi/js";
import "@polymer/paper-tooltip/paper-tooltip";
import {
CSSResult,
@@ -112,7 +112,6 @@ class HaBlueprintOverview extends LitElement {
create: {
title: "",
type: narrow ? "icon-button" : undefined,
width: narrow ? undefined : "180px",
template: (_, blueprint: any) =>
blueprint.error
? ""
@@ -126,8 +125,9 @@ class HaBlueprintOverview extends LitElement {
"ui.panel.config.blueprint.overview.use_blueprint"
)}
@click=${(ev) => this._createNew(ev)}
><ha-svg-icon .path=${mdiRobot}></ha-svg-icon
></mwc-icon-button>`
>
<ha-svg-icon .path=${mdiRobot}></ha-svg-icon>
</mwc-icon-button>`
: html`<mwc-button
.blueprint=${blueprint}
@click=${(ev) => this._createNew(ev)}
@@ -170,6 +170,23 @@ class HaBlueprintOverview extends LitElement {
"ui.panel.config.blueprint.overview.no_blueprints"
)}
hasFab
.appendRow=${html` <div
class="mdc-data-table__cell"
style="width: 100%; text-align: center;"
role="cell"
>
<a
href="https://www.home-assistant.io/get-blueprints"
target="_blank"
rel="noreferrer noopener"
>
<mwc-button
>${this.hass.localize(
"ui.panel.config.blueprint.overview.discover_more"
)}</mwc-button
>
</a>
</div>`}
>
<mwc-icon-button slot="toolbar-icon" @click=${this._showHelp}>
<ha-svg-icon .path=${mdiHelpCircle}></ha-svg-icon>
@@ -182,7 +199,7 @@ class HaBlueprintOverview extends LitElement {
extended
@click=${this._addBlueprint}
>
<ha-svg-icon slot="icon" .path=${mdiPlus}></ha-svg-icon>
<ha-svg-icon slot="icon" .path=${mdiDownload}></ha-svg-icon>
</ha-fab>
</hass-tabs-subpage-data-table>
`;
@@ -195,7 +212,10 @@ class HaBlueprintOverview extends LitElement {
${this.hass.localize("ui.panel.config.blueprint.overview.introduction")}
<p>
<a
href="${documentationUrl(this.hass, "/docs/blueprint/editor/")}"
href="${documentationUrl(
this.hass,
"/docs/automation/using_blueprints/"
)}"
target="_blank"
rel="noreferrer"
>

View File

@@ -8,7 +8,6 @@ import {
html,
LitElement,
property,
internalProperty,
PropertyValues,
TemplateResult,
} from "lit-element";
@@ -31,7 +30,7 @@ export class HaDeviceEntitiesCard extends LitElement {
@property() public entities!: EntityRegistryStateEntry[];
@internalProperty() private _showDisabled = false;
@property() public showDisabled = false;
private _entityRows: Array<LovelaceRow | HuiErrorCard> = [];
@@ -68,7 +67,7 @@ export class HaDeviceEntitiesCard extends LitElement {
})}
</div>
${disabledEntities.length
? !this._showDisabled
? !this.showDisabled
? html`
<button
class="show-more"
@@ -119,7 +118,7 @@ export class HaDeviceEntitiesCard extends LitElement {
}
private _toggleShowDisabled() {
this._showDisabled = !this._showDisabled;
this.showDisabled = !this.showDisabled;
}
private _renderEntity(entry: EntityRegistryStateEntry): TemplateResult {
@@ -227,3 +226,9 @@ export class HaDeviceEntitiesCard extends LitElement {
`;
}
}
declare global {
interface HTMLElementTagNameMap {
"ha-device-entities-card": HaDeviceEntitiesCard;
}
}

View File

@@ -19,10 +19,11 @@ import {
import { DeviceRegistryDetailDialogParams } from "./show-dialog-device-registry-detail";
import { HomeAssistant } from "../../../../types";
import type { HaSwitch } from "../../../../components/ha-switch";
import { PolymerChangedEvent } from "../../../../polymer-types";
import { computeDeviceName } from "../../../../data/device_registry";
import { fireEvent } from "../../../../common/dom/fire_event";
import { haStyleDialog } from "../../../../resources/styles";
import { haStyle, haStyleDialog } from "../../../../resources/styles";
@customElement("dialog-device-registry-detail")
class DialogDeviceRegistryDetail extends LitElement {
@@ -36,6 +37,8 @@ class DialogDeviceRegistryDetail extends LitElement {
@internalProperty() private _areaId?: string;
@internalProperty() private _disabledBy!: string | null;
@internalProperty() private _submitting?: boolean;
public async showDialog(
@@ -45,6 +48,7 @@ class DialogDeviceRegistryDetail extends LitElement {
this._error = undefined;
this._nameByUser = this._params.device.name_by_user || "";
this._areaId = this._params.device.area_id;
this._disabledBy = this._params.device.disabled_by;
await this.updateComplete;
}
@@ -80,6 +84,32 @@ class DialogDeviceRegistryDetail extends LitElement {
.value=${this._areaId}
@value-changed=${this._areaPicked}
></ha-area-picker>
<div class="row">
<ha-switch
.checked=${!this._disabledBy}
@change=${this._disabledByChanged}
>
</ha-switch>
<div>
<div>
${this.hass.localize("ui.panel.config.devices.enabled_label")}
</div>
<div class="secondary">
${this._disabledBy && this._disabledBy !== "user"
? this.hass.localize(
"ui.panel.config.devices.enabled_cause",
"cause",
this.hass.localize(
`config_entry.disabled_by.${this._disabledBy}`
)
)
: ""}
${this.hass.localize(
"ui.panel.config.devices.enabled_description"
)}
</div>
</div>
</div>
</div>
</div>
<mwc-button
@@ -109,12 +139,17 @@ class DialogDeviceRegistryDetail extends LitElement {
this._areaId = event.detail.value;
}
private _disabledByChanged(ev: Event): void {
this._disabledBy = (ev.target as HaSwitch).checked ? null : "user";
}
private async _updateEntry(): Promise<void> {
this._submitting = true;
try {
await this._params!.updateEntry({
name_by_user: this._nameByUser.trim() || null,
area_id: this._areaId || null,
disabled_by: this._disabledBy || null,
});
this._params = undefined;
} catch (err) {
@@ -128,6 +163,7 @@ class DialogDeviceRegistryDetail extends LitElement {
static get styles(): CSSResult[] {
return [
haStyle,
haStyleDialog,
css`
.form {
@@ -139,6 +175,15 @@ class DialogDeviceRegistryDetail extends LitElement {
.error {
color: var(--error-color);
}
ha-switch {
margin-right: 16px;
}
.row {
margin-top: 8px;
color: var(--primary-text-color);
display: flex;
align-items: center;
}
`,
];
}

View File

@@ -46,6 +46,7 @@ import "./device-detail/ha-device-entities-card";
import "./device-detail/ha-device-info-card";
import { showDeviceAutomationDialog } from "./device-detail/show-dialog-device-automation";
import { brandsUrl } from "../../../util/brands-url";
import { haStyle } from "../../../resources/styles";
export interface EntityRegistryStateEntry extends EntityRegistryEntry {
stateName?: string | null;
@@ -246,6 +247,28 @@ export class HaConfigDevicePage extends LitElement {
.devices=${this.devices}
.device=${device}
>
${
device.disabled_by
? html`
<div>
<p class="warning">
${this.hass.localize(
"ui.panel.config.devices.enabled_cause",
"cause",
this.hass.localize(
`ui.panel.config.devices.disabled_by.${device.disabled_by}`
)
)}
</p>
</div>
<div class="card-actions" slot="actions">
<mwc-button unelevated @click=${this._enableDevice}>
${this.hass.localize("ui.common.enable")}
</mwc-button>
</div>
`
: html``
}
${this._renderIntegrationInfo(device, integrations)}
</ha-device-info-card>
@@ -255,6 +278,7 @@ export class HaConfigDevicePage extends LitElement {
<ha-device-entities-card
.hass=${this.hass}
.entities=${entities}
.showDisabled=${device.disabled_by !== null}
>
</ha-device-entities-card>
`
@@ -272,9 +296,14 @@ export class HaConfigDevicePage extends LitElement {
)}
<ha-icon-button
@click=${this._showAutomationDialog}
title=${this.hass.localize(
"ui.panel.config.devices.automation.create"
)}
.disabled=${device.disabled_by}
title=${device.disabled_by
? this.hass.localize(
"ui.panel.config.devices.automation.create_disabled"
)
: this.hass.localize(
"ui.panel.config.devices.automation.create"
)}
icon="hass:plus-circle"
></ha-icon-button>
</h1>
@@ -342,9 +371,16 @@ export class HaConfigDevicePage extends LitElement {
<ha-icon-button
@click=${this._createScene}
title=${this.hass.localize(
"ui.panel.config.devices.scene.create"
)}
.disabled=${device.disabled_by}
title=${
device.disabled_by
? this.hass.localize(
"ui.panel.config.devices.scene.create_disabled"
)
: this.hass.localize(
"ui.panel.config.devices.scene.create"
)
}
icon="hass:plus-circle"
></ha-icon-button>
</h1>
@@ -415,9 +451,14 @@ export class HaConfigDevicePage extends LitElement {
)}
<ha-icon-button
@click=${this._showScriptDialog}
title=${this.hass.localize(
"ui.panel.config.devices.script.create"
)}
.disabled=${device.disabled_by}
title=${device.disabled_by
? this.hass.localize(
"ui.panel.config.devices.script.create_disabled"
)
: this.hass.localize(
"ui.panel.config.devices.script.create"
)}
icon="hass:plus-circle"
></ha-icon-button>
</h1>
@@ -632,128 +673,137 @@ export class HaConfigDevicePage extends LitElement {
});
}
static get styles(): CSSResult {
return css`
.container {
display: flex;
flex-wrap: wrap;
margin: auto;
max-width: 1000px;
margin-top: 32px;
margin-bottom: 32px;
}
private async _enableDevice(): Promise<void> {
await updateDeviceRegistryEntry(this.hass, this.deviceId, {
disabled_by: null,
});
}
.card-header {
display: flex;
align-items: center;
justify-content: space-between;
}
static get styles(): CSSResult[] {
return [
haStyle,
css`
.container {
display: flex;
flex-wrap: wrap;
margin: auto;
max-width: 1000px;
margin-top: 32px;
margin-bottom: 32px;
}
.card-header ha-icon-button {
margin-right: -8px;
color: var(--primary-color);
height: auto;
}
.card-header {
display: flex;
align-items: center;
justify-content: space-between;
}
.device-info {
padding: 16px;
}
.card-header ha-icon-button {
margin-right: -8px;
color: var(--primary-color);
height: auto;
}
.show-more {
}
.device-info {
padding: 16px;
}
h1 {
margin: 0;
font-family: var(--paper-font-headline_-_font-family);
-webkit-font-smoothing: var(
--paper-font-headline_-_-webkit-font-smoothing
);
font-size: var(--paper-font-headline_-_font-size);
font-weight: var(--paper-font-headline_-_font-weight);
letter-spacing: var(--paper-font-headline_-_letter-spacing);
line-height: var(--paper-font-headline_-_line-height);
opacity: var(--dark-primary-opacity);
}
.show-more {
}
.header {
display: flex;
justify-content: space-between;
}
h1 {
margin: 0;
font-family: var(--paper-font-headline_-_font-family);
-webkit-font-smoothing: var(
--paper-font-headline_-_-webkit-font-smoothing
);
font-size: var(--paper-font-headline_-_font-size);
font-weight: var(--paper-font-headline_-_font-weight);
letter-spacing: var(--paper-font-headline_-_letter-spacing);
line-height: var(--paper-font-headline_-_line-height);
opacity: var(--dark-primary-opacity);
}
.column,
.fullwidth {
padding: 8px;
box-sizing: border-box;
}
.column {
width: 33%;
flex-grow: 1;
}
.fullwidth {
width: 100%;
flex-grow: 1;
}
.header {
display: flex;
justify-content: space-between;
}
.header-right {
align-self: center;
}
.column,
.fullwidth {
padding: 8px;
box-sizing: border-box;
}
.column {
width: 33%;
flex-grow: 1;
}
.fullwidth {
width: 100%;
flex-grow: 1;
}
.header-right img {
height: 30px;
}
.header-right {
align-self: center;
}
.header-right {
display: flex;
}
.header-right img {
height: 30px;
}
.header-right:first-child {
width: 100%;
justify-content: flex-end;
}
.header-right {
display: flex;
}
.header-right > *:not(:first-child) {
margin-left: 16px;
}
.header-right:first-child {
width: 100%;
justify-content: flex-end;
}
.battery {
align-self: center;
align-items: center;
display: flex;
}
.header-right > *:not(:first-child) {
margin-left: 16px;
}
.column > *:not(:first-child) {
margin-top: 16px;
}
.battery {
align-self: center;
align-items: center;
display: flex;
}
:host([narrow]) .column {
width: 100%;
}
.column > *:not(:first-child) {
margin-top: 16px;
}
:host([narrow]) .container {
margin-top: 0;
}
:host([narrow]) .column {
width: 100%;
}
paper-item {
cursor: pointer;
font-size: var(--paper-font-body1_-_font-size);
}
:host([narrow]) .container {
margin-top: 0;
}
paper-item.no-link {
cursor: default;
}
paper-item {
cursor: pointer;
font-size: var(--paper-font-body1_-_font-size);
}
a {
text-decoration: none;
color: var(--primary-color);
}
paper-item.no-link {
cursor: default;
}
ha-card {
padding-bottom: 8px;
}
a {
text-decoration: none;
color: var(--primary-color);
}
ha-card a {
color: var(--primary-text-color);
}
`;
ha-card {
padding-bottom: 8px;
}
ha-card a {
color: var(--primary-text-color);
}
`,
];
}
}

View File

@@ -1,5 +1,9 @@
import { mdiPlus } from "@mdi/js";
import { mdiPlus, mdiFilterVariant, mdiCancel } from "@mdi/js";
import "@material/mwc-list/mwc-list-item";
import "@polymer/paper-tooltip/paper-tooltip";
import {
css,
CSSResult,
customElement,
html,
internalProperty,
@@ -7,7 +11,9 @@ import {
property,
TemplateResult,
} from "lit-element";
import { classMap } from "lit-html/directives/class-map";
import memoizeOne from "memoize-one";
import type { RequestSelectedDetail } from "@material/mwc-list/mwc-list-item";
import { HASSDomEvent } from "../../../common/dom/fire_event";
import { navigate } from "../../../common/navigate";
import { LocalizeFunc } from "../../../common/translations/localize";
@@ -18,6 +24,7 @@ import {
RowClickedEvent,
} from "../../../components/data-table/ha-data-table";
import "../../../components/entity/ha-battery-icon";
import "../../../components/ha-button-menu";
import { AreaRegistryEntry } from "../../../data/area_registry";
import { ConfigEntry } from "../../../data/config_entries";
import {
@@ -34,6 +41,7 @@ import { domainToName } from "../../../data/integration";
import "../../../layouts/hass-tabs-subpage-data-table";
import { HomeAssistant, Route } from "../../../types";
import { configSections } from "../ha-panel-config";
import { haStyle } from "../../../resources/styles";
interface DeviceRowData extends DeviceRegistryEntry {
device?: DeviceRowData;
@@ -64,6 +72,12 @@ export class HaConfigDeviceDashboard extends LitElement {
window.location.search
);
@internalProperty() private _showDisabled = false;
@internalProperty() private _filter = "";
@internalProperty() private _numHiddenDevices = 0;
private _activeFilters = memoizeOne(
(
entries: ConfigEntry[],
@@ -74,6 +88,10 @@ export class HaConfigDeviceDashboard extends LitElement {
filters.forEach((value, key) => {
switch (key) {
case "config_entry": {
// If we are requested to show the devices for a given config entry,
// also show the disabled ones by default.
this._showDisabled = true;
const configEntry = entries.find(
(entry) => entry.entry_id === value
);
@@ -105,6 +123,7 @@ export class HaConfigDeviceDashboard extends LitElement {
entities: EntityRegistryEntry[],
areas: AreaRegistryEntry[],
filters: URLSearchParams,
showDisabled: boolean,
localize: LocalizeFunc
) => {
// Some older installations might have devices pointing at invalid entryIDs
@@ -117,6 +136,9 @@ export class HaConfigDeviceDashboard extends LitElement {
deviceLookup[device.id] = device;
}
// If nothing gets filtered, this is our correct count of devices
let startLength = outputDevices.length;
const deviceEntityLookup: DeviceEntityLookup = {};
for (const entity of entities) {
if (!entity.device_id) {
@@ -145,6 +167,7 @@ export class HaConfigDeviceDashboard extends LitElement {
outputDevices = outputDevices.filter((device) =>
device.config_entries.includes(value)
);
startLength = outputDevices.length;
const configEntry = entries.find((entry) => entry.entry_id === value);
if (configEntry) {
filterDomains.push(configEntry.domain);
@@ -152,6 +175,10 @@ export class HaConfigDeviceDashboard extends LitElement {
}
});
if (!showDisabled) {
outputDevices = outputDevices.filter((device) => !device.disabled_by);
}
outputDevices = outputDevices.map((device) => {
return {
...device,
@@ -182,16 +209,19 @@ export class HaConfigDeviceDashboard extends LitElement {
};
});
this._numHiddenDevices = startLength - outputDevices.length;
return { devicesOutput: outputDevices, filteredDomains: filterDomains };
}
);
private _columns = memoizeOne(
(narrow: boolean): DataTableColumnContainer => {
(narrow: boolean, showDisabled: boolean): DataTableColumnContainer => {
const columns: DataTableColumnContainer = narrow
? {
name: {
title: "Device",
title: this.hass.localize(
"ui.panel.config.devices.data_table.device"
),
sortable: true,
filterable: true,
direction: "asc",
@@ -277,6 +307,24 @@ export class HaConfigDeviceDashboard extends LitElement {
: html` - `;
},
};
if (showDisabled) {
columns.disabled_by = {
title: "",
type: "icon",
template: (disabled_by) =>
disabled_by
? html`<div
tabindex="0"
style="display:inline-block; position: relative;"
>
<ha-svg-icon .path=${mdiCancel}></ha-svg-icon>
<paper-tooltip animation-delay="0" position="left">
${this.hass.localize("ui.panel.config.devices.disabled")}
</paper-tooltip>
</div>`
: "",
};
}
return columns;
}
);
@@ -298,9 +346,119 @@ export class HaConfigDeviceDashboard extends LitElement {
this.entities,
this.areas,
this._searchParms,
this._showDisabled,
this.hass.localize
);
const includeZHAFab = filteredDomains.includes("zha");
const activeFilters = this._activeFilters(
this.entries,
this._searchParms,
this.hass.localize
);
const headerToolbar = html`
<search-input
no-label-float
no-underline
@value-changed=${this._handleSearchChange}
.filter=${this._filter}
.label=${this.hass.localize("ui.panel.config.devices.picker.search")}
></search-input
>${activeFilters
? html`<div class="active-filters">
${this.narrow
? html` <div>
<ha-icon icon="hass:filter-variant"></ha-icon>
<paper-tooltip animation-delay="0" position="left">
${this.hass.localize(
"ui.panel.config.filtering.filtering_by"
)}
${activeFilters.join(", ")}
${this._numHiddenDevices
? "(" +
this.hass.localize(
"ui.panel.config.devices.picker.filter.hidden_devices",
"number",
this._numHiddenDevices
) +
")"
: ""}
</paper-tooltip>
</div>`
: `${this.hass.localize(
"ui.panel.config.filtering.filtering_by"
)} ${activeFilters.join(", ")}
${
this._numHiddenDevices
? "(" +
this.hass.localize(
"ui.panel.config.devices.picker.filter.hidden_devices",
"number",
this._numHiddenDevices
) +
")"
: ""
}
`}
<mwc-button @click=${this._clearFilter}
>${this.hass.localize(
"ui.panel.config.filtering.clear"
)}</mwc-button
>
</div>`
: ""}
${this._numHiddenDevices && !activeFilters
? html`<div class="active-filters">
${this.narrow
? html` <div>
<ha-icon icon="hass:filter-variant"></ha-icon>
<paper-tooltip animation-delay="0" position="left">
${this.hass.localize(
"ui.panel.config.devices.picker.filter.hidden_devices",
"number",
this._numHiddenDevices
)}
</paper-tooltip>
</div>`
: `${this.hass.localize(
"ui.panel.config.devices.picker.filter.hidden_devices",
"number",
this._numHiddenDevices
)}`}
<mwc-button @click=${this._showAll}
>${this.hass.localize(
"ui.panel.config.devices.picker.filter.show_all"
)}</mwc-button
>
</div>`
: ""}
<ha-button-menu corner="BOTTOM_START" multi>
<mwc-icon-button
slot="trigger"
.label=${this.hass!.localize(
"ui.panel.config.devices.picker.filter.filter"
)}
.title=${this.hass!.localize(
"ui.panel.config.devices.picker.filter.filter"
)}
>
<ha-svg-icon .path=${mdiFilterVariant}></ha-svg-icon>
</mwc-icon-button>
<mwc-list-item
@request-selected="${this._showDisabledChanged}"
graphic="control"
.selected=${this._showDisabled}
>
<ha-checkbox
slot="graphic"
.checked=${this._showDisabled}
></ha-checkbox>
${this.hass!.localize(
"ui.panel.config.devices.picker.filter.show_disabled"
)}
</mwc-list-item>
</ha-button-menu>
`;
return html`
<hass-tabs-subpage-data-table
@@ -311,13 +469,9 @@ export class HaConfigDeviceDashboard extends LitElement {
: "/config"}
.tabs=${configSections.integrations}
.route=${this.route}
.columns=${this._columns(this.narrow)}
.columns=${this._columns(this.narrow, this._showDisabled)}
.data=${devicesOutput}
.activeFilters=${this._activeFilters(
this.entries,
this._searchParms,
this.hass.localize
)}
.filter=${this._filter}
@row-click=${this._handleRowClicked}
clickable
.hasFab=${includeZHAFab}
@@ -333,6 +487,15 @@ export class HaConfigDeviceDashboard extends LitElement {
</ha-fab>
</a>`
: html``}
<div
class=${classMap({
"search-toolbar": this.narrow,
"table-header": !this.narrow,
})}
slot="header"
>
${headerToolbar}
</div>
</hass-tabs-subpage-data-table>
`;
}
@@ -363,6 +526,136 @@ export class HaConfigDeviceDashboard extends LitElement {
const deviceId = ev.detail.id;
navigate(this, `/config/devices/device/${deviceId}`);
}
private _showDisabledChanged(ev: CustomEvent<RequestSelectedDetail>) {
if (ev.detail.source !== "property") {
return;
}
this._showDisabled = ev.detail.selected;
}
private _handleSearchChange(ev: CustomEvent) {
this._filter = ev.detail.value;
}
private _clearFilter() {
navigate(this, window.location.pathname, true);
}
private _showAll() {
this._showDisabled = true;
}
static get styles(): CSSResult[] {
return [
haStyle,
css`
hass-loading-screen {
--app-header-background-color: var(--sidebar-background-color);
--app-header-text-color: var(--sidebar-text-color);
}
a {
color: var(--primary-color);
}
h2 {
margin-top: 0;
font-family: var(--paper-font-headline_-_font-family);
-webkit-font-smoothing: var(
--paper-font-headline_-_-webkit-font-smoothing
);
font-size: var(--paper-font-headline_-_font-size);
font-weight: var(--paper-font-headline_-_font-weight);
letter-spacing: var(--paper-font-headline_-_letter-spacing);
line-height: var(--paper-font-headline_-_line-height);
opacity: var(--dark-primary-opacity);
}
p {
font-family: var(--paper-font-subhead_-_font-family);
-webkit-font-smoothing: var(
--paper-font-subhead_-_-webkit-font-smoothing
);
font-weight: var(--paper-font-subhead_-_font-weight);
line-height: var(--paper-font-subhead_-_line-height);
}
ha-data-table {
width: 100%;
--data-table-border-width: 0;
}
:host(:not([narrow])) ha-data-table {
height: calc(100vh - 1px - var(--header-height));
display: block;
}
ha-button-menu {
margin-right: 8px;
}
.table-header {
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid rgba(var(--rgb-primary-text-color), 0.12);
}
search-input {
margin-left: 16px;
flex-grow: 1;
position: relative;
top: 2px;
}
.search-toolbar search-input {
margin-left: 8px;
top: 1px;
}
.search-toolbar {
display: flex;
justify-content: space-between;
align-items: center;
color: var(--secondary-text-color);
}
.search-toolbar ha-button-menu {
position: static;
}
.selected-txt {
font-weight: bold;
padding-left: 16px;
}
.table-header .selected-txt {
margin-top: 20px;
}
.search-toolbar .selected-txt {
font-size: 16px;
}
.header-btns > mwc-button,
.header-btns > ha-icon-button {
margin: 8px;
}
.active-filters {
color: var(--primary-text-color);
position: relative;
display: flex;
align-items: center;
padding: 2px 2px 2px 8px;
margin-left: 4px;
font-size: 14px;
}
.active-filters ha-icon {
color: var(--primary-color);
}
.active-filters mwc-button {
margin-left: 8px;
}
.active-filters::before {
background-color: var(--primary-color);
opacity: 0.12;
border-radius: 4px;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
content: "";
}
`,
];
}
}
declare global {

View File

@@ -111,10 +111,19 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) {
return html`
${!stateObj
? html`
<div class="container">
<div class="container warning">
${this.hass!.localize(
"ui.dialogs.entity_registry.editor.unavailable"
)}
${this._device?.disabled_by
? html`<br />${this.hass!.localize(
"ui.dialogs.entity_registry.editor.device_disabled"
)}<br /><mwc-button @click=${this._openDeviceSettings}>
${this.hass!.localize(
"ui.dialogs.entity_registry.editor.open_device_settings"
)}
</mwc-button>`
: ""}
</div>
`
: ""}
@@ -161,6 +170,7 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) {
<div class="row">
<ha-switch
.checked=${!this._disabledBy}
.disabled=${this._device?.disabled_by}
@change=${this._disabledByChanged}
>
</ha-switch>

View File

@@ -189,9 +189,11 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) {
? (name, entity: any) =>
html`
${name}<br />
${entity.entity_id} |
${this.hass.localize(`component.${entity.platform}.title`) ||
entity.platform}
<div class="secondary">
${entity.entity_id} |
${this.hass.localize(`component.${entity.platform}.title`) ||
entity.platform}
</div>
`
: undefined,
},

View File

@@ -5,6 +5,8 @@ import { classMap } from "lit-html/directives/class-map";
export class HaConfigSection extends LitElement {
@property() public isWide = false;
@property({ type: Boolean }) public vertical = false;
protected render() {
return html`
<div
@@ -16,8 +18,8 @@ export class HaConfigSection extends LitElement {
<div
class="together layout ${classMap({
narrow: !this.isWide,
vertical: !this.isWide,
horizontal: this.isWide,
vertical: this.vertical || !this.isWide,
horizontal: !this.vertical && this.isWide,
})}"
>
<div class="intro"><slot name="introduction"></slot></div>

View File

@@ -148,7 +148,7 @@ export class HaConfigHelpers extends LitElement {
.narrow=${this.narrow}
back-path="/config"
.route=${this.route}
.tabs=${configSections.automation}
.tabs=${configSections.helpers}
.columns=${this._columns(this.narrow, this.hass.language)}
.data=${this._getItems(this._stateItems)}
@row-click=${this._openEditDialog}

View File

@@ -68,6 +68,8 @@ class DialogPersonDetail extends LitElement {
@internalProperty() private _submitting = false;
@internalProperty() private _personExists = false;
private _deviceTrackersAvailable = memoizeOne((hass) => {
return Object.keys(hass.states).some(
(entityId) =>
@@ -79,6 +81,7 @@ class DialogPersonDetail extends LitElement {
this._params = params;
this._error = undefined;
if (this._params.entry) {
this._personExists = true;
this._name = this._params.entry.name || "";
this._userId = this._params.entry.user_id || undefined;
this._deviceTrackers = this._params.entry.device_trackers || [];
@@ -88,6 +91,7 @@ class DialogPersonDetail extends LitElement {
: undefined;
this._isAdmin = this._user?.group_ids.includes(SYSTEM_GROUP_ID_ADMIN);
} else {
this._personExists = false;
this._name = "";
this._userId = undefined;
this._user = undefined;
@@ -398,6 +402,7 @@ class DialogPersonDetail extends LitElement {
await this._params!.updateEntry(values);
} else {
await this._params!.createEntry(values);
this._personExists = true;
}
this._params = undefined;
} catch (err) {
@@ -422,6 +427,14 @@ class DialogPersonDetail extends LitElement {
}
private _close(): void {
// If we do not have a person ID yet (= person creation dialog was just cancelled), but
// we already created a user ID for it, delete it now to not have it "free floating".
if (!this._personExists && this._userId) {
deleteUser(this.hass, this._userId);
this._params?.refreshUsers();
this._userId = undefined;
}
this._params = undefined;
}

View File

@@ -35,6 +35,7 @@ import "../../../components/ha-icon-input";
import "../../../components/ha-svg-icon";
import "../../../components/ha-yaml-editor";
import type { HaYamlEditor } from "../../../components/ha-yaml-editor";
import { copyToClipboard } from "../../../common/util/copy-clipboard";
import {
Action,
deleteScript,
@@ -545,7 +546,7 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
private async _copyYaml() {
if (this._editor?.yaml) {
navigator.clipboard.writeText(this._editor.yaml);
copyToClipboard(this._editor.yaml);
}
}

View File

@@ -84,7 +84,7 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
${tag.last_scanned_datetime
? html`<ha-relative-time
.hass=${this.hass}
.datetimeObj=${tag.last_scanned_datetime}
.datetime=${tag.last_scanned_datetime}
></ha-relative-time>`
: this.hass.localize("ui.panel.config.tags.never_scanned")}
</div>`
@@ -103,7 +103,7 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
${last_scanned_datetime
? html`<ha-relative-time
.hass=${this.hass}
.datetimeObj=${last_scanned_datetime}
.datetime=${last_scanned_datetime}
></ha-relative-time>`
: this.hass.localize("ui.panel.config.tags.never_scanned")}
`,

View File

@@ -241,7 +241,7 @@ export class DialogAddUser extends LitElement {
user = userResponse.user;
} catch (err) {
this._loading = false;
this._error = err.code;
this._error = err.message;
return;
}
@@ -255,7 +255,7 @@ export class DialogAddUser extends LitElement {
} catch (err) {
await deleteUser(this.hass, user.id);
this._loading = false;
this._error = err.code;
this._error = err.message;
return;
}

View File

@@ -13,6 +13,7 @@ import {
} from "lit-element";
import { computeRTLDirection } from "../../../common/util/compute_rtl";
import { createCloseHeading } from "../../../components/ha-dialog";
import "../../../components/ha-help-tooltip";
import "../../../components/ha-formfield";
import "../../../components/ha-switch";
import { adminChangePassword } from "../../../data/auth";
@@ -37,6 +38,8 @@ class DialogUserDetail extends LitElement {
@internalProperty() private _isAdmin?: boolean;
@internalProperty() private _isActive?: boolean;
@internalProperty() private _error?: string;
@internalProperty() private _params?: UserDetailDialogParams;
@@ -48,6 +51,7 @@ class DialogUserDetail extends LitElement {
this._error = undefined;
this._name = params.entry.name || "";
this._isAdmin = params.entry.group_ids.includes(SYSTEM_GROUP_ID_ADMIN);
this._isActive = params.entry.is_active;
await this.updateComplete;
}
@@ -91,15 +95,6 @@ class DialogUserDetail extends LitElement {
</span>
`
: ""}
${user.is_active
? html`
<span class="state"
>${this.hass.localize(
"ui.panel.config.users.editor.active"
)}</span
>
`
: ""}
</div>
<div class="form">
<paper-input
@@ -110,17 +105,21 @@ class DialogUserDetail extends LitElement {
"ui.panel.config.users.editor.name"
)}"
></paper-input>
<ha-formfield
.label=${this.hass.localize("ui.panel.config.users.editor.admin")}
.dir=${computeRTLDirection(this.hass)}
>
<ha-switch
.disabled=${user.system_generated || user.is_owner}
.checked=${this._isAdmin}
@change=${this._adminChanged}
<div class="row">
<ha-formfield
.label=${this.hass.localize(
"ui.panel.config.users.editor.admin"
)}
.dir=${computeRTLDirection(this.hass)}
>
</ha-switch>
</ha-formfield>
<ha-switch
.disabled=${user.system_generated || user.is_owner}
.checked=${this._isAdmin}
@change=${this._adminChanged}
>
</ha-switch>
</ha-formfield>
</div>
${!this._isAdmin
? html`
<br />
@@ -129,6 +128,27 @@ class DialogUserDetail extends LitElement {
)}
`
: ""}
<div class="row">
<ha-formfield
.label=${this.hass.localize(
"ui.panel.config.users.editor.active"
)}
.dir=${computeRTLDirection(this.hass)}
>
<ha-switch
.disabled=${user.system_generated || user.is_owner}
.checked=${this._isActive}
@change=${this._activeChanged}
>
</ha-switch>
</ha-formfield>
<ha-help-tooltip
.label=${this.hass.localize(
"ui.panel.config.users.editor.active_tooltip"
)}
>
</ha-help-tooltip>
</div>
</div>
</div>
@@ -192,11 +212,16 @@ class DialogUserDetail extends LitElement {
this._isAdmin = ev.target.checked;
}
private async _activeChanged(ev): Promise<void> {
this._isActive = ev.target.checked;
}
private async _updateEntry() {
this._submitting = true;
try {
await this._params!.updateEntry({
name: this._name.trim(),
is_active: this._isActive,
group_ids: [
this._isAdmin ? SYSTEM_GROUP_ID_ADMIN : SYSTEM_GROUP_ID_USER,
],
@@ -293,8 +318,13 @@ class DialogUserDetail extends LitElement {
.state:not(:first-child) {
margin-left: 8px;
}
ha-switch {
margin-top: 8px;
.row {
display: flex;
padding: 8px 0;
}
ha-help-tooltip {
margin-left: 4px;
position: relative;
}
`,
];

View File

@@ -46,10 +46,17 @@ export class HaConfigUsers extends LitElement {
width: "25%",
direction: "asc",
grows: true,
template: (name) => html`
${name ||
this.hass!.localize("ui.panel.config.users.editor.unnamed_user")}
`,
template: (name, user: any) =>
narrow
? html` ${name}<br />
<div class="secondary">
${user.username} |
${this.hass.localize(`groups.${user.group_ids[0]}`)}
</div>`
: html` ${name ||
this.hass!.localize(
"ui.panel.config.users.editor.unnamed_user"
)}`,
},
username: {
title: this.hass.localize(
@@ -59,6 +66,7 @@ export class HaConfigUsers extends LitElement {
filterable: true,
width: "20%",
direction: "asc",
hidden: narrow,
template: (username) => html`
${username ||
this.hass!.localize("ui.panel.config.users.editor.unnamed_user")}
@@ -71,13 +79,24 @@ export class HaConfigUsers extends LitElement {
sortable: true,
filterable: true,
width: "20%",
direction: "asc",
hidden: narrow,
template: (groupIds) => html`
${this.hass.localize(`groups.${groupIds[0]}`)}
`,
},
};
if (!narrow) {
columns.system_generated = {
is_active: {
title: this.hass.localize(
"ui.panel.config.users.picker.headers.is_active"
),
type: "icon",
sortable: true,
filterable: true,
width: "80px",
template: (is_active) =>
is_active ? html`<ha-icon icon="hass:check"> </ha-icon>` : "",
},
system_generated: {
title: this.hass.localize(
"ui.panel.config.users.picker.headers.system"
),
@@ -87,8 +106,9 @@ export class HaConfigUsers extends LitElement {
width: "160px",
template: (generated) =>
generated ? html`<ha-icon icon="hass:check"> </ha-icon>` : "",
};
}
},
};
return columns;
}
);

View File

@@ -84,9 +84,6 @@ export class HuiButtonCard extends LitElement implements LovelaceCard {
}
public setConfig(config: ButtonCardConfig): void {
if (!config.entity) {
throw new Error("Entity must be specified");
}
if (config.entity && !isValidEntityId(config.entity)) {
throw new Error("Invalid entity");
}

View File

@@ -109,7 +109,7 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard {
}
public setConfig(config: EntitiesCardConfig): void {
if (!config || !config.entities.length) {
if (!config.entities || !Array.isArray(config.entities)) {
throw new Error("Entities must be specified");
}

View File

@@ -2,7 +2,14 @@ import { customElement } from "lit-element";
import { HuiButtonCard } from "./hui-button-card";
@customElement("hui-entity-button-card")
class HuiEntityButtonCard extends HuiButtonCard {}
class HuiEntityButtonCard extends HuiButtonCard {
public setConfig(config): void {
if (!config.entity) {
throw new Error("Entity must be specified");
}
super.setConfig(config);
}
}
declare global {
interface HTMLElementTagNameMap {

View File

@@ -16,7 +16,6 @@ import "../../../components/state-history-charts";
import { CacheConfig, getRecentWithCache } from "../../../data/cached-history";
import { HistoryResult } from "../../../data/history";
import { HomeAssistant } from "../../../types";
import { findEntities } from "../common/find-entites";
import { hasConfigOrEntitiesChanged } from "../common/has-changed";
import { processConfigEntities } from "../common/process-config-entities";
import { EntityConfig } from "../entity-rows/types";
@@ -30,22 +29,9 @@ export class HuiHistoryGraphCard extends LitElement implements LovelaceCard {
return document.createElement("hui-history-graph-card-editor");
}
public static getStubConfig(
hass: HomeAssistant,
entities: string[],
entitiesFallback: string[]
): HistoryGraphCardConfig {
const includeDomains = ["sensor"];
const maxEntities = 1;
const foundEntities = findEntities(
hass,
maxEntities,
entities,
entitiesFallback,
includeDomains
);
return { type: "history-graph", entities: foundEntities };
public static getStubConfig(): HistoryGraphCardConfig {
// Hard coded to sun.sun to prevent high server load when it would pick an entity with a lot of state changes
return { type: "history-graph", entities: ["sun.sun"] };
}
@property({ attribute: false }) public hass?: HomeAssistant;
@@ -71,12 +57,12 @@ export class HuiHistoryGraphCard extends LitElement implements LovelaceCard {
}
public setConfig(config: HistoryGraphCardConfig): void {
if (!config.entities.length) {
throw new Error("Entities must be specified");
if (!config.entities || !Array.isArray(config.entities)) {
throw new Error("Entities need to be an array");
}
if (config.entities && !Array.isArray(config.entities)) {
throw new Error("Entities need to be an array");
if (!config.entities.length) {
throw new Error("You must include at least one entity");
}
this._config = config;

View File

@@ -29,7 +29,7 @@ class HuiHorizontalStackCard extends HuiStackCard {
}
#root > * {
flex: 1 1 0;
margin: 0 4px;
margin: var(--horizontal-stack-card-margin, var(--stack-card-margin, 0 4px));
min-width: 0;
}
#root > *:first-child {

View File

@@ -246,78 +246,73 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
${!isUnavailable &&
(mediaDescription || stateObj.attributes.media_title || showControls)
? html`
<div
class="title-controls"
style=${styleMap({
paddingRight: isOffState
? "0"
: `${this._cardHeight - 40}px`,
})}
>
${!mediaDescription && !stateObj.attributes.media_title
? ""
: html`
<div class="media-info">
<hui-marquee
.text=${stateObj.attributes.media_title ||
mediaDescription}
.active=${this._marqueeActive}
@mouseover=${this._marqueeMouseOver}
@mouseleave=${this._marqueeMouseLeave}
></hui-marquee>
${!stateObj.attributes.media_title
? ""
: mediaDescription}
</div>
`}
${!showControls
? ""
: html`
<div class="controls">
${controls!.map(
(control) => html`
<ha-icon-button
.title=${this.hass.localize(
`ui.card.media_player.${control.action}`
)}
.icon=${control.icon}
action=${control.action}
@click=${this._handleClick}
></ha-icon-button>
`
)}
${supportsFeature(stateObj, SUPPORT_BROWSE_MEDIA)
? html`
<mwc-icon-button
class="browse-media"
<div>
<div class="title-controls">
${!mediaDescription && !stateObj.attributes.media_title
? ""
: html`
<div class="media-info">
<hui-marquee
.text=${stateObj.attributes.media_title ||
mediaDescription}
.active=${this._marqueeActive}
@mouseover=${this._marqueeMouseOver}
@mouseleave=${this._marqueeMouseLeave}
></hui-marquee>
${!stateObj.attributes.media_title
? ""
: mediaDescription}
</div>
`}
${!showControls
? ""
: html`
<div class="controls">
${controls!.map(
(control) => html`
<ha-icon-button
.title=${this.hass.localize(
"ui.card.media_player.browse_media"
`ui.card.media_player.${control.action}`
)}
@click=${this._handleBrowseMedia}
><ha-svg-icon
.path=${mdiPlayBoxMultiple}
></ha-svg-icon
></mwc-icon-button>
.icon=${control.icon}
action=${control.action}
@click=${this._handleClick}
></ha-icon-button>
`
: ""}
</div>
)}
${supportsFeature(stateObj, SUPPORT_BROWSE_MEDIA)
? html`
<mwc-icon-button
class="browse-media"
.title=${this.hass.localize(
"ui.card.media_player.browse_media"
)}
@click=${this._handleBrowseMedia}
><ha-svg-icon
.path=${mdiPlayBoxMultiple}
></ha-svg-icon
></mwc-icon-button>
`
: ""}
</div>
`}
</div>
${!this._showProgressBar
? ""
: html`
<paper-progress
.max=${stateObj.attributes.media_duration}
style=${styleMap({
"--paper-progress-active-color":
this._foregroundColor || "var(--accent-color)",
cursor: supportsFeature(stateObj, SUPPORT_SEEK)
? "pointer"
: "initial",
})}
@click=${this._handleSeek}
></paper-progress>
`}
</div>
${!this._showProgressBar
? ""
: html`
<paper-progress
.max=${stateObj.attributes.media_duration}
style=${styleMap({
"--paper-progress-active-color":
this._foregroundColor || "var(--accent-color)",
cursor: supportsFeature(stateObj, SUPPORT_SEEK)
? "pointer"
: "initial",
})}
@click=${this._handleSeek}
></paper-progress>
`}
`
: ""}
</div>
@@ -635,6 +630,11 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
.player {
position: relative;
padding: 16px;
height: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: space-between;
color: var(--text-primary-color);
transition-property: color, padding;
transition-duration: 0.4s;
@@ -671,7 +671,7 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
mwc-icon-button.browse-media {
position: absolute;
right: 0;
right: 4px;
--mdc-icon-size: 24px;
}
@@ -693,7 +693,7 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
.more-info {
position: absolute;
top: 4px;
right: 0px;
right: 4px;
}
.media-info {

View File

@@ -29,7 +29,7 @@ class HuiVerticalStackCard extends HuiStackCard {
height: 100%;
}
#root > * {
margin: 4px 0 4px 0;
margin: var(--vertical-stack-card-margin, var(--stack-card-margin, 4px 0));
}
#root > *:first-child {
margin-top: 0;

View File

@@ -1,7 +1,8 @@
import "@material/mwc-button";
import "@material/mwc-list/mwc-list-item";
import "@material/mwc-icon-button";
import "../../../components/ha-button-menu";
import { ActionDetail } from "@material/mwc-list/mwc-list-foundation";
import "@material/mwc-list/mwc-list-item";
import { mdiArrowDown, mdiArrowUp, mdiDotsVertical } from "@mdi/js";
import {
css,
CSSResult,
@@ -9,21 +10,20 @@ import {
html,
LitElement,
property,
TemplateResult,
queryAssignedNodes,
TemplateResult,
} from "lit-element";
import { HomeAssistant } from "../../../types";
import { showEditCardDialog } from "../editor/card-editor/show-edit-card-dialog";
import { swapCard, moveCard, addCard, deleteCard } from "../editor/config-util";
import { confDeleteCard } from "../editor/delete-card";
import { Lovelace, LovelaceCard } from "../types";
import { computeCardSize } from "../common/compute-card-size";
import { mdiDotsVertical, mdiArrowDown, mdiArrowUp } from "@mdi/js";
import { ActionDetail } from "@material/mwc-list/mwc-list-foundation";
import { showSelectViewDialog } from "../editor/select-view/show-select-view-dialog";
import { fireEvent } from "../../../common/dom/fire_event";
import "../../../components/ha-button-menu";
import { saveConfig } from "../../../data/lovelace";
import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box";
import { HomeAssistant } from "../../../types";
import { showSaveSuccessToast } from "../../../util/toast-saved-success";
import { computeCardSize } from "../common/compute-card-size";
import { showEditCardDialog } from "../editor/card-editor/show-edit-card-dialog";
import { addCard, deleteCard, moveCard, swapCard } from "../editor/config-util";
import { showSelectViewDialog } from "../editor/select-view/show-select-view-dialog";
import { Lovelace, LovelaceCard } from "../types";
@customElement("hui-card-options")
export class HuiCardOptions extends LitElement {
@@ -168,11 +168,7 @@ export class HuiCardOptions extends LitElement {
}
private _editCard(): void {
showEditCardDialog(this, {
lovelaceConfig: this.lovelace!.config,
saveConfig: this.lovelace!.saveConfig,
path: this.path!,
});
fireEvent(this, "ll-edit-card", { path: this.path! });
}
private _cardUp(): void {
@@ -229,7 +225,7 @@ export class HuiCardOptions extends LitElement {
}
private _deleteCard(): void {
confDeleteCard(this, this.hass!, this.lovelace!, this.path!);
fireEvent(this, "ll-delete-card", { path: this.path! });
}
}

View File

@@ -72,7 +72,7 @@ class HuiMarquee extends LitElement {
display: flex;
position: relative;
align-items: center;
height: 1em;
height: 1.2em;
contain: strict;
}

View File

@@ -59,6 +59,9 @@ export class HuiThemeSelectEditor extends LitElement {
paper-dropdown-menu {
width: 100%;
}
paper-item {
cursor: pointer;
}
`;
}

View File

@@ -353,11 +353,9 @@ export class HuiCardPicker extends LitElement {
max-width: 500px;
display: flex;
flex-direction: column;
border-radius: 4px;
border: 1px solid var(--divider-color);
border-radius: var(--ha-card-border-radius, 4px);
background: var(--primary-background-color, #fafafa);
cursor: pointer;
box-sizing: border-box;
position: relative;
}
@@ -375,7 +373,6 @@ export class HuiCardPicker extends LitElement {
--ha-card-background,
var(--card-background-color, white)
);
border-radius: 0 0 4px 4px;
border-bottom: 1px solid var(--divider-color);
}
@@ -408,6 +405,10 @@ export class HuiCardPicker extends LitElement {
width: 100%;
height: 100%;
z-index: 1;
box-sizing: border-box;
border: var(--ha-card-border-width, 1px) solid
var(--ha-card-border-color, var(--divider-color));
border-radius: var(--ha-card-border-radius, 4px);
}
.manual {

View File

@@ -450,6 +450,10 @@ export class HuiDialogEditCard extends LitElement
}
.element-preview {
position: relative;
height: max-content;
background: var(--primary-background-color);
padding: 4px;
border-radius: 4px;
}
.element-preview ha-circular-progress {
top: 50%;

View File

@@ -8,7 +8,7 @@ export interface CreateCardDialogParams {
entities?: string[]; // We can pass entity id's that will be added to the config when a card is picked
}
const importCreateCardDialog = () => import("./hui-dialog-create-card");
export const importCreateCardDialog = () => import("./hui-dialog-create-card");
export const showCreateCardDialog = (
element: HTMLElement,

View File

@@ -6,7 +6,7 @@ export interface DeleteCardDialogParams {
cardConfig?: LovelaceCardConfig;
}
const importDeleteCardDialog = () => import("./hui-dialog-delete-card");
export const importDeleteCardDialog = () => import("./hui-dialog-delete-card");
export const showDeleteCardDialog = (
element: HTMLElement,

View File

@@ -8,7 +8,7 @@ export interface EditCardDialogParams {
cardConfig?: LovelaceCardConfig;
}
const importEditCardDialog = () => import("./hui-dialog-edit-card");
export const importEditCardDialog = () => import("./hui-dialog-edit-card");
export const showEditCardDialog = (
element: HTMLElement,

View File

@@ -793,10 +793,6 @@ class HUIRoot extends LitElement {
ha-app-layout {
min-height: 100%;
background: var(
--lovelace-background,
var(--primary-background-color)
);
}
ha-tabs {
width: 100%;
@@ -884,6 +880,12 @@ class HUIRoot extends LitElement {
.menu-link {
text-decoration: none;
}
hui-view {
background: var(
--lovelace-background,
var(--primary-background-color)
);
}
`,
];
}

View File

@@ -1,3 +1,10 @@
// hui-view dependencies for when in edit mode.
import "../../../components/ha-fab";
import "../components/hui-card-options";
import { importCreateCardDialog } from "../editor/card-editor/show-create-card-dialog";
import { importDeleteCardDialog } from "../editor/card-editor/show-delete-card-dialog";
import { importEditCardDialog } from "../editor/card-editor/show-edit-card-dialog";
importCreateCardDialog();
importDeleteCardDialog();
importEditCardDialog();

View File

@@ -10,6 +10,7 @@ import {
TemplateResult,
} from "lit-element";
import { classMap } from "lit-html/directives/class-map";
import { fireEvent } from "../../../common/dom/fire_event";
import { computeRTL } from "../../../common/util/compute_rtl";
import { nextRender } from "../../../common/util/render-status";
import "../../../components/entity/ha-state-label-badge";
@@ -21,7 +22,6 @@ import type {
import type { HomeAssistant } from "../../../types";
import type { HuiErrorCard } from "../cards/hui-error-card";
import { computeCardSize } from "../common/compute-card-size";
import { showCreateCardDialog } from "../editor/card-editor/show-create-card-dialog";
import type { Lovelace, LovelaceBadge, LovelaceCard } from "../types";
let editCodeLoaded = false;
@@ -148,11 +148,7 @@ export class MasonryView extends LitElement implements LovelaceViewElement {
}
private _addCard(): void {
showCreateCardDialog(this, {
lovelaceConfig: this.lovelace!.config,
saveConfig: this.lovelace!.saveConfig,
path: [this.index!],
});
fireEvent(this, "ll-create-card");
}
private async _createColumns() {
@@ -293,7 +289,7 @@ export class MasonryView extends LitElement implements LovelaceViewElement {
.column > * {
display: block;
margin: 4px 4px 8px;
margin: var(--masonry-view-card-margin, 4px 4px 8px);
}
ha-fab {

View File

@@ -20,11 +20,23 @@ import { processConfigEntities } from "../common/process-config-entities";
import { createBadgeElement } from "../create-element/create-badge-element";
import { createCardElement } from "../create-element/create-card-element";
import { createViewElement } from "../create-element/create-view-element";
import { showCreateCardDialog } from "../editor/card-editor/show-create-card-dialog";
import { showEditCardDialog } from "../editor/card-editor/show-edit-card-dialog";
import { confDeleteCard } from "../editor/delete-card";
import type { Lovelace, LovelaceBadge, LovelaceCard } from "../types";
const DEFAULT_VIEW_LAYOUT = "masonry";
const PANEL_VIEW_LAYOUT = "panel";
declare global {
// for fire event
interface HASSDomEvents {
"ll-create-card": undefined;
"ll-edit-card": { path: [number] | [number, number] };
"ll-delete-card": { path: [number] | [number, number] };
}
}
@customElement("hui-view")
export class HUIView extends UpdatingElement {
@property({ attribute: false }) public hass?: HomeAssistant;
@@ -106,6 +118,23 @@ export class HUIView extends UpdatingElement {
if (configChanged && !this._layoutElement) {
this._layoutElement = createViewElement(viewConfig!);
this._layoutElement.addEventListener("ll-create-card", () => {
showCreateCardDialog(this, {
lovelaceConfig: this.lovelace!.config,
saveConfig: this.lovelace!.saveConfig,
path: [this.index!],
});
});
this._layoutElement.addEventListener("ll-edit-card", (ev) => {
showEditCardDialog(this, {
lovelaceConfig: this.lovelace!.config,
saveConfig: this.lovelace!.saveConfig,
path: ev.detail.path,
});
});
this._layoutElement.addEventListener("ll-delete-card", (ev) => {
confDeleteCard(this, this.hass!, this.lovelace!, ev.detail.path);
});
}
if (configChanged) {

View File

@@ -1,154 +0,0 @@
import "@material/mwc-button";
import "@polymer/paper-dialog/paper-dialog";
import "../../components/ha-circular-progress";
import { html } from "@polymer/polymer/lib/utils/html-tag";
/* eslint-plugin-disable lit */
import { PolymerElement } from "@polymer/polymer/polymer-element";
import "../../components/ha-card";
import LocalizeMixin from "../../mixins/localize-mixin";
import "../../styles/polymer-ha-style";
/*
* @appliesMixin LocalizeMixin
*/
class HaChangePasswordCard extends LocalizeMixin(PolymerElement) {
static get template() {
return html`
<style include="ha-style">
.error {
color: red;
}
.status {
color: var(--primary-color);
}
.error,
.status {
position: absolute;
top: -4px;
}
.currentPassword {
margin-top: -4px;
}
</style>
<div>
<ha-card
header="[[localize('ui.panel.profile.change_password.header')]]"
>
<div class="card-content">
<template is="dom-if" if="[[_errorMsg]]">
<div class="error">[[_errorMsg]]</div>
</template>
<template is="dom-if" if="[[_statusMsg]]">
<div class="status">[[_statusMsg]]</div>
</template>
<paper-input
class="currentPassword"
label="[[localize('ui.panel.profile.change_password.current_password')]]"
type="password"
value="{{_currentPassword}}"
required
auto-validate
error-message="[[localize('ui.panel.profile.change_password.error_required')]]"
></paper-input>
<template is="dom-if" if="[[_currentPassword]]">
<paper-input
label="[[localize('ui.panel.profile.change_password.new_password')]]"
type="password"
value="{{_password1}}"
required
auto-validate
error-message="[[localize('ui.panel.profile.change_password.error_required')]]"
></paper-input>
<paper-input
label="[[localize('ui.panel.profile.change_password.confirm_new_password')]]"
type="password"
value="{{_password2}}"
required
auto-validate
error-message="[[localize('ui.panel.profile.change_password.error_required')]]"
></paper-input>
</template>
</div>
<div class="card-actions">
<template is="dom-if" if="[[_loading]]">
<div><ha-circular-progress active></ha-circular-progress></div>
</template>
<template is="dom-if" if="[[!_loading]]">
<mwc-button on-click="_changePassword"
>[[localize('ui.panel.profile.change_password.submit')]]</mwc-button
>
</template>
</div>
</ha-card>
</div>
`;
}
static get properties() {
return {
hass: Object,
_loading: {
type: Boolean,
value: false,
},
// Error message when can't talk to server etc
_statusMsg: String,
_errorMsg: String,
_currentPassword: String,
_password1: String,
_password2: String,
};
}
ready() {
super.ready();
this.addEventListener("keypress", (ev) => {
this._statusMsg = null;
if (ev.keyCode === 13) {
this._changePassword();
}
});
}
async _changePassword() {
this._statusMsg = null;
if (!this._currentPassword || !this._password1 || !this._password2) return;
if (this._password1 !== this._password2) {
this._errorMsg = "New password confirmation doesn't match";
return;
}
if (this._currentPassword === this._password1) {
this._errorMsg = "New password must be different than current password";
return;
}
this._loading = true;
this._errorMsg = null;
try {
await this.hass.callWS({
type: "config/auth_provider/homeassistant/change_password",
current_password: this._currentPassword,
new_password: this._password1,
});
this.setProperties({
_statusMsg: "Password changed successfully",
_currentPassword: null,
_password1: null,
_password2: null,
});
} catch (err) {
this._errorMsg = err.message;
}
this._loading = false;
}
}
customElements.define("ha-change-password-card", HaChangePasswordCard);

View File

@@ -0,0 +1,195 @@
import "@polymer/paper-input/paper-input";
import "@polymer/paper-dialog/paper-dialog";
import {
css,
CSSResult,
customElement,
html,
internalProperty,
LitElement,
property,
PropertyValues,
TemplateResult,
} from "lit-element";
import "@material/mwc-button";
import "../../components/ha-circular-progress";
import "../../components/ha-card";
import { haStyle } from "../../resources/styles";
import type { HomeAssistant } from "../../types";
@customElement("ha-change-password-card")
class HaChangePasswordCard extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@internalProperty() private _loading = false;
@internalProperty() private _statusMsg?: string;
@internalProperty() private _errorMsg?: string;
@internalProperty() private _currentPassword?: string;
@internalProperty() private _password?: string;
@internalProperty() private _passwordConfirm?: string;
protected render(): TemplateResult {
return html`
<div>
<ha-card
.header=${this.hass.localize(
"ui.panel.profile.change_password.header"
)}
>
<div class="card-content">
${this._errorMsg
? html` <div class="error">${this._errorMsg}</div> `
: ""}
${this._statusMsg
? html` <div class="status">${this._statusMsg}</div> `
: ""}
<paper-input
id="currentPassword"
.label=${this.hass.localize(
"ui.panel.profile.change_password.current_password"
)}
type="password"
.value=${this._currentPassword}
@value-changed=${this._currentPasswordChanged}
required
></paper-input>
${this._currentPassword
? html` <paper-input
.label=${this.hass.localize(
"ui.panel.profile.change_password.new_password"
)}
name="password"
type="password"
.value=${this._password}
@value-changed=${this._newPasswordChanged}
required
auto-validate
></paper-input>
<paper-input
.label=${this.hass.localize(
"ui.panel.profile.change_password.confirm_new_password"
)}
name="passwordConfirm"
type="password"
.value=${this._passwordConfirm}
@value-changed=${this._newPasswordConfirmChanged}
required
auto-validate
></paper-input>`
: ""}
</div>
<div class="card-actions">
${this._loading
? html`<div>
<ha-circular-progress active></ha-circular-progress>
</div>`
: html`<mwc-button
@click=${this._changePassword}
.disabled=${!this._passwordConfirm}
>${this.hass.localize(
"ui.panel.profile.change_password.submit"
)}</mwc-button
>`}
</div>
</ha-card>
</div>
`;
}
private _currentPasswordChanged(ev: CustomEvent) {
this._currentPassword = ev.detail.value;
}
private _newPasswordChanged(ev: CustomEvent) {
this._password = ev.detail.value;
}
private _newPasswordConfirmChanged(ev: CustomEvent) {
this._passwordConfirm = ev.detail.value;
}
protected firstUpdated(changedProps: PropertyValues) {
super.firstUpdated(changedProps);
this.addEventListener("keypress", (ev) => {
this._statusMsg = undefined;
if (ev.keyCode === 13) {
this._changePassword();
}
});
}
private async _changePassword() {
this._statusMsg = undefined;
if (!this._currentPassword || !this._password || !this._passwordConfirm) {
return;
}
if (this._password !== this._passwordConfirm) {
this._errorMsg = this.hass.localize(
"ui.panel.profile.change_password.error_new_mismatch"
);
return;
}
if (this._currentPassword === this._password) {
this._errorMsg = this.hass.localize(
"ui.panel.profile.change_password.error_new_is_old"
);
return;
}
this._loading = true;
this._errorMsg = undefined;
try {
await this.hass.callWS({
type: "config/auth_provider/homeassistant/change_password",
current_password: this._currentPassword,
new_password: this._password,
});
} catch (err) {
this._errorMsg = err.message;
return;
} finally {
this._loading = false;
}
this._statusMsg = this.hass.localize(
"ui.panel.profile.change_password.success"
);
this._currentPassword = undefined;
this._password = undefined;
this._passwordConfirm = undefined;
}
static get styles(): CSSResult[] {
return [
haStyle,
css`
.error {
color: var(--error-color);
}
.status {
color: var(--primary-color);
}
#currentPassword {
margin-top: -8px;
}
`,
];
}
}
declare global {
interface HTMLElementTagNameMap {
"ha-change-password-card": HaChangePasswordCard;
}
}

View File

@@ -25,7 +25,7 @@ class HaPushNotificationsRow extends LocalizeMixin(PolymerElement) {
>[[localize('ui.panel.profile.push_notifications.header')]]</span
>
<span slot="description">
[[_description(_platformLoaded, _pushSupported)]]
[[localize(_descrLocalizeKey)]]
<a
href="[[_computeDocumentationUrl(hass)]]"
target="_blank"
@@ -45,6 +45,10 @@ class HaPushNotificationsRow extends LocalizeMixin(PolymerElement) {
return {
hass: Object,
narrow: Boolean,
_descrLocalizeKey: {
type: String,
computed: "_descriptionKey(_platformLoaded, _pushSupported)",
},
_platformLoaded: {
type: Boolean,
computed: "_compPlatformLoaded(hass)",
@@ -72,7 +76,7 @@ class HaPushNotificationsRow extends LocalizeMixin(PolymerElement) {
return !platformLoaded || !pushSupported_;
}
_description(platformLoaded, pushSupported_) {
_descriptionKey(platformLoaded, pushSupported_) {
let key;
if (!pushSupported_) {
key = "error_use_https";
@@ -81,7 +85,7 @@ class HaPushNotificationsRow extends LocalizeMixin(PolymerElement) {
} else {
key = "description";
}
return this.localize(`ui.panel.profile.push_notifications.${key}`);
return `ui.panel.profile.push_notifications.${key}`;
}
}

View File

@@ -21,7 +21,8 @@ export const panelTitleMixin = <T extends Constructor<HassBaseEl>>(
if (
!oldHass ||
oldHass.panels !== this.hass.panels ||
oldHass.panelUrl !== this.hass.panelUrl
oldHass.panelUrl !== this.hass.panelUrl ||
oldHass.localize !== this.hass.localize
) {
setTitle(getPanelTitle(this.hass));
}

View File

@@ -36,6 +36,8 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
// eslint-disable-next-line: variable-name
private __coreProgress?: string;
private __loadedFragmetTranslations: Set<string> = new Set();
private __loadedTranslations: {
// track what things have been loaded
[category: string]: LoadedTranslationCategory;
@@ -101,6 +103,7 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
document.querySelector("html")!.setAttribute("lang", hass.language);
this.style.direction = computeRTL(hass) ? "rtl" : "ltr";
this._loadCoreTranslations(hass.language);
this.__loadedFragmetTranslations = new Set();
this._loadFragmentTranslations(hass.language, hass.panelUrl);
}
@@ -195,10 +198,31 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
language: string,
panelUrl: string
) {
if (translationMetadata.fragments.includes(panelUrl)) {
const result = await getTranslation(panelUrl, language);
this._updateResources(result.language, result.data);
if (!panelUrl) {
return;
}
const panelComponent = this.hass?.panels?.[panelUrl]?.component_name;
// If it's the first call we don't have panel info yet to check the component.
// If the url is not known it might be a custom lovelace dashboard, so we load lovelace translations
const fragment = translationMetadata.fragments.includes(
panelComponent || panelUrl
)
? panelComponent || panelUrl
: !panelComponent
? "lovelace"
: undefined;
if (!fragment) {
return;
}
if (this.__loadedFragmetTranslations.has(fragment)) {
return;
}
this.__loadedFragmetTranslations.add(fragment);
const result = await getTranslation(fragment, language);
this._updateResources(result.language, result.data);
}
private async _loadCoreTranslations(language: string) {
@@ -210,7 +234,7 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
this.__coreProgress = language;
try {
const result = await getTranslation(null, language);
this._updateResources(result.language, result.data);
await this._updateResources(result.language, result.data);
} finally {
this.__coreProgress = undefined;
}
@@ -226,18 +250,29 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
// before this.hass is even created. In this case our base state comes
// from this._pendingHass instead. Otherwise the first set of strings is
// overwritten when we call _updateHass the second time!
const baseHass = this.hass ?? this._pendingHass;
// Allow hass to be updated
await new Promise((resolve) => setTimeout(resolve, 0));
if (language !== (this.hass ?? this._pendingHass).language) {
// the language was changed, abort
return;
}
const resources = {
[language]: {
...baseHass?.resources?.[language],
...(this.hass ?? this._pendingHass)?.resources?.[language],
...data,
},
};
const changes: Partial<HomeAssistant> = { resources };
if (this.hass && language === this.hass.language) {
changes.localize = await computeLocalize(this, language, resources);
const changes: Partial<HomeAssistant> = {
resources,
localize: await computeLocalize(this, language, resources),
};
if (language === (this.hass ?? this._pendingHass).language) {
this._updateHass(changes);
}
this._updateHass(changes);
}
private _refetchCachedHassTranslations(

View File

@@ -98,7 +98,8 @@
"disabled_by": {
"user": "User",
"integration": "Integration",
"config_entry": "Config Entry"
"config_entry": "Config Entry",
"device": "Device"
}
},
"ui": {
@@ -327,6 +328,7 @@
"entity-picker": {
"entity": "Entity",
"clear": "Clear",
"no_match": "No matching entities found",
"show_entities": "Show entities"
},
"entity-attribute-picker": {
@@ -334,6 +336,16 @@
"show_attributes": "Show attributes"
}
},
"target-picker": {
"expand_area_id": "Expand this area in the seperate devices and entities that it contains. After expanding it will not update the devices and entities when the area changes.",
"expand_device_id": "Expand this device in seperate entities. After expanding it will not update the entities when the device changes.",
"remove_area_id": "Remove area",
"remove_device_id": "Remove device",
"remove_entity_id": "Remove entity",
"add_area_id": "Pick area",
"add_device_id": "Pick device",
"add_entity_id": "Pick entity"
},
"user-picker": {
"no_user": "No user",
"add_user": "Add user",
@@ -348,6 +360,8 @@
"clear": "Clear",
"toggle": "Toggle",
"show_devices": "Show devices",
"no_devices": "You don't have any devices",
"no_match": "No matching devices found",
"device": "Device",
"no_area": "No area"
},
@@ -356,6 +370,8 @@
"show_areas": "Show areas",
"area": "Area",
"add_new": "Add new area…",
"no_areas": "You don't have any areas",
"no_match": "No matching areas found",
"add_dialog": {
"title": "Add new area",
"text": "Enter the name of the new area.",
@@ -612,6 +628,8 @@
"unavailable": "This entity is not currently available.",
"enabled_label": "Enable entity",
"enabled_cause": "Disabled by {cause}.",
"device_disabled": "The device of this entity is disabled.",
"open_device_settings": "Open device settings",
"enabled_description": "Disabled entities will not be added to Home Assistant.",
"enabled_delay_confirm": "The enabled entities will be added to Home Assistant in {delay} seconds",
"enabled_restart_confirm": "Restart Home Assistant to finish enabling the entities",
@@ -787,7 +805,7 @@
},
"areas": {
"caption": "Areas",
"description": "Manage areas in your home",
"description": "Group devices and entities into areas",
"data_table": {
"area": "Area",
"devices": "Devices"
@@ -817,7 +835,7 @@
},
"tags": {
"caption": "Tags",
"description": "Manage tags",
"description": "Trigger automations when a NFC tag, QR code, etc. is scanned",
"learn_more": "Learn more about tags",
"no_tags": "No tags",
"add_tag": "Add tag",
@@ -848,7 +866,7 @@
},
"helpers": {
"caption": "Helpers",
"description": "Manage elements that help build automations",
"description": "Elements that help build automations",
"types": {
"input_text": "Text",
"input_number": "Number",
@@ -876,7 +894,7 @@
},
"core": {
"caption": "General",
"description": "Change your general Home Assistant configuration",
"description": "Unit system, location, time zone & other general parameters",
"section": {
"core": {
"header": "General Configuration",
@@ -905,7 +923,7 @@
"caption": "Info",
"copy_raw": "Raw Text",
"copy_github": "For GitHub",
"description": "View info about your Home Assistant installation",
"description": "Version, system health and links to documentation",
"home_assistant_logo": "Home Assistant logo",
"path_configuration": "Path to configuration.yaml: {path}",
"developed_by": "Developed by a bunch of awesome people.",
@@ -940,7 +958,7 @@
},
"lovelace": {
"caption": "Lovelace Dashboards",
"description": "Manage your Lovelace Dashboards",
"description": "Create customized sets of cards to control your home",
"dashboards": {
"default_dashboard": "This is the default dashboard",
"caption": "Dashboards",
@@ -1095,7 +1113,7 @@
},
"automation": {
"caption": "Automations",
"description": "Manage automations",
"description": "Create custom behavior rules for your home",
"picker": {
"header": "Automation Editor",
"introduction": "The automation editor allows you to create and edit automations. Please follow the link below to read the instructions to make sure that you have configured Home Assistant correctly.",
@@ -1147,8 +1165,6 @@
"header": "Blueprint",
"blueprint_to_use": "Blueprint to use",
"no_blueprints": "You don't have any blueprints",
"manage_blueprints": "Manage Blueprints",
"inputs": "Inputs",
"no_inputs": "This blueprint doesn't have any inputs."
},
"modes": {
@@ -1445,8 +1461,8 @@
"description": "Manage blueprints",
"overview": {
"header": "Blueprint Editor",
"introduction": "The blueprint editor allows you to create and edit blueprints.",
"learn_more": "Learn more about blueprints",
"introduction": "The blueprint configuration allows you to import and manage your blueprints.",
"learn_more": "Learn more about using blueprints",
"headers": {
"name": "Name",
"domain": "Domain",
@@ -1456,26 +1472,28 @@
"confirm_delete_text": "Are you sure you want to delete this blueprint?",
"add_blueprint": "Import blueprint",
"use_blueprint": "Create automation",
"delete_blueprint": "Delete blueprint"
"delete_blueprint": "Delete blueprint",
"discover_more": "Discover more Blueprints"
},
"add": {
"header": "Add new blueprint",
"import_header": "Import \"{name}\" (type: {domain})",
"import_introduction": "You can import blueprints of other users from Github and the community forums. Enter the URL of the blueprint below.",
"header": "Import a blueprint",
"import_header": "Blueprint \"{name}\"",
"import_introduction_link": "You can import blueprints of other users from Github and the {community_link}. Enter the URL of the blueprint below.",
"community_forums": "community forums",
"url": "URL of the blueprint",
"raw_blueprint": "Blueprint content",
"importing": "Importing blueprint...",
"import_btn": "Import blueprint",
"saving": "Saving blueprint...",
"save_btn": "Save blueprint",
"importing": "Loading blueprint...",
"import_btn": "Preview blueprint",
"saving": "Importing blueprint...",
"save_btn": "Import blueprint",
"error_no_url": "Please enter the URL of the blueprint.",
"unsupported_blueprint": "This blueprint is not supported",
"file_name": "Local blueprint file name"
"file_name": "Blueprint Path"
}
},
"script": {
"caption": "Scripts",
"description": "Manage scripts",
"description": "Execute a sequence of actions",
"picker": {
"header": "Script Editor",
"introduction": "The script editor allows you to create and edit scripts. Please follow the link below to read the instructions to make sure that you have configured Home Assistant correctly.",
@@ -1525,7 +1543,7 @@
},
"scene": {
"caption": "Scenes",
"description": "Manage scenes",
"description": "Capture device states and easily recall them later",
"activated": "Activated scene {name}.",
"picker": {
"header": "Scene Editor",
@@ -1571,7 +1589,7 @@
"cloud": {
"description_login": "Logged in as {email}",
"description_not_login": "Not logged in",
"description_features": "Control away from home, integrate with Alexa and Google Assistant.",
"description_features": "Control home when away and integrate with Alexa and Google Assistant",
"login": {
"title": "Cloud Login",
"introduction": "Home Assistant Cloud provides you with a secure remote connection to your instance while away from home. It also allows you to connect with cloud-only services: Amazon Alexa and Google Assistant.",
@@ -1738,18 +1756,27 @@
"devices": {
"add_prompt": "No {name} have been added using this device yet. You can add one by clicking the + button above.",
"caption": "Devices",
"description": "Manage connected devices",
"description": "Manage configured devices",
"device_info": "Device info",
"unnamed_device": "Unnamed device",
"unknown_error": "Unknown error",
"name": "Name",
"update": "Update",
"no_devices": "No devices",
"enabled_label": "Enable device",
"enabled_cause": "The device is disabled by {cause}.",
"disabled_by": {
"user": "User",
"integration": "Integration",
"config_entry": "Config Entry"
},
"enabled_description": "Disabled devices will not be shown and entities belonging to the device will be disabled and not added to Home Assistant.",
"automation": {
"automations": "Automations",
"no_automations": "No automations",
"unknown_automation": "Unknown automation",
"create": "Create automation with device",
"create_disable": "Can't create automation with disabled device",
"triggers": {
"caption": "Do something when...",
"no_triggers": "No triggers",
@@ -1770,12 +1797,14 @@
"script": {
"scripts": "Scripts",
"no_scripts": "No scripts",
"create": "Create script with device"
"create": "Create script with device",
"create_disable": "Can't create script with disabled device"
},
"scene": {
"scenes": "Scenes",
"no_scenes": "No scenes",
"create": "Create scene with device"
"create": "Create scene with device",
"create_disable": "Can't create scene with disabled device"
},
"cant_edit": "You can only edit items that are created in the UI.",
"device_not_found": "Device not found.",
@@ -1790,6 +1819,7 @@
"scenes": "Scenes",
"confirm_rename_entity_ids": "Do you also want to rename the entity IDs of your entities?",
"confirm_rename_entity_ids_warning": "This will not change any configuration (like automations, scripts, scenes, dashboards) that is currently using these entities! You will have to update them yourself to use the new entity IDs!",
"disabled": "Disabled",
"data_table": {
"device": "Device",
"manufacturer": "Manufacturer",
@@ -1801,7 +1831,16 @@
"no_area": "No area"
},
"delete": "Delete",
"confirm_delete": "Are you sure you want to delete this device?"
"confirm_delete": "Are you sure you want to delete this device?",
"picker": {
"search": "Search devices",
"filter": {
"filter": "Filter",
"show_disabled": "Show disabled devices",
"hidden_devices": "{number} hidden {number, plural,\n one {device}\n other {devices}\n}",
"show_all": "Show all"
}
}
},
"entities": {
"caption": "Entities",
@@ -1916,7 +1955,7 @@
},
"integrations": {
"caption": "Integrations",
"description": "Manage integrations",
"description": "Manage integrations with services, devices, ...",
"integration": "integration",
"discovered": "Discovered",
"attention": "Attention required",
@@ -1989,7 +2028,7 @@
},
"users": {
"caption": "Users",
"description": "Manage users",
"description": "Manage the Home Assistant user accounts",
"users_privileges_note": "The user group feature is a work in progress. The user will be unable to administer the instance via the UI. We're still auditing all management API endpoints to ensure that they correctly limit access to administrators.",
"picker": {
"headers": {
@@ -2022,7 +2061,8 @@
"system_generated_users_not_removable": "Unable to remove system generated users.",
"system_generated_users_not_editable": "Unable to update system generated users.",
"unnamed_user": "Unnamed User",
"confirm_user_deletion": "Are you sure you want to delete {name}?"
"confirm_user_deletion": "Are you sure you want to delete {name}?",
"active_tooltip": "Controls if user can login"
},
"add_user": {
"caption": "Add user",
@@ -2871,7 +2911,10 @@
"new_password": "New Password",
"confirm_new_password": "Confirm New Password",
"error_required": "Required",
"submit": "Submit"
"submit": "Submit",
"error_new_mismatch": "Entered new password values do not match",
"error_new_is_old": "New password must be different than current password",
"success": "Password changed successfully"
},
"mfa": {
"header": "Multi-factor Authentication Modules",

File diff suppressed because it is too large Load Diff

View File

@@ -2,11 +2,13 @@
"config_entry": {
"disabled_by": {
"config_entry": "Entrada de configuració",
"device": "Dispositiu",
"integration": "Integració",
"user": "Usuari"
}
},
"groups": {
"owner": "Propietari",
"system-admin": "Administradors",
"system-read-only": "Usuaris de només lectura",
"system-users": "Usuaris"
@@ -545,6 +547,8 @@
"add_new": "Afegir àrea nova...",
"area": "Àrea",
"clear": "Esborra",
"no_areas": "No tens cap àrea",
"no_match": "No s'han trobat àrees coincidents",
"show_areas": "Mostra àrees"
},
"blueprint-picker": {
@@ -565,6 +569,8 @@
"clear": "Esborra",
"device": "Dispositiu",
"no_area": "Sense àrees",
"no_devices": "No tens cap dispositiu",
"no_match": "No s'han trobat dispositius coincidents",
"show_devices": "Mostra dispositius",
"toggle": "Commuta"
},
@@ -576,6 +582,7 @@
"entity-picker": {
"clear": "Esborra",
"entity": "Entitat",
"no_match": "No s'han trobat entitats coincidents",
"show_entities": "Mostra entitats"
}
},
@@ -709,6 +716,16 @@
"service-picker": {
"service": "Servei"
},
"target-picker": {
"add_area_id": "Selecciona àrea",
"add_device_id": "Selecciona dispositiu",
"add_entity_id": "Selecciona entitat",
"expand_area_id": "Expandeix aquesta àrea en els dispositius i entitats que conté. Després d'expandir-la, no s'actualitzaran els dispositius i les entitats quan l'àrea canviï.",
"expand_device_id": "Expandeix aquest dispositiu en entitats separades. Després d'expandir-lo, no s'actualitzaran les entitats quan el dispositiu canviï.",
"remove_area_id": "Elimina àrea",
"remove_device_id": "Elimina dispositiu",
"remove_entity_id": "Elimina entitat"
},
"user-picker": {
"add_user": "Afegeix usuari",
"no_user": "Cap usuari",
@@ -732,6 +749,7 @@
"editor": {
"confirm_delete": "Estàs segur que vols eliminar aquesta entrada?",
"delete": "Elimina",
"device_disabled": "El dispositiu d'aquesta entitat està desactivat.",
"enabled_cause": "Desactivada per {cause}.",
"enabled_delay_confirm": "Les entitats activades s'afegiran a Home Assistant d'aquí a {delay} segons",
"enabled_description": "Les entitats desactivades no s'afegiran a Home Assistant.",
@@ -742,6 +760,7 @@
"icon_error": "Els icones han de tenir el format 'prefix:nom_icona', per exemple: 'mdi:home'",
"name": "Nom",
"note": "Nota: podria no funcionar amb alguna de les integracions.",
"open_device_settings": "Obre la configuració del dispositiu",
"unavailable": "Aquesta entitat no està disponible actualment.",
"update": "Actualitza"
},
@@ -1029,7 +1048,7 @@
"confirmation_text": "Tots els dispositius d'aquesta àrea quedaran sense assignar.",
"confirmation_title": "Estàs segur que vols eliminar aquesta àrea?"
},
"description": "Gestiona les àrees de la casa",
"description": "Agrupa dispositius i entitats en àrees",
"editor": {
"area_id": "ID d'àrea",
"create": "Crea",
@@ -1051,7 +1070,7 @@
},
"automation": {
"caption": "Automatització",
"description": "Gestiona les automatitzacions",
"description": "Crea regles de comportament personalitzades per a casa teva",
"dialog_new": {
"blueprint": {
"use_blueprint": "Utilitza un plànol"
@@ -1239,7 +1258,7 @@
"edit_ui": "Edita a través d'interfície",
"edit_yaml": "Edita com a YAML",
"enable_disable": "Activa/desactiva automatització",
"introduction": "Utilitza les automatitzacions per donar més vida a la teva casa",
"introduction": "Utilitza les automatitzacions per donar més vida a la teva casa.",
"load_error_not_editable": "Només es poden editar les automatitzacions de l'arxiu automations.yaml.",
"load_error_unknown": "Error en carregar l'automatització ({err_no}).",
"max": {
@@ -1399,28 +1418,34 @@
"blueprint": {
"add": {
"error_no_url": "Introdueix l'URL del plànol.",
"header": "Afegiu plànol nou",
"import_btn": "Importa plànol",
"import_header": "Importa {name} ({domain})",
"file_name": "Directori del plànol",
"header": "Importa un plànol nou",
"import_btn": "Vista prèvia del plànol",
"import_header": "Plànol \"{name}\"",
"import_introduction": "Pots importar plànols d'altres usuaris des de Github i els fòrums de la comunitat. Introdueix, a sota, l'URL del plànol.",
"importing": "Important plànol",
"save_btn": "Desa plànol",
"saving": "Desant plànol...",
"importing": "Carregant plànol...",
"raw_blueprint": "Contingut del plànol",
"save_btn": "Importa plànol",
"saving": "Important plànol...",
"unsupported_blueprint": "Aquest plànols no és compatible",
"url": "URL del plànol"
},
"caption": "Plànols",
"description": "Gestiona els plànols",
"overview": {
"add_blueprint": "Afegiu plànol",
"add_blueprint": "Importa plànol",
"confirm_delete_header": "Eliminar aquest plànol?",
"confirm_delete_text": "Segur que vols eliminar aquest plànol?",
"delete_blueprint": "Elimina plànol",
"header": "Editor de plànols",
"headers": {
"domain": "Domini",
"file_name": "Nom de l'arxiu",
"name": "Nom"
},
"introduction": "L'editor de plànols et permet crear i editar plànols.",
"learn_more": "Més informació sobre els plànols"
"introduction": "La configuració de plànols et permet importar-ne i gestionar-los.",
"learn_more": "Més informació sobre l'ús dels plànols",
"use_blueprint": "Crea automatització"
}
},
"cloud": {
@@ -1503,7 +1528,7 @@
"title": "Alexa"
},
"caption": "Home Assistant Cloud",
"description_features": "Controla la casa des de fora, pots integrar Alexa i Google Assistant.",
"description_features": "Controla la casa quan siguis fora i integra-hi Alexa i Google Assistant",
"description_login": "Sessió iniciada com a {email}",
"description_not_login": "No has iniciat sessió",
"dialog_certificate": {
@@ -1598,7 +1623,7 @@
},
"core": {
"caption": "General",
"description": "Canvia la configuració general de Home Assistant",
"description": "Sistema d'unitats, ubicació, zona horària i altres paràmetres generals",
"section": {
"core": {
"core_config": {
@@ -1660,6 +1685,7 @@
"unknown_condition": "Condició desconeguda"
},
"create": "Crea una automatització amb el dispositiu",
"create_disable": "No es pot crear una automatització amb dispositius desactivats",
"no_automations": "No hi ha automatitzacions",
"no_device_automations": "No hi ha automatitzacions disponibles per a aquest dispositiu.",
"triggers": {
@@ -1685,9 +1711,18 @@
"no_devices": "Sense dispositius"
},
"delete": "Elimina",
"description": "Gestiona els dispositius connectats",
"description": "Gestiona els dispositius configurats",
"device_info": "Informació del dispositiu",
"device_not_found": "Dispositiu no trobat.",
"disabled": "Desactivat",
"disabled_by": {
"config_entry": "Entrada de configuració",
"integration": "Integració",
"user": "Usuari"
},
"enabled_cause": "El dispositiu està desactivat per {cause}.",
"enabled_description": "Els dispositius desactivats no es mostraran i les entitats que hi pertanyin es desactivaran i no s'afegiran a Home Assistant.",
"enabled_label": "Activa dispositiu",
"entities": {
"add_entities_lovelace": "Afegeix a Lovelace",
"disabled_entities": "+{count} {count, plural,\n one {entitat desabilitada}\n other {entitats desabilitades}\n}",
@@ -1697,14 +1732,25 @@
},
"name": "Nom",
"no_devices": "No hi ha dispositius",
"picker": {
"filter": {
"filter": "Filtre",
"hidden_devices": "{number} {number, plural,\n one {dispositiu amagat}\n other {dispositius amagats}\n}",
"show_all": "Mostra-ho tot",
"show_disabled": "Mostra dispositius desactivats"
},
"search": "Cerca dispositius"
},
"scene": {
"create": "Crea una escena amb el dispositiu",
"create_disable": "No es pot crear una escena amb dispositius desactivats",
"no_scenes": "No hi ha escenes",
"scenes": "Escenes"
},
"scenes": "Escenes",
"script": {
"create": "Crea un programa (script) amb el dispositiu",
"create_disable": "No es pot crear un script amb dispositius desactivats",
"no_scripts": "No hi ha scripts",
"scripts": "Scripts"
},
@@ -1737,6 +1783,7 @@
},
"header": "Entitats",
"headers": {
"area": "Àrea",
"entity_id": "ID de l'entitat",
"integration": "Integració",
"name": "Nom",
@@ -1769,7 +1816,7 @@
"header": "Configuració de Home Assistant",
"helpers": {
"caption": "Ajudants",
"description": "Gestiona elements útils per a construir automatitzacions",
"description": "Elements útils per a construir automatitzacions",
"dialog": {
"add_helper": "Afegeix ajudant",
"add_platform": "Afegeix {platform}",
@@ -1801,7 +1848,7 @@
"copy_github": "Per GitHub",
"copy_raw": "Text en brut",
"custom_uis": "Interfícies d'usuari personalitzades:",
"description": "Consulta informació de la teva instal·lació de Home Assistant",
"description": "Versió, estat del sistema i enllaços a la documentació",
"developed_by": "Desenvolupat per un munt de gent fantàstica.",
"documentation": "Documentació",
"frontend": "frontend-ui",
@@ -1907,7 +1954,7 @@
},
"configure": "Configurar",
"configured": "Configurades",
"description": "Gestiona les integracions",
"description": "Gestiona les integracions amb serveis, dispositius, ...",
"details": "Detalls de la integració",
"discovered": "Descobertes",
"home_assistant_website": "lloc web de Home Assistant",
@@ -1992,7 +2039,7 @@
"open": "Obrir"
}
},
"description": "Gestiona els teus panells Lovelace",
"description": "Crea conjunts de panells personalitzats per controlar la teva casa",
"resources": {
"cant_edit_yaml": "Estàs utilitzant Lovelace en mode YAML per tant no pots gestionar els recursos des de la interfície d'usuari. Els pots gestionar des del fitxer 'configuration.yaml'.",
"caption": "Recursos",
@@ -2135,7 +2182,7 @@
"refresh_node": {
"battery_note": "Si el node funciona amb bateria, assegura't de que estigui actiu abans de continuar",
"button": "Actualitza node",
"complete": "Actualització del node completa",
"complete": "Actualització del node completada",
"description": "Això farà que OpenZWave torni a consultar el node i n'actualitzi les classes de comandes, funcions i valors.",
"node_status": "Estat del node",
"refreshing_description": "Actualitzant la informació del node...",
@@ -2191,7 +2238,7 @@
"scene": {
"activated": "Escena {name} activada.",
"caption": "Escenes",
"description": "Gestiona les escenes",
"description": "Captura els estats dels dispositius i recorda'ls més tard",
"editor": {
"default_name": "Nova escena",
"devices": {
@@ -2209,7 +2256,7 @@
"without_device": "Entitats sense dispositiu"
},
"icon": "Icona",
"introduction": "Utilitza les escenes per donar més vida a la teva llar.",
"introduction": "Utilitza les escenes per donar més vida a la teva casa.",
"load_error_not_editable": "Només es poden editar les escenes de l'arxiu scenes.yaml.",
"load_error_unknown": "Error en carregar l'escena ({err_no}).",
"name": "Nom",
@@ -2235,7 +2282,7 @@
},
"script": {
"caption": "Programació (scripts)",
"description": "Gestiona els programes (scripts)",
"description": "Executa una seqüència d'accions",
"editor": {
"alias": "Nom",
"default_name": "Nou script",
@@ -2346,7 +2393,7 @@
"confirm_remove": "Estàs segur que vols eliminar l'etiqueta {tag}?",
"confirm_remove_title": "Elimina l'etiqueta?",
"create_automation": "Crea una automatització amb una etiqueta",
"description": "Gestiona les etiquetes",
"description": "Dispara automatitzacions quan una etiqueta NFC, un codi QR, etc; s'escanegi",
"detail": {
"companion_apps": "aplicacions de companion",
"create": "Crea",
@@ -2381,10 +2428,11 @@
"username": "Nom d'usuari"
},
"caption": "Usuaris",
"description": "Gestiona els usuaris",
"description": "Gestiona els comptes d'usuari de Home Assistant",
"editor": {
"activate_user": "Activar usuari",
"active": "Actiu",
"active_tooltip": "Controla si l'usuari pot iniciar sessió",
"admin": "Administrador",
"caption": "Mostra usuari",
"change_password": "Canviar contrasenya",
@@ -2393,7 +2441,7 @@
"delete_user": "Eliminar usuari",
"group": "Grup",
"id": "ID",
"name": "Nom",
"name": "Nom de visualització",
"new_password": "Nova contrasenya",
"owner": "Propietari",
"password_changed": "La contrasenya s'ha canviat correctament",
@@ -2401,19 +2449,24 @@
"system_generated_users_not_editable": "No es poden actualitzar usuaris generats pel sistema.",
"system_generated_users_not_removable": "No es poden eliminar usuaris generats pel sistema.",
"unnamed_user": "Usuari sense nom",
"update_user": "Actualitza"
"update_user": "Actualitza",
"username": "Nom d'usuari"
},
"picker": {
"add_user": "Afegeix usuari",
"headers": {
"group": "Grup",
"name": "Nom",
"system": "Sistema"
"is_active": "Actiu",
"is_owner": "Propietari",
"name": "Nom de visualització",
"system": "Generat pel sistema",
"username": "Nom d'usuari"
}
},
"users_privileges_note": "El grup d'usuaris encara no està del tot acabat. L'usuari no podrà administrar la instància a través de la interfície d'usuari. Encara estem verificant tots els punts de l'API de gestió per assegurar-nos que limiten correctament l'accés als administradors."
},
"zha": {
"add_device": "Afegeix dispositiu",
"add_device_page": {
"discovered_text": "Els dispositius apareixeran aquí un cop descoberts.",
"discovery_text": "Els dispositius descoberts apareixeran aquí. Segueix les instruccions del/s teu/s dispositiu/s i posa el dispositiu/s en mode d'emparellament.",
@@ -2459,6 +2512,16 @@
"value": "Valor"
},
"description": "Gestiona la xarxa domòtica Zigbee (ZHA)",
"device_pairing_card": {
"CONFIGURED": "Configuració completada",
"CONFIGURED_status_text": "Inicialitzant",
"INITIALIZED": "Inicialització completada",
"INITIALIZED_status_text": "El dispositiu està llest per a utilitzar-se",
"INTERVIEW_COMPLETE": "Consulta completada",
"INTERVIEW_COMPLETE_status_text": "Configurant",
"PAIRED": "Dispositiu trobat",
"PAIRED_status_text": "Iniciant consulta"
},
"devices": {
"header": "Domòtica Zigbee (ZHA) - Dispositiu"
},
@@ -2474,6 +2537,7 @@
"unbind_button_label": "Desvincula grup"
},
"groups": {
"add_group": "Afegeix grup",
"add_members": "Afegeix membres",
"adding_members": "Afegint membres",
"caption": "Grups",
@@ -2516,7 +2580,11 @@
"hint_wakeup": "Alguns dispositius com els sensors Xiaomi tenen un botó per despertar-los que pots prémer a intervals de 5 segons per mantenir-los desperts mentre hi interactues.",
"introduction": "Executa comandes ZHA que afecten un sol dispositiu. Tria un dispositiu per veure el seu llistat de comandes disponibles."
},
"title": "Domòtica Zigbee (ZHA)"
"title": "Domòtica Zigbee (ZHA)",
"visualization": {
"caption": "Visualització",
"header": "Visualització de xarxa"
}
},
"zone": {
"add_zone": "Afegeix zona",
@@ -3116,7 +3184,7 @@
"close": "Tanca",
"empty_config": "Comença amb un panell buit",
"header": "Pren el control de la interfície d'usuari Lovelace",
"para": "Aquest panell Lovelace s'està gestionant per Home Assistant. S'actualitza automàticament quan hi ha noves entitats o nous components de Lovelace disponibles. Si prens el control, aquest panell no s'actualitzarà automàticament. Sempre pots crear un nou panell a configuració i fer-hi proves.",
"para": "Aquest panell Lovelace està gestionat per Home Assistant. S'actualitza automàticament quan hi ha noves entitats o nous components de Lovelace disponibles. Si prens el control, aquest panell no s'actualitzarà automàticament. Sempre pots crear un nou panell a configuració i fer-hi proves.",
"para_sure": "Estàs segur que vols prendre el control de la interfície d'usuari?",
"save": "Prendre el control",
"yaml_config": "Per ajudar a familiaritzar-te, aquí tens la configuració actual del teu panell Lovelace:",
@@ -3383,10 +3451,13 @@
"change_password": {
"confirm_new_password": "Confirmar contrasenya nova",
"current_password": "Contrasenya actual",
"error_new_is_old": "La contrasenya nova ha de ser diferent de la contrasenya actual",
"error_new_mismatch": "Els valors introduïts de la nova contrasenya no coincideixen",
"error_required": "Obligatori",
"header": "Canvi de contrasenya",
"new_password": "Contrasenya nova",
"submit": "Envia"
"submit": "Envia",
"success": "La contrasenya s'ha canviat correctament"
},
"current_user": "Has iniciat la sessió com a {fullName}.",
"customize_sidebar": {

View File

@@ -2,6 +2,7 @@
"config_entry": {
"disabled_by": {
"config_entry": "Položka nastavení",
"device": "Zařízení",
"integration": "Integrace",
"user": "Uživatel"
}
@@ -546,11 +547,14 @@
"add_new": "Přidat novou oblast ...",
"area": "Oblast",
"clear": "Vymazat",
"no_areas": "Nemáte žádné oblasti",
"no_match": "Nebyly nalezeny žádné odpovídající oblasti",
"show_areas": "Zobrazit oblasti"
},
"blueprint-picker": {
"add_user": "Přidat uživatele",
"remove_user": "Odebrat uživatele"
"remove_user": "Odebrat uživatele",
"select_blueprint": "Vyberte šablonu"
},
"data-table": {
"no-data": "Žádná data",
@@ -565,6 +569,8 @@
"clear": "Zrušit",
"device": "Zařízení",
"no_area": "Žádná oblast",
"no_devices": "Nemáte žádná zařízení",
"no_match": "Nebyla nalezena žádná odpovídající zařízení",
"show_devices": "Zobrazit zařízení",
"toggle": "Přepnout"
},
@@ -576,6 +582,7 @@
"entity-picker": {
"clear": "Zrušit",
"entity": "Entita",
"no_match": "Nebyly nalezeny žádné odpovídající entity",
"show_entities": "Zobrazit entity"
}
},
@@ -709,6 +716,16 @@
"service-picker": {
"service": "Služba"
},
"target-picker": {
"add_area_id": "Vyberte oblast",
"add_device_id": "Vyberte zařízení",
"add_entity_id": "Vyberte entitu",
"expand_area_id": "Rozdělit tuto oblast na jednotlivá zařízení a entity, které obsahuje. Po rozdělení nebudou zařízení a entity aktualizovány, pokud dojde ke změnám oblasti.",
"expand_device_id": "Rozdělit toto zařízení na jednotlivé entity. Po rozdělení nebudou entity aktualizovány, pokud dojde ke změnám zařízení.",
"remove_area_id": "Odebrat oblast",
"remove_device_id": "Odebrat zařízení",
"remove_entity_id": "Odebrat entitu"
},
"user-picker": {
"add_user": "Přidat uživatele",
"no_user": "Žádný uživatel",
@@ -732,6 +749,7 @@
"editor": {
"confirm_delete": "Opravdu chcete tuto položku smazat?",
"delete": "Odstranit",
"device_disabled": "Zařízení této entity je zakázáno.",
"enabled_cause": "Zakázáno {cause}.",
"enabled_delay_confirm": "Povolené entity budou přidány do Home Assistant za {delay} sekund",
"enabled_description": "Zakázané entity nebudou přidány do Home Assistant.",
@@ -742,6 +760,7 @@
"icon_error": "Ikony by měly být ve formátu 'prefix:nazevikony', např. 'mdi:home'",
"name": "Jméno",
"note": "Poznámka: U všech integrací to ještě nemusí fungovat.",
"open_device_settings": "Otevřít nastavení zařízení",
"unavailable": "Tato entita není momentálně k dispozici.",
"update": "Aktualizovat"
},
@@ -882,6 +901,7 @@
"navigation": {
"areas": "Oblasti",
"automation": "Automatizace",
"blueprint": "Šablony",
"core": "Obecné",
"customize": "Přizpůsobení",
"devices": "Zařízení",
@@ -890,7 +910,7 @@
"info": "Informace",
"integrations": "Integrace",
"logs": "Logy",
"lovelace": "Lovelace Dashboardy",
"lovelace": "Ovládací panely Lovelace",
"navigate_to": "Přejít na {panel}",
"navigate_to_config": "Přejít na nastavení {panel}",
"person": "Osoby",
@@ -953,7 +973,7 @@
"zha_device_info": {
"buttons": {
"add": "Přidejte zařízení prostřednictvím tohoto zařízení",
"clusters": "Clustery",
"clusters": "Správa clusterů",
"reconfigure": "Přenastavit zařízení",
"remove": "Odebrat zařízení",
"zigbee_information": "Podpis zařízení Zigbee"
@@ -1028,7 +1048,7 @@
"confirmation_text": "Všechna zařízení v této oblasti budou nastavena jako nepřiřazena.",
"confirmation_title": "Opravdu chcete tuto oblast smazat?"
},
"description": "Správa oblastí ve vaší domácnosti",
"description": "Seskupte zařízení a entity do oblastí",
"editor": {
"area_id": "ID oblasti",
"create": "VYTVOŘIT",
@@ -1050,8 +1070,11 @@
},
"automation": {
"caption": "Automatizace",
"description": "Správa automatizací",
"description": "Vytvořte si pro svůj domov vlastní pravidla chování",
"dialog_new": {
"blueprint": {
"use_blueprint": "Použít šablonu"
},
"header": "Vytvoření automatizace",
"how": "Jak chcete vytvořit svou novou automatizaci?",
"start_empty": "Začněte s prázdnou automatizací",
@@ -1143,7 +1166,12 @@
},
"alias": "Název",
"blueprint": {
"inputs": "Vstupy"
"blueprint_to_use": "Šablona k použití",
"header": "Šablona",
"inputs": "Vstupy",
"manage_blueprints": "Správa šablon",
"no_blueprints": "Nemáme žádné šablony",
"no_inputs": "Šablona nemá žádné vstupy."
},
"conditions": {
"add": "Přidat podmínku",
@@ -1389,24 +1417,35 @@
},
"blueprint": {
"add": {
"error_no_url": "Zadejte adresu URL šablonky konfigurace",
"header": "Přidat novou šablonku konfigurace",
"import_btn": "Importovat šablonku konfigurace",
"import_header": "Importovat \"{name}\" (typ: {domain})",
"import_introduction": "Z Githubu a komunitních fór můžete importovat šablonky konfigurace sdílené ostatními uživateli. Zadejte adresu URL šablonky konfigurace.",
"importing": "Importuje se šablonka konfigurace",
"save_btn": "Uložit šablonku konfigurace",
"saving": "Ukládání konfigurační šablonky",
"url": "URL šablonky konfigurace"
"error_no_url": "Zadejte adresu URL adresu šablony",
"file_name": "Cesta k šabloně",
"header": "Import šablony",
"import_btn": "Náhled šablony",
"import_header": "Šablona \"{name}\"",
"import_introduction": "Můžete importovat šablony od ostatních uživatelů z GitHubu a komunitních fór. Níže zadejte URL adresu šablony.",
"importing": "Načítám šablonu...",
"raw_blueprint": "Obsah šablony",
"save_btn": "Importovat šablonu",
"saving": "Importuji šablonu...",
"unsupported_blueprint": "Tato šablona není podporována.",
"url": "URL adresa šablony"
},
"caption": "Šablony",
"description": "Správa šablon",
"overview": {
"confirm_delete_header": "Odstranit tuto šablonku konfigurace?",
"add_blueprint": "Import šablony",
"confirm_delete_header": "Odstranit tuto šablonu?",
"confirm_delete_text": "Opravdu chcete smazat tuto šablonu?",
"delete_blueprint": "Smazat šablonu",
"header": "Editor šablon",
"headers": {
"domain": "Doména",
"file_name": "Název souboru",
"name": "Jméno"
},
"learn_more": "Další informace o šablonkách konfigurace"
"introduction": "Nastavení šablon vám umožňuje importovat a spravovat vaše šablony.",
"learn_more": "Další informace o používání šablon",
"use_blueprint": "Vytvořit automatizaci"
}
},
"cloud": {
@@ -1419,7 +1458,7 @@
"enable_state_reporting": "Povolit hlášení stavu",
"info": "Díky integraci Alexa pro Home Assistant Cloud budete moci ovládat všechna zařízení v Home Assistant pomocí jakéhokoli zařízení podporujícího Alexa.",
"info_state_reporting": "Pokud povolíte hlášení stavu, Home Assistant bude posílat veškeré změny stavů všech exponovaných entit do Amazonu. Toto vám umožní sledovat aktuální stavy entity v aplikaci Alexa a použít tyto stavy k vytvoření rutin.",
"manage_entities": "Spravovat entity",
"manage_entities": "Správa entit",
"state_reporting_error": "Nelze {enable_disable} hlášení stavu.",
"sync_entities": "Synchronizovat entity",
"sync_entities_error": "Chyba při synchronizaci entit:",
@@ -1448,7 +1487,7 @@
"integrations_introduction": "Integrace pro Home Assistant Cloud vám umožní připojit se ke cloudovým službám, aniž byste museli veřejně zpřístupnit vaší instanci Home Assistant na internetu.",
"integrations_introduction2": "Na webových stránkách najdete ",
"integrations_link_all_features": " všechny dostupné funkce",
"manage_account": "Spravovat účet",
"manage_account": "Správa účtu",
"nabu_casa_account": "Účet Nabu Casa",
"not_connected": "Není připojeno",
"remote": {
@@ -1489,7 +1528,7 @@
"title": "Alexa"
},
"caption": "Home Assistant Cloud",
"description_features": "Ovládejte vzdáleně, integrace s Alexou a Google Assistant.",
"description_features": "Ovládejte, i když nejste doma, a propojte s Alexou a Google Assistantem",
"description_login": "Přihlášen jako {email}",
"description_not_login": "Nepřihlášen",
"dialog_certificate": {
@@ -1584,7 +1623,7 @@
},
"core": {
"caption": "Obecné",
"description": "Změny obecného nastavení Home Assistant",
"description": "Jednotkový systém, umístění, časové pásmo a další obecné parametry",
"section": {
"core": {
"core_config": {
@@ -1646,6 +1685,7 @@
"unknown_condition": "Neznámá podmínka"
},
"create": "Vytvořit automatizaci se zařízením",
"create_disable": "Nelze vytvořit automatizaci se zakázaným zařízením",
"no_automations": "Žádné automatizace",
"no_device_automations": "Pro toto zařízení nejsou k dispozici žádné automatizace.",
"triggers": {
@@ -1659,7 +1699,7 @@
"caption": "Zařízení",
"confirm_delete": "Opravdu chcete toto zařízení odstranit?",
"confirm_rename_entity_ids": "Chcete také přejmenovat ID entit?",
"confirm_rename_entity_ids_warning": "Žádná nastavení (např. automatizace, skripty, scény, dashboardy), která tyto entity aktuálně používá, nebudou změněna! Vše budete muset aktualizovat sami, aby se používaly nová ID entit!",
"confirm_rename_entity_ids_warning": "Žádná nastavení (např. automatizace, skripty, scény, ovládací panely), která tyto entity aktuálně používá, nebudou změněna! Vše budete muset aktualizovat sami, aby se používaly nová ID entit!",
"data_table": {
"area": "Oblast",
"battery": "Baterie",
@@ -1674,6 +1714,15 @@
"description": "Správa připojených zařízení",
"device_info": "Informace o zařízení",
"device_not_found": "Zařízení nebylo nalezeno.",
"disabled": "Zakázáno",
"disabled_by": {
"config_entry": "Položka nastavení",
"integration": "Integrace",
"user": "Uživatel"
},
"enabled_cause": "Zařízení je zakázáno přes {cause}.",
"enabled_description": "Zakázaná zařízení se nebudou zobrazovat a entity patřící k těmto zařízením budou zakázány a nebudou přidány do Home Assistant.",
"enabled_label": "Povolit zařízení",
"entities": {
"add_entities_lovelace": "Přidat do Lovelace",
"disabled_entities": "+{count} {count, plural,\n one {zakázaná entita}\n other {zakázaných entit}\n}",
@@ -1683,14 +1732,25 @@
},
"name": "Jméno",
"no_devices": "Žádná zařízení",
"picker": {
"filter": {
"filter": "Filtrovat",
"hidden_devices": "{number} {number, plural,\n one {skryté zařízení}\n few {skrytá zařízení}\n other {skrytých zařízení}\n}",
"show_all": "Zobrazit vše",
"show_disabled": "Zobrazit zakázaná zařízení"
},
"search": "Hledat zařízení"
},
"scene": {
"create": "Vytvořit scénu se zařízením",
"create_disable": "Nelze vytvořit scénu se zakázaným zařízením",
"no_scenes": "Žádné scény",
"scenes": "Scény"
},
"scenes": "Scény",
"script": {
"create": "Vytvořit skript se zařízením",
"create_disable": "Nelze vytvořit skript se zakázaným zařízením",
"no_scripts": "Žádné skripty",
"scripts": "Skripty"
},
@@ -1756,7 +1816,7 @@
"header": "Nastavení Home Assistant",
"helpers": {
"caption": "Pomocníci",
"description": "Správa prvků, které mohou pomoci při vytváře automatizací",
"description": "Prvky, které pomáhají vytvářet automatizace",
"dialog": {
"add_helper": "Přidat pomocníka",
"add_platform": "Přidat {platform}",
@@ -1788,7 +1848,7 @@
"copy_github": "Pro GitHub",
"copy_raw": "Nezpracovaný text",
"custom_uis": "Vlastní uživatelská rozhraní:",
"description": "Informace o instalaci Home Assistant",
"description": "Verze, stav systému a odkazy na dokumentaci",
"developed_by": "Vyvinuto partou úžasných lidí.",
"documentation": "Dokumentace",
"frontend": "frontend-ui",
@@ -1830,7 +1890,7 @@
"virtualenv": "Virtuální prostředí"
},
"lovelace": {
"dashboards": "Dashboardy",
"dashboards": "Ovládací panely",
"mode": "Režim",
"resources": "Zdroje"
}
@@ -1894,7 +1954,7 @@
},
"configure": "Nastavit",
"configured": "Nastaveno",
"description": "Správa integrací",
"description": "Správa integrací a jejich služeb, zařízení, ...",
"details": "Podrobnosti o integraci",
"discovered": "Objeveno",
"home_assistant_website": "stránky Home Assistant",
@@ -1938,24 +1998,24 @@
"title": "Logy"
},
"lovelace": {
"caption": "Lovelace Dashboardy",
"caption": "Ovládací panely Lovelace",
"dashboards": {
"cant_edit_default": "Standardní Lovelace dashboard nelze upravovat z uživatelského rozhraní. Můžete jej skrýt nastavením jiného dashboardu jako výchozího.",
"cant_edit_yaml": "Dashboardy definované v YAML nelze upravovat z uživatelského rozhraní. Změňte je v configuration.yaml.",
"caption": "Dashboardy",
"cant_edit_default": "Standardní ovládací panel Lovelace nelze upravovat z uživatelského rozhraní. Můžete jej skrýt nastavením jiného ovládacího panelu jako výchozího.",
"cant_edit_yaml": "Ovládací panely definované v YAML nelze upravovat z uživatelského rozhraní. Změňte je v configuration.yaml.",
"caption": "Ovládací panely",
"conf_mode": {
"storage": "Řízeno uživatelským rozhraním",
"yaml": "Soubor YAML"
},
"confirm_delete": "Opravdu chcete odstranit tento dashboard?",
"default_dashboard": "Toto je výchozí dashboard",
"confirm_delete": "Opravdu chcete odstranit tento ovládací panel?",
"default_dashboard": "Toto je výchozí ovládací panel",
"detail": {
"create": "Vytvořit",
"delete": "Smazat",
"dismiss": "Zavřít",
"edit_dashboard": "Upravit dashboard",
"edit_dashboard": "Upravit ovládací panel",
"icon": "Ikona",
"new_dashboard": "Přidat nový dashboard",
"new_dashboard": "Přidat nový ovládací panel",
"remove_default": "Odebrat jako výchozí na tomto zařízení",
"require_admin": "Pouze správce",
"set_default": "Nastavit jako výchozí na tomto zařízení",
@@ -1967,7 +2027,7 @@
"url_error_msg": "Adresa URL by měla obsahovat - a nesmí obsahovat mezery ani speciální znaky, s výjimkou _ a -"
},
"picker": {
"add_dashboard": "Přidat dashboard",
"add_dashboard": "Přidat ovládací panel",
"headers": {
"conf_mode": "Metoda nastavení",
"default": "Výchozí",
@@ -1979,7 +2039,7 @@
"open": "Otevřít"
}
},
"description": "Správa Lovelace Dashboardů",
"description": "Vytvořte vlastní sady karet pro ovládání svého domova",
"resources": {
"cant_edit_yaml": "Používáte Lovelace v režimu YAML, proto nemůžete spravovat své zdroje prostřednictvím uživatelského rozhraní. Spravujte je v souboru configuration.yaml.",
"caption": "Zdroje",
@@ -2020,7 +2080,7 @@
"description_publish": "Publikovat paket",
"listening_to": "Naslouchám",
"message_received": "Zpráva {id} přijata na {topic} v {time} :",
"payload": "Obsah",
"payload": "Obsah (povolena šablona)",
"publish": "Publikovat",
"start_listening": "Začít naslouchat",
"stop_listening": "Přestat naslouchat",
@@ -2049,7 +2109,7 @@
"network": "Síť",
"node": {
"config": "Nastavení",
"dashboard": "Dashboard"
"dashboard": "Ovládací panel"
},
"nodes": "Uzly",
"select_instance": "Vyberte instanci"
@@ -2082,7 +2142,7 @@
"node_config": {
"header": "Nastavení uzlu",
"help_source": "Popisy parametrů nastavení a text nápovědy poskytuje projekt OpenZWave.",
"introduction": "Spravujte různé parametry nastavení uzlu Z-Wave.",
"introduction": "Správa různých parametrů nastavení uzlu Z-Wave.",
"wakeup_help": "Uzly napájené z baterie musí být vzhůru, aby mohly změnit své nastavení. Pokud uzel není vzhůru, OpenZWave se pokusí aktualizovat nastavení uzlu při příštím probuzení, což může být o několik hodin (nebo dní) později. Zařízení probudíte takto:"
},
"node_metadata": {
@@ -2178,7 +2238,7 @@
"scene": {
"activated": "Aktivovaná scéna {name}.",
"caption": "Scény",
"description": "Správa scén",
"description": "Zachyťte stavy zařízení a snadno je později vyvolejte",
"editor": {
"default_name": "Nová scéna",
"devices": {
@@ -2222,7 +2282,7 @@
},
"script": {
"caption": "Skripty",
"description": "Správa skriptů",
"description": "Provádějte posloupnosti akcí",
"editor": {
"alias": "Název",
"default_name": "Nový skript",
@@ -2333,7 +2393,7 @@
"confirm_remove": "Opravdu chcete odebrat štítek {tag}?",
"confirm_remove_title": "Odebrat štítek?",
"create_automation": "Vytvořit automatizaci se štítkem",
"description": "Správa štítků",
"description": "Spusťte automatizaci skenováním NFC tagu, QR kódu atd.",
"detail": {
"companion_apps": "doprovodné aplikace",
"create": "Vytvořit",
@@ -2368,10 +2428,11 @@
"username": "Uživatelské jméno"
},
"caption": "Uživatelé",
"description": "Správa uživatelů",
"description": "Správa uživatelských účtů pro Home Assistant",
"editor": {
"activate_user": "Aktivovat uživatele",
"active": "Aktivní",
"active_tooltip": "Určuje, zda se uživatel může přihlásit",
"admin": "Administrátor",
"caption": "Zobrazit uživatele",
"change_password": "Změnit heslo",
@@ -2564,7 +2625,7 @@
"value": "Hodnota",
"wakeup_interval": "Interval probuzení"
},
"description": "Spravujte svou síť Z-Wave",
"description": "Správa síťě Z-Wave",
"learn_more": "Další informace o Z-Wave",
"network_management": {
"header": "Správa sítě Z-Wave",
@@ -2703,11 +2764,11 @@
},
"templates": {
"all_listeners": "Tato šablona naslouchá všem změnám stavu.",
"description": "Šablony jsou vykreslovány pomocí Jinja2 šablonového enginu s některými specifickými rozšířeními pro Home Assistant.",
"description": "Šablony jsou vykreslovány pomocí šablonovacího systému Jinja2 s některými specifickými rozšířeními pro Home Assistant.",
"domain": "Doména",
"editor": "Editor šablon",
"entity": "Entita",
"jinja_documentation": "Dokumentace šablony Jinja2",
"jinja_documentation": "Dokumentace šablon Jinja2",
"listeners": "Tato šablona naslouchá následujícím změnám stavu:",
"no_listeners": "Tato šablona nenaslouchá žádným událostem a nebude automaticky aktualizována.",
"reset": "Obnovit ukázkovou šablonu",
@@ -2715,7 +2776,7 @@
"template_extensions": "Rozšíření šablony Home Assistant",
"time": "Tato šablona se aktualizuje na začátku každé minuty.",
"title": "Šablony",
"unknown_error_template": "Šablona vykreslování neznámých chyb"
"unknown_error_template": "Neznámá chyba při vykreslení šablony"
}
}
},
@@ -2780,7 +2841,7 @@
}
},
"changed_toast": {
"message": "Nastavení Lovelace pro tento dashboard bylo aktualizováno. Chcete obnovit stránku?",
"message": "Nastavení Lovelace pro tento ovládací panel bylo aktualizováno. Chcete obnovit stránku?",
"refresh": "Obnovit"
},
"editor": {
@@ -3121,17 +3182,17 @@
"save_config": {
"cancel": "Zahodit změnu",
"close": "Zavřít",
"empty_config": "Začít s prázdným dashboardem",
"empty_config": "Začít s prázdným ovládacím panel",
"header": "Převzít kontrolu nad vaší Lovelace UI",
"para": "Tento dashboard momentálně spravuje Home Assistant. Je automaticky aktualizován při přidání nové entity nebo Lovelace komponenty. Pokud převezmete kontrolu, nebudeme již provádět změny automaticky za vás. Vždy si můžete vytvořit nový dashboard na hraní.",
"para": "Tento ovládací panel momentálně spravuje Home Assistant. Je automaticky aktualizován při přidání nové entity nebo Lovelace komponenty. Pokud převezmete kontrolu, nebudeme již provádět změny automaticky za vás. Vždy si můžete vytvořit nový ovládací panel na hraní.",
"para_sure": "Opravdu chcete převzít kontrolu nad uživalským rozhraním ?",
"save": "Převzít kontrolu",
"yaml_config": "Abyste mohli snadněji začít, zde je aktuální nastavení tohoto dashboardu:",
"yaml_control": "Chcete-li převzít kontrolu v režimu YAML, vytvořte soubor YAML s názvem, který jste uvedli ve svém nastavení pro tento dashboard, nebo výchozí \"ui-lovelace.yaml\".",
"yaml_config": "Abyste mohli snadněji začít, zde je aktuální nastavení tohoto ovládacího panelu:",
"yaml_control": "Chcete-li převzít kontrolu v režimu YAML, vytvořte soubor YAML s názvem, který jste uvedli ve svém nastavení pro tento ovládací panel, nebo výchozí \"ui-lovelace.yaml\".",
"yaml_mode": "Používáte režim YAML, což znamená, že nemůžete změnit nastavení Lovelace z uživatelského rozhraní. Pokud chcete měnit Lovelace z uživatelského rozhraní, odstraňte \"mode: yaml\" z vašeho nastavení Lovelace v \"configuration.yaml\"."
},
"select_view": {
"dashboard_label": "Dashboard",
"dashboard_label": "Ovládací panel",
"header": "Vyberte pohled"
},
"sub-element-editor": {
@@ -3156,7 +3217,7 @@
},
"menu": {
"close": "Zavřít",
"configure_ui": "Upravit Dashboard",
"configure_ui": "Upravit ovládací panel",
"exit_edit_mode": "Ukončit režim úprav uživatelského rozhraní",
"help": "Nápověda",
"refresh": "Obnovit",
@@ -3390,10 +3451,13 @@
"change_password": {
"confirm_new_password": "Potvrďte nové heslo",
"current_password": "Současné heslo",
"error_new_is_old": "Nové heslo se musí lišit od aktuálního hesla",
"error_new_mismatch": "Zadaná nová hesla se neshodují",
"error_required": "Povinný",
"header": "Změnit heslo",
"new_password": "Nové heslo",
"submit": "Odeslat"
"submit": "Odeslat",
"success": "Heslo bylo úspěšně změněno"
},
"current_user": "Nyní jste přihlášeni jako {fullName}.",
"customize_sidebar": {
@@ -3402,9 +3466,9 @@
"header": "Změna pořadí a skrytí položek postranního panelu"
},
"dashboard": {
"description": "Vyberte výchozí dashboard pro toto zařízení.",
"dropdown_label": "Dashboard",
"header": "Dashboard"
"description": "Vyberte výchozí ovládací panel pro toto zařízení.",
"dropdown_label": "Ovládací panel",
"header": "Ovládací panel"
},
"enable_shortcuts": {
"description": "Povolte nebo zakažte klávesové zkratky pro provádění různých akcí v uživatelském rozhraní.",

View File

@@ -710,6 +710,9 @@
"service-picker": {
"service": "Dienst"
},
"target-picker": {
"remove_area_id": "Bereich entfernen"
},
"user-picker": {
"add_user": "Benutzer hinzufügen",
"no_user": "Kein Benutzer",
@@ -1692,6 +1695,11 @@
"description": "Verbundene Geräte verwalten",
"device_info": "Geräteinformationen",
"device_not_found": "Gerät nicht gefunden.",
"disabled": "Deaktiviert",
"disabled_by": {
"user": "Benutzer"
},
"enabled_label": "Gerät aktivieren",
"entities": {
"add_entities_lovelace": "Zu Lovelace hinzufügen",
"disabled_entities": "+{count} {count, plural,\n one {deaktivierte Entität}\n other {deaktivierte Entitäten}\n}",
@@ -1701,6 +1709,13 @@
},
"name": "Name",
"no_devices": "Keine Geräte",
"picker": {
"filter": {
"filter": "Filter",
"show_all": "Alle anzeigen"
},
"search": "Geräte suchen"
},
"scene": {
"create": "Szene mit Gerät erstellen",
"no_scenes": "Keine Szenen",
@@ -2474,6 +2489,7 @@
"CONFIGURED_status_text": "Initialisieren",
"INITIALIZED": "Initialisierung abgeschlossen",
"INITIALIZED_status_text": "Das Gerät ist einsatzbereit",
"INTERVIEW_COMPLETE": "Interview abgeschlossen",
"INTERVIEW_COMPLETE_status_text": "Konfigurieren",
"PAIRED": "Gerät gefunden"
},
@@ -3406,10 +3422,12 @@
"change_password": {
"confirm_new_password": "Neues Passwort Bestätigen",
"current_password": "Aktuelles Passwort",
"error_new_is_old": "Das neue Kennwort muss sich von dem aktuellen Kennwort unterscheiden.",
"error_required": "Erforderlich",
"header": "Passwort ändern",
"new_password": "Neues Passwort",
"submit": "Absenden"
"submit": "Absenden",
"success": "Das Passwort wurde erfolgreich geändert"
},
"current_user": "Du bist derzeit als {fullName} angemeldet.",
"customize_sidebar": {

View File

@@ -2,6 +2,7 @@
"config_entry": {
"disabled_by": {
"config_entry": "Config Entry",
"device": "Device",
"integration": "Integration",
"user": "User"
}
@@ -546,6 +547,8 @@
"add_new": "Add new area…",
"area": "Area",
"clear": "Clear",
"no_areas": "You don't have any areas",
"no_match": "No matching areas found",
"show_areas": "Show areas"
},
"blueprint-picker": {
@@ -566,6 +569,8 @@
"clear": "Clear",
"device": "Device",
"no_area": "No area",
"no_devices": "You don't have any devices",
"no_match": "No matching devices found",
"show_devices": "Show devices",
"toggle": "Toggle"
},
@@ -577,6 +582,7 @@
"entity-picker": {
"clear": "Clear",
"entity": "Entity",
"no_match": "No matching entities found",
"show_entities": "Show entities"
}
},
@@ -710,6 +716,16 @@
"service-picker": {
"service": "Service"
},
"target-picker": {
"add_area_id": "Pick area",
"add_device_id": "Pick device",
"add_entity_id": "Pick entity",
"expand_area_id": "Expand this area in the seperate devices and entities that it contains. After expanding it will not update the devices and entities when the area changes.",
"expand_device_id": "Expand this device in seperate entities. After expanding it will not update the entities when the device changes.",
"remove_area_id": "Remove area",
"remove_device_id": "Remove device",
"remove_entity_id": "Remove entity"
},
"user-picker": {
"add_user": "Add user",
"no_user": "No user",
@@ -733,6 +749,7 @@
"editor": {
"confirm_delete": "Are you sure you want to delete this entry?",
"delete": "Delete",
"device_disabled": "The device of this entity is disabled.",
"enabled_cause": "Disabled by {cause}.",
"enabled_delay_confirm": "The enabled entities will be added to Home Assistant in {delay} seconds",
"enabled_description": "Disabled entities will not be added to Home Assistant.",
@@ -743,6 +760,7 @@
"icon_error": "Icons should be in the format 'prefix:iconname', e.g. 'mdi:home'",
"name": "Name",
"note": "Note: This might not work yet with all integrations.",
"open_device_settings": "Open device settings",
"unavailable": "This entity is not currently available.",
"update": "Update"
},
@@ -1030,7 +1048,7 @@
"confirmation_text": "All devices in this area will become unassigned.",
"confirmation_title": "Are you sure you want to delete this area?"
},
"description": "Manage areas in your home",
"description": "Group devices and entities into areas",
"editor": {
"area_id": "Area ID",
"create": "Create",
@@ -1052,7 +1070,7 @@
},
"automation": {
"caption": "Automations",
"description": "Manage automations",
"description": "Create custom behavior rules for your home",
"dialog_new": {
"blueprint": {
"use_blueprint": "Use a blueprint"
@@ -1400,15 +1418,15 @@
"blueprint": {
"add": {
"error_no_url": "Please enter the URL of the blueprint.",
"file_name": "Local blueprint file name",
"header": "Add new blueprint",
"import_btn": "Import blueprint",
"import_header": "Import \"{name}\" (type: {domain})",
"file_name": "Blueprint Path",
"header": "Import a blueprint",
"import_btn": "Preview blueprint",
"import_header": "Blueprint \"{name}\"",
"import_introduction": "You can import blueprints of other users from Github and the community forums. Enter the URL of the blueprint below.",
"importing": "Importing blueprint...",
"importing": "Loading blueprint...",
"raw_blueprint": "Blueprint content",
"save_btn": "Save blueprint",
"saving": "Saving blueprint...",
"save_btn": "Import blueprint",
"saving": "Importing blueprint...",
"unsupported_blueprint": "This blueprint is not supported",
"url": "URL of the blueprint"
},
@@ -1425,8 +1443,8 @@
"file_name": "File name",
"name": "Name"
},
"introduction": "The blueprint editor allows you to create and edit blueprints.",
"learn_more": "Learn more about blueprints",
"introduction": "The blueprint configuration allows you to import and manage your blueprints.",
"learn_more": "Learn more about using blueprints",
"use_blueprint": "Create automation"
}
},
@@ -1510,7 +1528,7 @@
"title": "Alexa"
},
"caption": "Home Assistant Cloud",
"description_features": "Control away from home, integrate with Alexa and Google Assistant.",
"description_features": "Control home when away and integrate with Alexa and Google Assistant",
"description_login": "Logged in as {email}",
"description_not_login": "Not logged in",
"dialog_certificate": {
@@ -1605,7 +1623,7 @@
},
"core": {
"caption": "General",
"description": "Change your general Home Assistant configuration",
"description": "Unit system, location, time zone & other general parameters",
"section": {
"core": {
"core_config": {
@@ -1667,6 +1685,7 @@
"unknown_condition": "Unknown condition"
},
"create": "Create automation with device",
"create_disable": "Can't create automation with disabled device",
"no_automations": "No automations",
"no_device_automations": "There are no automations available for this device.",
"triggers": {
@@ -1692,9 +1711,18 @@
"no_devices": "No devices"
},
"delete": "Delete",
"description": "Manage connected devices",
"description": "Manage configured devices",
"device_info": "Device info",
"device_not_found": "Device not found.",
"disabled": "Disabled",
"disabled_by": {
"config_entry": "Config Entry",
"integration": "Integration",
"user": "User"
},
"enabled_cause": "The device is disabled by {cause}.",
"enabled_description": "Disabled devices will not be shown and entities belonging to the device will be disabled and not added to Home Assistant.",
"enabled_label": "Enable device",
"entities": {
"add_entities_lovelace": "Add to Lovelace",
"disabled_entities": "+{count} {count, plural,\n one {disabled entity}\n other {disabled entities}\n}",
@@ -1704,14 +1732,25 @@
},
"name": "Name",
"no_devices": "No devices",
"picker": {
"filter": {
"filter": "Filter",
"hidden_devices": "{number} hidden {number, plural,\n one {device}\n other {devices}\n}",
"show_all": "Show all",
"show_disabled": "Show disabled devices"
},
"search": "Search devices"
},
"scene": {
"create": "Create scene with device",
"create_disable": "Can't create scene with disabled device",
"no_scenes": "No scenes",
"scenes": "Scenes"
},
"scenes": "Scenes",
"script": {
"create": "Create script with device",
"create_disable": "Can't create script with disabled device",
"no_scripts": "No scripts",
"scripts": "Scripts"
},
@@ -1777,7 +1816,7 @@
"header": "Configure Home Assistant",
"helpers": {
"caption": "Helpers",
"description": "Manage elements that help build automations",
"description": "Elements that help build automations",
"dialog": {
"add_helper": "Add helper",
"add_platform": "Add {platform}",
@@ -1809,7 +1848,7 @@
"copy_github": "For GitHub",
"copy_raw": "Raw Text",
"custom_uis": "Custom UIs:",
"description": "View info about your Home Assistant installation",
"description": "Version, system health and links to documentation",
"developed_by": "Developed by a bunch of awesome people.",
"documentation": "Documentation",
"frontend": "frontend-ui",
@@ -1915,7 +1954,7 @@
},
"configure": "Configure",
"configured": "Configured",
"description": "Manage integrations",
"description": "Manage integrations with services, devices, ...",
"details": "Integration details",
"discovered": "Discovered",
"home_assistant_website": "Home Assistant website",
@@ -2000,7 +2039,7 @@
"open": "Open"
}
},
"description": "Manage your Lovelace Dashboards",
"description": "Create customized sets of cards to control your home",
"resources": {
"cant_edit_yaml": "You are using Lovelace in YAML mode, therefore you cannot manage your resources through the UI. Manage them in configuration.yaml.",
"caption": "Resources",
@@ -2199,7 +2238,7 @@
"scene": {
"activated": "Activated scene {name}.",
"caption": "Scenes",
"description": "Manage scenes",
"description": "Capture device states and easily recall them later",
"editor": {
"default_name": "New Scene",
"devices": {
@@ -2243,7 +2282,7 @@
},
"script": {
"caption": "Scripts",
"description": "Manage scripts",
"description": "Execute a sequence of actions",
"editor": {
"alias": "Name",
"default_name": "New Script",
@@ -2354,7 +2393,7 @@
"confirm_remove": "Are you sure you want to remove tag {tag}?",
"confirm_remove_title": "Remove tag?",
"create_automation": "Create automation with tag",
"description": "Manage tags",
"description": "Trigger automations when a NFC tag, QR code, etc. is scanned",
"detail": {
"companion_apps": "companion apps",
"create": "Create",
@@ -2389,10 +2428,11 @@
"username": "Username"
},
"caption": "Users",
"description": "Manage users",
"description": "Manage the Home Assistant user accounts",
"editor": {
"activate_user": "Activate user",
"active": "Active",
"active_tooltip": "Controls if user can login",
"admin": "Administrator",
"caption": "View user",
"change_password": "Change password",
@@ -3411,10 +3451,13 @@
"change_password": {
"confirm_new_password": "Confirm New Password",
"current_password": "Current Password",
"error_new_is_old": "New password must be different than current password",
"error_new_mismatch": "Entered new password values do not match",
"error_required": "Required",
"header": "Change Password",
"new_password": "New Password",
"submit": "Submit"
"submit": "Submit",
"success": "Password changed successfully"
},
"current_user": "You are currently logged in as {fullName}.",
"customize_sidebar": {

View File

@@ -666,6 +666,16 @@
"service-picker": {
"service": "Servicio"
},
"target-picker": {
"add_area_id": "Seleccionar área",
"add_device_id": "Seleccionar dispositivo",
"add_entity_id": "Seleccionar entidad",
"expand_area_id": "Expanda esta área en los dispositivos y entidades independientes que contiene. Después de expandirlo no actualizará los dispositivos y entidades cuando cambie el área.",
"expand_device_id": "Expanda este dispositivo en entidades independientes. Después de expandirlo no actualizará las entidades cuando cambie el dispositivo.",
"remove_area_id": "Eliminar área",
"remove_device_id": "Eliminar dispositivo",
"remove_entity_id": "Eliminar entidad"
},
"user-picker": {
"add_user": "Agregar usuario",
"no_user": "Sin usuario",
@@ -689,6 +699,7 @@
"editor": {
"confirm_delete": "¿Está seguro de que desea eliminar esta entrada?",
"delete": "Eliminar",
"device_disabled": "El dispositivo de esta entidad está deshabilitado.",
"enabled_cause": "Deshabilitado por {cause}.",
"enabled_delay_confirm": "Las entidades habilitadas se agregarán a Home Assistant en {delay} segundos",
"enabled_description": "Las entidades deshabilitadas no serán agregadas a Home Assistant.",
@@ -699,6 +710,7 @@
"icon_error": "Los iconos deben estar en el formato 'prefijo:nombre del icono', por ejemplo, 'mdi: home'",
"name": "Sustituir nombre",
"note": "Nota: esto podría no funcionar todavía con todas las integraciones.",
"open_device_settings": "Abrir la configuración del dispositivo",
"unavailable": "Esta entidad no está disponible actualmente.",
"update": "Actualizar"
},
@@ -1489,6 +1501,7 @@
"unknown_condition": "Condición desconocida"
},
"create": "Crear automatización con dispositivo",
"create_disable": "No se puede crear automatización con un dispositivo deshabilitado",
"no_automations": "Sin automatizaciones",
"no_device_automations": "No hay automatizaciones disponibles para este dispositivo.",
"triggers": {
@@ -1515,6 +1528,14 @@
"description": "Administrar dispositivos conectados",
"device_info": "Información del dispositivo",
"device_not_found": "Dispositivo no encontrado.",
"disabled": "Deshabilitado",
"disabled_by": {
"config_entry": "Entrada de configuración",
"integration": "Integración",
"user": "Usuario"
},
"enabled_description": "Los dispositivos deshabilitados no se mostrarán y las entidades que pertenecen al dispositivo se deshabilitarán y no se agregarán a Home Assistant.",
"enabled_label": "Habilitar dispositivo",
"entities": {
"add_entities_lovelace": "Agregar a Lovelace",
"disabled_entities": "+{count} {count, plural,\n one {entidad deshabilitada}\n other {entidades deshabilitadas}\n}",
@@ -1524,14 +1545,24 @@
},
"name": "Nombre",
"no_devices": "Sin dispositivos",
"picker": {
"filter": {
"filter": "Filtrar",
"show_all": "Mostrar todo",
"show_disabled": "Mostrar los dispositivos deshabilitadas"
},
"search": "Mostrar dispositivos"
},
"scene": {
"create": "Crear escena con dispositivo",
"create_disable": "No se puede crear una escena con un dispositivo deshabilitado",
"no_scenes": "Sin escenas",
"scenes": "Escenas"
},
"scenes": "Escenas",
"script": {
"create": "Crear script con dispositivo",
"create_disable": "No se puede crear un script con un dispositivo deshabilitado",
"no_scripts": "Sin scripts",
"scripts": "Scripts"
},
@@ -2168,6 +2199,7 @@
"editor": {
"activate_user": "Activar usuario",
"active": "Activo",
"active_tooltip": "Controla si el usuario puede iniciar sesión",
"admin": "Administrador",
"caption": "Ver usuario",
"change_password": "Cambiar contraseña",
@@ -3136,10 +3168,13 @@
"change_password": {
"confirm_new_password": "Confirmar nueva contraseña",
"current_password": "Contraseña actual",
"error_new_is_old": "La nueva contraseña debe ser diferente a la contraseña actual",
"error_new_mismatch": "Las contraseñas no coinciden",
"error_required": "Necesario",
"header": "Cambiar contraseña",
"new_password": "Nueva contraseña",
"submit": "Enviar"
"submit": "Enviar",
"success": "La contraseña se cambió con éxito"
},
"current_user": "Actualmente estás conectado como {fullName} .",
"customize_sidebar": {

View File

@@ -2,6 +2,7 @@
"config_entry": {
"disabled_by": {
"config_entry": "Entrada de configuración",
"device": "Dispositivo",
"integration": "Integración",
"user": "Usuario"
}
@@ -546,6 +547,8 @@
"add_new": "Añade una nueva área ...",
"area": "Área",
"clear": "Limpiar",
"no_areas": "No tienes áreas",
"no_match": "No se han encontrado áreas coincidentes",
"show_areas": "Mostrar áreas"
},
"blueprint-picker": {
@@ -566,6 +569,8 @@
"clear": "Limpiar",
"device": "Dispositivo",
"no_area": "Ningún área",
"no_devices": "No tienes ningún dispositivo",
"no_match": "No se han encontrado dispositivos coincidentes",
"show_devices": "Mostrar dispositivos",
"toggle": "Interruptor"
},
@@ -577,6 +582,7 @@
"entity-picker": {
"clear": "Limpiar",
"entity": "Entidad",
"no_match": "No se han encontrado entidades coincidentes",
"show_entities": "Mostrar entidades"
}
},
@@ -710,6 +716,16 @@
"service-picker": {
"service": "Servicio"
},
"target-picker": {
"add_area_id": "Seleccionar área",
"add_device_id": "Seleccionar dispositivo",
"add_entity_id": "Seleccionar entidad",
"expand_area_id": "Expande este área en los dispositivos y entidades independientes que contiene. Después de expandirse, no actualizará los dispositivos y entidades cuando cambie el área.",
"expand_device_id": "Expande este dispositivo en entidades separadas. Después de expandirse, no actualizará las entidades cuando cambie el dispositivo.",
"remove_area_id": "Eliminar área",
"remove_device_id": "Eliminar dispositivo",
"remove_entity_id": "Eliminar entidad"
},
"user-picker": {
"add_user": "Añadir usuario",
"no_user": "Sin usuario",
@@ -733,6 +749,7 @@
"editor": {
"confirm_delete": "¿Estás seguro de que quieres eliminar este elemento?",
"delete": "Eliminar",
"device_disabled": "El dispositivo de esta entidad está deshabilitado.",
"enabled_cause": "Desactivado por {cause}.",
"enabled_delay_confirm": "Las entidades habilitadas se agregarán a Home Assistant en {delay} segundos",
"enabled_description": "Las entidades deshabilitadas no se agregarán a Home Assistant.",
@@ -743,6 +760,7 @@
"icon_error": "Los iconos deben tener el formato 'prefijo:nombreicono', por ejemplo, 'mdi:home'",
"name": "Nombre",
"note": "Nota: puede que esto no funcione todavía con todas las integraciones",
"open_device_settings": "Abrir la configuración del dispositivo",
"unavailable": "Esta entidad no está disponible actualmente.",
"update": "Actualizar"
},
@@ -1030,7 +1048,7 @@
"confirmation_text": "Todos los dispositivos en esta área quedarán sin asignar.",
"confirmation_title": "¿Estás seguro de que deseas eliminar esta área?"
},
"description": "Administra áreas en tu hogar",
"description": "Agrupa dispositivos y entidades en áreas",
"editor": {
"area_id": "ID de área",
"create": "Crear",
@@ -1052,7 +1070,7 @@
},
"automation": {
"caption": "Automatizaciones",
"description": "Administra las automatizaciones",
"description": "Crea reglas de comportamiento personalizadas para tu hogar",
"dialog_new": {
"blueprint": {
"use_blueprint": "Usa un plano"
@@ -1075,7 +1093,7 @@
"duplicate": "Duplicar",
"header": "Acciones",
"introduction": "Las acciones son lo que hará Home Assistant cuando se desencadene la automatización.",
"learn_more": "Saber más sobre las acciones.",
"learn_more": "Aprende más sobre las acciones.",
"name": "Acción",
"type_select": "Tipo de acción",
"type": {
@@ -1162,7 +1180,7 @@
"duplicate": "Duplicar",
"header": "Condiciones",
"introduction": "Las condiciones son opcionales e impedirán cualquier\nejecución posterior a menos que se cumplan todas las condiciones.",
"learn_more": "Saber más sobre las condiciones",
"learn_more": "Aprende más sobre las condiciones",
"name": "Condición",
"type_select": "Tipo de condición",
"type": {
@@ -1266,7 +1284,7 @@
"duplicate": "Duplicar",
"header": "Desencadenantes",
"introduction": "Los desencadenantes son los que inician el funcionamiento de una regla de automatización. Es posible especificar varios desencadenantes para la misma regla. Una vez que se inicia un desencadenante, Home Assistant comprobará las condiciones, si las hubiere, y ejecutará la acción.",
"learn_more": "Saber más sobre los desencadenantes",
"learn_more": "Aprende más sobre los desencadenantes",
"name": "Desencadenante",
"type_select": "Tipo de desencadenante",
"type": {
@@ -1374,7 +1392,7 @@
"name": "Nombre"
},
"introduction": "El editor de automatización te permite crear y editar automatizaciones. En el enlace siguiente puedes leer las instrucciones para asegurarte de que has configurado correctamente Home Assistant.",
"learn_more": "Saber más sobre las automatizaciones",
"learn_more": "Aprende más sobre las automatizaciones",
"no_automations": "No pudimos encontrar ninguna automatización editable",
"only_editable": "Solo las automatizaciones definidas en automations.yaml son editables.",
"pick_automation": "Elije la automatización para editar",
@@ -1400,15 +1418,15 @@
"blueprint": {
"add": {
"error_no_url": "Por favor, introduce la URL del plano.",
"file_name": "Nombre de archivo del plano local",
"header": "Añadir nuevo plano",
"import_btn": "Importar plano",
"import_header": "Importar {name} (tipo: {domain})",
"file_name": "Ruta del plano",
"header": "Importar un plano",
"import_btn": "Vista previa del plano",
"import_header": "Plano \"{name}\"",
"import_introduction": "Puedes importar planos de otros usuarios desde Github y los foros de la comunidad. Introduce la URL del plano a continuación.",
"importing": "Importando plano...",
"importing": "Cargando plano...",
"raw_blueprint": "Contenido del plano",
"save_btn": "Guardar plano",
"saving": "Guardando plano...",
"save_btn": "Importar plano",
"saving": "Importando plano...",
"unsupported_blueprint": "Este plano no es compatible",
"url": "URL del plano"
},
@@ -1425,8 +1443,8 @@
"file_name": "Nombre de archivo",
"name": "Nombre"
},
"introduction": "El editor de planos te permite crear y editar planos.",
"learn_more": "Más información sobre planos",
"introduction": "La configuración de planos te permite importar y administrar tus planos.",
"learn_more": "Aprende más sobre el uso de planos",
"use_blueprint": "Crear automatización"
}
},
@@ -1486,7 +1504,7 @@
"webhooks": {
"disable_hook_error_msg": "No se pudo deshabilitar el webhook:",
"info": "Cualquier cosa que esté configurada para ser activada por un webhook puede recibir una URL de acceso público para permitirte enviar datos a Home Assistant desde cualquier lugar, sin exponer tu instancia a Internet.",
"link_learn_more": "Saber más sobre la creación de automatizaciones basadas en webhook.",
"link_learn_more": "Aprende más sobre la creación de automatizaciones basadas en webhook.",
"loading": "Cargando ...",
"manage": "Administrar",
"no_hooks_yet": "Parece que aún no tienes webhooks. Comienza configurando un",
@@ -1510,7 +1528,7 @@
"title": "Alexa"
},
"caption": "Nube Home Assistant",
"description_features": "Control fuera de casa, integración con Alexa y Google Assistant.",
"description_features": "Controla tu hogar cuando estés fuera e intégralo con Alexa y Google Assistant",
"description_login": "Has iniciado sesión como {email}",
"description_not_login": "No has iniciado sesión",
"dialog_certificate": {
@@ -1566,7 +1584,7 @@
"introduction2": "Este servicio está a cargo de nuestro socio.",
"introduction2a": ", una compañía fundada por los fundadores de Home Assistant y Hass.io.",
"introduction3": "Home Assistant Cloud es un servicio de suscripción con una prueba gratuita de un mes. No se necesita información de pago.",
"learn_more_link": "Saber más sobre Home Assistant Cloud",
"learn_more_link": "Aprende más sobre Home Assistant Cloud",
"password": "Contraseña",
"password_error_msg": "Las contraseñas tienen al menos 8 caracteres.",
"sign_in": "Inicia sesión",
@@ -1605,7 +1623,7 @@
},
"core": {
"caption": "Configuración general",
"description": "Cambia la configuración general de Home Assistant",
"description": "Sistema de unidades, ubicación, zona horaria y otros parámetros generales",
"section": {
"core": {
"core_config": {
@@ -1667,6 +1685,7 @@
"unknown_condition": "Condición desconocida"
},
"create": "Crear automatización con el dispositivo",
"create_disable": "No se puede crear una automatización con un dispositivo deshabilitado",
"no_automations": "Sin automatizaciones",
"no_device_automations": "No hay automatizaciones disponibles para este dispositivo.",
"triggers": {
@@ -1692,9 +1711,18 @@
"no_devices": "Sin dispositivos"
},
"delete": "Eliminar",
"description": "Administrar dispositivos conectados",
"description": "Administra dispositivos configurados",
"device_info": "Información del dispositivo",
"device_not_found": "Dispositivo no encontrado.",
"disabled": "Deshabilitado",
"disabled_by": {
"config_entry": "Entrada de configuración",
"integration": "Integración",
"user": "Usuario"
},
"enabled_cause": "El dispositivo está deshabilitado por {cause} .",
"enabled_description": "Los dispositivos deshabilitados no se mostrarán y las entidades que pertenecen al dispositivo se deshabilitarán y no se añadirán a Home Assistant.",
"enabled_label": "Habilitar dispositivo",
"entities": {
"add_entities_lovelace": "Añadir a Lovelace",
"disabled_entities": "+{count} {count, plural,\n one {entidad deshabilitada}\n other {entidades deshabilitadas}\n}",
@@ -1704,14 +1732,25 @@
},
"name": "Nombre",
"no_devices": "Sin dispositivos",
"picker": {
"filter": {
"filter": "Filtrar",
"hidden_devices": "{number} {number, plural,\n one {dispositivo oculto}\n other {dispositivos ocultos}\n}",
"show_all": "Mostrar todo",
"show_disabled": "Mostrar dispositivos deshabilitados"
},
"search": "Buscar dispositivos"
},
"scene": {
"create": "Crear escena con el dispositivo",
"create_disable": "No se puede crear una escena con un dispositivo deshabilitado",
"no_scenes": "Sin escenas",
"scenes": "Escenas"
},
"scenes": "Escenas",
"script": {
"create": "Crear script con el dispositivo",
"create_disable": "No se puede crear un script con un dispositivo deshabilitado",
"no_scripts": "Sin scripts",
"scripts": "Scripts"
},
@@ -1777,7 +1816,7 @@
"header": "Configurar Home Assistant",
"helpers": {
"caption": "Ayudantes",
"description": "Administra los elementos que pueden ayudar a construir automatizaciones.",
"description": "Elementos que ayudan a construir automatizaciones",
"dialog": {
"add_helper": "Añadir ayudante",
"add_platform": "Añadir {platform}",
@@ -1809,7 +1848,7 @@
"copy_github": "Para GitHub",
"copy_raw": "Texto sin procesar",
"custom_uis": "IU personalizadas:",
"description": "Ver información sobre tu instalación de Home Assistant",
"description": "Versión, estado del sistema y enlaces a la documentación",
"developed_by": "Desarrollado por un montón de gente impresionante.",
"documentation": "Documentación",
"frontend": "interfaz de usuario",
@@ -1915,7 +1954,7 @@
},
"configure": "Configurar",
"configured": "Configurado",
"description": "Administra las integraciones",
"description": "Gestiona integraciones con servicios, dispositivos, ...",
"details": "Detalles de la integración",
"discovered": "Descubierto",
"home_assistant_website": "Sitio web de Home Assistant",
@@ -2000,7 +2039,7 @@
"open": "Abrir"
}
},
"description": "Administra tus Paneles de Control Lovelace",
"description": "Crea conjuntos personalizados de tarjetas para controlar tu hogar",
"resources": {
"cant_edit_yaml": "Estás utilizando Lovelace en modo YAML, por tanto no puedes administrar tus recursos a través de la IU. Adminístralos en configuration.yaml.",
"caption": "Recursos",
@@ -2190,7 +2229,7 @@
"update": "Actualizar"
},
"introduction": "Aquí puedes definir a cada persona de interés en Home Assistant.",
"learn_more": "Saber más sobre las personas",
"learn_more": "Aprende más sobre las personas",
"no_persons_created_yet": "Parece que aún no has creado ninguna persona.",
"note_about_persons_configured_in_yaml": "Nota: las personas configuradas a través de configuration.yaml no se pueden editar a través de la IU.",
"person_not_found": "No pudimos encontrar a la persona que intentabas editar.",
@@ -2199,7 +2238,7 @@
"scene": {
"activated": "Activada escena {name}.",
"caption": "Escenas",
"description": "Administra las escenas",
"description": "Captura los estados de los dispositivos y recupéralos fácilmente más tarde",
"editor": {
"default_name": "Nueva Escena",
"devices": {
@@ -2234,7 +2273,7 @@
"name": "Nombre"
},
"introduction": "El editor de escenas te permite crear y editar escenas. Por favor, sigue el siguiente enlace para leer las instrucciones para asegurarte de que has configurado Home Assistant correctamente.",
"learn_more": "Saber más sobre las escenas",
"learn_more": "Aprende más sobre las escenas",
"no_scenes": "No pudimos encontrar ninguna escena editable",
"only_editable": "Solo las escenas definidas en scenes.yaml son editables.",
"pick_scene": "Elige una escena para editar",
@@ -2243,7 +2282,7 @@
},
"script": {
"caption": "Scripts",
"description": "Administra los scripts",
"description": "Ejecuta una secuencia de acciones",
"editor": {
"alias": "Nombre",
"default_name": "Nuevo script",
@@ -2255,7 +2294,7 @@
"id_already_exists": "Este ID ya existe",
"id_already_exists_save_error": "No puedes guardar este script porque el ID no es único, elije otro ID o déjalo en blanco para generar uno automáticamente.",
"introduction": "Utiliza scripts para ejecutar una secuencia de acciones.",
"link_available_actions": "Saber más sobre las acciones disponibles.",
"link_available_actions": "Aprende más sobre las acciones disponibles.",
"load_error_not_editable": "Solo los scripts dentro de scripts.yaml son editables.",
"max": {
"parallel": "Número máximo de ejecuciones paralelas",
@@ -2284,7 +2323,7 @@
"name": "Nombre"
},
"introduction": "El editor de scripts te permite crear y editar scripts. Por favor, sigue el siguiente enlace para leer las instrucciones para asegurarte de que has configurado Home Assistant correctamente.",
"learn_more": "Saber más sobre los scripts",
"learn_more": "Aprende más sobre los scripts",
"no_scripts": "No hemos encontrado ningún script editable",
"run_script": "Ejecutar script",
"show_info": "Mostrar información sobre el script",
@@ -2354,7 +2393,7 @@
"confirm_remove": "¿Estás seguro de que quieres eliminar la etiqueta {tag} ?",
"confirm_remove_title": "¿Eliminar etiqueta?",
"create_automation": "Crear automatización con etiqueta",
"description": "Administrar etiquetas",
"description": "Activa automatizaciones cuando se escanea una etiqueta NFC, un código QR, etc.",
"detail": {
"companion_apps": "aplicaciones complementarias",
"create": "Crear",
@@ -2373,7 +2412,7 @@
"last_scanned": "Última vez escaneada",
"name": "Nombre"
},
"learn_more": "Más información sobre las etiquetas",
"learn_more": "Aprende más sobre las etiquetas",
"never_scanned": "Nunca escaneado",
"no_tags": "Sin etiquetas",
"write": "Escribir"
@@ -2389,10 +2428,11 @@
"username": "Nombre de usuario"
},
"caption": "Usuarios",
"description": "Administra usuarios",
"description": "Administra las cuentas de usuario de Home Assistant",
"editor": {
"activate_user": "Activar usuario",
"active": "Activo",
"active_tooltip": "Controla si el usuario puede iniciar sesión",
"admin": "Administrador",
"caption": "Ver usuario",
"change_password": "Cambiar la contraseña",
@@ -2586,7 +2626,7 @@
"wakeup_interval": "Intervalo de activación"
},
"description": "Administra tu red Z-Wave",
"learn_more": "Saber más sobre Z-Wave",
"learn_more": "Aprende más sobre Z-Wave",
"network_management": {
"header": "Administración de red Z-Wave",
"introduction": "Ejecutar comandos que afectan a la red Z-Wave. No recibirás comentarios sobre si la mayoría de los comandos tuvieron éxito, pero puedes consultar el Registro OZW para intentar averiguarlo."
@@ -3325,7 +3365,7 @@
"demo": {
"demo_by": "por {name}",
"introduction": "¡Bienvenido a casa! Has llegado a la demostración de Home Assistant donde mostramos las mejores interfaces de usuario creadas por nuestra comunidad.",
"learn_more": "Saber más sobre Home Assistant",
"learn_more": "Aprende más sobre Home Assistant",
"next_demo": "Siguiente demostración"
}
},
@@ -3405,16 +3445,19 @@
"profile": {
"advanced_mode": {
"description": "Desbloquea las funciones avanzadas.",
"link_promo": "Saber más",
"link_promo": "Aprende más",
"title": "Modo avanzado"
},
"change_password": {
"confirm_new_password": "Confirmar nueva contraseña",
"current_password": "Contraseña actual",
"error_new_is_old": "La nueva contraseña debe ser diferente a la contraseña actual",
"error_new_mismatch": "Los nuevos valores de contraseña introducidos no coinciden",
"error_required": "Obligatorio",
"header": "Cambiar contraseña",
"new_password": "Nueva contraseña",
"submit": "Enviar"
"submit": "Enviar",
"success": "Contraseña cambiada con éxito"
},
"current_user": "Has iniciado sesión como {fullName}.",
"customize_sidebar": {
@@ -3483,7 +3526,7 @@
"error_load_platform": "Configurar notify.html5.",
"error_use_https": "Requiere SSL activado para frontend.",
"header": "Notificaciones push",
"link_promo": "Saber más",
"link_promo": "Aprende más",
"push_notifications": "Notificaciones push"
},
"refresh_tokens": {

View File

@@ -2,6 +2,7 @@
"config_entry": {
"disabled_by": {
"config_entry": "Seade kanne",
"device": "Seade",
"integration": "Sidumine",
"user": "Kasutaja"
}
@@ -546,6 +547,8 @@
"add_new": "Lisa uus ala...",
"area": "Ala",
"clear": "Puhasta",
"no_areas": "Alad puuduvad",
"no_match": "Sobivaid alasid ei leitud",
"show_areas": "Näita alasid"
},
"blueprint-picker": {
@@ -566,6 +569,8 @@
"clear": "Puhasta",
"device": "Seade",
"no_area": "Ala puudub",
"no_devices": "Seadmed puuduvad",
"no_match": "Sobivaid seadmeid ei leitud",
"show_devices": "Näita seadmeid",
"toggle": "Lülita"
},
@@ -577,6 +582,7 @@
"entity-picker": {
"clear": "Puhasta",
"entity": "Olem",
"no_match": "Sobivaid olemeid ei leitud",
"show_entities": "Näita olemeid"
}
},
@@ -585,7 +591,7 @@
"no_history_found": "Oleku ajalugu ei leitud"
},
"logbook": {
"by": "allikas:",
"by": ", allikas:",
"by_service": "teenuse poolt",
"entries_not_found": "Logiraamatu kandeid ei leitud.",
"messages": {
@@ -710,6 +716,16 @@
"service-picker": {
"service": "Teenus"
},
"target-picker": {
"add_area_id": "Vali ala",
"add_device_id": "Vali seade",
"add_entity_id": "Vali olem",
"expand_area_id": "Laienda seda ala eraldi seadmetesse jaolemitesse mis sellesse kuuluvad. Pärast laiendamist ei värskendata seadmeid ja olemeid, kui ala muutub.",
"expand_device_id": "Laienda seda seadet eraldi olemitesse. Pärast laiendamist ei värskendata olemeid, kui seade muutub.",
"remove_area_id": "Eemalda ala",
"remove_device_id": "Eemalda seade",
"remove_entity_id": "Eemalda olem"
},
"user-picker": {
"add_user": "Lisa kasutaja",
"no_user": "Kasutaja puudub",
@@ -733,6 +749,7 @@
"editor": {
"confirm_delete": "Oled kindel, et soovid selle kirje kustutada?",
"delete": "Kustuta",
"device_disabled": "Selle olemi seade on keelatud.",
"enabled_cause": "Keelatud, sest {cause}.",
"enabled_delay_confirm": "Lubatud üksused lisatakse Home Assistanti {delay} sekundi pärast",
"enabled_description": "Keelatud olemeid ei lisata Home Assistant'i.",
@@ -743,6 +760,7 @@
"icon_error": "Ikoonid peaksid olema vormingus 'prefix: iconname', nt 'mdi: home'",
"name": "Nime muutmine",
"note": "Märkus: see ei pruugi veel töötada kõigi sidumistega.",
"open_device_settings": "Seadme sätete avamine",
"unavailable": "See olem pole praegu saadaval.",
"update": "Uuenda"
},
@@ -1030,7 +1048,7 @@
"confirmation_text": "Kõik sellele ala seadmed jäävad peremehetuks.",
"confirmation_title": "Oled kindel, et soovid selle ala kustutada?"
},
"description": "Ülevaade kõikidest oma kodu aladest.",
"description": "Seadmete ja olemite rühmitamine aladesse",
"editor": {
"area_id": "Piirkonna ID",
"create": "LOO",
@@ -1052,7 +1070,7 @@
},
"automation": {
"caption": "Automatiseeringud",
"description": "Loo ja redigeeri automatiseeringuid",
"description": "Loo oma kodu jaoks kohandatud käitumisreeglid",
"dialog_new": {
"blueprint": {
"use_blueprint": "Kasuta kavandit"
@@ -1400,19 +1418,19 @@
"blueprint": {
"add": {
"error_no_url": "Sisesta kavandi URL.",
"file_name": "Kohaliku kavandifaili nimi",
"header": "Uue kavandi lisamine",
"import_btn": "Impordi kavand",
"import_header": "Impordi {name} ( type:{domain} )",
"import_introduction": "Teiste kasutajate kavandeid saad importida Githubist ja kogukonna foorumitest. Sisesta alloleva kavandi URL.",
"importing": "Kavandi importimine ...",
"file_name": "Kohaliku kavandifaili asukoht",
"header": "Impordi kavand",
"import_btn": "Kavandi eelvaade",
"import_header": "Kavand \"{name}\"",
"import_introduction": "Teiste kasutajate kavandeid saad importida Githubist ja kogukonna foorumitest. Sisesta allpool kavandi URL.",
"importing": "Kavandi laadimine...",
"raw_blueprint": "Kavandi sisu",
"save_btn": "Salvesta kavand",
"saving": "Kavandi salvestamine ...",
"save_btn": "Impordi kavand",
"saving": "Kavandiimportimine...",
"unsupported_blueprint": "Seda kavandit ei toetata",
"url": "Kavandi URL"
},
"caption": "",
"caption": "Kavandid",
"description": "Kavandite haldamine",
"overview": {
"add_blueprint": "Laadi kavand",
@@ -1425,8 +1443,8 @@
"file_name": "Faili nimi",
"name": "Nimi"
},
"introduction": "Kavandite redaktor võimaldab luua ja muuta kavandeid.",
"learn_more": "Lisateave kavandite kohta",
"introduction": "Kavandite seadistus võimaldab importida ja hallata oma kavandeid.",
"learn_more": "Lisateave kavandite kasutamise kohta",
"use_blueprint": "Loo automatiseering"
}
},
@@ -1456,7 +1474,7 @@
"enable_state_reporting": "Lubada olekuteavitused",
"enter_pin_error": "PIN-koodi ei saa salvestada:",
"enter_pin_hint": "Turvaseadmete kasutamiseks sisesta PIN",
"enter_pin_info": "Turvaseadmetega suhtlemiseks sisestage PIN-kood. Turvaseadmed on uksed, garaažiuksed ja lukud. Google Assistanti kaudu selliste seadmetega suheldes palutakse Teil see PIN-kood öelda / sisestada.",
"enter_pin_info": "Turvaseadmetega suhtlemiseks sisesta PIN-kood. Turvaseadmed on uksed, garaažiuksed ja lukud. Google Assistanti kaudu selliste seadmetega suheldes palutakse Teil see PIN-kood öelda / sisestada.",
"info": "Google Assistanti integreerimisel läbi Home Assistant Cloudi saate juhtida kõiki oma Home Assistanti seadmeid mis tahes Google Assistanti toega seadme kaudu.",
"info_state_reporting": "Kui lubate olekute avaldamise, saadab Home Assistant Google'ile kõik avaldatud olemite olekumuutused. See võimaldab Teil alati näha Google'i rakenduses uusimaid olekuid.",
"manage_entities": "Halda olemeid",
@@ -1478,7 +1496,7 @@
"info": "Home Assistant Cloud pakub turvalist kaugühendust teie Home Assistantiga kodust eemal olles.",
"instance_is_available": "Teie Home Assistant on saadaval aadressil",
"instance_will_be_available": "Teie Home Assistanti on aadressiks saab",
"link_learn_how_it_works": "Loe, kuidas see töötab",
"link_learn_how_it_works": "Loe kuidas see töötab",
"title": "Kaugjuhtimine"
},
"sign_out": "Logi välja",
@@ -1535,7 +1553,7 @@
"check_your_email": "Parooli lähtestamise kohta saate juhiseid oma e-posti aadressilt.",
"email": "E-post",
"email_error_msg": "Vigane meiliaadress",
"instructions": "Sisestage oma e-posti aadress ja me saadame teile lingi parooli lähtestamiseks.",
"instructions": "Sisesta oma e-posti aadress ja me saadame teile lingi parooli lähtestamiseks.",
"send_reset_email": "Saatke lähtestamismeil",
"subtitle": "Unustasid oma salasõna",
"title": "Unustasid salasõna"
@@ -1605,7 +1623,7 @@
},
"core": {
"caption": "Üldine",
"description": "Home Assistant'i üldiste seadete muutmine",
"description": "Ühikud, asukoht, ajavöönd ja muud üldised parameetrid",
"section": {
"core": {
"core_config": {
@@ -1667,6 +1685,7 @@
"unknown_condition": "Tundmatu tingimus"
},
"create": "Loo seadmega automatiseering",
"create_disable": "Keelatud seadmega ei saa automaatiseeringuid luua",
"no_automations": "Automatiseeringuid pole",
"no_device_automations": "Selle seadme jaoks pole automatiseerimisi saadaval.",
"triggers": {
@@ -1692,9 +1711,18 @@
"no_devices": "Seadmeid pole"
},
"delete": "Kustuta",
"description": "Halda ühendatud seadmeid",
"description": "Halda häälestatud seadmeid",
"device_info": "Seadme info",
"device_not_found": "Seadet ei leitud.",
"disabled": "Keelatud",
"disabled_by": {
"config_entry": "Seade kanne",
"integration": "Sidumine",
"user": "Kasutaja"
},
"enabled_cause": "{cause} on seadme keelanud.",
"enabled_description": "Keelatud seadmeid ei kuvata ja seadmele kuuluvad olemid keelatakse ning neid ei lisata Home Assistantile.",
"enabled_label": "Luba seade",
"entities": {
"add_entities_lovelace": "Lisa Lovelace'i",
"disabled_entities": "{count} {count, plural,\n one {keelatud olem}\n other {keelatud olemit}\n}",
@@ -1704,14 +1732,25 @@
},
"name": "Nimi",
"no_devices": "Seadmeid pole",
"picker": {
"filter": {
"filter": "Filtreeri",
"hidden_devices": "{number} peidetud {number, plural,\n one {olem}\n other {olemit}\n}",
"show_all": "Kuva kõik",
"show_disabled": "Kuva keelatud seadmed"
},
"search": "Otsi seadmeid"
},
"scene": {
"create": "Loo seadmega stseen",
"create_disable": "Keelatud seadmega ei saa stseene luua",
"no_scenes": "Stseene pole",
"scenes": "Stseenid"
},
"scenes": "Stseenid",
"script": {
"create": "Loo seadmega skript",
"create_disable": "Keelatud seadmega ei saa skripte luua",
"no_scripts": "Skripte pole",
"scripts": "Skriptid"
},
@@ -1777,7 +1816,7 @@
"header": "Home Assistant'i seadistamine",
"helpers": {
"caption": "Abimehed",
"description": "Hallake elemente mis aitavad automatiseeringuid luua",
"description": "Elemendid mis aitavad automatiseeringuid luua",
"dialog": {
"add_helper": "Lisage abistaja",
"add_platform": "Lisa {platform}",
@@ -1809,7 +1848,7 @@
"copy_github": "GitHubi jaoks",
"copy_raw": "Ainult tekst",
"custom_uis": "Kohandatud kasutajaliidesed:",
"description": "Kuva Home Assistant'i info",
"description": "Versioon, süsteemi olek ja lingid dokumentatsioonile",
"developed_by": "Tehtud paljude lahedate inimeste poolt.",
"documentation": "Dokumentatsioon",
"frontend": "frontend-ui",
@@ -1827,9 +1866,9 @@
"checks": {
"cloud": {
"alexa_enabled": "Alexa on lubatud",
"can_reach_cert_server": "Ühendu serdiserveriga",
"can_reach_cloud": "Ühendu Home Assistant Cloudiga",
"can_reach_cloud_auth": "Ühendu tuvastusserveriga",
"can_reach_cert_server": "Ühendus serdiserveriga",
"can_reach_cloud": "Ühendus Home Assistant Cloudiga",
"can_reach_cloud_auth": "Ühendus tuvastusserveriga",
"google_enabled": "Google on lubatud",
"logged_in": "Sisse logitud",
"relayer_connected": "Edastaja on ühendatud",
@@ -1915,7 +1954,7 @@
},
"configure": "Seadista",
"configured": "Seadistatud",
"description": "Halda ja seadista sidumisi",
"description": "Halda teenuste, seadmete jne. sidumisi",
"details": "Sidumise üksikasjad",
"discovered": "Leitud",
"home_assistant_website": "Home Assistant veebisait",
@@ -2000,7 +2039,7 @@
"open": "Ava"
}
},
"description": "Hallake oma Lovelace juhtpaneele",
"description": "Loo oma kodu juhtimiseks kohandatud juhtpaneele",
"resources": {
"cant_edit_yaml": "Kasutate Lovelace YAML režiimis. Seega ei saa Te hallata oma ressursse kasutajaliidese kaudu. Halda neid kirjes configuration.yaml.",
"caption": "Ressursid",
@@ -2199,7 +2238,7 @@
"scene": {
"activated": "Stseen {name} on käivitatud.",
"caption": "Stseenid",
"description": "Loo ja muuda stseene",
"description": "Seadme olekute hõivamine ja nende hilisem taaskasutamine",
"editor": {
"default_name": "Uus stseen",
"devices": {
@@ -2243,7 +2282,7 @@
},
"script": {
"caption": "Skriptid",
"description": "Loo ja muuda skripte",
"description": "Vallanda toimingute jada",
"editor": {
"alias": "Nimi",
"default_name": "Uus skript",
@@ -2293,7 +2332,7 @@
},
"server_control": {
"caption": "Serveri juhtimine",
"description": "Taaskäivita ja peata Home Assistant server",
"description": "Taaskäivita ja peata Home Assistant serverit",
"section": {
"reloading": {
"automation": "Taaslae automatiseeringud",
@@ -2331,7 +2370,7 @@
"zone": "Taaslae tsoonid"
},
"server_management": {
"confirm_restart": "Oled kindel, et soovid taaskäivitada Home Assistant'i?",
"confirm_restart": "Oled kindel, et soovid Home Assistant'i taaskäivitada?",
"confirm_stop": "Oled kindel, et soovid seisata Home Assistant'i?",
"heading": "Serveri haldamine",
"introduction": "Kontrolli oma Home Assistant serverit... Home Assistant'ist.",
@@ -2354,7 +2393,7 @@
"confirm_remove": "Kas soovid kindlasti eemaldada märgise {tag}?",
"confirm_remove_title": "Kas kustutan märgise?",
"create_automation": "Lisa automatiseering TAG abil",
"description": "Halda TAGe",
"description": "Käivita automaatiseering NFC-sildi, QR-koodi jne. skännimisel",
"detail": {
"companion_apps": "mobiilirakendused",
"create": "Loo",
@@ -2389,10 +2428,11 @@
"username": "Kasutajanimi"
},
"caption": "Kasutajad",
"description": "Halda kasutajaid",
"description": "Halda kasutakontosid",
"editor": {
"activate_user": "Aktiveeri kasutaja",
"active": "Aktiivne",
"active_tooltip": "Määrab kas kasutaja saab sisse logida",
"admin": "Administraator",
"caption": "Vaata kasutajat",
"change_password": "Muuda salasõna",
@@ -2503,7 +2543,7 @@
"caption": "Grupid",
"create": "Loo grupp",
"create_group": "Zigbee Home Automation - Loo grupp",
"create_group_details": "Sisestage uue zigbee grupi loomiseks vajalikud üksikasjad.",
"create_group_details": "Sisesta uue Zigbee grupi loomiseks vajalikud üksikasjad.",
"creating_group": "Loon gruppi",
"description": "Loo ja muuda Zigbee gruppe",
"group_details": "Siin on kõik valitud Zigbee rühma üksikasjad.",
@@ -2832,7 +2872,7 @@
},
"calendar": {
"calendar_entities": "Kalendri olemid",
"description": "Kalendri kaardil kuvatakse kalender mis sisaldab päeva, nädala ja loendivaateid",
"description": "Kalendri kaardil kuvatakse kalender mis sisaldab päeva-, nädala- ja loendivaateid",
"inital_view": "Vaikevaade",
"name": "Kalender",
"views": {
@@ -2857,7 +2897,7 @@
"required": "Nõutav"
},
"entities": {
"description": "Olemite kaart on kõige levinum kaarditüüp. See rühmitabolemid loenditeks.",
"description": "Olemite kaart on kõige levinum kaarditüüp. See rühmitab olemid loenditeks.",
"edit_special_row": "Selle rea üksikasjade vaatamiseks klõpsa nuppu Muuda",
"entity_row_editor": "Olemirea redaktor",
"entity_row": {
@@ -2887,7 +2927,7 @@
"toggle": "Vaheta olemeid."
},
"entity-filter": {
"description": "Olemifiltri kaart võimaldab teil määratleda nende olemite loendit mida soovite jälgida ainult teatud olekus.",
"description": "Olemifiltri kaart võimaldab teil määratleda nende olemite loendit mida soovid jälgida ainult teatud olekus.",
"name": "Olemi filter"
},
"entity": {
@@ -3411,10 +3451,13 @@
"change_password": {
"confirm_new_password": "Kinnita uut salasõna",
"current_password": "Praegune salasõna",
"error_new_is_old": "Uus salasõna peab praegusest erinema",
"error_new_mismatch": "Sisestatud uus salasõna ei ühti",
"error_required": "Nõutav",
"header": "Muuda salasõna",
"new_password": "Uus salasõna",
"submit": "Esita"
"submit": "Esita",
"success": "Salasõna muutmine õnnestus"
},
"current_user": "Oled praegu sisse logitud kui {fullName}.",
"customize_sidebar": {

View File

@@ -2,11 +2,13 @@
"config_entry": {
"disabled_by": {
"config_entry": "Asetus",
"device": "Laite",
"integration": "Integraatio",
"user": "Käyttäjä"
}
},
"groups": {
"owner": "Omistaja",
"system-admin": "Järjestelmänvalvojat",
"system-read-only": "Pelkästään luku -käyttäjät",
"system-users": "Käyttäjät"
@@ -511,15 +513,23 @@
"continue": "Jatka",
"copied": "Kopioitu",
"delete": "Poista",
"disable": "Poista käytöstä",
"enable": "Ota käyttöön",
"error_required": "Pakollinen",
"leave": "Poistu",
"loading": "Ladataan",
"menu": "Valikko",
"next": "Seuraava",
"no": "Ei",
"not_now": "Ei nyt",
"overflow_menu": "Ylivuotovalikko",
"previous": "Edellinen",
"refresh": "Päivitä",
"remove": "Poista",
"rename": "Nimeä uudelleen",
"save": "Tallenna",
"skip": "Ohita",
"stay": "Pysy",
"successfully_deleted": "Poistettu onnistuneesti",
"successfully_saved": "Tallennus onnistui",
"undo": "Kumoa",
@@ -537,8 +547,14 @@
"add_new": "Lisää uusi alue...",
"area": "Alue",
"clear": "Tyhjennä",
"no_areas": "Sinulla ei ole alueita",
"no_match": "Vastaavia alueita ei löytynyt",
"show_areas": "Näytä alueet"
},
"blueprint-picker": {
"add_user": "Lisää käyttäjä",
"remove_user": "Poista käyttäjä"
},
"data-table": {
"no-data": "Ei dataa",
"search": "Hae"
@@ -552,6 +568,8 @@
"clear": "Tyhjennä",
"device": "Laite",
"no_area": "Ei aluetta",
"no_devices": "Sinulla ei ole laitteita",
"no_match": "Vastaavia laitteita ei löytynyt",
"show_devices": "Näytä laitteet",
"toggle": "Vaihda"
},
@@ -563,6 +581,7 @@
"entity-picker": {
"clear": "Tyhjennä",
"entity": "Kohde",
"no_match": "Vastaavia kohteita ei löytynyt",
"show_entities": "Näytä kohteet"
}
},
@@ -682,6 +701,14 @@
"service-picker": {
"service": "Palvelu"
},
"target-picker": {
"add_area_id": "Valitse alue",
"add_device_id": "Valitse laite",
"add_entity_id": "Valitse kohde",
"remove_area_id": "Poista alue",
"remove_device_id": "Poista laite",
"remove_entity_id": "Poista kohde"
},
"user-picker": {
"add_user": "Lisää käyttäjä",
"no_user": "Ei käyttäjää",
@@ -705,14 +732,17 @@
"editor": {
"confirm_delete": "Haluatko varmasti poistaa tämän kohteen?",
"delete": "Poista",
"device_disabled": "Tämän kohteen laite on poistettu käytöstä.",
"enabled_cause": "{cause} on poistanut sen käytöstä.",
"enabled_description": "Käytöstä poistettuja kohteita ei lisätä Home Assistantiin.",
"enabled_label": "Ota kohte käyttöön",
"enabled_restart_confirm": "Käynnistä Home Assistant uudelleen, jotta kohteet otetaan käyttöön",
"entity_id": "Kohde ID",
"icon": "Kuvakkeen yliajo",
"icon_error": "Kuvakkeen tulisi olla muodossa etuliite:ikoni, esimerkiksi: mdi:home",
"name": "Nimen yliajo",
"note": "Huomaa: tämä ei ehkä vielä toimi kaikissa integraatioissa.",
"open_device_settings": "Avaa laitteen asetukset",
"unavailable": "Tämä kohde ei ole tällä hetkellä käytettävissä.",
"update": "Päivitä"
},
@@ -842,6 +872,27 @@
},
"quick-bar": {
"commands": {
"navigation": {
"areas": "Alueet",
"automation": "Automaatiot",
"core": "Yleinen",
"customize": "Kustomointi",
"devices": "Laitteet",
"entities": "Kohteet",
"helpers": "Apurit",
"info": "Tiedot",
"integrations": "Integraatiot",
"logs": "Lokit",
"lovelace": "Lovelace-kojelaudat",
"navigate_to": "Siirry kohteeseen {panel}",
"navigate_to_config": "Konfiguroi {panel}",
"person": "Henkilöt",
"script": "Skriptit",
"server_control": "Palvelimen hallinta",
"tags": "Tägit",
"users": "Käyttäjät",
"zone": "Alueet"
},
"reload": {
"homekit": "Lataa HomeKit uudelleen",
"input_boolean": "Lataa booleanit uudelleen",
@@ -966,6 +1017,10 @@
"automation": {
"caption": "Automaatiot",
"description": "Luo ja muokkaa automaatioita",
"dialog_new": {
"header": "Luo uusi automaatio",
"how": "Miten haluat luoda uuden automaation?"
},
"editor": {
"actions": {
"add": "Lisää toiminto",
@@ -1232,7 +1287,9 @@
},
"time": {
"at": "Kellonaikana",
"label": "Aika"
"label": "Aika",
"type_input": "Päivämäärä- ja aika-apurin arvo",
"type_value": "Kiinteä aika"
},
"webhook": {
"label": "Webhook",
@@ -1268,6 +1325,34 @@
"only_editable": "Vain automaatiot tiedostossa automations.yaml ovat muokattavissa.",
"pick_automation": "Valitse automaatio, jota haluat muokata",
"show_info_automation": "Näytä tietoja automaatiosta"
},
"thingtalk": {
"create": "Luo automaatio",
"link_devices": {
"header": "Upeaa! Nyt meidän on linkitettävä joitakin laitteita",
"unknown_placeholder": "Tuntematon paikkamerkki"
},
"task_selection": {
"error_empty": "Kirjoita komento tai napauta ohita.",
"error_unsupported": "Emme voineet luoda automaatiota sille (vielä?).",
"for_example": "Esimerkiksi:",
"header": "Luo uusi automaatio",
"introduction": "Kirjoita alle, mitä tämän automaation pitäisi tehdä, ja yritämme muuntaa sen Home Assistant -automaatioksi.",
"language_note": "Huomautus: Toistaiseksi tuetaan vain englantia."
}
}
},
"blueprint": {
"add": {
"file_name": "Blueprint polku"
},
"overview": {
"headers": {
"domain": "Toimialue",
"file_name": "Tiedoston nimi",
"name": "Nimi"
},
"use_blueprint": "Luo automaatio"
}
},
"cloud": {
@@ -1507,6 +1592,7 @@
"unknown_condition": "Tuntematon ehto"
},
"create": "Luo automaatio laitteella",
"create_disable": "Automaatiota ei voi luoda käytöstä poistetulla laitteella",
"no_automations": "Ei automaatioita",
"no_device_automations": "Tälle laitteelle ei ole käytettävissä automaatioita.",
"triggers": {
@@ -1535,6 +1621,14 @@
"description": "Hallitse yhdistettyjä laitteita.",
"device_info": "Laitteen tiedot",
"device_not_found": "Laitetta ei löydy.",
"disabled": "Poistettu käytöstä",
"disabled_by": {
"config_entry": "Asetus",
"integration": "Integraatio",
"user": "Käyttäjä"
},
"enabled_description": "Poistettuja laitteita ei näytetä, ja laitteeseen kuuluvat kohteet poistetaan käytöstä, eikä niitä lisätä Home Assistantiin.",
"enabled_label": "Ota laite käyttöön",
"entities": {
"add_entities_lovelace": "Lisää Lovelace näkymään",
"disabled_entities": "{count} {count, plural,\n one {kohde}\n other {kohdetta}\n}",
@@ -1544,14 +1638,24 @@
},
"name": "Nimi",
"no_devices": "Ei laitteita",
"picker": {
"filter": {
"filter": "Suodatin",
"show_all": "Näytä kaikki",
"show_disabled": "Näytä käytöstä poistetut laitteet"
},
"search": "Etsi laitteita"
},
"scene": {
"create": "Luo tilanne laitteella",
"create_disable": "Kohtausta ei voi luoda käytöstä poistetulla laitteella",
"no_scenes": "Ei tilanteita",
"scenes": "Tilanteet"
},
"scenes": "Tilanteet",
"script": {
"create": "Luo tilanne laitteella",
"create_disable": "Skriptiä ei voi luoda käytöstä poistetulla laitteella",
"no_scripts": "Ei skriptejä",
"scripts": "Skriptit"
},
@@ -1583,6 +1687,7 @@
},
"header": "Kohteet",
"headers": {
"area": "Alue",
"entity_id": "Kohde ID",
"integration": "Integraatio",
"name": "Nimi",
@@ -1644,6 +1749,8 @@
"info": {
"built_using": "Rakennettu käyttäen",
"caption": "Tiedot",
"copy_github": "GitHubille",
"copy_raw": "Raaka teksti",
"custom_uis": "Mukautetut käyttöliittymät:",
"description": "Tietoja Home Assistant -asennuksesta",
"developed_by": "Kehittänyt joukko mahtavia ihmisiä.",
@@ -1659,6 +1766,42 @@
"server": "palvelin",
"source": "Lähde:",
"system_health_error": "Järjestelmän kunto-komponenttia ei ole ladattu. Lisää 'system_health:' kohteeseen configuration.yaml",
"system_health": {
"checks": {
"cloud": {
"alexa_enabled": "Alexa käytössä",
"can_reach_cert_server": "Tavoita varmennepalvelin",
"can_reach_cloud": "Saavuta Home Assistant Cloud",
"can_reach_cloud_auth": "Saavuta todennuspalvelin",
"google_enabled": "Google käytössä",
"logged_in": "Kirjautunut sisään",
"relayer_connected": "Rele yhdistetty",
"remote_connected": "Kaukosäädin yhdistetty",
"remote_enabled": "Kaukosäädin käytössä",
"subscription_expiration": "Tilauksen vanhentuminen"
},
"homeassistant": {
"arch": "CPU-arkkitehtuuri",
"dev": "Kehitys",
"docker": "Docker",
"hassio": "HassOS",
"installation_type": "Asennustyyppi",
"os_name": "Käyttöjärjestelmän nimi",
"os_version": "Käyttöjärjestelmän versio",
"python_version": "Python-versio",
"timezone": "Aikavyöhyke",
"version": "Versio",
"virtualenv": "Virtuaalinen ympäristö"
},
"lovelace": {
"dashboards": "Kojelaudat",
"mode": "Tila",
"resources": "Resurssit"
}
},
"manage": "Hallitse",
"more_info": "lisätietoja"
},
"title": "Tiedot"
},
"integration_panel_move": {
@@ -1958,6 +2101,7 @@
},
"services": {
"add_node": "Lisää solmu",
"cancel_command": "Peruuta komento",
"remove_node": "Poista solmu"
}
},
@@ -2073,6 +2217,8 @@
},
"picker": {
"add_script": "Lisää skripti",
"duplicate": "Kopioi",
"duplicate_script": "Kopioi skripti",
"edit_script": "Muokkaa skriptiä",
"header": "Skriptieditori",
"headers": {
@@ -2119,6 +2265,7 @@
"script": "Lataa skriptit uudelleen",
"smtp": "Lataa smtp-ilmoituspalvelut uudelleen",
"statistics": "Lataa tilastoentiteetit uudelleen",
"telegram": "Päivitä Telegram-ilmoituspalvelut",
"template": "Lataa mallientiteetiteetit uudelleen",
"trend": "Lataa trendientiteetiteetit uudelleen",
"universal": "Lataa universaali mediasoittimen entiteetit uudelleen",
@@ -2145,6 +2292,7 @@
"add_tag": "Lisää tunniste",
"automation_title": "Tunniste {name} skannataan",
"caption": "Tunnisteet",
"confirm_remove_title": "Poista tägi?",
"create_automation": "Automaation luominen tunnisteella",
"description": "Hallitse tunnisteita",
"detail": {
@@ -2185,6 +2333,7 @@
"editor": {
"activate_user": "Aktivoi käyttäjä",
"active": "Aktiivinen",
"active_tooltip": "Määrittää, voiko käyttäjä kirjautua sisään",
"admin": "Järjestelmänvalvoja",
"caption": "Näytä käyttäjä",
"change_password": "Vaihda salasana",
@@ -2201,18 +2350,24 @@
"system_generated_users_not_editable": "Järjestelmän luomia käyttäjiä ei voi päivittää.",
"system_generated_users_not_removable": "Järjestelmän luomia käyttäjiä ei voi poistaa.",
"unnamed_user": "Nimeämätön käyttäjä",
"update_user": "Päivitä"
"update_user": "Päivitä",
"username": "Käyttäjätunnus"
},
"picker": {
"add_user": "Lisää käyttäjä",
"headers": {
"group": "Ryhmä",
"is_active": "Aktiivinen",
"is_owner": "Omistaja",
"name": "Nimi",
"system": "Järjestelmä"
"system": "Järjestelmä",
"username": "Käyttäjätunnus"
}
},
"users_privileges_note": "Käyttäjät-ryhmä on vielä kesken. Käyttäjä ei voi hallita Home Assistantia käyttöliittymän kautta. Auditoimme edelleen kaikkia hallinta-API-päätepisteitä varmistaaksemme, että ne rajoittavat pääsyn oikein."
},
"zha": {
"add_device": "Lisää laite",
"add_device_page": {
"discovered_text": "Laitteet tulevat tänne, kun ne löydetään.",
"discovery_text": "Löydetyt laitteet näkyvät täällä. Noudata laitteen (laitteiden) ohjeita ja aseta laite pariliitostilaan.",
@@ -2258,6 +2413,16 @@
"value": "Arvo"
},
"description": "Zigbee kotiautomaation verkonhallinta",
"device_pairing_card": {
"CONFIGURED": "Määritys valmis",
"CONFIGURED_status_text": "Alustetaan",
"INITIALIZED": "Alustus on valmis",
"INITIALIZED_status_text": "Laite on käyttövalmis",
"INTERVIEW_COMPLETE": "Haastattelu valmis",
"INTERVIEW_COMPLETE_status_text": "Määrittää",
"PAIRED": "Laite löydetty",
"PAIRED_status_text": "Haastattelun aloittaminen"
},
"devices": {
"header": "Zigbee-kotiautomaatio - laite"
},
@@ -2273,6 +2438,7 @@
"unbind_button_label": "Pura ryhmän sidonta"
},
"groups": {
"add_group": "Lisää ryhmä",
"add_members": "Lisää jäseniä",
"adding_members": "Lisätään jäseniä",
"caption": "Ryhmät",
@@ -2315,7 +2481,11 @@
"hint_wakeup": "Joissakin laitteissa, kuten Xiaomi-antureissa, on herätyspainike, jota voit painaa 5 sekunnin välein, jotka pitävät laitteet hereillä, kun olet vuorovaikutuksessa niiden kanssa.",
"introduction": "Suorita ZHA-komennot, jotka vaikuttavat yhteen laitteeseen. Valitse laite nähdäksesi luettelon käytettävissä olevista komennoista."
},
"title": "Zigbee-kotiautomaatio"
"title": "Zigbee-kotiautomaatio",
"visualization": {
"caption": "Visualisointi",
"header": "Verkon visualisointi"
}
},
"zone": {
"add_zone": "Lisää vyöhyke",
@@ -2711,6 +2881,10 @@
"description": "Glance-kortti on hyödyllinen useiden anturien ryhmittelemiseksi kompaktiin yleiskuvaan.",
"name": "Pikavilkaisu"
},
"grid": {
"description": "Ruudukkokortin avulla voit näyttää useita kortteja ruudukossa.",
"name": "Ruudukko"
},
"history-graph": {
"description": "Historiakaavio-kortin avulla voit näyttää kaavion kullekin luettelossa olevalle kohteelle.",
"name": "Historiakuvaaja"
@@ -2731,6 +2905,9 @@
"description": "Valokortti antaa sinun muuttaa valon kirkkautta.",
"name": "Valo"
},
"logbook": {
"name": "Lokikirja"
},
"map": {
"dark_mode": "Tumma tila?",
"default_zoom": "Oletuszoomaus",
@@ -2803,11 +2980,18 @@
"entity": "Kohde",
"no_description": "Ei kuvausta saatavilla."
},
"common": {
"add": "Lisää",
"clear": "Tyhjennä",
"edit": "Muokkaa",
"none": "Ei mitään"
},
"edit_badges": {
"panel_mode": "Näitä kylttejä ei näytetä, koska tämä näkymä on \"Paneelitilassa\"."
},
"edit_card": {
"add": "Lisää kortti",
"clear": "Tyhjennä",
"confirm_cancel": "Haluatko varmasti peruuttaa?",
"delete": "Poista kortti",
"duplicate": "Kopioi kortti",
@@ -2848,6 +3032,22 @@
}
},
"header": "Muokkaa käyttöliittymää",
"header-footer": {
"choose_header_footer": "Valitse {type}",
"footer": "Alatunniste",
"header": "Otsikko",
"types": {
"buttons": {
"name": "Painikkeet"
},
"graph": {
"name": "Kaavio"
},
"picture": {
"name": "Kuva"
}
}
},
"menu": {
"open": "Avaa Lovelace-valikko",
"raw_editor": "Raaka konfigurointieditori"
@@ -2892,6 +3092,13 @@
"dashboard_label": "Kojelauta",
"header": "Valitse näkymä"
},
"sub-element-editor": {
"types": {
"footer": "Alatunnisteen muokkausohjelma",
"header": "Otsikkoeditori",
"row": "Kohderivieditori"
}
},
"suggest_card": {
"add": "Lisää Lovelace-käyttöliittymään",
"create_own": "Valitse toinen kortti",
@@ -3141,10 +3348,13 @@
"change_password": {
"confirm_new_password": "Vahvista uusi salasana",
"current_password": "Nykyinen salasana",
"error_new_is_old": "Uuden salasanan on oltava eri kuin nykyinen salasana",
"error_new_mismatch": "Annetut uudet salasanat eivät täsmää",
"error_required": "Pakollinen",
"header": "Vaihda salasana",
"new_password": "Uusi salasana",
"submit": "Lähetä"
"submit": "Lähetä",
"success": "Salasanan vaihtaminen onnistui"
},
"current_user": "Olet tällä hetkellä kirjautuneena tunnuksella {fullName}.",
"customize_sidebar": {
@@ -3157,6 +3367,9 @@
"dropdown_label": "Kojelauta",
"header": "Kojelauta"
},
"enable_shortcuts": {
"header": "Pikanäppäimet"
},
"force_narrow": {
"description": "Tämä piilottaa oletusarvoisesti sivupalkin, joka muistuttaa mobiilikokemusta.",
"header": "Piilota sivupalkki aina"
@@ -3242,6 +3455,9 @@
"header": "Värinä"
}
},
"shopping_list": {
"start_conversation": "Aloita keskustelu"
},
"shopping-list": {
"add_item": "Lisää tavara",
"clear_completed": "Poista valmiit",

View File

@@ -2,6 +2,7 @@
"config_entry": {
"disabled_by": {
"config_entry": "Paramètre de configuration",
"device": "Appareil",
"integration": "Intégration",
"user": "Utilisateur"
}
@@ -546,6 +547,8 @@
"add_new": "Ajouter une pièce...",
"area": "Pièce",
"clear": "Effacer",
"no_areas": "Vous n'avez pas de pièce",
"no_match": "Aucune pièce correspondante trouvée",
"show_areas": "Afficher les pièces"
},
"blueprint-picker": {
@@ -566,6 +569,8 @@
"clear": "Effacer",
"device": "Appareil",
"no_area": "Pas de zone",
"no_devices": "Vous n'avez aucun appareil",
"no_match": "Aucun appareil correspondant trouvé",
"show_devices": "Afficher les appareils",
"toggle": "Permuter"
},
@@ -577,6 +582,7 @@
"entity-picker": {
"clear": "Effacer",
"entity": "Entité",
"no_match": "Aucune entité correspondante trouvée",
"show_entities": "Afficher les entités"
}
},
@@ -593,8 +599,8 @@
"changed_to_state": "changé en {state}.",
"cleared_device_class": "effacé (no {device_class} detected)",
"detected_device_class": "détecté {device_class}",
"rose": "aube",
"set": "Coucher",
"rose": "s'est levé",
"set": "s'est couché",
"turned_off": "éteint",
"turned_on": "activé",
"was_at_home": "Présent",
@@ -710,6 +716,16 @@
"service-picker": {
"service": "Service"
},
"target-picker": {
"add_area_id": "Choisissez la zone",
"add_device_id": "Choisissez un appareil",
"add_entity_id": "Choisissez une entité",
"expand_area_id": "Développe cette zone dans les périphériques et entités séparés qu'elle contient. Une fois développé, il ne mettra pas à jour les appareils et les entités lorsque la zone change.",
"expand_device_id": "Développe cet appareil dans des entités séparées. Une fois développé, il ne mettra pas à jour les entités lorsque l'appareil change.",
"remove_area_id": "Supprimer la zone",
"remove_device_id": "Supprimer l'appareil",
"remove_entity_id": "Supprimer l'entité"
},
"user-picker": {
"add_user": "Ajouter un utilisateur",
"no_user": "Aucun utilisateur",
@@ -733,6 +749,7 @@
"editor": {
"confirm_delete": "Voulez-vous vraiment supprimer cette entrée ?",
"delete": "Supprimer",
"device_disabled": "L'appareil de cette entité est désactivé.",
"enabled_cause": "Désactivé par {cause} .",
"enabled_delay_confirm": "Les entités activées seront ajoutées à Home Assistant dans {delay} secondes",
"enabled_description": "Les entités désactivées ne seront pas ajoutées à Home Assistant.",
@@ -743,6 +760,7 @@
"icon_error": "Les icônes doivent être au format «préfixe: iconname», par exemple «mdi: home»",
"name": "Nom",
"note": "Remarque: cela peut ne pas encore fonctionner avec toutes les intégrations.",
"open_device_settings": "Ouvrir les paramètres de l'appareil",
"unavailable": "Cette entité n'est pas disponible actuellement.",
"update": "Mise à jour"
},
@@ -1030,7 +1048,7 @@
"confirmation_text": "Tous les appareils de cette pièce ne seront plus attribués.",
"confirmation_title": "Êtes-vous sûr de vouloir supprimer cette pièce ?"
},
"description": "Vue d'ensemble de toutes les pièces de votre maison.",
"description": "Regrouper les appareils et les entités en zones",
"editor": {
"area_id": "ID de la zone",
"create": "Créer",
@@ -1052,7 +1070,7 @@
},
"automation": {
"caption": "Automatisations",
"description": "Créer et modifier des automatisations",
"description": "Créez des règles de comportement personnalisées pour votre maison",
"dialog_new": {
"blueprint": {
"use_blueprint": "Utiliser un plan"
@@ -1265,7 +1283,7 @@
"delete_confirm": "Voulez-vous effacer ?",
"duplicate": "Dupliquer",
"header": "Déclencheurs",
"introduction": "Les déclencheurs sont ce qui lance le traitement d'une règle d'automatisation. Il est possible de spécifier plusieurs déclencheurs pour une même règle. Dès qu'un déclencheur est activé, Home Assistant validera les conditions, s'il y en a, et appellera l'action.\n\n[En apprendre plus sur les déclencheurs.](https://home-assistant.io/docs/automation/trigger/)",
"introduction": "Les déclencheurs sont ce qui lance le traitement d'une règle d'automatisation. Il est possible de spécifier plusieurs déclencheurs pour une même règle. Dès qu'un déclencheur est activé, Home Assistant validera les conditions, s'il y en a, et appellera l'action.",
"learn_more": "En savoir plus sur les déclencheurs",
"name": "Déclencheur",
"type_select": "Type de déclencheur",
@@ -1400,15 +1418,15 @@
"blueprint": {
"add": {
"error_no_url": "Veuillez entrer l'URL du plan",
"file_name": "Nom du fichier de plan local",
"header": "Ajouter un nouveau plan",
"import_btn": "Importer un plan",
"file_name": "Chemin du fichier de plan local",
"header": "Importer un plan",
"import_btn": "Aperçu du plan",
"import_header": "Importer \" {name} \" (type: {domain} )",
"import_introduction": "Vous pouvez importer les plans d'autres utilisateurs de Github et des forums de la communauté. Entrez l'URL du plan ci-dessous.",
"importing": "Importation du plan ...",
"importing": "Chargement du plan ...",
"raw_blueprint": "Contenu du plan",
"save_btn": "Sauver le plan",
"saving": "Enregistrement du plan ...",
"save_btn": "Importer un plan",
"saving": "Importation du plan ...",
"unsupported_blueprint": "Ce plan n'est pas pris en charge",
"url": "URL du plan"
},
@@ -1510,7 +1528,7 @@
"title": "Alexa"
},
"caption": "Cloud Home Assistant",
"description_features": "Contrôle hors de la maison, intégration avec Alexa et Google Assistant.",
"description_features": "Contrôlez votre domicile lorsque vous êtes absent et intégrez avec Alexa et Google Assistant",
"description_login": "Connecté en tant que {email}",
"description_not_login": "Non connecté",
"dialog_certificate": {
@@ -1605,7 +1623,7 @@
},
"core": {
"caption": "Général",
"description": "Changer la configuration générale de votre Home Assistant.",
"description": "Unités de mesure, emplacement, fuseau horaire et autres paramètres généraux",
"section": {
"core": {
"core_config": {
@@ -1667,6 +1685,7 @@
"unknown_condition": "Condition inconnue"
},
"create": "Créer une automatisation avec l'appareil",
"create_disable": "Impossible de créer une automatisation avec un appareil désactivé",
"no_automations": "Aucune automatisation",
"no_device_automations": "Aucune automatisation n'est disponible pour cet appareil.",
"triggers": {
@@ -1680,7 +1699,7 @@
"caption": "Appareils",
"confirm_delete": "Voulez-vous vraiment supprimer cet appareil ?",
"confirm_rename_entity_ids": "Voulez-vous aussi renommer les ID de vos entités?",
"confirm_rename_entity_ids_warning": "Cela ne changera aucune configuration (comme les automatismes, les scripts, les scènes, Lovelace) qui utilisent actuellement ces entités, vous devrez les mettre à jour vous-même.",
"confirm_rename_entity_ids_warning": "Cela ne changera aucune configuration (comme les automatisations, les scripts, les scènes, Lovelace) qui utilisent actuellement ces entités, vous devrez les mettre à jour vous-même.",
"data_table": {
"area": "Zone",
"battery": "Batterie",
@@ -1692,9 +1711,18 @@
"no_devices": "Aucun appareil"
},
"delete": "Supprimer",
"description": "Gérer les appareils connectés",
"description": "Gérer les appareils configurés",
"device_info": "Informations sur lappareil",
"device_not_found": "Appareil non trouvé.",
"disabled": "Désactivé",
"disabled_by": {
"config_entry": "Paramètre de configuration",
"integration": "Intégration",
"user": "Utilisateur"
},
"enabled_cause": "L'appareil est désactivé par {cause}.",
"enabled_description": "Les appareils désactivés ne seront pas affichés et les entités appartenant à l'appareil seront désactivées et ne seront pas ajoutées à Home Assistant.",
"enabled_label": "Activer l'appareil",
"entities": {
"add_entities_lovelace": "Ajouter à Lovelace",
"disabled_entities": "+{count} {count, plural,\none {entité désactivée}\nother {entité désactivée}\n}",
@@ -1704,14 +1732,24 @@
},
"name": "Nom",
"no_devices": "Aucun appareil",
"picker": {
"filter": {
"filter": "Filtre",
"show_all": "Tout afficher",
"show_disabled": "Afficher les appareils désactivés"
},
"search": "Rechercher des appareils"
},
"scene": {
"create": "Créer une scène avec l'appareil",
"create_disable": "Impossible de créer une scène avec un appareil désactivé",
"no_scenes": "Pas de scènes",
"scenes": "Scènes"
},
"scenes": "Scènes",
"script": {
"create": "Créer un script avec l'appareil",
"create_disable": "Impossible de créer un script avec un appareil désactivé",
"no_scripts": "Pas de scripts",
"scripts": "Scripts"
},
@@ -1744,6 +1782,7 @@
},
"header": "Entités",
"headers": {
"area": "Pièce",
"entity_id": "ID de l'entité",
"integration": "Intégration",
"name": "Nom",
@@ -1776,7 +1815,7 @@
"header": "Configurer Home Assistant",
"helpers": {
"caption": "Entrées",
"description": "Gérer les éléments qui peuvent aider à créer des automatisations",
"description": "Éléments pouvant aider à construire des automatisations.",
"dialog": {
"add_helper": "Ajouter une entrée",
"add_platform": "Ajouter {platform}",
@@ -1808,7 +1847,7 @@
"copy_github": "Pour Github",
"copy_raw": "Texte brut",
"custom_uis": "Interfaces utilisateur personnalisées :",
"description": "Informations sur votre installation Home Assistant",
"description": "Version, état du système et liens vers la documentation",
"developed_by": "Développé par un groupe de personnes formidables.",
"documentation": "Documentation",
"frontend": "interface utilisateur",
@@ -1999,7 +2038,7 @@
"open": "Ouvrir"
}
},
"description": "Configurez vos tableaux de bord Lovelace",
"description": "Créez des jeux de cartes personnalisés pour contrôler votre maison",
"resources": {
"cant_edit_yaml": "Vous utilisez Lovelace en mode YAML, vous ne pouvez donc pas gérer vos ressources via l'interface utilisateur. Gérez-les dans configuration.yaml.",
"caption": "Ressources",
@@ -2198,7 +2237,7 @@
"scene": {
"activated": "Scène activée {name}.",
"caption": "Scènes",
"description": "Créer et modifier des scènes",
"description": "Capturez les états de l'appareil et rappelez-les facilement plus tard",
"editor": {
"default_name": "Nouvelle scène",
"devices": {
@@ -2242,7 +2281,7 @@
},
"script": {
"caption": "Scripts",
"description": "Créer et modifier des scripts.",
"description": "Exécuter une séquence d'actions",
"editor": {
"alias": "Nom",
"default_name": "Nouveau script",
@@ -2353,7 +2392,7 @@
"confirm_remove": "Voulez-vous vraiment supprimer la balise {tag} ?",
"confirm_remove_title": "Supprimer la balise ?",
"create_automation": "Créer une automatisation avec une balise",
"description": "Gérer les balises",
"description": "Déclenchez les automatisations lorsquune balise NFC, un code QR, etc. est scanné",
"detail": {
"companion_apps": "applications associées",
"create": "Créer",
@@ -2388,10 +2427,11 @@
"username": "Nom d'utilisateur"
},
"caption": "Utilisateurs",
"description": "Gérer les utilisateurs",
"description": "Gérer les comptes utilisateur de Home Assistant",
"editor": {
"activate_user": "Activer l'utilisateur",
"active": "Actif",
"active_tooltip": "Contrôle si l'utilisateur peut se connecter",
"admin": "Administrateur",
"caption": "Voir l'utilisateur",
"change_password": "Changer le mot de passe",
@@ -2471,6 +2511,16 @@
"value": "Valeur"
},
"description": "Gestion de réseau domotique Zigbee",
"device_pairing_card": {
"CONFIGURED": "Configuration terminée",
"CONFIGURED_status_text": "Initialisation",
"INITIALIZED": "Initialisation terminée",
"INITIALIZED_status_text": "L'appareil est prêt à être utilisé",
"INTERVIEW_COMPLETE": "Processus d'interrogation terminé",
"INTERVIEW_COMPLETE_status_text": "Configurer",
"PAIRED": "Appareil trouvé",
"PAIRED_status_text": "Démarrage du processus d'interrogation"
},
"devices": {
"header": "Zigbee Home Automation - Appareil"
},
@@ -3042,7 +3092,7 @@
"panel_mode": "Ces badges ne seront pas affichés car cette vue est en \"Mode Panneau\"."
},
"edit_card": {
"add": "Ajouter une action",
"add": "Ajouter une carte",
"clear": "Effacer",
"confirm_cancel": "Êtes-vous sûr de vouloir annuler ?",
"delete": "Supprimer la carte",
@@ -3358,7 +3408,7 @@
"button_detect": "Détecter",
"finish": "Suivant",
"intro": "Bonjour {name}, bienvenue dans Home Assistant. Comment voudriez-vous nommer votre maison?",
"intro_location": "Nous aimerions savoir où vous habitez. Ces informations vous aideront à afficher des informations et à configurer des automatismes basés sur le soleil. Ces données ne sont jamais partagées en dehors de votre réseau.",
"intro_location": "Nous aimerions savoir où vous habitez. Ces informations vous aideront à afficher des informations et à configurer des automatisations basés sur le soleil. Ces données ne sont jamais partagées en dehors de votre réseau.",
"intro_location_detect": "Nous pouvons vous aider à renseigner ces informations en adressant une demande unique à un service externe.",
"location_name": "Nom de votre installation Home Assistant",
"location_name_default": "Maison"
@@ -3400,10 +3450,13 @@
"change_password": {
"confirm_new_password": "Confirmer le nouveau mot de passe",
"current_password": "Mot de passe actuel",
"error_new_is_old": "Le nouveau mot de passe doit être différent du mot de passe actuel",
"error_new_mismatch": "Les mots de passe saisis ne correspondent pas",
"error_required": "Requis",
"header": "Changer le mot de passe",
"new_password": "nouveau mot de passe",
"submit": "Envoyer"
"submit": "Envoyer",
"success": "Le mot de passe a été changé avec succès"
},
"current_user": "Vous êtes actuellement connecté en tant que {fullName}.",
"customize_sidebar": {

View File

@@ -1400,6 +1400,7 @@
"caption": "בצע משהו רק אם..."
},
"create": "צור אוטומציה עם המכשיר",
"create_disable": "non posso creare automazioni condispositivi disabilitati",
"no_automations": "אין אוטומציות",
"no_device_automations": "אין אוטומציות זמינות עבור מכשיר זה.",
"triggers": {
@@ -1425,6 +1426,7 @@
"description": "ניהול התקנים מחוברים",
"device_info": "פרטי התקן",
"device_not_found": "המכשיר לא נמצא.",
"disabled": "disabilitato",
"entities": {
"add_entities_lovelace": "הוסף לממשק Lovelace",
"disabled_entities": "+{count} {count, plural,\n one {disabled entity}\n other {disabled entities}\n}",
@@ -1434,14 +1436,24 @@
},
"name": "שם",
"no_devices": "אין התקנים",
"picker": {
"filter": {
"filter": "filtro",
"show_all": "mostra tutto",
"show_disabled": "mostra entità disabilitate"
},
"search": "cerca dispositivi"
},
"scene": {
"create": "צור סצינה עם המכשיר",
"create_disable": "non posso creare scene con dispositivi disabilitati",
"no_scenes": "אין סצינות",
"scenes": "סצינות"
},
"scenes": "סצינות",
"script": {
"create": "צור סקריפט עם המכשיר",
"create_disable": "non posso creare script con dispositivi disabilitati",
"no_scripts": "אין סקריפטים",
"scripts": "סקריפטים"
},
@@ -2908,10 +2920,12 @@
"change_password": {
"confirm_new_password": "אשר סיסמה חדשה",
"current_password": "סיסמה נוכחית",
"error_new_is_old": "la nuova password deve essere diversa dalla attuale",
"error_required": "נדרש",
"header": "שינוי סיסמה",
"new_password": "סיסמה חדשה",
"submit": "שלח"
"submit": "שלח",
"success": "cambio password riuscito"
},
"current_user": "אתה מחובר כעת כ- {fullName} .",
"dashboard": {

View File

@@ -2,11 +2,13 @@
"config_entry": {
"disabled_by": {
"config_entry": "Konfigurációs bejegyzés",
"device": "Eszköz",
"integration": "Integráció",
"user": "Felhasználó"
}
},
"groups": {
"owner": "Tulajdonos",
"system-admin": "Adminisztrátorok",
"system-read-only": "Felhasználók csak olvasási jogosultsággal",
"system-users": "Felhasználók"
@@ -545,6 +547,8 @@
"add_new": "Új terület hozzáadása...",
"area": "Terület",
"clear": "Törlés",
"no_areas": "Nincsenek területei.",
"no_match": "Nem található egyező terület",
"show_areas": "Területek megjelenítése"
},
"blueprint-picker": {
@@ -565,6 +569,8 @@
"clear": "Törlés",
"device": "Eszköz",
"no_area": "Nincs terület",
"no_devices": "Nincsenek eszközei",
"no_match": "Nem található egyező eszköz",
"show_devices": "Eszközök megjelenítése",
"toggle": "Váltás"
},
@@ -576,6 +582,7 @@
"entity-picker": {
"clear": "Törlés",
"entity": "Entitás",
"no_match": "Nem található egyező entitás",
"show_entities": "Entitások megjelenítése"
}
},
@@ -709,6 +716,16 @@
"service-picker": {
"service": "Szolgáltatás"
},
"target-picker": {
"add_area_id": "Terület kiválasztása",
"add_device_id": "Eszköz kiválasztása",
"add_entity_id": "Entitás kiválasztása",
"expand_area_id": "Bontsd ki ezt a területet a benne található különálló eszközökben és entitásokban. A kibontás után nem fognak frissülni az eszközök és az entitások, amikor a terület megváltozik.",
"expand_device_id": "Bontsd ki ezt az eszközt külön entitásokban. A kibontás után nem fognak frissülni az entitások, amikor az eszköz megváltozik.",
"remove_area_id": "Terület eltávolítása",
"remove_device_id": "Eszköz eltávolítása",
"remove_entity_id": "Entitás eltávolítása"
},
"user-picker": {
"add_user": "Felhasználó hozzáadása",
"no_user": "Nincs felhasználó",
@@ -732,6 +749,7 @@
"editor": {
"confirm_delete": "Biztosan törölni szeretnéd ezt a bejegyzést?",
"delete": "Törlés",
"device_disabled": "Ennek az entitásnak az eszköze le van tiltva.",
"enabled_cause": "Letiltva. ({cause})",
"enabled_delay_confirm": "Az engedélyezett entitások {delay} másodpercen belül hozzá lesznek adva a Home Assistant-hoz",
"enabled_description": "A letiltott entitások nem lesznek hozzáadva a Home Assistant-hoz.",
@@ -742,6 +760,7 @@
"icon_error": "Az ikonokat a 'prefix:ikonnév' formátumban kell megadni, pl.: 'mdi:home'",
"name": "Név",
"note": "Megjegyzés: lehet, hogy ez még nem működik minden integrációval.",
"open_device_settings": "Eszközbeállítások megnyitása",
"unavailable": "Ez az entitás jelenleg nem elérhető.",
"update": "Frissítés"
},
@@ -1029,7 +1048,7 @@
"confirmation_text": "Minden ebben a területben lévő eszköz hozzárendelés nélküli lesz.",
"confirmation_title": "Biztosan törölni szeretnéd ezt a területet?"
},
"description": "Otthoni területek kezelése",
"description": "Eszközök és entitások csoportosítása területekre",
"editor": {
"area_id": "Terület ID",
"create": "Létrehozás",
@@ -1051,7 +1070,7 @@
},
"automation": {
"caption": "Automatizálások",
"description": "Automatizálások kezelése",
"description": "Egyéni viselkedési szabályok létrehozása az otthonodhoz",
"dialog_new": {
"blueprint": {
"use_blueprint": "Tervrajz használata"
@@ -1399,22 +1418,22 @@
"blueprint": {
"add": {
"error_no_url": "Add meg a tervrajz URL címét.",
"file_name": "Helyi tervrajz neve",
"header": "Új tervrajz hozzáadása",
"import_btn": "Tervrajz importálása",
"import_header": "{name} importálása ({domain})",
"file_name": "Tervrajz elérési útja",
"header": "Tervrajz importálása",
"import_btn": "Tervrajz előnézete",
"import_header": "\"{name}\" tervrajz",
"import_introduction": "Importálhatod más felhasználók tervrajzait a Githubról és a közösségi fórumról. Írd be alább a terv URL címét.",
"importing": "Tervrajz importálása...",
"importing": "Tervrajz betöltése...",
"raw_blueprint": "Tervrajz tartalma",
"save_btn": "Tervrajz mentése",
"saving": "Tervrajz mentése...",
"save_btn": "Tervrajz importálása",
"saving": "Tervrajz importálása...",
"unsupported_blueprint": "Ez a tervrajz nem támogatott",
"url": "A tervrajz URL-címe"
},
"caption": "Tervrajzok",
"description": "Tervrajzok kezelése",
"overview": {
"add_blueprint": "Tervrajz hozzáadása",
"add_blueprint": "Tervrajz importálása",
"confirm_delete_header": "Törlöd ezt a tervrajzot?",
"confirm_delete_text": "Biztosan törölni szeretnéd ezt a tervrajzot?",
"delete_blueprint": "Tervrajz törlése",
@@ -1509,7 +1528,7 @@
"title": "Alexa"
},
"caption": "Home Assistant Felhő",
"description_features": "Távoli vezérlés, Alexa és Google Asszisztens integráció",
"description_features": "Irányítsd az otthonod, amikor távol vagy, és integráld Alexával és a Google Segéddel",
"description_login": "Bejelentkezve mint {email}",
"description_not_login": "Nincs bejelentkezve",
"dialog_certificate": {
@@ -1604,7 +1623,7 @@
},
"core": {
"caption": "Általános",
"description": "Az általános Home Assistant konfiguráció módosítása",
"description": "Egységrendszer, hely, időzóna és egyéb általános paraméterek",
"section": {
"core": {
"core_config": {
@@ -1666,6 +1685,7 @@
"unknown_condition": "Ismeretlen feltétel"
},
"create": "Automatizálás létrehozása eszközzel",
"create_disable": "Nem lehet automatizálást létrehozni a letiltott eszközzel",
"no_automations": "Nincsenek automatizálások",
"no_device_automations": "Ehhez az eszközhöz nem állnak rendelkezésre automatizálások.",
"triggers": {
@@ -1691,9 +1711,18 @@
"no_devices": "Nincsenek eszközök"
},
"delete": "Törlés",
"description": "Csatlakoztatott eszközök kezelése",
"description": "Konfigurált eszközök kezelése",
"device_info": "Eszköz információ",
"device_not_found": "Eszköz nem található.",
"disabled": "Letiltva",
"disabled_by": {
"config_entry": "Konfigurációs bejegyzés",
"integration": "Integráció",
"user": "Felhasználó"
},
"enabled_cause": "Az eszköz le van tiltva. ({cause})",
"enabled_description": "A letiltott eszközök nem jelennek meg, az eszközhöz tartozó entitások pedig le lesznek tiltva, és nem lesznek hozzáadva a Home Assistant programhoz.",
"enabled_label": "Eszköz engedélyezése",
"entities": {
"add_entities_lovelace": "Hozzáadás a Lovelace-hez",
"disabled_entities": "+{count} {count, plural,\n one {letiltott entitás}\n other {letiltott entitás}\n}",
@@ -1703,14 +1732,25 @@
},
"name": "Név",
"no_devices": "Nincsenek eszközök",
"picker": {
"filter": {
"filter": "Szűrő",
"hidden_devices": "{number} rejtett {number, plural,\n one {eszköz}\n other {eszköz}\n}",
"show_all": "Az összes megjelenítése",
"show_disabled": "Letiltott eszközök megjelenítése"
},
"search": "Eszközök keresése"
},
"scene": {
"create": "Jelenet létrehozása eszközzel",
"create_disable": "Nem lehet létrehozni a jelenetet letiltott eszközzel",
"no_scenes": "Nincsenek jelenetek",
"scenes": "Jelenetek"
},
"scenes": "Jelenetek",
"script": {
"create": "Szkript létrehozása eszközzel",
"create_disable": "Nem lehet szkriptet létrehozni letiltott eszközzel",
"no_scripts": "Nincsenek szkriptek",
"scripts": "Szkriptek"
},
@@ -1743,6 +1783,7 @@
},
"header": "Entitások",
"headers": {
"area": "Terület",
"entity_id": "Entitás ID",
"integration": "Integráció",
"name": "Név",
@@ -1775,7 +1816,7 @@
"header": "Home Assistant beállítása",
"helpers": {
"caption": "Segítők",
"description": "Automatizálások létrehozását segítő elemek kezelése",
"description": "Automatizálások létrehozását elősegítő elemek",
"dialog": {
"add_helper": "Segítő hozzáadása",
"add_platform": "{platform} hozzáadása",
@@ -1807,7 +1848,7 @@
"copy_github": "A GitHub számára",
"copy_raw": "Nyers szöveg",
"custom_uis": "Egyéni felhasználói felületek:",
"description": "Telepítési információ megtekintése a Home Assistant-ról",
"description": "Verzió, rendszerállapot és dokumentációra mutató linkek",
"developed_by": "Egy csomó fantasztikus ember által kifejlesztve.",
"documentation": "Dokumentáció",
"frontend": "frontend-ui",
@@ -1913,7 +1954,7 @@
},
"configure": "Beállítás",
"configured": "Konfigurálva",
"description": "Integrációk kezelése",
"description": "Integrációk kezelése (szolgáltatások, eszközök...)",
"details": "Integráció részletei",
"discovered": "Felfedezett",
"home_assistant_website": "Home Assistant weboldal",
@@ -1998,7 +2039,7 @@
"open": "Megnyitás"
}
},
"description": "Lovelace irányítópultok kezelése",
"description": "Hozz létre személyre szabott kártyafelosztásokat az otthonod vezérléséhez",
"resources": {
"cant_edit_yaml": "A Lovelace-t YAML módban használod, ezért az erőforrásokat nem kezelheted a felhasználói felületről. Kezeld őket a configuration.yaml fájlban.",
"caption": "Erőforrások",
@@ -2197,7 +2238,7 @@
"scene": {
"activated": "Aktivált jelenet: {name}.",
"caption": "Jelenetek",
"description": "Jelenetek kezelése",
"description": "Eszköz állapotok rögzítése, hogy később egyszerűen előhívhasd őket",
"editor": {
"default_name": "Új jelenet",
"devices": {
@@ -2241,7 +2282,7 @@
},
"script": {
"caption": "Szkriptek",
"description": "Szkriptek kezelése",
"description": "Műveletsorozat végrehajtása",
"editor": {
"alias": "Név",
"default_name": "Új Szkript",
@@ -2352,7 +2393,7 @@
"confirm_remove": "Biztosan el szeretnéd távolítani a(z) {tag} címkét?",
"confirm_remove_title": "Eltávolítod a címkét?",
"create_automation": "Automatizálás létrehozása címkével",
"description": "Címkék kezelése",
"description": "Automatizálások indítása NFC-címke, QR-kód stb. beolvasásakor",
"detail": {
"companion_apps": "társalkalmazások",
"create": "Létrehozás",
@@ -2387,10 +2428,11 @@
"username": "Felhasználónév"
},
"caption": "Felhasználók",
"description": "Felhasználók kezelése",
"description": "Home Assistant felhasználói fiókok kezelése",
"editor": {
"activate_user": "Felhasználó aktiválása",
"active": "Aktív",
"active_tooltip": "Szabályozza, hogy a felhasználó be tud-e jelentkezni",
"admin": "Adminisztrátor",
"caption": "Felhasználó megtekintése",
"change_password": "Jelszó módosítása",
@@ -2399,7 +2441,7 @@
"delete_user": "Felhasználó törlése",
"group": "Csoport",
"id": "ID",
"name": "Név",
"name": "Megjelenítendő név",
"new_password": "Új Jelszó",
"owner": "Tulajdonos",
"password_changed": "A jelszó módosítása sikeresen megtörtént",
@@ -2407,14 +2449,18 @@
"system_generated_users_not_editable": "Nem lehet frissíteni a rendszer által létrehozott felhasználókat.",
"system_generated_users_not_removable": "Nem lehet eltávolítani a rendszer által létrehozott felhasználókat.",
"unnamed_user": "Névtelen felhasználó",
"update_user": "Frissítés"
"update_user": "Frissítés",
"username": "Felhasználónév"
},
"picker": {
"add_user": "Felhasználó hozzáadása",
"headers": {
"group": "Csoport",
"name": "v",
"system": "Rendszer"
"is_active": "Aktív",
"is_owner": "Tulajdonos",
"name": "Megjelenítendő név",
"system": "Rendszer által létrehozott",
"username": "Felhasználónév"
}
},
"users_privileges_note": "A felhasználói csoport funkció jelenleg is fejlesztés alatt áll. A felhasználó nem tudja kezelni a példányt a felhasználói felületen keresztül. Folyamatosan ellenőrizzük az összes felügyeleti API-végpontot annak érdekében, hogy azok helyesen korlátozzák a hozzáférést az adminisztrátorok részére."
@@ -2466,6 +2512,16 @@
"value": "Érték"
},
"description": "Zigbee Home Automation hálózat menedzsment",
"device_pairing_card": {
"CONFIGURED": "A konfigurálás befejeződött",
"CONFIGURED_status_text": "Inicializálás",
"INITIALIZED": "Az inicializálás befejeződött",
"INITIALIZED_status_text": "A készülék használatra kész",
"INTERVIEW_COMPLETE": "Interjú kész",
"INTERVIEW_COMPLETE_status_text": "Konfigurálás",
"PAIRED": "Eszköz megtalálva",
"PAIRED_status_text": "Interjú indítása"
},
"devices": {
"header": "Zigbee Home Automation - Eszköz"
},
@@ -2785,7 +2841,7 @@
}
},
"changed_toast": {
"message": "Az ehhez az irányítópulthoz tartozó Lovelace konfiguráció módosítva lett, szeretnél frissíteni az aktualizáláshoz?",
"message": "Az ehhez az irányítópulthoz tartozó Lovelace konfiguráció módosítva lett. Frissítesz az aktualizáláshoz?",
"refresh": "Frissítés"
},
"editor": {
@@ -3395,10 +3451,13 @@
"change_password": {
"confirm_new_password": "Új Jelszó Megerősítése",
"current_password": "Jelenlegi Jelszó",
"error_new_is_old": "Az új jelszónak különböznie kell az aktuális jelszótól",
"error_new_mismatch": "A megadott új jelszavak nem egyeznek",
"error_required": "Szükséges",
"header": "Jelszó Módosítása",
"new_password": "Új Jelszó",
"submit": "Küldés"
"submit": "Küldés",
"success": "A jelszó sikeresen módosíva lett"
},
"current_user": "Jelenleg {fullName} felhasználóként vagy bejelentkezve.",
"customize_sidebar": {

View File

@@ -21,7 +21,7 @@
"map": "Քարտեզ",
"profile": "Անձնագիր",
"shopping_list": "Գնումների ցուցակ",
"states": "Գլխավոր"
"states": "Ակնարկ"
},
"state_attributes": {
"climate": {
@@ -89,7 +89,7 @@
"disarmed": "Զինաթափված",
"disarming": "Զինաթափող",
"pending": "Սպասում",
"triggered": "պատճառը"
"triggered": "Գործարկել է"
},
"automation": {
"off": "Անջատած",
@@ -207,7 +207,7 @@
},
"default": {
"unavailable": "Անհասանելի",
"unknown": "հայտնի չէ"
"unknown": "Անհայտ"
},
"device_tracker": {
"not_home": "Հեռու"
@@ -480,6 +480,9 @@
},
"service-picker": {
"service": "Ծառայություն"
},
"target-picker": {
"add_entity_id": "Ընտրեք սուբյեկտ"
}
},
"dialogs": {
@@ -488,6 +491,11 @@
"enable_new_entities_label": "Միացնել նոր ավելացված օբյեկտները:",
"title": "Համակարգի Պարամետրերը"
},
"entity_registry": {
"editor": {
"open_device_settings": "Բացել սարքի կարգավորումները"
}
},
"more_info_control": {
"script": {
"last_action": "Վերջին գործողությունը"
@@ -796,6 +804,33 @@
"introduction": "Կսմթել յուրաքանչյուր անձի հատկանիշները: Անհապաղ գործողության մեջ կավելացվեն / խմբագրված փոփոխությունները: Հեռացված կարգավորումները ուժի մեջ են մտնում սուբյեկտի թարմացման դեպքում:"
}
},
"devices": {
"automation": {
"create_disable": "Հնարավոր չէ ստեղծել ավտոմատացում անջատված սարքով"
},
"disabled": "Անջատված",
"disabled_by": {
"config_entry": "Կարգավորման կետ",
"integration": "Ինտեգրում",
"user": "Օգտատեր"
},
"enabled_cause": "Անջատված է {cause}-ի կողմից",
"enabled_label": "Միացնել սարքը",
"picker": {
"filter": {
"filter": "Ֆիլտր",
"show_all": "Ցույց տալ ամբողջը",
"show_disabled": "Ցուցադրել ապաակտիվացված սարքերը"
},
"search": "Որոնել սարքեր"
},
"scene": {
"create_disable": "Հնարավոր չէ սցենար ստեղծել անջատված սարքով"
},
"script": {
"create_disable": "Անջատված սարքով հնարավոր չէ ստեղծել սկրիպտ"
}
},
"entities": {
"caption": "Անշարժ գույքի ռեգիստր",
"description": "Բոլոր հայտնի սուբյեկտների ակնարկ:",
@@ -899,6 +934,7 @@
"description": "Կառավարեք օգտվողներին",
"editor": {
"activate_user": "Ակտիվացրեք օգտագործողին",
"active_tooltip": "Վերահսկում է, եթե օգտագործողը կարող է մուտք գործել",
"caption": "Տեսնել օգտագործողին",
"change_password": "Փոխել գաղտնաբառը",
"deactivate_user": "Ապաակտիվացնել օգտագործողին",
@@ -1247,10 +1283,13 @@
"change_password": {
"confirm_new_password": "Հաստատեք նոր գաղտնաբառ",
"current_password": "Ընթացիկ գաղտնաբառ",
"error_new_is_old": "Նոր գաղտնաբառը պետք է տարբերվի ներկայիս գաղտնաբառից",
"error_new_mismatch": "Գաղտնաբառերը չեն համընկնում",
"error_required": "Պահանջվում է",
"header": "Փոխել գաղտնաբառը",
"new_password": "Նոր գաղտնաբառը",
"submit": "Ներկայացնել"
"submit": "Ներկայացնել",
"success": "Գաղտնաբառը հաջողությամբ փոխվեց"
},
"current_user": "Դուք մուտք եք գործել որպես {fullName} :",
"force_narrow": {

View File

@@ -2,6 +2,7 @@
"config_entry": {
"disabled_by": {
"config_entry": "Voce di configurazione",
"device": "Dispositivo",
"integration": "Integrazione",
"user": "Utente"
}
@@ -546,6 +547,8 @@
"add_new": "Aggiungi nuova area…",
"area": "Area",
"clear": "Cancella",
"no_areas": "Non hai aree",
"no_match": "Non sono state trovate aree corrispondenti",
"show_areas": "Mostra le aree"
},
"blueprint-picker": {
@@ -566,6 +569,8 @@
"clear": "Cancella",
"device": "Dispositivo",
"no_area": "Nessuna area",
"no_devices": "Non hai alcun dispositivo",
"no_match": "Non sono stati trovati dispositivi corrispondenti",
"show_devices": "Mostra dispositivi",
"toggle": "Azionare"
},
@@ -577,6 +582,7 @@
"entity-picker": {
"clear": "Cancella",
"entity": "Entità",
"no_match": "Non sono state trovate entità corrispondenti",
"show_entities": "Mostra entità"
}
},
@@ -710,6 +716,16 @@
"service-picker": {
"service": "Servizio"
},
"target-picker": {
"add_area_id": "Scegli area",
"add_device_id": "Scegli dispositivo",
"add_entity_id": "Scegli entità",
"expand_area_id": "Espandi quest'area nei dispositivi e nelle entità separate che contiene. Dopo l'espansione non aggiornerà i dispositivi e le entità quando l'area cambia.",
"expand_device_id": "Espandi questo dispositivo in entità separate. Dopo l'espansione non aggiornerà le entità quando il dispositivo cambia.",
"remove_area_id": "Rimuovi area",
"remove_device_id": "Rimuovi dispositivo",
"remove_entity_id": "Rimuovi entità"
},
"user-picker": {
"add_user": "Aggiungi utente",
"no_user": "Nessun utente",
@@ -733,6 +749,7 @@
"editor": {
"confirm_delete": "Sei sicuro di voler eliminare questa voce?",
"delete": "Elimina",
"device_disabled": "Il dispositivo di questa entità è disabilitato.",
"enabled_cause": "Disabilitato da {cause}.",
"enabled_delay_confirm": "Le entità abilitate saranno aggiunte a Home Assistant in {delay} secondi",
"enabled_description": "Le entità disabilitate non saranno aggiunte a Home Assistant",
@@ -743,6 +760,7 @@
"icon_error": "Le icone dovrebbero essere nel formato 'prefisso:nome_icona', ad esempio 'mdi:home'.",
"name": "Nome",
"note": "Nota: questo potrebbe non funzionare ancora con tutte le integrazioni.",
"open_device_settings": "Apri le impostazioni del dispositivo",
"unavailable": "Questa entità non è attualmente disponibile.",
"update": "Aggiorna"
},
@@ -1030,7 +1048,7 @@
"confirmation_text": "Tutti i dispositivi in quest'area non saranno assegnati.",
"confirmation_title": "Sei sicuro di voler cancellare quest'area?"
},
"description": "Gestisci le aree della tua casa",
"description": "Raggruppa dispositivi ed entità in aree",
"editor": {
"area_id": "Area ID",
"create": "Crea",
@@ -1052,7 +1070,7 @@
},
"automation": {
"caption": "Automazioni",
"description": "Gestisci le Automazioni",
"description": "Crea regole di comportamento personalizzate per la tua casa",
"dialog_new": {
"blueprint": {
"use_blueprint": "Usa un progetto"
@@ -1400,15 +1418,15 @@
"blueprint": {
"add": {
"error_no_url": "Inserisci l'URL del progetto.",
"file_name": "Nome del file di progetto locale",
"header": "Aggiungi un nuovo progetto",
"import_btn": "Importa progetto",
"import_header": "Importa \"{name}\" (tipo: {domain})",
"file_name": "Percorso del progetto",
"header": "Importa un progetto",
"import_btn": "Anteprima del progetto",
"import_header": "Progetto \"{name}\"",
"import_introduction": "Puoi importare progetti di altri utenti da Github e dai forum della comunità. Immettere l'URL del progetto di seguito.",
"importing": "Importazione del progetto in corso ...",
"importing": "Caricamento progetto ...",
"raw_blueprint": "Contenuto del progetto",
"save_btn": "Salva progetto",
"saving": "Salvataggio del progetto in corso ...",
"save_btn": "Importa progetto",
"saving": "Importazione del progetto ...",
"unsupported_blueprint": "Questo progetto non è supportato",
"url": "URL del progetto"
},
@@ -1425,8 +1443,8 @@
"file_name": "Nome file",
"name": "Nome"
},
"introduction": "L'editor del progetto consente di creare e modificare i progetti.",
"learn_more": "Per saperne di più sui progetti",
"introduction": "La configurazione del progetto ti consente di importare e gestire i tuoi progetti.",
"learn_more": "Ulteriori informazioni sull'utilizzo dei progetti",
"use_blueprint": "Crea automazione"
}
},
@@ -1510,7 +1528,7 @@
"title": "Alexa"
},
"caption": "Home Assistant Cloud",
"description_features": "Controllo fuori casa, integrazione con Alexa e Google Assistant.",
"description_features": "Controlla la casa quando sei via e integra con Alexa e Google Assistant",
"description_login": "Connesso come {email}",
"description_not_login": "Accesso non effettuato",
"dialog_certificate": {
@@ -1605,7 +1623,7 @@
},
"core": {
"caption": "Generale",
"description": "Modifica la configurazione generale di Home Assistant",
"description": "Sistema di unità, posizione, fuso orario e altri parametri generali",
"section": {
"core": {
"core_config": {
@@ -1667,6 +1685,7 @@
"unknown_condition": "Condizione sconosciuta"
},
"create": "Crea l'automazione con il dispositivo",
"create_disable": "Non è possibile creare automazione con un dispositivo disabilitato",
"no_automations": "Nessuna automazione",
"no_device_automations": "Non ci sono Automazioni disponibili per questo dispositivo.",
"triggers": {
@@ -1692,9 +1711,18 @@
"no_devices": "Nessun dispositivo"
},
"delete": "Elimina",
"description": "Gestisci i dispositivi collegati",
"description": "Gestisci i dispositivi configurati",
"device_info": "Informazioni sul dispositivo",
"device_not_found": "Dispositivo non trovato.",
"disabled": "Disabilitato",
"disabled_by": {
"config_entry": "Voce di configurazione",
"integration": "Integrazione",
"user": "Utente"
},
"enabled_cause": "Il dispositivo è stato disabilitato da {cause}.",
"enabled_description": "I dispositivi disabilitati non verranno mostrati e le entità appartenenti al dispositivo verranno disabilitate e non aggiunte a Home Assistant.",
"enabled_label": "Abilita dispositivo",
"entities": {
"add_entities_lovelace": "Aggiungi a Lovelace",
"disabled_entities": "+{count} {count, plural,\n one {entità disabilitata}\n other {entità disabilitate}\n}",
@@ -1704,14 +1732,25 @@
},
"name": "Nome",
"no_devices": "Nessun dispositivo",
"picker": {
"filter": {
"filter": "Filtro",
"hidden_devices": "nascosto/i {number} {number, plural,\n one {dispositivo}\n other {dispositivi}\n}",
"show_all": "Mostra tutto",
"show_disabled": "Mostra dispositivi disabilitati"
},
"search": "Cerca dispositivi"
},
"scene": {
"create": "Crea una Scena con il dispositivo",
"create_disable": "Non è possibile creare scene con un dispositivo disabilitato",
"no_scenes": "Nessuna Scena",
"scenes": "Scene"
},
"scenes": "Scene",
"script": {
"create": "Crea uno script con il dispositivo",
"create_disable": "Non è possibile creare script con un dispositivo disabilitato",
"no_scripts": "Nessuno script",
"scripts": "Script"
},
@@ -1777,7 +1816,7 @@
"header": "Configura Home Assistant",
"helpers": {
"caption": "Aiutanti",
"description": "Gestisci elementi che possono aiutare a costruire le automazioni.",
"description": "Elementi che aiutano a costruire le automazioni",
"dialog": {
"add_helper": "Aggiungi aiutante",
"add_platform": "Aggiungi {platform}",
@@ -1809,7 +1848,7 @@
"copy_github": "Per GitHub",
"copy_raw": "Testo non elaborato",
"custom_uis": "Interfacce Utente personalizzate:",
"description": "Visualizza le informazioni sull'installazione di Home Assistant",
"description": "Versione, integrità del sistema e collegamenti alla documentazione",
"developed_by": "Sviluppato da un gruppo di persone fantastiche.",
"documentation": "Documentazione",
"frontend": "frontend-ui",
@@ -1915,7 +1954,7 @@
},
"configure": "Configura",
"configured": "Configurato",
"description": "Gestisci le integrazioni",
"description": "Gestisci le integrazioni con servizi, dispositivi, ...",
"details": "Dettagli dell'integrazione",
"discovered": "Rilevato",
"home_assistant_website": "Sito Web di Home Assistant",
@@ -2000,7 +2039,7 @@
"open": "Aprire"
}
},
"description": "Gestisci le tue plance di Lovelace",
"description": "Crea insiemi di schede personalizzate per controllare la tua casa",
"resources": {
"cant_edit_yaml": "Si utilizza Lovelace in modalità YAML, pertanto non è possibile gestire le risorse tramite l'Interfaccia Utente. Gestirli in configuration.yaml.",
"caption": "Risorse",
@@ -2199,7 +2238,7 @@
"scene": {
"activated": "Scena attivata {name}.",
"caption": "Scene",
"description": "Gestisci le scene",
"description": "Cattura gli stati del dispositivo e richiamarli facilmente in seguito",
"editor": {
"default_name": "Nuova scena",
"devices": {
@@ -2243,7 +2282,7 @@
},
"script": {
"caption": "Script",
"description": "Gestisci gli script",
"description": "Esegui una sequenza di azioni",
"editor": {
"alias": "Nome",
"default_name": "Nuovo script",
@@ -2354,7 +2393,7 @@
"confirm_remove": "Sei sicuro di voler rimuovere l'etichetta {tag}?",
"confirm_remove_title": "Rimuovere l'etichetta?",
"create_automation": "Creare un'automazione con l'etichetta",
"description": "Gestisci le etichette",
"description": "Attiva le automazioni quando viene scansionato un tag NFC, un codice QR, ecc",
"detail": {
"companion_apps": "app complementari",
"create": "Crea",
@@ -2389,10 +2428,11 @@
"username": "Nome utente"
},
"caption": "Utenti",
"description": "Gestisci gli utenti",
"description": "Gestisci gli account utente di Home Assistant",
"editor": {
"activate_user": "Attiva utente",
"active": "Attivo",
"active_tooltip": "Controlla se l'utente può effettuare il login",
"admin": "Amministratore",
"caption": "Visualizza utente",
"change_password": "Cambia password",
@@ -3411,10 +3451,13 @@
"change_password": {
"confirm_new_password": "Conferma la nuova password",
"current_password": "Password corrente",
"error_new_is_old": "La nuova password deve essere diversa dalla password corrente",
"error_new_mismatch": "I valori della nuova password immessi non corrispondono",
"error_required": "Richiesto",
"header": "Cambia password",
"new_password": "Nuova password",
"submit": "Invia"
"submit": "Invia",
"success": "Password modificata correttamente"
},
"current_user": "Sei attualmente connesso come {fullName}.",
"customize_sidebar": {

View File

@@ -2,11 +2,13 @@
"config_entry": {
"disabled_by": {
"config_entry": "構成エントリ",
"device": "デバイス",
"integration": "インテグレーション",
"user": "ユーザー"
}
},
"groups": {
"owner": "オーナー",
"system-admin": "管理者",
"system-read-only": "読み取り専用ユーザー",
"system-users": "ユーザー"
@@ -531,6 +533,8 @@
"add_new": "新しいエリアを追加…",
"area": "エリア",
"clear": "消去",
"no_areas": "エリアがありません",
"no_match": "一致するエリアが見つかりません",
"show_areas": "エリアを表示"
},
"blueprint-picker": {
@@ -551,6 +555,8 @@
"clear": "削除",
"device": "デバイス",
"no_area": "エリアなし",
"no_devices": "デバイスがありません",
"no_match": "一致するデバイスが見つかりません",
"show_devices": "デバイスを表示",
"toggle": "切り替え"
},
@@ -562,6 +568,7 @@
"entity-picker": {
"clear": "消去",
"entity": "エンティティ",
"no_match": "一致するエンティティが見つかりません",
"show_entities": "エンティティを表示"
}
},
@@ -695,6 +702,16 @@
"service-picker": {
"service": "サービス"
},
"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": "エンティティの削除"
},
"user-picker": {
"add_user": "ユーザーを追加",
"no_user": "ユーザーなし",
@@ -718,6 +735,7 @@
"editor": {
"confirm_delete": "このエントリを削除してもよろしいですか?",
"delete": "削除",
"device_disabled": "このエンティティのデバイスは無効になっています。",
"enabled_cause": "{cause} によって無効にされました。",
"enabled_delay_confirm": "有効なエンティティは {delay} 秒でホーム アシスタントに追加されます",
"enabled_description": "無効化されたエンティティは Home Assistant に追加されません。",
@@ -728,6 +746,7 @@
"icon_error": "アイコンは「prefixiconname」の形式にする必要があります「mdihome」。",
"name": "名前の上書き",
"note": "注: これは、まだすべてのインテグレーションで動作しない場合があります。",
"open_device_settings": "デバイス設定を開く",
"unavailable": "このエンティティは現在利用できません。",
"update": "更新"
},
@@ -992,7 +1011,7 @@
"dismiss": "閉じる",
"service_call_failed": "サービス{service}の呼び出しに失敗しました。",
"started": "ホームアシスタントが開始されました!",
"starting": "Home Assistantが起動中です。終了するまですべてが利用できるわけではありません。",
"starting": "Home Assistantが起動中です。全て利用可能なるまでもうしばらくお待ち下さい。",
"triggered": "トリガーしました {name}"
},
"panel": {
@@ -1352,7 +1371,7 @@
"delete_automation": "オートメーションを削除",
"delete_confirm": "このオートメーションを削除してもよろしいですか?",
"duplicate": "複製",
"duplicate_automation": "重複したオートメーション",
"duplicate_automation": "オートメーションを複製",
"edit_automation": "オートメーションを編集",
"header": "オートメーションエディター",
"headers": {
@@ -1385,11 +1404,13 @@
"blueprint": {
"add": {
"error_no_url": "設計図のURLを入力してください。",
"file_name": "設計図のパス",
"header": "新しい設計図を追加する",
"import_btn": "設計図をインポートする",
"import_header": "インポート{name} {domain} ",
"import_introduction": "Github やコミュニティフォーラムから他のユーザーの設計図をインポートできます。以下に、設計図の URL を入力します。",
"importing": "設計図をインポートしています...",
"raw_blueprint": "設計図コンテンツ",
"save_btn": "設計図の保存",
"saving": "設計図を保存しています...",
"unsupported_blueprint": "この設計図はサポートされていません",
@@ -1401,12 +1422,16 @@
"add_blueprint": "設計図を追加する",
"confirm_delete_header": "この設計図を削除しますか?",
"confirm_delete_text": "この設計図を削除してもよ思いますか?",
"delete_blueprint": "設計図を削除",
"header": "設計図エディタ",
"headers": {
"domain": "ドメイン",
"file_name": "ファイル名",
"name": "名前"
},
"introduction": "設計図エディターを使用すると、設計図を作成および編集できます。",
"learn_more": "設計図の詳細"
"learn_more": "設計図の詳細",
"use_blueprint": "オートメーションを作成"
}
},
"cloud": {
@@ -1646,6 +1671,7 @@
"unknown_condition": "状態不明"
},
"create": "デバイスからオートメーションを作成",
"create_disable": "無効なデバイスで自動化を作成できません",
"no_automations": "オートメーションなし",
"no_device_automations": "このデバイスで利用可能なオートメーションはありません。",
"triggers": {
@@ -1674,6 +1700,15 @@
"description": "接続されたデバイスの管理",
"device_info": "デバイス情報",
"device_not_found": "デバイスが見つかりません。",
"disabled": "無効",
"disabled_by": {
"config_entry": "構成エントリ",
"integration": "インテグレーション",
"user": "ユーザー"
},
"enabled_cause": "デバイスは{cause}によって無効にされています。",
"enabled_description": "無効なデバイスは表示されず、デバイスに属するエンティティは無効になり、ホーム アシスタントに追加されません。",
"enabled_label": "デバイスを有効にする",
"entities": {
"add_entities_lovelace": "Lovelaceに追加",
"disabled_entities": "{count} {count, plural,\n one {無効なエンティティ}\n other {無効なエンティティ}\n}",
@@ -1683,14 +1718,25 @@
},
"name": "名前",
"no_devices": "デバイスなし",
"picker": {
"filter": {
"filter": "フィルター",
"hidden_devices": "{number} 非表示 {number, plural,\n one {デバイス}\n other {デバイス}\n}",
"show_all": "すべてを表示",
"show_disabled": "無効なデバイスを表示する"
},
"search": "デバイスを探す"
},
"scene": {
"create": "デバイスからシーンを作成",
"create_disable": "デバイスが無効になっているのでシーンを作成できません",
"no_scenes": "シーンなし",
"scenes": "シーン"
},
"scenes": "シーン",
"script": {
"create": "デバイスからスクリプトを作成",
"create_disable": "デバイスが無効になっているのでスクリプトを作成できません",
"no_scripts": "スクリプトなし",
"scripts": "スクリプト"
},
@@ -1723,6 +1769,7 @@
},
"header": "エンティティ",
"headers": {
"area": "エリア",
"entity_id": "エンティティ ID",
"integration": "インテグレーション",
"name": "名前",
@@ -1784,6 +1831,8 @@
"info": {
"built_using": "を使用して構築",
"caption": "情報",
"copy_github": "GitHubの場合",
"copy_raw": "本来のテキスト",
"custom_uis": "カスタムの UIs:",
"description": "ホーム アシスタントのインストールに関する情報を表示する",
"developed_by": "素晴らしい人々の集まりによって開発されました。",
@@ -2369,6 +2418,7 @@
"editor": {
"activate_user": "ユーザーを有効化",
"active": "アクティブ",
"active_tooltip": "ユーザーがログインできるかどうかを制御します",
"admin": "管理者",
"caption": "ユーザーを表示",
"change_password": "パスワードの変更",
@@ -2385,19 +2435,24 @@
"system_generated_users_not_editable": "システムが生成されたユーザーを変更できません。",
"system_generated_users_not_removable": "システムで生成されたユーザーを削除できません。",
"unnamed_user": "名前のないユーザー",
"update_user": "更新"
"update_user": "更新",
"username": "ユーザー名"
},
"picker": {
"add_user": "ユーザーを追加する",
"headers": {
"group": "グループ",
"is_active": "アクティブ",
"is_owner": "オーナー",
"name": "名前",
"system": "システム"
"system": "システム",
"username": "ユーザー名"
}
},
"users_privileges_note": "ユーザーグループは作業中です。ユーザーは、UIを介してインスタンスを管理できなくなります。すべての管理APIエンドポイントを引き続き監査して、管理者へのアクセスを正しく制限していることを確認しています。"
},
"zha": {
"add_device": "デバイスの追加",
"add_device_page": {
"discovered_text": "検出されると、デバイスがここに表示されます。",
"discovery_text": "検出されたデバイスがここに表示されます。デバイスの指示に従い、ペアリングモードにします。",
@@ -2443,6 +2498,16 @@
"value": "バリュー"
},
"description": "Zigbee Home Automationネットワーク管理",
"device_pairing_card": {
"CONFIGURED": "構成の完了",
"CONFIGURED_status_text": "初期化中",
"INITIALIZED": "初期化が完了しました",
"INITIALIZED_status_text": "デバイスを使用する準備ができました",
"INTERVIEW_COMPLETE": "インタビュー完了",
"INTERVIEW_COMPLETE_status_text": "構成",
"PAIRED": "デバイスが見つかりました",
"PAIRED_status_text": "インタビュー開始"
},
"devices": {
"header": "Zigbeeホームオートメーション-デバイス"
},
@@ -2458,6 +2523,7 @@
"unbind_button_label": "グループのバインド解除"
},
"groups": {
"add_group": "グループの追加",
"add_members": "メンバーの追加",
"adding_members": "メンバーの追加",
"caption": "グループ",
@@ -2500,7 +2566,11 @@
"hint_wakeup": "Xiaomiセンサーなどの一部のデバイスには、約5秒間隔で押すことができるウェイクアップボタンがあり、デバイスを操作している間、デバイスをウェイクアップしたままにできます。",
"introduction": "単一のデバイスに影響する ZHA コマンドを実行します。デバイスを選択して、使用可能なコマンドの一覧を表示します。"
},
"title": "Zigbeeホームオートメーション"
"title": "Zigbeeホームオートメーション",
"visualization": {
"caption": "可視化",
"header": "ネットワークの視覚化"
}
},
"zone": {
"add_zone": "ゾーンを追加",
@@ -3167,7 +3237,7 @@
"entity_non_numeric": "エンティティが数値ではありません: {entity}",
"entity_not_found": "エンティティが使用できません: {entity}",
"entity_unavailable": "{entity}は現在利用できません",
"starting": "ホームアシスタントが起動していますが、まだすべてが利用可能なわけではありません"
"starting": "Home Assistantが起動中です。全て利用可能なるまでもうしばらくお待ち下さい。"
}
},
"mailbox": {
@@ -3367,10 +3437,13 @@
"change_password": {
"confirm_new_password": "新しいパスワードの確認",
"current_password": "現在のパスワード",
"error_new_is_old": "新しいパスワードは現在のパスワードと異なる必要があります",
"error_new_mismatch": "入力された新しいパスワードが一致しません",
"error_required": "必須",
"header": "パスワードの変更",
"new_password": "新しいパスワード",
"submit": "送信"
"submit": "送信",
"success": "パスワードが正常に変更されました"
},
"current_user": "現在、 {fullName}としてログインしています。",
"customize_sidebar": {

View File

@@ -683,9 +683,9 @@
"enabled_description": "비활성화 된 구성요소는 Home Assistant 에 추가되지 않습니다.",
"enabled_label": "구성요소 활성화",
"entity_id": "구성요소 ID",
"icon": "아이콘 재정의",
"icon": "아이콘",
"icon_error": "아이콘은 접두사:아이콘이름 형식이어야 합니다. 예: mdi:home",
"name": "이름 재정의",
"name": "이름",
"note": "참고: 모든 통합 구성요소에서 아직 작동하지 않을 수 있습니다.",
"unavailable": "이 구성요소는 현재 사용할 수 없습니다.",
"update": "업데이트"
@@ -844,7 +844,7 @@
"input_select": "선택입력 다시 읽어오기",
"input_text": "문자입력 다시 읽어오기",
"min_max": "최소/최대 구성요소 다시 읽어오기",
"mqtt": "MQTT 구성요소 다시 읽어오기",
"mqtt": "직접 구성한 MQTT 구성요소 다시 읽어오기",
"person": "구성원 다시 읽어오기",
"ping": "ping 이진 센서 구성요소 다시 읽어오기",
"reload": "{domain} 다시 읽어오기",
@@ -1185,7 +1185,7 @@
"trigger": "트리거"
},
"event": {
"context_user_pick": "사용자 추가",
"context_user_pick": "사용자 선택",
"context_user_picked": "사용자 발행 이벤트",
"context_users": "트리거된 이벤트로 제한",
"event_data": "이벤트 데이터",
@@ -1289,15 +1289,15 @@
"blueprint": {
"add": {
"error_no_url": "블루프린트의 URL 을 입력해주세요.",
"file_name": "로컬 블루프린트 파일 이름",
"header": "새로운 블루프린트 가",
"import_btn": "블루프린트 가져오기",
"import_header": "\"{name}\" (유형: {domain}) 가져오기",
"file_name": "블루프린트 경로",
"header": "블루프린트 가져오기",
"import_btn": "블루프린트 미리보기",
"import_header": "\"{name}\" 블루프린트",
"import_introduction": "Github 및 커뮤니티 포럼에서 다른 사용자의 블루프린트를 가져올 수 있습니다. 블루프린트의 URL 을 하단의 입력란에 입력해주세요.",
"importing": "블루프린트를 가져오는 중 ...",
"importing": "블루프린트를 는 중 ...",
"raw_blueprint": "블루프린트 내용",
"save_btn": "블루프린트 저장하기",
"saving": "블루프린트 저장 중 ...",
"save_btn": "블루프린트 가져오기",
"saving": "블루프린트 가져오는 중 ...",
"unsupported_blueprint": "이 블루프린트는 지원되지 않습니다.",
"url": "블루프린트의 URL"
},
@@ -1314,8 +1314,8 @@
"file_name": "파일 이름",
"name": "이름"
},
"introduction": "블루프린트 편집기를 사용하면 블루프린트를 만들고 편집할 수 있습니다.",
"learn_more": "블루프린트에 대해 더 알아보기",
"introduction": "블루프린트 구성을 사용하면 블루프린트를 가져오고 관리할 수 있습니다.",
"learn_more": "블루프린트 사용에 대해 더 알아보기",
"use_blueprint": "자동화 만들기"
}
},
@@ -1561,7 +1561,7 @@
"caption": "기기",
"confirm_delete": "이 기기를 삭제하시겠습니까?",
"confirm_rename_entity_ids": "구성요소의 ID 이름 또한 바꾸시겠습니까?",
"confirm_rename_entity_ids_warning": "현재 이러한 구성요소를 사용하고 있는 구성 (자동화, 스크립트, 씬, Lovelace 등)은 변경되지 않으므로 직접 업데이트해야 합니다.",
"confirm_rename_entity_ids_warning": "현재 이러한 구성요소를 사용하고 있는 구성 (자동화, 스크립트, 씬, 대시보드 등)은 변경되지 않습니다. 새로운 구성요소 ID 를 사용하려면 직접 업데이트해야 합니다.",
"data_table": {
"area": "영역",
"battery": "배터리",
@@ -1634,7 +1634,7 @@
"remove_selected": {
"button": "선택된 구성요소 제거",
"confirm_partly_text": "선택한 {selected} 개의 구성요소 중 {removable} 개의 구성요소를 제거할 수 있습니다. 통합 구성요소가 더 이상 구성요소를 제공하지 않는 경우에만 구성요소를 제거할 수 있으며, 제거된 통합 구성요소의 구성요소를 제거하기 전에 Home Assistant 를 다시 시작해야 할 수 있습니다. 제거 가능한 구성요소를 제거하시겠습니까?",
"confirm_partly_title": "선택된 {number} 개의 구성요소만 제거할 수 있습니다.",
"confirm_partly_title": "선택된 {number} {number, plural,\n one { 개의 구성요소만}\n other { 개의 구성요소만}\n} 제거할 수 있습니다.",
"confirm_text": "이러한 구성요소가 포함된 경우 Lovelace 구성 및 자동화에서 제거해야 합니다.",
"confirm_title": "{number} 개의 구성요소를 제거하시겠습니까?"
},
@@ -1684,7 +1684,7 @@
"built_using": "다음을 사용하여 제작",
"caption": "정보",
"custom_uis": "사용자 UI :",
"description": "설치된 Home Assistant 에 대한 정보입니다",
"description": "버전, 시스템 상태 및 문서에 대한 링크입니다",
"developed_by": "Home Assistant 는 수많은 멋진 사람들에 의해 개발되었습니다.",
"documentation": "관련문서",
"frontend": "프런트엔드-UI",
@@ -2024,7 +2024,7 @@
"scene": {
"activated": "{name} 씬이 활성화 됨.",
"caption": "씬",
"description": "씬을 관리합니다",
"description": "기기의 상태를 캡처하고 나중에 쉽게 호출할 수 있습니다",
"editor": {
"default_name": "새로운 씬",
"devices": {
@@ -2136,7 +2136,7 @@
"input_text": "문자입력 다시 읽어오기",
"introduction": "Home Assistant 의 일부 구성 내용은 재시작 없이 다시 읽어 들일 수 있습니다. 다시 읽어오기를 누르면 현재 사용 중인 YAML 구성 내용을 내리고 새로운 구성 내용을 읽어 들입니다.",
"min_max": "최소/최대 구성요소 다시 읽어오기",
"mqtt": "MQTT 구성요소 다시 읽어오기",
"mqtt": "직접 구성한 MQTT 구성요소 다시 읽어오기",
"person": "구성원 다시 읽어오기",
"ping": "ping 이진 센서 구성요소 다시 읽어오기",
"reload": "{domain} 다시 읽어오기",
@@ -2174,7 +2174,7 @@
"automation_title": "{name} 태그가 검색되었습니다",
"caption": "태그",
"create_automation": "태그로 자동화 구성하기",
"description": "태그를 관리합니다",
"description": "NFC 태그, QR 코드 등이 스캔될 때 자동화를 트리거합니다",
"detail": {
"create": "만들기",
"create_and_write": "만들고 쓰기",
@@ -2218,7 +2218,7 @@
"delete_user": "사용자 삭제",
"group": "그룹",
"id": "ID",
"name": "이름",
"name": "표시 이름",
"new_password": "새로운 비밀번호",
"owner": "소유자",
"password_changed": "비밀번호가 변경되었습니다.",
@@ -2234,8 +2234,8 @@
"group": "그룹",
"is_active": "활성화",
"is_owner": "소유자",
"name": "이름",
"system": "시스템",
"name": "표시 이름",
"system": "시스템 자동 생성",
"username": "사용자 이름"
}
},
@@ -2546,7 +2546,7 @@
"entity": "구성요소",
"jinja_documentation": "Jinja2 템플릿 문서 보기",
"listeners": "이 템플릿은 다음의 상태 변경 이벤트를 수신합니다.",
"no_listeners": "이 템플릿은 상태 변경 이벤트를 수신하지 않으며 자동으로 업데이트되지 않습니다.",
"no_listeners": "이 템플릿은 이벤트를 수신하지 않으며 자동으로 업데이트되지 않습니다.",
"reset": "데모 템플릿으로 재설정",
"result_type": "결과 유형",
"template_extensions": "Home Assistant 템플릿 확장기능 문서 보기",
@@ -2621,6 +2621,12 @@
"refresh": "새로고침"
},
"editor": {
"action-editor": {
"actions": {
"url": "URL"
},
"url_path": "URL 경로"
},
"card": {
"alarm-panel": {
"available_states": "사용 가능한 상태요소",
@@ -2652,7 +2658,7 @@
},
"entities": {
"description": "구성요소 카드는 가장 일반적인 유형의 카드입니다. 항목을 목록으로 그룹화합니다.",
"edit_special_row": "코드 편집기를 사용하여 행 편집",
"edit_special_row": "편집 버튼을 클릭하여 이 행의 세부 정보 보기",
"entity_row": {
"attribute": "속성",
"button": "버튼",

View File

@@ -2,6 +2,7 @@
"config_entry": {
"disabled_by": {
"config_entry": "Konfiguratioun's Entrée",
"device": "Apparat",
"integration": "Integratioun",
"user": "Benotzer"
}
@@ -696,6 +697,14 @@
"service-picker": {
"service": "Service"
},
"target-picker": {
"add_area_id": "Beräich auswielen",
"add_device_id": "Apparat auswielen",
"add_entity_id": "Entitéit auswielen",
"remove_area_id": "Beräich läschen",
"remove_device_id": "Apparat läschen",
"remove_entity_id": "Entitéit läschen"
},
"user-picker": {
"add_user": "Benotzer erstellen",
"no_user": "Kee Benotzer",
@@ -719,6 +728,7 @@
"editor": {
"confirm_delete": "Sécher fir dës Entrée ze läsche?",
"delete": "Läschen",
"device_disabled": "Den Apparat vun dëser Entitéit ass déaktivéiert.",
"enabled_cause": "Desaktivéiert duerch {cause}.",
"enabled_description": "Deaktivéiert Entitéiten ginn net am Home Assistant bäigesat.",
"enabled_label": "Entitéit aktivéieren",
@@ -728,6 +738,7 @@
"icon_error": "Ikonen sollten am format 'prefix:numm' sinn, Beispill: 'mdi:home'",
"name": "Numm",
"note": "Note: dëst funktionéiert villäicht nach net mat all Integratioun.",
"open_device_settings": "Apparat Astellungen opmachen",
"unavailable": "Dës Entitéit ass net erreechbar fir de Moment.",
"update": "Aktualiséieren"
},
@@ -1642,6 +1653,7 @@
"unknown_condition": "Onbekannte Konditioun"
},
"create": "Automatisme mat Apparat erstellen",
"create_disable": "Ka keen Automatisme mat déaktivéiertem Apparat erstellen",
"no_automations": "Keng Automatismen",
"no_device_automations": "Et gi keng Automatisme fir dësen Apparat.",
"triggers": {
@@ -1670,6 +1682,13 @@
"description": "Verwalt verbonnen Apparater",
"device_info": "Informatioune vum Apparat",
"device_not_found": "Apparat net fonnt.",
"disabled": "Deaktivéiert",
"disabled_by": {
"integration": "Integratioun",
"user": "Benotzer"
},
"enabled_cause": "Dësen Apparat ass duerch {cause} déaktivéiert.",
"enabled_label": "Apparat aktivéieren",
"entities": {
"add_entities_lovelace": "Zu Lovelace bäisetzen",
"disabled_entities": "+{count} {count, plural,\n one {Déaktivéiert Entitéit}\n other {Déaktivéiert Entitéiten}\n}",
@@ -1679,14 +1698,24 @@
},
"name": "Numm",
"no_devices": "Keng Apparater",
"picker": {
"filter": {
"filter": "Filter",
"show_all": "All uweisen",
"show_disabled": "Déaktivéiert Apparater uweisen"
},
"search": "Apparater sichen"
},
"scene": {
"create": "Zeen mat Apparat erstellen",
"create_disable": "Ka keng Zeen mat déaktivéiertem Apparat erstellen",
"no_scenes": "Keng Zeenen",
"scenes": "Zeenen"
},
"scenes": "Zeenen",
"script": {
"create": "Skript mat Apparat erstellen",
"create_disable": "Ka kee Skript mat déaktivéiertem Apparat erstellen",
"no_scripts": "Keng Skripten",
"scripts": "Skripten"
},
@@ -2362,6 +2391,7 @@
"editor": {
"activate_user": "Benotzer aktivéieren",
"active": "Aktiv",
"active_tooltip": "Kontrolléiert ob de Benotzer sech verbanne kann",
"admin": "Administrator",
"caption": "Benotzer kucken",
"change_password": "Passwuert änneren",
@@ -2936,6 +2966,7 @@
"name": "Luucht"
},
"logbook": {
"description": "Logbuch weist eng Lëscht vun Evenementer vun Entitéiten un.",
"name": "Logbuch"
},
"map": {
@@ -3016,6 +3047,9 @@
"edit": "Änneren",
"none": "Keen"
},
"edit_badges": {
"panel_mode": "Dës Badge gi net ugewise well dës Usiicht am \"Panel Modus\" ass."
},
"edit_card": {
"add": "Kaart dobäisetzen",
"clear": "Läschen",
@@ -3122,7 +3156,8 @@
"sub-element-editor": {
"types": {
"footer": "Fousszeilen Editeur",
"header": "Entête Editeur"
"header": "Entête Editeur",
"row": "Editeur vun der Réih vun Entitéiten"
}
},
"suggest_card": {
@@ -3374,10 +3409,13 @@
"change_password": {
"confirm_new_password": "Neit Passwuert confirméieren",
"current_password": "Aktuellt Passwuert",
"error_new_is_old": "Neit Passwuert muss anescht sinn wéi dat aktuellt Passwuert",
"error_new_mismatch": "Verschidde Wäerter fir neit Passwuert ausgefëllt",
"error_required": "Obligatoresch",
"header": "Passwuert änneren",
"new_password": "Neit Passwuert",
"submit": "Ofschécken"
"submit": "Ofschécken",
"success": "Passwuert erfollegräich geännert"
},
"current_user": "Dir sidd aktuell ageloggt als {fullName}.",
"customize_sidebar": {

View File

@@ -1,5 +1,11 @@
{
"config_entry": {
"disabled_by": {
"device": "Įrenginys"
}
},
"groups": {
"owner": "Savininkas",
"system-admin": "Administratoriai",
"system-read-only": "Tik skaitymo privilegija",
"system-users": "Vartotojai"
@@ -290,8 +296,24 @@
"save": "Išsaugoti"
},
"components": {
"area-picker": {
"no_areas": "Neturite jokių sričių",
"no_match": "Nerasta atitinkančių sričių"
},
"blueprint-picker": {
"add_user": "Pridėti vartotoją",
"remove_user": "Pašalinti vartotoją",
"select_blueprint": "Pasirinkite techninį planą"
},
"device-picker": {
"device": "Įrenginys"
"device": "Įrenginys",
"no_devices": "Neturite jokių įrenginių",
"no_match": "Nerasta atitinkančių įrenginių"
},
"entity": {
"entity-picker": {
"no_match": "Nerasta atitinkančių objektų"
}
},
"logbook": {
"by_service": "pagal paslaugą",
@@ -331,6 +353,14 @@
},
"past": "prieš {time}"
},
"target-picker": {
"add_area_id": "Pasirinkite sritį",
"add_device_id": "Pasirinkite įrenginį",
"add_entity_id": "Pasirinkite objektą",
"remove_area_id": "Pašalinti sritį",
"remove_device_id": "Pašalinti įrenginį",
"remove_entity_id": "Pašalinti objektą"
},
"user-picker": {
"add_user": "Pridėti naudotoją",
"no_user": "Nėra vartotojo",
@@ -339,6 +369,10 @@
},
"dialogs": {
"entity_registry": {
"editor": {
"device_disabled": "Šio objekto įrenginys išjungtas.",
"open_device_settings": "Atidaryti įrenginio nustatymus"
},
"faq": "dokumentacija"
},
"helper_settings": {
@@ -369,6 +403,31 @@
}
},
"quick-bar": {
"commands": {
"navigation": {
"areas": "Sritys",
"automation": "Automatizacijos",
"blueprint": "Techniniai planai",
"core": "Bendra",
"customize": "Tinkinimas",
"devices": "Įrenginiai",
"entities": "Objectai",
"helpers": "Pagelbikliai",
"info": "Informacija",
"integrations": "Integracijos",
"logs": "Įvykių žurnalai",
"lovelace": "Lovelace ataskaitų sritis",
"navigate_to": "Pereiti į {panel}",
"navigate_to_config": "Pereiti į {panel} konfigūraciją",
"person": "Žmonės",
"scene": "Scenos",
"script": "Skriptai",
"server_control": "Serverio valdikliai",
"tags": "Žymės",
"users": "Vartotojai",
"zone": "Zonos"
}
},
"filter_placeholder": "Objekto filtras"
}
},
@@ -414,6 +473,20 @@
}
},
"automation": {
"dialog_new": {
"blueprint": {
"use_blueprint": "Naudoti techninį planą"
},
"header": "Kurti naują automatizavimą",
"how": "Kaip norite sukurti naują automatizavimą?",
"start_empty": "Pradėkite nuo tuščios automatizacijos",
"thingtalk": {
"create": "Sukurti",
"header": "Apibūdinkite automatizaciją, kurią norite sukurti",
"input_label": "Ką turėtų atlikti šis automatizavimas?",
"intro": "Ir mes pasistengsime jį jums sukurti. Pavyzdžiui: išeidami išjunkite šviesas."
}
},
"editor": {
"actions": {
"add": "Pridėti veiksmą",
@@ -436,6 +509,14 @@
}
}
},
"blueprint": {
"blueprint_to_use": "Naudotini techniniai planai",
"header": "Techninis planas",
"inputs": "Įvestys",
"manage_blueprints": "Tvarkyti techninius planus",
"no_blueprints": "Neturite jokių techninių planų.",
"no_inputs": "Šis techninis planas neturi jokių įvesčių."
},
"conditions": {
"delete": "Ištrinti",
"duplicate": "Dubliuoti",
@@ -544,6 +625,39 @@
"learn_more": "Sužinokite daugiau apie automatizavimą"
}
},
"blueprint": {
"add": {
"error_no_url": "Įveskite techninio plano universalųjį adresą (URL).",
"file_name": "Kelias iki techninio plano",
"header": "Importuoti techninį planą",
"import_btn": "Peržiūrėti techninį planą",
"import_header": "\"{Name}\" techninis planas",
"import_introduction": "Galite importuoti kitų vartotojų techninius planus iš Github ir bendruomenės forumų. Žemiau įveskite projekto universalųjį adresą (URL).",
"importing": "Įkeliamas techninis planas...",
"raw_blueprint": "Techninio plano turinys",
"save_btn": "Importuoti techninį planą",
"saving": "Importuojamas techninis planas...",
"unsupported_blueprint": "Šis techninis planas nepalaikomas",
"url": "Techninio plano universalusis adresas (URL)"
},
"caption": "Techniniai planai",
"description": "Tvarkyti techninius planus",
"overview": {
"add_blueprint": "Importuoti techninius planus",
"confirm_delete_header": "Ištrinti šį techninį planą?",
"confirm_delete_text": "Ar tikrai norite ištrinti šį techninį planą?",
"delete_blueprint": "Ištrinti techninį planą",
"header": "Techninių planų rengyklė",
"headers": {
"domain": "Domenas",
"file_name": "Failo vardas",
"name": "Pavadinimas"
},
"introduction": "Techninio plano konfigūracija leidžia importuoti ir valdyti jūsų techninius planus.",
"learn_more": "Sužinokite daugiau apie techninių planų naudojimą",
"use_blueprint": "Sukurti automatizavimą"
}
},
"cloud": {
"account": {
"connected": "Prisijungęs",
@@ -570,6 +684,7 @@
"no_conditions": "Nėra sąlygų",
"unknown_condition": "Nežinoma sąlyga"
},
"create_disable": "Negalima sukurti automatizavimo su išjungtu įrenginiu",
"triggers": {
"no_triggers": "Nėra paleidiklių",
"unknown_trigger": "Nežinomas paleidiklis"
@@ -581,7 +696,31 @@
"device": "Įrenginys",
"model": "Modelis"
},
"description": "Tvarkyti prijungtus įrenginius"
"description": "Tvarkyti prijungtus įrenginius",
"disabled": "Išjungta",
"disabled_by": {
"config_entry": "Konfigūracijos įrašas",
"integration": "Integracija",
"user": "Vartotojas"
},
"enabled_cause": "Įrenginį išjungė {cause}.",
"enabled_description": "Išjungti įrenginiai nebus rodomi, o įrenginiui priklausantys objektai bus išjungti ir nepridedami į Home Assistant.",
"enabled_label": "Įgalinti įrenginį",
"picker": {
"filter": {
"filter": "Filtras",
"hidden_devices": "{number} paslėptas (-i) {number, plural,\n one {įrenginys}\n other {įrenginiai}\n}",
"show_all": "Rodyti viską",
"show_disabled": "Rodyti išjungtus įrenginius"
},
"search": "Ieškoti įrenginių"
},
"scene": {
"create_disable": "Negalima sukurti scenos su išjungtu įrenginiu"
},
"script": {
"create_disable": "Negalima sukurti skripto su išjungtu įrenginiu"
}
},
"entities": {
"caption": "Subjektų registras",
@@ -591,6 +730,9 @@
"show_all": "Rodyti viską"
},
"header": "Subjektų registras",
"headers": {
"area": "Sritis"
},
"introduction2": "Naudokite subjekto registrą, kad perrašytumėte pavadinimą, pakeiskite subjekto ID arba pašalintumėte įrašą iš namų asistento. Atminkite, kad pašalindami registro įrašą tai nepanaikins pačio subjekto. Norėdami tai padaryti, sekite toliau pateiktą nuorodą ir pašalinkite ją iš integracijos puslapio."
}
},
@@ -601,6 +743,27 @@
"timer": "Laikmatis"
}
},
"info": {
"copy_github": "GitHub'ui",
"copy_raw": "Neapdorotas tekstas",
"system_health": {
"checks": {
"cloud": {
"alexa_enabled": "Alexa įgalinta",
"google_enabled": "Google įgalinta",
"logged_in": "Prisijungė",
"remote_connected": "Nuotolinis prijungtas",
"remote_enabled": "Nuotolinis įgalintas",
"subscription_expiration": "Prenumeratos galiojimo laikas"
},
"lovelace": {
"dashboards": "Ataskaitų sritys",
"mode": "Režimas",
"resources": "Ištekliai"
}
}
}
},
"integrations": {
"config_entry": {
"hub": "Prijungtas per",
@@ -657,6 +820,8 @@
"save_script": "Įrašyti scenarijų"
},
"picker": {
"duplicate": "Dubliuoti",
"duplicate_script": "Dubliuoti skriptą",
"run_script": "Vykdyti scenarijų"
}
},
@@ -676,16 +841,42 @@
"username": "Vartotojo vardas"
},
"editor": {
"caption": "Peržiūrėti vartotoją"
"active_tooltip": "Tikrina, ar vartotojas gali prisijungti",
"caption": "Peržiūrėti vartotoją",
"username": "Vartotojo vardas"
},
"picker": {
"add_user": "Pridėti vartotoją",
"headers": {
"is_active": "Aktyvus",
"is_owner": "Savininkas",
"username": "Vartotojo vardas"
}
}
},
"zha": {
"add_device": "Pridėti įrenginį",
"add_device_page": {
"discovery_text": "Čia bus rodomi atrasti įrenginiai. Vadovaukitės jūsų įtaiso instrukcijomis ir nustatykite jį suporavimo režimui.",
"header": "„Zigbee“ namų automatika - pridėti įrenginių",
"spinner": "Ieškoma ZHA Zigbee įrenginių..."
},
"description": "„Zigbee Home Automation“ tinklo valdymas"
"description": "„Zigbee Home Automation“ tinklo valdymas",
"device_pairing_card": {
"CONFIGURED": "Konfigūracija baigta",
"CONFIGURED_status_text": "Inicijuojama",
"INITIALIZED": "Inicijavimas baigtas",
"INITIALIZED_status_text": "Įrenginys paruoštas naudoti",
"INTERVIEW_COMPLETE_status_text": "Konfigūruojama",
"PAIRED": "Rastas įrenginys"
},
"groups": {
"add_group": "Pridėti grupę"
},
"visualization": {
"caption": "Vizualizacija",
"header": "Tinklo vizualizacija"
}
},
"zwave": {
"caption": "Z-Wave",
@@ -710,6 +901,8 @@
"title": "Paslaugos"
},
"states": {
"last_changed": "Pakeista",
"last_updated": "Atnaujinta",
"title": "Būsenos"
},
"templates": {
@@ -769,13 +962,27 @@
"position": "Padėtis",
"tilt-position": "Pakreipimo padėtis"
}
},
"logbook": {
"description": "Veiksmų žurnalo kortelėje rodomas įvykių sąrašas.",
"name": "Veiksmų žurnalas"
},
"picture-glance": {
"state_entity": "Būsenos objektas"
}
},
"common": {
"add": "Pridėti",
"clear": "Išvalyti",
"edit": "Redaguoti",
"none": "Nė vienas"
},
"edit_badges": {
"panel_mode": "Šie ženkleliai nebus rodomi, nes šis rodinys yra „Skydelio režime“."
},
"edit_card": {
"add": "Pridėti kortelę",
"clear": "Išvalyti",
"delete": "Ištrinti",
"edit": "Redaguoti",
"move": "Perkelti",
@@ -795,6 +1002,22 @@
"move_right": "Perkelti rodinį į dešinę"
},
"header": "Redaguoti UI",
"header-footer": {
"choose_header_footer": "Pasirinkite {type}",
"footer": "Poraštė",
"header": "Antraštė",
"types": {
"buttons": {
"name": "Mygtukai"
},
"graph": {
"name": "Diagrama"
},
"picture": {
"name": "Paveikslėlis"
}
}
},
"menu": {
"raw_editor": "Konfigūracijos redaktorius"
},
@@ -817,6 +1040,13 @@
"header": "Valdykite savo „Lovelace“ vartotojo sąsają",
"para_sure": "Ar tikrai norite kontroliuoti savo vartotojo sąsają?",
"save": "Kontroliuoti"
},
"sub-element-editor": {
"types": {
"footer": "Poraštės rengyklė",
"header": "Antraštės rengyklė",
"row": "Objekto eilučių rengyklė"
}
}
},
"menu": {
@@ -888,8 +1118,11 @@
"profile": {
"change_password": {
"current_password": "Dabartinis slaptažodis",
"error_new_is_old": "Naujas slaptažodis turi skirtis nuo dabartinio slaptažodžio",
"error_new_mismatch": "Nesutampa naujojo slaptažodžio laukai",
"header": "Keisti slaptažodį",
"new_password": "Naujas slaptažodis"
"new_password": "Naujas slaptažodis",
"success": "Slaptažodis pakeistas sėkmingai"
},
"language": {
"dropdown_label": "Kalba",

View File

@@ -2,6 +2,7 @@
"config_entry": {
"disabled_by": {
"config_entry": "Konfigurer oppføring",
"device": "Enhet",
"integration": "Integrasjon",
"user": "Bruker"
}
@@ -299,7 +300,7 @@
"on": "På"
},
"timer": {
"active": "aktiv",
"active": "Aktiv",
"idle": "Inaktiv",
"paused": "pauset"
},
@@ -546,6 +547,8 @@
"add_new": "Legg til nytt område ...",
"area": "Område",
"clear": "Tøm",
"no_areas": "Du har ingen områder",
"no_match": "Fant ingen samsvarende områder",
"show_areas": "Vis områder"
},
"blueprint-picker": {
@@ -566,6 +569,8 @@
"clear": "Tøm",
"device": "Enhet",
"no_area": "Ingen område",
"no_devices": "Du har ingen enheter",
"no_match": "Fant ingen samsvarende enheter",
"show_devices": "Vis enheter",
"toggle": "Veksle"
},
@@ -577,6 +582,7 @@
"entity-picker": {
"clear": "Tøm",
"entity": "Entitet",
"no_match": "Fant ingen samsvarende entiteter",
"show_entities": "Vis entiteter"
}
},
@@ -710,6 +716,16 @@
"service-picker": {
"service": "Tjeneste"
},
"target-picker": {
"add_area_id": "Velg område",
"add_device_id": "Velg enhet",
"add_entity_id": "Velg entitet",
"expand_area_id": "Utvid dette området med de separate enhetene og entitetene det inneholder. Etter utvidelse vil den ikke oppdatere enhetene og entitetene når området endres.",
"expand_device_id": "Utvid denne enheten i separate entiteter. Etter utvidelse vil den ikke oppdatere entitetene når enheten endres.",
"remove_area_id": "Fjern område",
"remove_device_id": "Fjern enhet",
"remove_entity_id": "Fjern entitet"
},
"user-picker": {
"add_user": "Legg til bruker",
"no_user": "Ingen bruker",
@@ -733,6 +749,7 @@
"editor": {
"confirm_delete": "Er du sikker på at du vil slette denne oppføringen?",
"delete": "Slett",
"device_disabled": "Enheten til denne enhtiteen er deaktivert",
"enabled_cause": "Deaktivert av {cause}.",
"enabled_delay_confirm": "De aktiverte enhetene blir lagt til i Home Assistant om {delay} sekunder",
"enabled_description": "Deaktiverte entiteter vil ikke bli lagt til i Home Assistant.",
@@ -743,6 +760,7 @@
"icon_error": "Ikoner bør være i formatet 'prefiks:ikonnavn', f.eks 'mdi:home'",
"name": "Navn",
"note": "Merk: Dette fungerer kanskje ikke ennå med alle integrasjoner.",
"open_device_settings": "Åpne enhetsinnstillinger",
"unavailable": "Denne entiteten er ikke tilgjengelig for øyeblikket.",
"update": "Oppdater"
},
@@ -1030,7 +1048,7 @@
"confirmation_text": "Alle enheter som tilhører dette området vil ikke bli tildelt.",
"confirmation_title": "Er du sikker på at du vil slette dette området?"
},
"description": "Administrere områder i hjemmet ditt",
"description": "Gruppere enheter og enheter i områder",
"editor": {
"area_id": "Område ID",
"create": "Opprett",
@@ -1052,7 +1070,7 @@
},
"automation": {
"caption": "Automasjoner",
"description": "Administrer automasjoner",
"description": "Lag egendefinerte atferdsregler for hjemmet ditt",
"dialog_new": {
"blueprint": {
"use_blueprint": "Bruke en blueprint"
@@ -1400,15 +1418,15 @@
"blueprint": {
"add": {
"error_no_url": "Vennligst skriv inn URL-en til blueprint",
"file_name": "Lokalt blueprint filnavn",
"header": "Legg til ny blueprint",
"import_btn": "Importer blueprint",
"import_header": "Importer {name} (type: {domain})",
"file_name": "Blueprint Bane",
"header": "Importer en blueprint",
"import_btn": "Forhåndsvisning av blueprint",
"import_header": "Blueprint \"{name}\"",
"import_introduction": "Du kan importere blueprints av andre brukere fra Github og fellesskapsforumet. Skriv inn URL-en til blueprint nedenfor.",
"importing": "Importerer blueprint...",
"importing": "Laster blueprint...",
"raw_blueprint": "Blueprint innhold",
"save_btn": "Lagre blueprint",
"saving": "Lagrer blueprint...",
"save_btn": "Importer blueprint",
"saving": "Importerer blueprint...",
"unsupported_blueprint": "Denne blueprinten støttes ikke",
"url": "URL til blueprint"
},
@@ -1425,8 +1443,8 @@
"file_name": "Filnavn",
"name": "Navn"
},
"introduction": "Med blueprint editor kan du opprette og redigere blueprints",
"learn_more": "Lær mer om blueprint",
"introduction": "Med blueprint-konfigurasjonen kan du importere og administrere dine blueprints.",
"learn_more": "Finn ut mer om hvordan du bruker blueprints",
"use_blueprint": "Opprett automasjon"
}
},
@@ -1510,7 +1528,7 @@
"title": ""
},
"caption": "",
"description_features": "Kontroller borte fra hjemmet, integrer med Alexa og Google Assistant.",
"description_features": "Kontroller hjemmet når du er borte og integrer med Alexa og Google Assistant",
"description_login": "Logget inn som {email}",
"description_not_login": "Ikke pålogget",
"dialog_certificate": {
@@ -1605,7 +1623,7 @@
},
"core": {
"caption": "Generelt",
"description": "Endre den generelle konfigurasjonen for Home Assistant",
"description": "Enhetssystem, plassering, tidssone og andre generelle parametere",
"section": {
"core": {
"core_config": {
@@ -1667,6 +1685,7 @@
"unknown_condition": "Ukjent tilstand"
},
"create": "Lag automasjon med enheten",
"create_disable": "Kan ikke opprette automasjon med deaktivert enhet",
"no_automations": "Ingen automasjoner",
"no_device_automations": "Det er ingen automasjoner tilgjengelig for denne enheten.",
"triggers": {
@@ -1692,9 +1711,18 @@
"no_devices": "Ingen enheter"
},
"delete": "Slett",
"description": "Administrer tilkoblede enheter",
"description": "Administrer konfigurerte enheter",
"device_info": "Enhetsinformasjon",
"device_not_found": "Enhet ikke funnet",
"disabled": "Deaktivert",
"disabled_by": {
"config_entry": "Konfigurer oppføring",
"integration": "Integrasjon",
"user": "Bruker"
},
"enabled_cause": "Enheten er deaktivert av {cause}",
"enabled_description": "Deaktiverte enheter vises ikke, og entiteter som tilhører enheten deaktiveres og ikke legges til i Home Assistant",
"enabled_label": "Aktivér enhet",
"entities": {
"add_entities_lovelace": "Legg til i Lovelace",
"disabled_entities": "+{count} {count, plural,\n one {deaktivert entitet}\n other {deaktiverte entiteter}\n}",
@@ -1704,14 +1732,25 @@
},
"name": "Navn",
"no_devices": "Ingen enheter",
"picker": {
"filter": {
"filter": "Filter",
"hidden_devices": "{number} {number, plural,\n one {skjult enhet}\n other {skjulte enheter}\n}",
"show_all": "Vis alle",
"show_disabled": "Vis deaktiverte enheter"
},
"search": "Søk etter enheter"
},
"scene": {
"create": "Lag scene med enheten",
"create_disable": "Kan ikke opprette scene med deaktivert enhet",
"no_scenes": "Ingen scener",
"scenes": "Scener"
},
"scenes": "Scener",
"script": {
"create": "Lag skript med enheten",
"create_disable": "Kan ikke opprette skript med deaktivert enhet",
"no_scripts": "Ingen skript",
"scripts": "Skript"
},
@@ -1777,7 +1816,7 @@
"header": "Konfigurer Home Assistant",
"helpers": {
"caption": "Hjelpere",
"description": "Administrere elementer som bidrar til å bygge automasjoner",
"description": "Elementer som hjelper med å bygge automatiseringer",
"dialog": {
"add_helper": "Legg hjelper",
"add_platform": "Legg til {platform}",
@@ -1809,7 +1848,7 @@
"copy_github": "",
"copy_raw": "Rå tekst",
"custom_uis": "Tilpassede brukergrensesnitt:",
"description": "Vise informasjon om installasjonen av Home Assistant",
"description": "Versjon, systemhelse og lenker til dokumentasjon",
"developed_by": "Utviklet av en gjeng med fantastiske mennesker.",
"documentation": "Dokumentasjon",
"frontend": "frontend",
@@ -1915,7 +1954,7 @@
},
"configure": "Konfigurer",
"configured": "Konfigurert",
"description": "Administrer integrasjoner",
"description": "Administrer integrasjoner med tjenester, enheter, ...",
"details": "Integrasjonsdetaljer",
"discovered": "Oppdaget",
"home_assistant_website": "Nettsted for Home Assistant",
@@ -2000,7 +2039,7 @@
"open": "Åpne"
}
},
"description": "Administrer Lovelace Dashboards",
"description": "Opprett tilpassede sett med kort for å kontrollere hjemmet ditt",
"resources": {
"cant_edit_yaml": "Du bruker Lovelace i YAML-modus, derfor kan du ikke administrere ressursene dine via brukergrensesnittet. Behandle dem i configuration.yaml.",
"caption": "Ressurser",
@@ -2199,7 +2238,7 @@
"scene": {
"activated": "Aktivert scene {name}.",
"caption": "Scener",
"description": "Administrer scener",
"description": "Ta opp enhetstilstander og få dem til å huske dem på en enkel måte senere",
"editor": {
"default_name": "Ny scene",
"devices": {
@@ -2243,7 +2282,7 @@
},
"script": {
"caption": "Skript",
"description": "Administrer skript",
"description": "Utføre en sekvens med handlinger",
"editor": {
"alias": "Navn",
"default_name": "Nytt skript",
@@ -2354,7 +2393,7 @@
"confirm_remove": "Er du sikker på at du vil fjerne taggen {tag} ?",
"confirm_remove_title": "Fjerne tag?",
"create_automation": "Opprett automasjon med tag",
"description": "Administrer tagger",
"description": "Utløs automatisasjoner når en NFC-tag, QR-kode osv. Skannes",
"detail": {
"companion_apps": "kompanjong apper",
"create": "Opprett",
@@ -2389,10 +2428,11 @@
"username": "Brukernavn"
},
"caption": "Brukere",
"description": "Administrer brukere",
"description": "Administrer Home Assistant-brukerkontoer",
"editor": {
"activate_user": "Aktiver bruker",
"active": "Aktiv",
"active_tooltip": "Kontrollerer om brukeren kan logge inn",
"admin": "",
"caption": "Vis bruker",
"change_password": "Endre passord",
@@ -2989,20 +3029,20 @@
"name": "Mediekontroll"
},
"picture-elements": {
"description": "Picture Elements-kortet er en av de mest allsidige korttyper. Kortene lar deg plassere ikoner eller tekst og til og med tjenester! På et bilde basert på koordinater.",
"description": "Bildeelementer-kortet er et av de mest allsidige korttypene. Kortene lar deg plassere ikoner eller tekst og til og med tjenester! På et bilde basert på koordinater.",
"name": "Bildeelementer"
},
"picture-entity": {
"description": "Bilde entitet kortet viser en entitet i form av et bilde. I stedet for bilder fra URL, kan det også vise bilde av kameraentiteter.",
"name": "Bildeoppføring"
"name": "Bilde entitet"
},
"picture-glance": {
"description": "Picture Glance-kortet viser et bilde og tilhørende entitetstilstander som et ikon. Entitetene på høyre side tillater veksling av handlinger, andre viser dialogboksen mer informasjon.",
"description": "Bilde blikk-kortet viser et bilde og tilhørende entitetstilstander som et ikon. Entitetene på høyre side tillater veksling av handlinger, andre viser dialogboksen mer informasjon.",
"name": "Bilde blikk",
"state_entity": "Statusentitet"
},
"picture": {
"description": "Bildekortet lar deg stille inn et bilde som skal brukes til navigasjon til forskjellige baner i grensesnittet ditt eller for å tilkalle en tjeneste.",
"description": "Bildekortet lar deg sette inn et bilde som skal brukes til navigasjon til forskjellige baner i grensesnittet ditt eller for å tilkalle en tjeneste.",
"name": "Bilde"
},
"plant-status": {
@@ -3411,10 +3451,13 @@
"change_password": {
"confirm_new_password": "Bekreft nytt passord",
"current_password": "Nåværende passord",
"error_new_is_old": "Nytt passord må være annerledes enn gjeldende passord",
"error_new_mismatch": "Oppgitte nye passordverdier stemmer ikke overens",
"error_required": "Nødvendig",
"header": "Endre passord",
"new_password": "Nytt passord",
"submit": "Send inn"
"submit": "Send inn",
"success": "Passordet ble endret"
},
"current_user": "Du er logget inn som {fullName}.",
"customize_sidebar": {
@@ -3435,7 +3478,7 @@
"description": "Dette vil skjule sidepanelet som standard, tilsvarende opplevelsen på en mobil.",
"header": "Skjul alltid sidepanelet"
},
"is_owner": "Du er en eier.",
"is_owner": "Du er en eier",
"language": {
"dropdown_label": "Språk",
"header": "Språk",

View File

@@ -2,6 +2,7 @@
"config_entry": {
"disabled_by": {
"config_entry": "Configuratie-item",
"device": "Apparaat",
"integration": "Integratie",
"user": "Gebruiker"
}
@@ -546,6 +547,8 @@
"add_new": "Gebied toevoegen...",
"area": "Gebied",
"clear": "Wis",
"no_areas": "Je hebt geen gebieden",
"no_match": "Geen overeenkomende gebieden gevonden",
"show_areas": "Toon gebieden"
},
"blueprint-picker": {
@@ -566,6 +569,8 @@
"clear": "Wis",
"device": "Apparaat",
"no_area": "Geen gebied",
"no_devices": "Je hebt geen apparaten",
"no_match": "Geen overeenkomende apparaten gevonden",
"show_devices": "Apparaten weergeven",
"toggle": "Omschakelen"
},
@@ -577,6 +582,7 @@
"entity-picker": {
"clear": "Wis",
"entity": "Entiteit",
"no_match": "Geen overeenkomende entiteiten gevonden",
"show_entities": "Entiteiten weergeven"
}
},
@@ -592,7 +598,7 @@
"became_unavailable": "is niet meer beschikbaar",
"changed_to_state": "gewijzigd in {state}",
"cleared_device_class": "niets gedetecteerd (geen {device_class} gedetecteerd)",
"detected_device_class": "gedetecteerd {device_class}",
"detected_device_class": "{device_class} gedetecteerd",
"rose": "opkomst",
"set": "ondergang",
"turned_off": "is uitgeschakeld",
@@ -710,6 +716,16 @@
"service-picker": {
"service": "Service"
},
"target-picker": {
"add_area_id": "Kies gebied",
"add_device_id": "Kies apparaat",
"add_entity_id": "Kies entiteit",
"expand_area_id": "Breid dit gebied uit in de afzonderlijke apparaten en entiteiten die het bevat. Na het uitbreiden zal het de apparaten en entiteiten niet bijwerken wanneer het gebied verandert.",
"expand_device_id": "Breid dit apparaat uit in afzonderlijke entiteiten. Na het uitbreiden worden de entiteiten niet bijgewerkt wanneer het apparaat verandert.",
"remove_area_id": "Verwijder gebied",
"remove_device_id": "Verwijder apparaat",
"remove_entity_id": "Verwijder entiteit"
},
"user-picker": {
"add_user": "Gebruiker toevoegen",
"no_user": "Geen gebruiker",
@@ -733,6 +749,7 @@
"editor": {
"confirm_delete": "Weet je zeker dat je dit item wilt verwijderen?",
"delete": "Verwijderen",
"device_disabled": "Het apparaat van deze entiteit is uitgeschakeld.",
"enabled_cause": "Uitgeschakeld vanwege {cause}",
"enabled_delay_confirm": "De ingeschakelde entiteiten worden over {delay} seconden aan Home Assistant toegevoegd",
"enabled_description": "Uitgeschakelde entiteiten zullen niet aan Home Assistant worden toegevoegd",
@@ -743,6 +760,7 @@
"icon_error": "Pictogrammen moeten de notatie 'prefix:pictogramnaam' hebben, bijvoorbeeld 'mdi:home'",
"name": "Naam",
"note": "Opmerking: dit werkt mogelijk nog niet met alle integraties.",
"open_device_settings": "Open de apparaatinstellingen",
"unavailable": "Deze entiteit is momenteel niet beschikbaar.",
"update": "Bijwerken"
},
@@ -883,6 +901,7 @@
"navigation": {
"areas": "Gebieden",
"automation": "Automatiseringen",
"blueprint": "Blueprints",
"core": "Algemeen",
"customize": "Aanpassingen",
"devices": "Apparaten",
@@ -1006,7 +1025,7 @@
"dismiss": "Afwijzen",
"service_call_failed": "Kan service {service} niet aanroepen",
"started": "Home Assistant is gestart!",
"starting": "Home Assistant is aan het opstarten. Gedurende het opstarten zal niet alles beschikbaar zijn.",
"starting": "Home Assistant is aan het opstarten. Gedurende het opstarten is niet alles beschikbaar.",
"triggered": "Geactiveerd {name}"
},
"panel": {
@@ -1029,7 +1048,7 @@
"confirmation_text": "Alle apparaten in dit gebied zullen niet meer toegewezen zijn.",
"confirmation_title": "Weet je zeker dat je dit gebied wilt verwijderen?"
},
"description": "Overzicht van alle gebieden in je huis.",
"description": "Groepeer apparaten en entiteiten in gebieden",
"editor": {
"area_id": "Gebieds-ID",
"create": "Aanmaken",
@@ -1051,10 +1070,10 @@
},
"automation": {
"caption": "Automatiseringen",
"description": "Het maken en bewerken van automatiseringen",
"description": "Maak aangepaste gedragsregels voor uw huis",
"dialog_new": {
"blueprint": {
"use_blueprint": "Gebruik een blauwdruk"
"use_blueprint": "Gebruik een Blueprint"
},
"header": "Een nieuwe automatisering maken",
"how": "Hoe wil je je nieuwe automatisering maken?",
@@ -1147,12 +1166,12 @@
},
"alias": "Naam",
"blueprint": {
"blueprint_to_use": "Blauwdruk om te gebruiken",
"header": "Blauwdruk",
"blueprint_to_use": "Blueprint om te gebruiken",
"header": "Blueprint",
"inputs": "Inputs",
"manage_blueprints": "Beheer blauwdrukken",
"no_blueprints": "Je hebt geen blauwdrukken",
"no_inputs": "Deze blauwdruk heeft geen inputs."
"manage_blueprints": "Beheer Blueprints",
"no_blueprints": "Je hebt geen Blueprints",
"no_inputs": "Deze Blueprint heeft geen inputs."
},
"conditions": {
"add": "Voorwaarde toevoegen",
@@ -1398,30 +1417,34 @@
},
"blueprint": {
"add": {
"error_no_url": "Voer de URL van de blauwdruk in.",
"header": "Voeg een nieuwe blauwdruk toe",
"import_btn": "Blauwdruk importeren",
"import_header": "Importeer \"{name}\" (type: {domain})",
"import_introduction": "U kunt blauwdrukken van andere gebruikers importeren vanuit Github en de communityforums. Voer de URL van de blauwdruk hieronder in.",
"importing": "Blauwdruk importeren ...",
"save_btn": "Bewaar blauwdruk",
"saving": "Blauwdruk opslaan ...",
"url": "URL van de blauwdruk"
"error_no_url": "Voer de URL van de Blueprint in.",
"file_name": "Blueprint pad",
"header": "Voeg een nieuwe Blueprint toe",
"import_btn": "Bekijk een Blueprint",
"import_header": "Blueprint \"{name}\"",
"import_introduction": "U kunt Blueprints van andere gebruikers importeren vanuit Github en de communityforums. Voer de URL van de Blueprint hieronder in.",
"importing": "Blueprint importeren ...",
"raw_blueprint": "Blueprint inhoud",
"save_btn": "Blueprint importeren",
"saving": "Blueprint importeren ...",
"unsupported_blueprint": "Deze Blueprint wordt niet ondersteund",
"url": "URL van de Blueprint"
},
"caption": "Blauwdrukken",
"description": "Beheer blauwdrukken",
"caption": "Blueprints",
"description": "Beheer Blueprints",
"overview": {
"add_blueprint": "Blauwdruk importeren",
"confirm_delete_header": "Deze blauwdruk verwijderen?",
"add_blueprint": "Blueprint importeren",
"confirm_delete_header": "Deze Blueprint verwijderen?",
"confirm_delete_text": "Weet je zeker dat je deze blauwdruk wilt verwijderen?",
"header": "Blauwdrukeditor",
"delete_blueprint": "Verwijder Blueprint",
"header": "Blueprinteditor",
"headers": {
"domain": "Domein",
"file_name": "Bestandsnaam",
"name": "Naam"
},
"introduction": "Met de blauwdrukeditor kunt je blauwdrukken maken en bewerken.",
"learn_more": "Meer informatie over blauwdrukken",
"introduction": "Met de Blueprinteditor kunt je Blueprints maken en bewerken.",
"learn_more": "Meer informatie over Blueprints",
"use_blueprint": "Automatisering maken"
}
},
@@ -1505,7 +1528,7 @@
"title": "Alexa"
},
"caption": "Home Assistent Cloud",
"description_features": "Bestuur weg van huis, verbind met Alexa en Google Assistant.",
"description_features": "Bedien uw huis wanneer u weg bent en integreer met Alexa en Google Assistant",
"description_login": "Ingelogd als {email}",
"description_not_login": "Niet ingelogd",
"dialog_certificate": {
@@ -1600,7 +1623,7 @@
},
"core": {
"caption": "Algemeen",
"description": "Wijzig je algemene Home Assistant-configuratie",
"description": "Eenheidssysteem, locatie, tijdzone en andere algemene parameters",
"section": {
"core": {
"core_config": {
@@ -1662,6 +1685,7 @@
"unknown_condition": "Onbekende toestand"
},
"create": "Maak een automatisering aan met het apparaat",
"create_disable": "Kan geen automatisering maken met een uitgeschakeld apparaat",
"no_automations": "Geen automatiseringen",
"no_device_automations": "Er zijn geen automatiseringen beschikbaar voor dit apparaat.",
"triggers": {
@@ -1687,9 +1711,18 @@
"no_devices": "Geen apparaten"
},
"delete": "Verwijderen",
"description": "Beheer verbonden apparaten",
"description": "Beheer geconfigureerde apparaten",
"device_info": "Apparaat info",
"device_not_found": "Apparaat niet gevonden.",
"disabled": "Uitgeschakeld",
"disabled_by": {
"config_entry": "Configuratie-invoer",
"integration": "Integratie",
"user": "Gebruiker"
},
"enabled_cause": "Het apparaat is uitgeschakeld door {cause}.",
"enabled_description": "Uitgeschakelde apparaten worden niet weergegeven en entiteiten die bij het apparaat horen, worden uitgeschakeld en niet toegevoegd aan Home Assistant.",
"enabled_label": "Schakel apparaat in",
"entities": {
"add_entities_lovelace": "Voeg toe aan de Lovelace gebruikersinterface",
"disabled_entities": "+{count} {count, plural,\n one {uitgeschakelde entiteit}\n other {uitgeschakelde entiteiten}\n}",
@@ -1699,14 +1732,25 @@
},
"name": "Naam",
"no_devices": "Geen apparaten",
"picker": {
"filter": {
"filter": "Filter",
"hidden_devices": "{number} verborgen {number, plural,\n one {apparaat}\n other {apparaten}\n}",
"show_all": "Alles weergeven",
"show_disabled": "Toon uitgeschakelde apparaten"
},
"search": "Zoek apparaten"
},
"scene": {
"create": "Maak een scène aan met het apparaat",
"create_disable": "Kan geen scène maken met een uitgeschakeld apparaat",
"no_scenes": "Geen scènes",
"scenes": "Scènes"
},
"scenes": "Scènes",
"script": {
"create": "Maak een script aan met het apparaat",
"create_disable": "Kan geen script maken met een uitgeschakeld apparaat",
"no_scripts": "Geen scripts",
"scripts": "Scripts"
},
@@ -1804,7 +1848,7 @@
"copy_github": "Voor GitHub",
"copy_raw": "Ruwe tekst",
"custom_uis": "Aangepaste UI's:",
"description": "Informatie over je Home Assistant installatie",
"description": "Versie, systeemstatus en links naar documentatie",
"developed_by": "Ontwikkeld door een stel geweldige mensen.",
"documentation": "Documentatie",
"frontend": "Frontend",
@@ -1910,7 +1954,7 @@
},
"configure": "Configureer",
"configured": "Geconfigureerd",
"description": "Beheer en installeer integraties",
"description": "Beheer integraties met services, apparaten, ...",
"details": "Integratiedetails",
"discovered": "Ontdekt",
"home_assistant_website": "Home Assistant-website",
@@ -1995,7 +2039,7 @@
"open": "Open"
}
},
"description": "Configureer je Lovelace-dashboards",
"description": "Maak aangepaste cards om uw huis te besturen",
"resources": {
"cant_edit_yaml": "Je gebruikt Lovelace in YAML-modus, daarom kun je je bronnen niet beheren via de gebruikersinterface. Beheer ze in configuration.yaml.",
"caption": "Bronnen",
@@ -2194,7 +2238,7 @@
"scene": {
"activated": "Scène {name} geactiveerd.",
"caption": "Scènes",
"description": "Maak en bewerk scènes",
"description": "Leg apparaatstatussen vast en roep ze later gemakkelijk op",
"editor": {
"default_name": "Nieuwe scène",
"devices": {
@@ -2238,7 +2282,7 @@
},
"script": {
"caption": "Scripts",
"description": "Maak en bewerk scripts",
"description": "Voer een reeks acties uit",
"editor": {
"alias": "Naam",
"default_name": "Nieuw script",
@@ -2349,7 +2393,7 @@
"confirm_remove": "Weet je zeker dat je tag {tag} wilt verwijderen?",
"confirm_remove_title": "Tag verwijderen?",
"create_automation": "Creëer automatisering met tag",
"description": "Beheer tags",
"description": "Activeer automatiseringen wanneer een NFC-tag, QR-code, enz. wordt gescand",
"detail": {
"companion_apps": "bijbehorende apps",
"create": "Creëer",
@@ -2384,10 +2428,11 @@
"username": "Gebruikersnaam"
},
"caption": "Gebruikers",
"description": "Gebruikers beheren",
"description": "Gebruikers van Home Assistant beheren",
"editor": {
"activate_user": "Activeer gebruiker",
"active": "Actief",
"active_tooltip": "Bepaal of de gebruiker kan inloggen",
"admin": "Beheerder",
"caption": "Bekijk gebruiker",
"change_password": "Wachtwoord wijzigen",
@@ -2472,8 +2517,10 @@
"CONFIGURED_status_text": "Initialiseren",
"INITIALIZED": "Initialisatie voltooid",
"INITIALIZED_status_text": "Het apparaat is klaar voor gebruik",
"INTERVIEW_COMPLETE": "Interview compleet",
"INTERVIEW_COMPLETE_status_text": "Configureren",
"PAIRED": "Apparaat gevonden"
"PAIRED": "Apparaat gevonden",
"PAIRED_status_text": "Start interview"
},
"devices": {
"header": "Zigbee Home Automation - Apparaat"
@@ -2533,7 +2580,11 @@
"hint_wakeup": "Sommige apparaten, zoals Xiaomi-sensoren hebben een wekknop die je met tussenpozen van 5 seconden kunt indrukken om het apparaat wakker te houden terwijl je ermee communiceert",
"introduction": "Voer ZHA-commando's uit die van invloed zijn op een enkel apparaat. Kies een apparaat om een lijst met beschikbare commando's te zien."
},
"title": "Zigbee Home Automation"
"title": "Zigbee Home Automation",
"visualization": {
"caption": "Visualisatie",
"header": "Netwerkvisualisatie"
}
},
"zone": {
"add_zone": "Zone toevoegen",
@@ -3400,10 +3451,13 @@
"change_password": {
"confirm_new_password": "Bevestig nieuw wachtwoord",
"current_password": "Huidige wachtwoord",
"error_new_is_old": "Het nieuwe wachtwoord moet anders zijn dan het huidige wachtwoord",
"error_new_mismatch": "Ingevoerde wachtwoordwaarden komen niet overeen",
"error_required": "Verplicht",
"header": "Wachtwoord wijzigen",
"new_password": "Nieuw wachtwoord",
"submit": "Verzenden"
"submit": "Verzenden",
"success": "Wachtwoord is succesvol veranderd"
},
"current_user": "Je bent momenteel ingelogd als {fullName}.",
"customize_sidebar": {

Some files were not shown because too many files have changed in this diff Show More