Compare commits

..

34 Commits

Author SHA1 Message Date
Ludeeus 2a4cebf724 Block update on error and not running state 2021-03-01 23:12:13 +00:00
Bram Kragten 5ae10e8516 Bumped version to 20210301.0 2021-03-01 23:17:24 +01:00
Philip Allgaier e3f4a9ce5b Bump MDI icons to 5.9.55 (#8508) 2021-03-01 23:08:04 +01:00
Bram Kragten cf1fb606fb Bump codemirror + add more styling (#8503) 2021-03-01 22:55:02 +01:00
Bram Kragten 54ec81b67d Fix en-gb translations (#8502)
Renamed lang key in lokalise
2021-03-01 22:48:36 +01:00
Philip Allgaier f2a9725572 Make spelling more consistent (#8507) 2021-03-01 22:41:52 +01:00
Bram Kragten 4765114e80 Allow decimal slider steps (#8501) 2021-03-01 18:41:36 +01:00
Bram Kragten 5ff757ad65 Handle reconnect while in raw edit (#8500) 2021-03-01 16:55:39 +01:00
David F. Mulcahey 1642c68493 Add view in visualization button to the device page for ZHA devices (#8090) 2021-03-01 15:54:49 +01:00
Philip Allgaier f31f10cea9 Take cover "opening" and "closing" into account (#8490) 2021-03-01 12:58:12 +01:00
Philip Allgaier 76e0bbb55d Make section row text color themeable (#8488) 2021-03-01 12:56:56 +01:00
Joakim Sørensen f43af9c0a5 Show config if options or schema (#8487) 2021-03-01 12:55:14 +01:00
Paulus Schoutsen f7a3d2705c Preserve url params in redirect uri (#8495) 2021-03-01 12:54:39 +01:00
Joakim Sørensen 22c8af0cc5 Fix add-on store search (#8479) 2021-03-01 12:41:55 +01:00
Joakim Sørensen f263a5221d Adjust header and wording in update dialogs (#8476) 2021-03-01 12:40:52 +01:00
Bram Kragten 3834ab8ede Service dev tools: Add service picker to YAML mode (#8482) 2021-03-01 11:09:15 +01:00
GitHub Action e2e167630d Translation update 2021-03-01 01:25:12 +00:00
GitHub Action 01dd44300b Translation update 2021-02-28 01:24:14 +00:00
Bram Kragten b30160d671 Fix device picker (#8481) 2021-02-27 21:20:28 +01:00
GitHub Action f44d505b41 Translation update 2021-02-27 01:20:54 +00:00
Bram Kragten b58c17e75e make setup.py quite 2021-02-26 22:03:32 +01:00
Bram Kragten ae590d42dc Bumped version to 20210226.0 2021-02-26 21:39:43 +01:00
Bram Kragten d7917160c0 Update translations 2021-02-26 21:39:28 +01:00
Joakim Sørensen 01e4414d17 Ignore error if we are not connected (#8472) 2021-02-26 21:37:06 +01:00
Joakim Sørensen 0bc2eb530d Remove closing event from dialog (#8470) 2021-02-26 18:14:55 +01:00
Bram Kragten 12b124e5a3 Add search, history to codemirror (#8469)
And prevent jump on focus
2021-02-26 18:01:48 +01:00
Joakim Sørensen 478a4b2593 Add snapshot to core update dialogs (#8468) 2021-02-26 15:07:29 +01:00
Joakim Sørensen 9752e30eb4 Add snapshot to add-on update dialog. (#8463) 2021-02-26 14:44:27 +01:00
Joakim Sørensen af6e87ba31 Fix messaging when addon is not available (#8454) 2021-02-26 14:15:36 +01:00
Bram Kragten 64d390ad0f Fix wrong tag component (#8451)
Will rename the keys in Lokalise after merge
2021-02-26 14:01:16 +01:00
Joakim Sørensen c94bcb6896 Subscribe to message instead of event (#8443) 2021-02-26 13:47:48 +01:00
Joakim Sørensen 97f9df2f2d Add toggle to show_hide optional fields in add-on config (#8430) 2021-02-26 13:47:08 +01:00
GitHub Action 4e7f68a86c Translation update 2021-02-26 01:21:07 +00:00
Philip Allgaier 2f7f677549 Restore previous codemirror tab behavior (#8461)
* Restore previous tab behavior

* Handle via ondemand logic

* Combine imports
2021-02-25 22:24:07 +01:00
85 changed files with 2312 additions and 677 deletions
+2 -3
View File
@@ -369,14 +369,13 @@ gulp.task(
const newData = {};
Object.entries(data).forEach(([key, value]) => {
// Filter out translations without native name.
if (data[key].nativeName) {
newData[key] = data[key];
if (value.nativeName) {
newData[key] = value;
} else {
console.warn(
`Skipping language ${key}. Native name was not translated.`
);
}
if (data[key]) newData[key] = value;
});
return newData;
})
+12 -5
View File
@@ -69,7 +69,8 @@ class HassioAddonStore extends LitElement {
if (this.supervisor.addon.repositories) {
repos = this.addonRepositories(
this.supervisor.addon.repositories,
this.supervisor.addon.addons
this.supervisor.addon.addons,
this._filter
);
}
@@ -140,7 +141,11 @@ class HassioAddonStore extends LitElement {
}
private addonRepositories = memoizeOne(
(repositories: HassioAddonRepository[], addons: HassioAddonInfo[]) => {
(
repositories: HassioAddonRepository[],
addons: HassioAddonInfo[],
filter?: string
) => {
return repositories.sort(sortRepos).map((repo) => {
const filteredAddons = addons.filter(
(addon) => addon.repository === repo.slug
@@ -152,7 +157,7 @@ class HassioAddonStore extends LitElement {
.hass=${this.hass}
.repo=${repo}
.addons=${filteredAddons}
.filter=${this._filter!}
.filter=${filter!}
></hassio-addon-repository>
`
: html``;
@@ -192,8 +197,10 @@ class HassioAddonStore extends LitElement {
}
private async _loadData() {
fireEvent(this, "supervisor-store-refresh", { store: "addon" });
fireEvent(this, "supervisor-store-refresh", { store: "supervisor" });
fireEvent(this, "supervisor-colllection-refresh", { colllection: "addon" });
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "supervisor",
});
}
private async _filterChanged(e) {
@@ -26,16 +26,15 @@ class HassioAddonConfigDashboard extends LitElement {
if (!this.addon) {
return html`<ha-circular-progress active></ha-circular-progress>`;
}
const hasOptions =
this.addon.options && Object.keys(this.addon.options).length;
const hasSchema =
hasOptions && this.addon.schema && Object.keys(this.addon.schema).length;
const hasConfiguration =
(this.addon.options && Object.keys(this.addon.options).length) ||
(this.addon.schema && Object.keys(this.addon.schema).length);
return html`
<div class="content">
${hasOptions || hasSchema || this.addon.network || this.addon.audio
${hasConfiguration || this.addon.network || this.addon.audio
? html`
${hasOptions || hasSchema
${hasConfiguration
? html`
<hassio-addon-config
.hass=${this.hass}
@@ -15,11 +15,15 @@ import {
query,
TemplateResult,
} from "lit-element";
import memoizeOne from "memoize-one";
import { fireEvent } from "../../../../src/common/dom/fire_event";
import "../../../../src/components/buttons/ha-progress-button";
import "../../../../src/components/ha-button-menu";
import "../../../../src/components/ha-card";
import "../../../../src/components/ha-form/ha-form";
import type { HaFormSchema } from "../../../../src/components/ha-form/ha-form";
import "../../../../src/components/ha-formfield";
import "../../../../src/components/ha-switch";
import "../../../../src/components/ha-yaml-editor";
import type { HaYamlEditor } from "../../../../src/components/ha-yaml-editor";
import {
@@ -48,6 +52,8 @@ class HassioAddonConfig extends LitElement {
@internalProperty() private _canShowSchema = false;
@internalProperty() private _showOptional = false;
@internalProperty() private _error?: string;
@internalProperty() private _options?: Record<string, unknown>;
@@ -56,7 +62,21 @@ class HassioAddonConfig extends LitElement {
@query("ha-yaml-editor") private _editor?: HaYamlEditor;
private _filteredShchema = memoizeOne(
(options: Record<string, unknown>, schema: HaFormSchema[]) => {
return schema.filter((entry) => entry.name in options || entry.required);
}
);
protected render(): TemplateResult {
const showForm =
!this._yamlMode && this._canShowSchema && this.addon.schema;
const hasHiddenOptions =
showForm &&
JSON.stringify(this.addon.schema) !==
JSON.stringify(
this._filteredShchema(this.addon.options, this.addon.schema!)
);
return html`
<h1>${this.addon.name}</h1>
<ha-card>
@@ -78,11 +98,16 @@ class HassioAddonConfig extends LitElement {
</div>
<div class="card-content">
${!this._yamlMode && this._canShowSchema && this.addon.schema
${showForm
? html`<ha-form
.data=${this._options!}
@value-changed=${this._configChanged}
.schema=${this.addon.schema}
.schema=${this._showOptional
? this.addon.schema!
: this._filteredShchema(
this.addon.options,
this.addon.schema!
)}
></ha-form>`
: html` <ha-yaml-editor
@value-changed=${this._configChanged}
@@ -94,6 +119,18 @@ class HassioAddonConfig extends LitElement {
? ""
: html` <div class="errors">Invalid YAML</div> `}
</div>
${hasHiddenOptions
? html`<ha-formfield
class="show-additional"
label="Show unused optional configuration options"
>
<ha-switch
@change=${this._toggleOptional}
.checked=${this._showOptional}
>
</ha-switch>
</ha-formfield>`
: ""}
<div class="card-actions right">
<ha-progress-button
@click=${this._saveTapped}
@@ -108,12 +145,10 @@ class HassioAddonConfig extends LitElement {
protected firstUpdated(changedProps) {
super.firstUpdated(changedProps);
this._canShowSchema =
Object.keys(this.addon.options).length !== 0 &&
!this.addon.schema!.find(
// @ts-ignore
(entry) => !SUPPORTED_UI_TYPES.includes(entry.type) || entry.multiple
);
this._canShowSchema = !this.addon.schema!.find(
// @ts-ignore
(entry) => !SUPPORTED_UI_TYPES.includes(entry.type) || entry.multiple
);
this._yamlMode = !this._canShowSchema;
}
@@ -146,6 +181,10 @@ class HassioAddonConfig extends LitElement {
}
}
private _toggleOptional() {
this._showOptional = !this._showOptional;
}
private _configChanged(ev): void {
if (this.addon.schema && this._canShowSchema && !this._yamlMode) {
this._valid = true;
@@ -275,6 +314,10 @@ class HassioAddonConfig extends LitElement {
.card-actions.right {
justify-content: flex-end;
}
.show-additional {
padding: 16px;
}
`,
];
}
@@ -190,7 +190,9 @@ class HassioAddonDashboard extends LitElement {
const path: string = pathSplit[pathSplit.length - 1];
if (["uninstall", "install", "update", "start", "stop"].includes(path)) {
fireEvent(this, "supervisor-store-refresh", { store: "supervisor" });
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "supervisor",
});
}
if (path === "uninstall") {
+25 -41
View File
@@ -25,6 +25,7 @@ import {
TemplateResult,
} from "lit-element";
import { classMap } from "lit-html/directives/class-map";
import memoizeOne from "memoize-one";
import { atLeastVersion } from "../../../../src/common/config/version";
import { fireEvent } from "../../../../src/common/dom/fire_event";
import { navigate } from "../../../../src/common/navigate";
@@ -49,7 +50,6 @@ import {
startHassioAddon,
stopHassioAddon,
uninstallHassioAddon,
updateHassioAddon,
validateHassioAddonOption,
} from "../../../../src/data/hassio/addon";
import {
@@ -57,6 +57,7 @@ import {
fetchHassioStats,
HassioStats,
} from "../../../../src/data/hassio/common";
import { StoreAddon } from "../../../../src/data/supervisor/store";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import {
showAlertDialog,
@@ -67,6 +68,7 @@ import { HomeAssistant } from "../../../../src/types";
import { bytesToString } from "../../../../src/util/bytes-to-string";
import "../../components/hassio-card-content";
import "../../components/supervisor-metric";
import { showDialogSupervisorAddonUpdate } from "../../dialogs/addon/show-dialog-addon-update";
import { showHassioMarkdownDialog } from "../../dialogs/markdown/show-dialog-hassio-markdown";
import { hassioStyle } from "../../resources/hassio-style";
import { addonArchIsSupported } from "../../util/addon";
@@ -148,7 +150,16 @@ class HassioAddonInfo extends LitElement {
@internalProperty() private _error?: string;
private _addonStoreInfo = memoizeOne(
(slug: string, storeAddons: StoreAddon[]) =>
storeAddons.find((addon) => addon.slug === slug)
);
protected render(): TemplateResult {
const addonStoreInfo =
!this.addon.detached && !this.addon.available
? this._addonStoreInfo(this.addon.slug, this.supervisor.store.addons)
: undefined;
const metrics = [
{
description: "Add-on CPU Usage",
@@ -176,32 +187,32 @@ class HassioAddonInfo extends LitElement {
icon=${mdiArrowUpBoldCircle}
iconClass="update"
></hassio-card-content>
${!this.addon.available
${!this.addon.available && addonStoreInfo
? !addonArchIsSupported(
this.supervisor.info.supported_arch,
this.addon.arch
)
? html`
<p>
<p class="warning">
This add-on is not compatible with the processor of
your device or the operating system you have installed
on your device.
</p>
`
: html`
<p>
<p class="warning">
You are running Home Assistant
${this.supervisor.core.version}, to update to this
version of the add-on you need at least version
${this.addon.homeassistant} of Home Assistant
${addonStoreInfo.homeassistant} of Home Assistant
</p>
`
: ""}
</div>
<div class="card-actions">
<ha-progress-button @click=${this._updateClicked}>
<mwc-button @click=${this._updateClicked}>
Update
</ha-progress-button>
</mwc-button>
${this.addon.changelog
? html`
<mwc-button @click=${this._openChangelog}>
@@ -551,7 +562,7 @@ class HassioAddonInfo extends LitElement {
</div>
</div>
${this._error ? html` <div class="errors">${this._error}</div> ` : ""}
${!this.addon.available
${!this.addon.version && addonStoreInfo && !this.addon.available
? !addonArchIsSupported(
this.supervisor.info.supported_arch,
this.addon.arch
@@ -567,8 +578,8 @@ class HassioAddonInfo extends LitElement {
<p class="warning">
You are running Home Assistant
${this.supervisor.core.version}, to install this add-on you
need at least version ${this.addon.homeassistant} of Home
Assistant
need at least version ${addonStoreInfo!.homeassistant} of
Home Assistant
</p>
`
: ""}
@@ -922,38 +933,11 @@ class HassioAddonInfo extends LitElement {
button.progress = false;
}
private async _updateClicked(ev: CustomEvent): Promise<void> {
const button = ev.currentTarget as any;
button.progress = true;
const confirmed = await showConfirmationDialog(this, {
title: this.addon.name,
text: "Are you sure you want to update this add-on?",
confirmText: "update add-on",
dismissText: "no",
private async _updateClicked(): Promise<void> {
showDialogSupervisorAddonUpdate(this, {
addon: this.addon,
supervisor: this.supervisor,
});
if (!confirmed) {
button.progress = false;
return;
}
this._error = undefined;
try {
await updateHassioAddon(this.hass, this.addon.slug);
const eventdata = {
success: true,
response: undefined,
path: "update",
};
fireEvent(this, "hass-api-called", eventdata);
} catch (err) {
showAlertDialog(this, {
title: "Failed to update addon",
text: extractApiErrorMessage(err),
});
}
button.progress = false;
}
private async _startClicked(ev: CustomEvent): Promise<void> {
+13 -2
View File
@@ -31,6 +31,7 @@ import {
} from "../../../src/dialogs/generic/show-dialog-box";
import { haStyle } from "../../../src/resources/styles";
import { HomeAssistant } from "../../../src/types";
import { showDialogSupervisorCoreUpdate } from "../dialogs/core/show-dialog-core-update";
import { hassioStyle } from "../resources/hassio-style";
@customElement("hassio-update")
@@ -134,6 +135,10 @@ export class HassioUpdate extends LitElement {
private async _confirmUpdate(ev): Promise<void> {
const item = ev.currentTarget;
if (item.key === "core") {
showDialogSupervisorCoreUpdate(this, { supervisor: this.supervisor });
return;
}
item.progress = true;
const confirmed = await showConfirmationDialog(this, {
title: `Update ${item.name}`,
@@ -148,11 +153,17 @@ export class HassioUpdate extends LitElement {
}
try {
await this.hass.callApi<HassioResponse<void>>("POST", item.apiPath);
fireEvent(this, "supervisor-store-refresh", { store: item.key });
fireEvent(this, "supervisor-colllection-refresh", {
colllection: item.key,
});
} catch (err) {
// Only show an error if the status code was not expected (user behind proxy)
// or no status at all(connection terminated)
if (err.status_code && !ignoredStatusCodes.has(err.status_code)) {
if (
this.hass.connection.connected &&
err.status_code &&
!ignoredStatusCodes.has(err.status_code)
) {
showAlertDialog(this, {
title: "Update failed",
text: extractApiErrorMessage(err),
@@ -0,0 +1,190 @@
import "@material/mwc-button/mwc-button";
import {
css,
CSSResult,
customElement,
html,
internalProperty,
LitElement,
property,
TemplateResult,
} from "lit-element";
import { fireEvent } from "../../../../src/common/dom/fire_event";
import "../../../../src/components/ha-circular-progress";
import "../../../../src/components/ha-dialog";
import "../../../../src/components/ha-settings-row";
import "../../../../src/components/ha-svg-icon";
import "../../../../src/components/ha-switch";
import {
HassioAddonDetails,
updateHassioAddon,
} from "../../../../src/data/hassio/addon";
import { extractApiErrorMessage } from "../../../../src/data/hassio/common";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { createHassioPartialSnapshot } from "../../../../src/data/hassio/snapshot";
import { haStyle, haStyleDialog } from "../../../../src/resources/styles";
import type { HomeAssistant } from "../../../../src/types";
import { SupervisorDialogSupervisorAddonUpdateParams } from "./show-dialog-addon-update";
@customElement("dialog-supervisor-addon-update")
class DialogSupervisorAddonUpdate extends LitElement {
@property({ attribute: false }) public supervisor!: Supervisor;
public hass!: HomeAssistant;
public addon!: HassioAddonDetails;
@internalProperty() private _opened = false;
@internalProperty() private _createSnapshot = true;
@internalProperty() private _action: "snapshot" | "update" | null = null;
@internalProperty() private _error?: string;
public async showDialog(
params: SupervisorDialogSupervisorAddonUpdateParams
): Promise<void> {
this._opened = true;
this.addon = params.addon;
this.supervisor = params.supervisor;
await this.updateComplete;
}
public closeDialog(): void {
this._action = null;
this._createSnapshot = true;
this._opened = false;
this._error = undefined;
fireEvent(this, "dialog-closed", { dialog: this.localName });
}
public focus(): void {
this.updateComplete.then(() =>
(this.shadowRoot?.querySelector(
"[dialogInitialFocus]"
) as HTMLElement)?.focus()
);
}
protected render(): TemplateResult {
return html`
<ha-dialog .open=${this._opened} scrimClickAction escapeKeyAction>
${this._action === null
? html`<slot name="heading">
<h2 id="title" class="header_title">
Update ${this.addon.name}
</h2>
</slot>
<div>
Are you sure you want to update the ${this.addon.name} add-on to
version ${this.addon.version_latest}?
</div>
<ha-settings-row>
<span slot="heading">
Snapshot
</span>
<span slot="description">
Create a snapshot of the ${this.addon.name} add-on before
updating
</span>
<ha-switch
.checked=${this._createSnapshot}
haptic
title="Create snapshot"
@click=${this._toggleSnapshot}
>
</ha-switch>
</ha-settings-row>
<mwc-button @click=${this.closeDialog} slot="secondaryAction">
Cancel
</mwc-button>
<mwc-button
.disabled=${this._error !== undefined ||
this.supervisor.info.state !== "running"}
@click=${this._update}
slot="primaryAction"
>
Update
</mwc-button>`
: html`<ha-circular-progress alt="Updating" size="large" active>
</ha-circular-progress>
<p class="progress-text">
${this._action === "update"
? `Updating ${this.addon.name} to version ${this.addon.version_latest}`
: "Creating snapshot of Home Assistant Core"}
</p>`}
${this._error ? html`<p class="error">${this._error}</p>` : ""}
</ha-dialog>
`;
}
private _toggleSnapshot() {
this._createSnapshot = !this._createSnapshot;
}
private async _update() {
if (this._createSnapshot) {
this._action = "snapshot";
try {
await createHassioPartialSnapshot(this.hass, {
name: `addon_${this.addon.slug}_${this.addon.version}`,
addons: [this.addon.slug],
homeassistant: false,
});
} catch (err) {
this._error = extractApiErrorMessage(err);
this._action = null;
return;
}
}
this._action = "update";
try {
await updateHassioAddon(this.hass, this.addon.slug);
} catch (err) {
this._error = extractApiErrorMessage(err);
this._action = null;
return;
}
fireEvent(this, "supervisor-colllection-refresh", { colllection: "addon" });
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "supervisor",
});
this.closeDialog();
}
static get styles(): CSSResult[] {
return [
haStyle,
haStyleDialog,
css`
.form {
color: var(--primary-text-color);
}
ha-settings-row {
margin-top: 32px;
padding: 0;
}
ha-circular-progress {
display: block;
margin: 32px;
text-align: center;
}
.progress-text {
text-align: center;
}
`,
];
}
}
declare global {
interface HTMLElementTagNameMap {
"dialog-supervisor-addon-update": DialogSupervisorAddonUpdate;
}
}
@@ -0,0 +1,19 @@
import { fireEvent } from "../../../../src/common/dom/fire_event";
import { HassioAddonDetails } from "../../../../src/data/hassio/addon";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
export interface SupervisorDialogSupervisorAddonUpdateParams {
addon: HassioAddonDetails;
supervisor: Supervisor;
}
export const showDialogSupervisorAddonUpdate = (
element: HTMLElement,
dialogParams: SupervisorDialogSupervisorAddonUpdateParams
): void => {
fireEvent(element, "show-dialog", {
dialogTag: "dialog-supervisor-addon-update",
dialogImport: () => import("./dialog-supervisor-addon-update"),
dialogParams,
});
};
@@ -0,0 +1,182 @@
import "@material/mwc-button/mwc-button";
import {
css,
CSSResult,
customElement,
html,
internalProperty,
LitElement,
property,
TemplateResult,
} from "lit-element";
import { fireEvent } from "../../../../src/common/dom/fire_event";
import "../../../../src/components/ha-circular-progress";
import "../../../../src/components/ha-dialog";
import "../../../../src/components/ha-settings-row";
import "../../../../src/components/ha-svg-icon";
import "../../../../src/components/ha-switch";
import { extractApiErrorMessage } from "../../../../src/data/hassio/common";
import { createHassioPartialSnapshot } from "../../../../src/data/hassio/snapshot";
import { updateCore } from "../../../../src/data/supervisor/core";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { haStyle, haStyleDialog } from "../../../../src/resources/styles";
import type { HomeAssistant } from "../../../../src/types";
import { SupervisorDialogSupervisorCoreUpdateParams } from "./show-dialog-core-update";
@customElement("dialog-supervisor-core-update")
class DialogSupervisorCoreUpdate extends LitElement {
@property({ attribute: false }) public supervisor!: Supervisor;
public hass!: HomeAssistant;
@internalProperty() private _opened = false;
@internalProperty() private _createSnapshot = true;
@internalProperty() private _action: "snapshot" | "update" | null = null;
@internalProperty() private _error?: string;
public async showDialog(
params: SupervisorDialogSupervisorCoreUpdateParams
): Promise<void> {
this._opened = true;
this.supervisor = params.supervisor;
await this.updateComplete;
}
public closeDialog(): void {
this._action = null;
this._createSnapshot = true;
this._opened = false;
this._error = undefined;
fireEvent(this, "dialog-closed", { dialog: this.localName });
}
public focus(): void {
this.updateComplete.then(() =>
(this.shadowRoot?.querySelector(
"[dialogInitialFocus]"
) as HTMLElement)?.focus()
);
}
protected render(): TemplateResult {
return html`
<ha-dialog .open=${this._opened} scrimClickAction escapeKeyAction>
${this._action === null
? html`<slot name="heading">
<h2 id="title" class="header_title">
Update Home Assistant Core
</h2>
</slot>
<div>
Are you sure you want to update Home Assistant Core to version
${this.supervisor.core.version_latest}?
</div>
<ha-settings-row three-rows>
<span slot="heading">
Snapshot
</span>
<span slot="description">
Create a snapshot of Home Assistant Core before updating
</span>
<ha-switch
.checked=${this._createSnapshot}
haptic
title="Create snapshot"
@click=${this._toggleSnapshot}
>
</ha-switch>
</ha-settings-row>
<mwc-button @click=${this.closeDialog} slot="secondaryAction">
Cancel
</mwc-button>
<mwc-button
.disabled=${this._error !== undefined ||
this.supervisor.info.state !== "running"}
@click=${this._update}
slot="primaryAction"
>
Update
</mwc-button>`
: html`<ha-circular-progress alt="Updating" size="large" active>
</ha-circular-progress>
<p class="progress-text">
${this._action === "update"
? `Updating Home Assistant Core to version ${this.supervisor.core.version_latest}`
: "Creating snapshot of Home Assistant Core"}
</p>`}
${this._error ? html`<p class="error">${this._error}</p>` : ""}
</ha-dialog>
`;
}
private _toggleSnapshot() {
this._createSnapshot = !this._createSnapshot;
}
private async _update() {
if (this._createSnapshot) {
this._action = "snapshot";
try {
await createHassioPartialSnapshot(this.hass, {
name: `core_${this.supervisor.core.version}`,
folders: ["homeassistant"],
homeassistant: true,
});
} catch (err) {
this._error = extractApiErrorMessage(err);
this._action = null;
return;
}
}
this._action = "update";
try {
await updateCore(this.hass);
} catch (err) {
if (this.hass.connection.connected) {
this._error = extractApiErrorMessage(err);
this._action = null;
return;
}
}
fireEvent(this, "supervisor-colllection-refresh", { colllection: "core" });
this.closeDialog();
}
static get styles(): CSSResult[] {
return [
haStyle,
haStyleDialog,
css`
.form {
color: var(--primary-text-color);
}
ha-settings-row {
margin-top: 32px;
padding: 0;
}
ha-circular-progress {
display: block;
margin: 32px;
text-align: center;
}
.progress-text {
text-align: center;
}
`,
];
}
}
declare global {
interface HTMLElementTagNameMap {
"dialog-supervisor-core-update": DialogSupervisorCoreUpdate;
}
}
@@ -0,0 +1,17 @@
import { fireEvent } from "../../../../src/common/dom/fire_event";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
export interface SupervisorDialogSupervisorCoreUpdateParams {
supervisor: Supervisor;
}
export const showDialogSupervisorCoreUpdate = (
element: HTMLElement,
dialogParams: SupervisorDialogSupervisorCoreUpdateParams
): void => {
fireEvent(element, "show-dialog", {
dialogTag: "dialog-supervisor-core-update",
dialogImport: () => import("./dialog-supervisor-core-update"),
dialogParams,
});
};
@@ -95,7 +95,7 @@ class HassioSnapshotDialog extends LitElement {
@internalProperty() private _snapshotPassword!: string;
@internalProperty() private _restoreHass: boolean | null | undefined = true;
@internalProperty() private _restoreHass = true;
public async showDialog(params: HassioSnapshotDialogParams) {
this._snapshot = await fetchHassioSnapshotInfo(this.hass, params.slug);
@@ -109,6 +109,9 @@ class HassioSnapshotDialog extends LitElement {
this._dialogParams = params;
this._onboarding = params.onboarding ?? false;
this.supervisor = params.supervisor;
if (!this._snapshot.homeassistant) {
this._restoreHass = false;
}
}
protected render(): TemplateResult {
@@ -134,15 +137,17 @@ class HassioSnapshotDialog extends LitElement {
(${this._computeSize})<br />
${this._formatDatetime(this._snapshot.date)}
</div>
<div>Home Assistant:</div>
<paper-checkbox
.checked=${this._restoreHass}
@change="${(ev: Event) => {
this._restoreHass = (ev.target as PaperCheckboxElement).checked;
}}"
>
Home Assistant ${this._snapshot.homeassistant}
</paper-checkbox>
${this._snapshot.homeassistant
? html`<div>Home Assistant:</div>
<paper-checkbox
.checked=${this._restoreHass}
@change="${(ev: Event) => {
this._restoreHass = (ev.target as PaperCheckboxElement).checked!;
}}"
>
Home Assistant ${this._snapshot.homeassistant}
</paper-checkbox>`
: ""}
${this._folders.length
? html`
<div>Folders:</div>
@@ -334,7 +339,7 @@ class HassioSnapshotDialog extends LitElement {
.map((folder) => folder.slug);
const data: {
homeassistant: boolean | null | undefined;
homeassistant: boolean;
addons: any;
folders: any;
password?: string;
+4 -2
View File
@@ -3,7 +3,7 @@ import { atLeastVersion } from "../../src/common/config/version";
import { applyThemesOnElement } from "../../src/common/dom/apply_themes_on_element";
import { fireEvent } from "../../src/common/dom/fire_event";
import { HassioPanelInfo } from "../../src/data/hassio/supervisor";
import { supervisorStore } from "../../src/data/supervisor/supervisor";
import { supervisorCollection } from "../../src/data/supervisor/supervisor";
import { makeDialogManager } from "../../src/dialogs/make-dialog-manager";
import "../../src/layouts/hass-loading-screen";
import { HomeAssistant, Route } from "../../src/types";
@@ -77,7 +77,9 @@ export class HassioMain extends SupervisorBaseElement {
}
if (
Object.keys(supervisorStore).some((store) => !this.supervisor![store])
Object.keys(supervisorCollection).some(
(colllection) => !this.supervisor![colllection]
)
) {
return html`<hass-loading-screen></hass-loading-screen>`;
}
+21 -17
View File
@@ -19,12 +19,13 @@ import {
fetchHassioInfo,
fetchHassioSupervisorInfo,
} from "../../src/data/hassio/supervisor";
import { fetchSupervisorStore } from "../../src/data/supervisor/store";
import {
getSupervisorEventCollection,
subscribeSupervisorEvents,
Supervisor,
SupervisorObject,
supervisorStore,
supervisorCollection,
} from "../../src/data/supervisor/supervisor";
import { ProvideHassLitMixin } from "../../src/mixins/provide-hass-lit-mixin";
import { urlSyncMixin } from "../../src/state/url-sync-mixin";
@@ -32,7 +33,7 @@ import { urlSyncMixin } from "../../src/state/url-sync-mixin";
declare global {
interface HASSDomEvents {
"supervisor-update": Partial<Supervisor>;
"supervisor-store-refresh": { store: SupervisorObject };
"supervisor-colllection-refresh": { colllection: SupervisorObject };
}
}
@@ -65,40 +66,40 @@ export class SupervisorBaseElement extends urlSyncMixin(
}
private async _handleSupervisorStoreRefreshEvent(ev) {
const store = ev.detail.store;
const colllection = ev.detail.colllection;
if (atLeastVersion(this.hass.config.version, 2021, 2, 4)) {
this._collections[store].refresh();
this._collections[colllection].refresh();
return;
}
const response = await this.hass.callApi<HassioResponse<any>>(
"GET",
`hassio${supervisorStore[store]}`
`hassio${supervisorCollection[colllection]}`
);
this._updateSupervisor({ [store]: response.data });
this._updateSupervisor({ [colllection]: response.data });
}
private async _initSupervisor(): Promise<void> {
this.addEventListener(
"supervisor-store-refresh",
"supervisor-colllection-refresh",
this._handleSupervisorStoreRefreshEvent
);
if (atLeastVersion(this.hass.config.version, 2021, 2, 4)) {
Object.keys(supervisorStore).forEach((store) => {
this._unsubs[store] = subscribeSupervisorEvents(
Object.keys(supervisorCollection).forEach((colllection) => {
this._unsubs[colllection] = subscribeSupervisorEvents(
this.hass,
(data) => this._updateSupervisor({ [store]: data }),
store,
supervisorStore[store]
(data) => this._updateSupervisor({ [colllection]: data }),
colllection,
supervisorCollection[colllection]
);
if (this._collections[store]) {
this._collections[store].refresh();
if (this._collections[colllection]) {
this._collections[colllection].refresh();
} else {
this._collections[store] = getSupervisorEventCollection(
this._collections[colllection] = getSupervisorEventCollection(
this.hass.connection,
store,
supervisorStore[store]
colllection,
supervisorCollection[colllection]
);
}
});
@@ -122,6 +123,7 @@ export class SupervisorBaseElement extends urlSyncMixin(
os,
network,
resolution,
store,
] = await Promise.all([
fetchHassioAddonsInfo(this.hass),
fetchHassioSupervisorInfo(this.hass),
@@ -131,6 +133,7 @@ export class SupervisorBaseElement extends urlSyncMixin(
fetchHassioHassOsInfo(this.hass),
fetchNetworkInfo(this.hass),
fetchHassioResolution(this.hass),
fetchSupervisorStore(this.hass),
]);
this.supervisor = {
@@ -142,6 +145,7 @@ export class SupervisorBaseElement extends urlSyncMixin(
os,
network,
resolution,
store,
};
this.addEventListener("supervisor-update", (ev) =>
+10 -33
View File
@@ -10,7 +10,6 @@ import {
property,
TemplateResult,
} from "lit-element";
import { fireEvent } from "../../../src/common/dom/fire_event";
import "../../../src/components/buttons/ha-progress-button";
import "../../../src/components/ha-button-menu";
import "../../../src/components/ha-card";
@@ -20,7 +19,7 @@ import {
fetchHassioStats,
HassioStats,
} from "../../../src/data/hassio/common";
import { restartCore, updateCore } from "../../../src/data/supervisor/core";
import { restartCore } from "../../../src/data/supervisor/core";
import { Supervisor } from "../../../src/data/supervisor/supervisor";
import {
showAlertDialog,
@@ -30,6 +29,7 @@ import { haStyle } from "../../../src/resources/styles";
import { HomeAssistant } from "../../../src/types";
import { bytesToString } from "../../../src/util/bytes-to-string";
import "../components/supervisor-metric";
import { showDialogSupervisorCoreUpdate } from "../dialogs/core/show-dialog-core-update";
import { hassioStyle } from "../resources/hassio-style";
@customElement("hassio-core-info")
@@ -140,42 +140,19 @@ class HassioCoreInfo extends LitElement {
try {
await restartCore(this.hass);
} catch (err) {
showAlertDialog(this, {
title: "Failed to restart Home Assistant Core",
text: extractApiErrorMessage(err),
});
if (this.hass.connection.connected) {
showAlertDialog(this, {
title: "Failed to restart Home Assistant Core",
text: extractApiErrorMessage(err),
});
}
} finally {
button.progress = false;
}
}
private async _coreUpdate(ev: CustomEvent): Promise<void> {
const button = ev.currentTarget as any;
button.progress = true;
const confirmed = await showConfirmationDialog(this, {
title: "Update Home Assistant Core",
text: `Are you sure you want to update Home Assistant Core to version ${this.supervisor.core.version_latest}?`,
confirmText: "update",
dismissText: "cancel",
});
if (!confirmed) {
button.progress = false;
return;
}
try {
await updateCore(this.hass);
fireEvent(this, "supervisor-store-refresh", { store: "core" });
} catch (err) {
showAlertDialog(this, {
title: "Failed to update Home Assistant Core",
text: extractApiErrorMessage(err),
});
} finally {
button.progress = false;
}
private async _coreUpdate(): Promise<void> {
showDialogSupervisorCoreUpdate(this, { supervisor: this.supervisor });
}
static get styles(): CSSResult[] {
+16 -8
View File
@@ -340,12 +340,14 @@ class HassioHostInfo extends LitElement {
try {
await updateOS(this.hass);
fireEvent(this, "supervisor-store-refresh", { store: "os" });
fireEvent(this, "supervisor-colllection-refresh", { colllection: "os" });
} catch (err) {
showAlertDialog(this, {
title: "Failed to update",
text: extractApiErrorMessage(err),
});
if (this.hass.connection.connected) {
showAlertDialog(this, {
title: "Failed to update",
text: extractApiErrorMessage(err),
});
}
}
button.progress = false;
}
@@ -369,7 +371,9 @@ class HassioHostInfo extends LitElement {
if (hostname && hostname !== curHostname) {
try {
await changeHostOptions(this.hass, { hostname });
fireEvent(this, "supervisor-store-refresh", { store: "host" });
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "host",
});
} catch (err) {
showAlertDialog(this, {
title: "Setting hostname failed",
@@ -382,7 +386,9 @@ class HassioHostInfo extends LitElement {
private async _importFromUSB(): Promise<void> {
try {
await configSyncOS(this.hass);
fireEvent(this, "supervisor-store-refresh", { store: "host" });
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "host",
});
} catch (err) {
showAlertDialog(this, {
title: "Failed to import from USB",
@@ -393,7 +399,9 @@ class HassioHostInfo extends LitElement {
private async _loadData(): Promise<void> {
if (atLeastVersion(this.hass.config.version, 2021, 2, 4)) {
fireEvent(this, "supervisor-store-refresh", { store: "network" });
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "network",
});
} else {
const network = await fetchNetworkInfo(this.hass);
fireEvent(this, "supervisor-update", { network });
+6 -2
View File
@@ -317,7 +317,9 @@ class HassioSupervisorInfo extends LitElement {
private async _reloadSupervisor(): Promise<void> {
await reloadSupervisor(this.hass);
fireEvent(this, "supervisor-store-refresh", { store: "supervisor" });
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "supervisor",
});
}
private async _supervisorRestart(ev: CustomEvent): Promise<void> {
@@ -366,7 +368,9 @@ class HassioSupervisorInfo extends LitElement {
try {
await updateSupervisor(this.hass);
fireEvent(this, "supervisor-store-refresh", { store: "supervisor" });
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "supervisor",
});
} catch (err) {
showAlertDialog(this, {
title: "Failed to update the supervisor",
+12 -10
View File
@@ -23,14 +23,16 @@
"license": "Apache-2.0",
"dependencies": {
"@braintree/sanitize-url": "^5.0.0",
"@codemirror/commands": "^0.17.2",
"@codemirror/gutter": "^0.17.2",
"@codemirror/highlight": "^0.17.2",
"@codemirror/legacy-modes": "^0.17.1",
"@codemirror/state": "^0.17.1",
"@codemirror/stream-parser": "^0.17.1",
"@codemirror/text": "^0.17.2",
"@codemirror/view": "^0.17.7",
"@codemirror/commands": "^0.17.0",
"@codemirror/gutter": "^0.17.0",
"@codemirror/highlight": "^0.17.0",
"@codemirror/history": "^0.17.0",
"@codemirror/legacy-modes": "^0.17.0",
"@codemirror/search": "^0.17.0",
"@codemirror/state": "^0.17.0",
"@codemirror/stream-parser": "^0.17.0",
"@codemirror/text": "^0.17.0",
"@codemirror/view": "^0.17.0",
"@formatjs/intl-getcanonicallocales": "^1.4.6",
"@formatjs/intl-pluralrules": "^3.4.10",
"@fullcalendar/common": "5.1.0",
@@ -54,8 +56,8 @@
"@material/mwc-tab": "^0.20.0",
"@material/mwc-tab-bar": "^0.20.0",
"@material/top-app-bar": "=9.0.0-canary.1c156d69d.0",
"@mdi/js": "5.6.55",
"@mdi/svg": "5.6.55",
"@mdi/js": "5.9.55",
"@mdi/svg": "5.9.55",
"@polymer/app-layout": "^3.0.2",
"@polymer/app-route": "^3.0.2",
"@polymer/app-storage": "^3.0.2",
+1 -1
View File
@@ -12,5 +12,5 @@ yarn install
script/build_frontend
rm -rf dist
python3 setup.py sdist
python3 setup.py -q sdist
python3 -m twine upload dist/* --skip-existing
+1 -1
View File
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup(
name="home-assistant-frontend",
version="20210225.0",
version="20210301.0",
description="The Home Assistant frontend",
url="https://github.com/home-assistant/home-assistant-polymer",
author="The Home Assistant Authors",
+2 -1
View File
@@ -34,7 +34,8 @@ import {
import { SubscribeMixin } from "../../mixins/subscribe-mixin";
import { PolymerChangedEvent } from "../../polymer-types";
import { HomeAssistant } from "../../types";
import { HaComboBox } from "../ha-combo-box";
import type { HaComboBox } from "../ha-combo-box";
import "../ha-combo-box";
interface Device {
name: string;
+9 -5
View File
@@ -129,21 +129,25 @@ export class HaCodeEditor extends UpdatingElement {
doc: this._value,
extensions: [
loaded.lineNumbers(),
loaded.history(),
loaded.highlightSelectionMatches(),
loaded.keymap.of([
...loaded.defaultKeymap,
loaded.defaultTabBinding,
...loaded.searchKeymap,
...loaded.historyKeymap,
...loaded.tabKeyBindings,
saveKeyBinding,
]),
] as KeyBinding[]),
loaded.tagExtension(modeTag, this._mode),
loaded.theme,
loaded.Prec.fallback(loaded.highlightStyle),
loaded.EditorView.updateListener.of((update) =>
this._onUpdate(update)
),
loaded.tagExtension(
readOnlyTag,
loaded.EditorView.editable.of(!this.readOnly)
),
loaded.EditorView.updateListener.of((update) =>
this._onUpdate(update)
),
],
}),
root: shadowRoot,
+5 -1
View File
@@ -80,7 +80,11 @@ class HaSlider extends PaperSliderClass {
}
_setImmediateValue(newImmediateValue) {
super._setImmediateValue(Math.round(newImmediateValue));
super._setImmediateValue(
this.step >= 1
? Math.round(newImmediateValue)
: Math.round(newImmediateValue * 100) / 100
);
}
_calcStep(value) {
+20 -8
View File
@@ -4,20 +4,33 @@ import { HomeAssistant } from "../../types";
import { SupervisorArch } from "../supervisor/supervisor";
import { hassioApiResultExtractor, HassioResponse } from "./common";
export type AddonStage = "stable" | "experimental" | "deprecated";
export type AddonAppArmour = "disable" | "default" | "profile";
export type AddonRole = "default" | "homeassistant" | "manager" | "admin";
export type AddonStartup =
| "initialize"
| "system"
| "services"
| "application"
| "once";
export type AddonState = "started" | "stopped" | null;
export type AddonRepository = "core" | "local" | string;
export interface HassioAddonInfo {
advanced: boolean;
available: boolean;
build: boolean;
description: string;
detached: boolean;
homeassistant: string;
icon: boolean;
installed: boolean;
logo: boolean;
name: string;
repository: "core" | "local" | string;
repository: AddonRepository;
slug: string;
stage: "stable" | "experimental" | "deprecated";
state: "started" | "stopped" | null;
stage: AddonStage;
state: AddonState;
update_available: boolean;
url: string | null;
version_latest: string;
@@ -25,7 +38,7 @@ export interface HassioAddonInfo {
}
export interface HassioAddonDetails extends HassioAddonInfo {
apparmor: "disable" | "default" | "profile";
apparmor: AddonAppArmour;
arch: SupervisorArch[];
audio_input: null | string;
audio_output: null | string;
@@ -43,10 +56,9 @@ export interface HassioAddonDetails extends HassioAddonInfo {
full_access: boolean;
gpio: boolean;
hassio_api: boolean;
hassio_role: "default" | "homeassistant" | "manager" | "admin";
hassio_role: AddonRole;
hostname: string;
homeassistant_api: boolean;
homeassistant: string;
host_dbus: boolean;
host_ipc: boolean;
host_network: boolean;
@@ -68,7 +80,7 @@ export interface HassioAddonDetails extends HassioAddonInfo {
schema: HaFormSchema[] | null;
services_role: string[];
slug: string;
startup: "initialize" | "system" | "services" | "application" | "once";
startup: AddonStartup;
stdin: boolean;
watchdog: null | boolean;
webui: null | string;
@@ -288,7 +300,7 @@ export const updateHassioAddon = async (
if (atLeastVersion(hass.config.version, 2021, 2, 4)) {
await hass.callWS({
type: "supervisor/api",
endpoint: `/addons/${slug}/update`,
endpoint: `/store/addons/${slug}/update`,
method: "post",
timeout: null,
});
+4 -3
View File
@@ -29,9 +29,10 @@ export interface HassioFullSnapshotCreateParams {
}
export interface HassioPartialSnapshotCreateParams {
name: string;
folders: string[];
addons: string[];
folders?: string[];
addons?: string[];
password?: string;
homeassistant?: boolean;
}
export const fetchHassioSnapshots = async (
@@ -116,7 +117,7 @@ export const createHassioFullSnapshot = async (
export const createHassioPartialSnapshot = async (
hass: HomeAssistant,
data: HassioFullSnapshotCreateParams
data: HassioPartialSnapshotCreateParams
) => {
if (atLeastVersion(hass.config.version, 2021, 2, 4)) {
await hass.callWS({
+11 -4
View File
@@ -216,7 +216,6 @@ export const getLogbookMessage = (
case "cold":
case "gas":
case "heat":
case "colightld":
case "moisture":
case "motion":
case "occupancy":
@@ -246,9 +245,17 @@ export const getLogbookMessage = (
}
case "cover":
return state === "open"
? hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_opened`)
: hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_closed`);
switch (state) {
case "open":
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_opened`);
case "opening":
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.is_opening`);
case "closing":
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.is_closing`);
case "closed":
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_closed`);
}
break;
case "lock":
if (state === "unlocked") {
+51
View File
@@ -0,0 +1,51 @@
import { atLeastVersion } from "../../common/config/version";
import { HomeAssistant } from "../../types";
import { AddonRepository, AddonStage } from "../hassio/addon";
import { hassioApiResultExtractor, HassioResponse } from "../hassio/common";
export interface StoreAddon {
advanced: boolean;
available: boolean;
build: boolean;
description: string;
homeassistant: string | null;
icon: boolean;
installed: boolean;
logo: boolean;
name: string;
repository: AddonRepository;
slug: string;
stage: AddonStage;
update_available: boolean;
url: string;
version: string | null;
version_latest: string;
}
interface StoreRepository {
maintainer: string;
name: string;
slug: string;
source: string;
url: string;
}
export interface SupervisorStore {
addons: StoreAddon[];
repositories: StoreRepository[];
}
export const fetchSupervisorStore = async (
hass: HomeAssistant
): Promise<SupervisorStore> => {
if (atLeastVersion(hass.config.version, 2021, 2, 4)) {
return await hass.callWS({
type: "supervisor/api",
endpoint: "/store",
method: "get",
});
}
return hassioApiResultExtractor(
await hass.callApi<HassioResponse<SupervisorStore>>("GET", `hassio/store`)
);
};
+14 -12
View File
@@ -10,13 +10,14 @@ import {
HassioInfo,
HassioSupervisorInfo,
} from "../hassio/supervisor";
import { SupervisorStore } from "./store";
export const supervisorWSbaseCommand = {
type: "supervisor/api",
method: "GET",
};
export const supervisorStore = {
export const supervisorCollection = {
host: "/host/info",
supervisor: "/supervisor/info",
info: "/info",
@@ -25,6 +26,7 @@ export const supervisorStore = {
resolution: "/resolution/info",
os: "/os/info",
addon: "/addons",
store: "/store",
};
export type SupervisorArch = "armhf" | "armv7" | "aarch64" | "i386" | "amd64";
@@ -36,7 +38,8 @@ export type SupervisorObject =
| "network"
| "resolution"
| "os"
| "addon";
| "addon"
| "store";
interface supervisorApiRequest {
endpoint: string;
@@ -61,6 +64,7 @@ export interface Supervisor {
resolution: HassioResolution;
os: HassioHassOSInfo;
addon: HassioAddonsInfo;
store: SupervisorStore;
}
export const supervisorApiWsRequest = <T>(
@@ -75,17 +79,13 @@ async function processEvent(
event: SupervisorEvent,
key: string
) {
if (
!event.data ||
event.data.event !== "supervisor-update" ||
event.data.update_key !== key
) {
if (event.event !== "supervisor-update" || event.update_key !== key) {
return;
}
if (Object.keys(event.data.data).length === 0) {
if (Object.keys(event.data).length === 0) {
const data = await supervisorApiWsRequest<any>(conn, {
endpoint: supervisorStore[key],
endpoint: supervisorCollection[key],
});
store.setState(data);
return;
@@ -98,7 +98,7 @@ async function processEvent(
store.setState({
...state,
...event.data.data,
...event.data,
});
}
@@ -107,9 +107,11 @@ const subscribeSupervisorEventUpdates = (
store: Store<unknown>,
key: string
) =>
conn.subscribeEvents(
conn.subscribeMessage(
(event) => processEvent(conn, store, event as SupervisorEvent, key),
"supervisor_event"
{
type: "supervisor/subscribe",
}
);
export const getSupervisorEventCollection = (
+5
View File
@@ -89,6 +89,11 @@ export const reconfigureNode = (
ieee: ieeeAddress,
});
export const refreshTopology = (hass: HomeAssistant): Promise<void> =>
hass.callWS({
type: "zha/topology/update",
});
export const fetchAttributesForCluster = (
hass: HomeAssistant,
ieeeAddress: string,
+12 -3
View File
@@ -48,10 +48,19 @@ const authProm = isExternal
const connProm = async (auth) => {
try {
const conn = await createConnection({ auth });
// Clear url if we have been able to establish a connection
// Clear auth data from url if we have been able to establish a connection
if (location.search.includes("auth_callback=1")) {
history.replaceState(null, "", location.pathname);
const searchParams = new URLSearchParams(location.search);
// https://github.com/home-assistant/home-assistant-js-websocket/blob/master/lib/auth.ts
// Remove all data from QueryCallbackData type
searchParams.delete("auth_callback");
searchParams.delete("code");
searchParams.delete("state");
history.replaceState(
null,
"",
`${location.pathname}?${searchParams.toString()}`
);
}
return { auth, conn };
@@ -29,11 +29,7 @@ class HaConfigNavigation extends LitElement {
${this.pages.map((page) =>
canShowPage(this.hass, page)
? html`
<a
href=${`/config/${page.component}`}
aria-role="option"
tabindex="-1"
>
<a href=${page.path} aria-role="option" tabindex="-1">
<paper-icon-item>
<ha-svg-icon
.path=${page.iconPath}
@@ -79,6 +79,11 @@ export class HaDeviceActionsZha extends LitElement {
"ui.dialogs.zha_device_info.buttons.clusters"
)}
</mwc-button>
<mwc-button @click=${this._onViewInVisualizationClick}>
${this.hass!.localize(
"ui.dialogs.zha_device_info.buttons.view_in_visualization"
)}
</mwc-button>
<mwc-button class="warning" @click=${this._removeDevice}>
${this.hass!.localize(
"ui.dialogs.zha_device_info.buttons.remove"
@@ -104,6 +109,13 @@ export class HaDeviceActionsZha extends LitElement {
navigate(this, "/config/zha/add/" + this._zhaDevice!.ieee);
}
private _onViewInVisualizationClick() {
navigate(
this,
"/config/zha/visualization/" + this._zhaDevice!.device_reg_id
);
}
private async _handleZigbeeInfoClicked() {
showZHADeviceZigbeeInfoDialog(this, { device: this._zhaDevice! });
}
+2 -3
View File
@@ -111,11 +111,10 @@ export const configSections: { [name: string]: PageNavigation[] } = {
],
experimental: [
{
component: "tags",
component: "tag",
path: "/config/tags",
translationKey: "ui.panel.config.tags.caption",
translationKey: "ui.panel.config.tag.caption",
iconPath: mdiNfcVariant,
core: true,
},
],
lovelace: [
@@ -59,6 +59,8 @@ class ZHAConfigDashboardRouter extends HassRouterPage {
el.groupId = this.routeTail.path.substr(1);
} else if (this._currentPage === "device") {
el.ieee = this.routeTail.path.substr(1);
} else if (this._currentPage === "visualization") {
el.zoomedDeviceId = this.routeTail.path.substr(1);
}
const searchParams = new URLSearchParams(window.location.search);
@@ -9,23 +9,33 @@ import {
PropertyValues,
query,
} from "lit-element";
import { Edge, EdgeOptions, Network, Node } from "vis-network";
import "@material/mwc-button";
import { navigate } from "../../../../../common/navigate";
import {
fetchDevices,
refreshTopology,
ZHADevice,
} from "../../../../../data/zha";
import "../../../../../layouts/hass-subpage";
import type { HomeAssistant } from "../../../../../types";
import { Network, Edge, Node, EdgeOptions } from "vis-network";
import "../../../../../common/search/search-input";
import "../../../../../components/device/ha-device-picker";
import "../../../../../components/ha-button-menu";
import "../../../../../components/ha-svg-icon";
import { fetchDevices, ZHADevice } from "../../../../../data/zha";
import "../../../../../layouts/hass-subpage";
import { PolymerChangedEvent } from "../../../../../polymer-types";
import type { HomeAssistant } from "../../../../../types";
import { formatAsPaddedHex } from "./functions";
import { DeviceRegistryEntry } from "../../../../../data/device_registry";
@customElement("zha-network-visualization-page")
export class ZHANetworkVisualizationPage extends LitElement {
@property({ type: Object }) public hass!: HomeAssistant;
@property({ type: Boolean }) public narrow!: boolean;
@property({ type: Boolean, reflect: true }) public narrow = false;
@property()
public zoomedDeviceId?: string;
@query("#visualization", true)
private _visualization?: HTMLElement;
@@ -45,9 +55,6 @@ export class ZHANetworkVisualizationPage extends LitElement {
@internalProperty()
private _filter?: string;
@internalProperty()
private _zoomedDeviceId?: string;
protected firstUpdated(changedProperties: PropertyValues): void {
super.firstUpdated(changedProperties);
if (this.hass) {
@@ -98,6 +105,12 @@ export class ZHANetworkVisualizationPage extends LitElement {
}
}
});
this._network.on("stabilized", () => {
if (this.zoomedDeviceId) {
this._zoomToDevice();
}
});
}
protected render() {
@@ -121,13 +134,18 @@ export class ZHANetworkVisualizationPage extends LitElement {
</search-input>
<ha-device-picker
.hass=${this.hass}
.value=${this._zoomedDeviceId}
.value=${this.zoomedDeviceId}
.label=${this.hass.localize(
"ui.panel.config.zha.visualization.zoom_label"
)}
.includeDomains="['zha']"
@value-changed=${this._zoomToDevice}
.deviceFilter=${(device) => this._filterDevices(device)}
@value-changed=${this._onZoomToDevice}
></ha-device-picker>
<mwc-button @click=${this._refreshTopology}
>${this.hass!.localize(
"ui.panel.config.zha.visualization.refresh_topology"
)}</mwc-button
>
</div>
<div id="visualization"></div>
</hass-subpage>
@@ -248,7 +266,7 @@ export class ZHANetworkVisualizationPage extends LitElement {
filteredNodeIds.push(node.id!);
}
});
this._zoomedDeviceId = "";
this.zoomedDeviceId = "";
this._zoomOut();
this._network.selectNodes(filteredNodeIds, true);
} else {
@@ -256,21 +274,25 @@ export class ZHANetworkVisualizationPage extends LitElement {
}
}
private _zoomToDevice(event: PolymerChangedEvent<string>) {
private _onZoomToDevice(event: PolymerChangedEvent<string>) {
event.stopPropagation();
this._zoomedDeviceId = event.detail.value;
this.zoomedDeviceId = event.detail.value;
if (!this._network) {
return;
}
this._zoomToDevice();
}
private _zoomToDevice() {
this._filter = "";
if (!this._zoomedDeviceId) {
if (!this.zoomedDeviceId) {
this._zoomOut();
} else {
const device: ZHADevice | undefined = this._devicesByDeviceId.get(
this._zoomedDeviceId
this.zoomedDeviceId
);
if (device) {
this._network.fit({
this._network!.fit({
nodes: [device.ieee],
animation: { duration: 500, easingFunction: "easeInQuad" },
});
@@ -285,6 +307,24 @@ export class ZHANetworkVisualizationPage extends LitElement {
});
}
private async _refreshTopology(): Promise<void> {
await refreshTopology(this.hass);
}
private _filterDevices(device: DeviceRegistryEntry): boolean {
if (!this.hass) {
return false;
}
for (const parts of device.identifiers) {
for (const part of parts) {
if (part === "zha") {
return true;
}
}
}
return false;
}
static get styles(): CSSResult[] {
return [
css`
@@ -299,30 +339,59 @@ export class ZHANetworkVisualizationPage extends LitElement {
line-height: var(--paper-font-display1_-_line-height);
opacity: var(--dark-primary-opacity);
}
.table-header {
border-bottom: 1px solid --divider-color;
padding: 0 16px;
display: flex;
align-items: center;
flex-direction: row;
height: var(--header-height);
}
:host([narrow]) .table-header {
flex-direction: column;
align-items: stretch;
height: var(--header-height) * 3;
}
.search-toolbar {
display: flex;
align-items: center;
color: var(--secondary-text-color);
padding: 0 16px;
}
search-input {
position: relative;
top: 2px;
flex: 1;
}
:host(:not([narrow])) search-input {
margin: 5px;
}
search-input.header {
left: -8px;
}
ha-device-picker {
flex: 1;
}
:host(:not([narrow])) ha-device-picker {
margin: 5px;
}
mwc-button {
font-weight: 500;
color: var(--primary-color);
}
:host(:not([narrow])) mwc-button {
margin: 5px;
}
`,
];
}
+12 -14
View File
@@ -72,7 +72,7 @@ class DialogTagDetail extends LitElement
this.hass,
this._params.entry
? this._params.entry.name || this._params.entry.id
: this.hass!.localize("ui.panel.config.tags.detail.new_tag")
: this.hass!.localize("ui.panel.config.tag.detail.new_tag")
)}
>
<div>
@@ -80,7 +80,7 @@ class DialogTagDetail extends LitElement
<div class="form">
${this._params.entry
? html`${this.hass!.localize(
"ui.panel.config.tags.detail.tag_id"
"ui.panel.config.tag.detail.tag_id"
)}:
${this._params.entry.id}`
: ""}
@@ -89,11 +89,9 @@ class DialogTagDetail extends LitElement
.value=${this._name}
.configValue=${"name"}
@value-changed=${this._valueChanged}
.label="${this.hass!.localize(
"ui.panel.config.tags.detail.name"
)}"
.label="${this.hass!.localize("ui.panel.config.tag.detail.name")}"
.errorMessage="${this.hass!.localize(
"ui.panel.config.tags.detail.required_error_msg"
"ui.panel.config.tag.detail.required_error_msg"
)}"
required
auto-validate
@@ -104,10 +102,10 @@ class DialogTagDetail extends LitElement
.configValue=${"id"}
@value-changed=${this._valueChanged}
.label=${this.hass!.localize(
"ui.panel.config.tags.detail.tag_id"
"ui.panel.config.tag.detail.tag_id"
)}
.placeholder=${this.hass!.localize(
"ui.panel.config.tags.detail.tag_id_placeholder"
"ui.panel.config.tag.detail.tag_id_placeholder"
)}
></paper-input>`
: ""}
@@ -117,14 +115,14 @@ class DialogTagDetail extends LitElement
<div>
<p>
${this.hass!.localize(
"ui.panel.config.tags.detail.usage",
"ui.panel.config.tag.detail.usage",
"companion_link",
html`<a
href="https://companion.home-assistant.io/"
target="_blank"
rel="noreferrer"
>${this.hass!.localize(
"ui.panel.config.tags.detail.companion_apps"
"ui.panel.config.tag.detail.companion_apps"
)}</a
>`
)}
@@ -151,7 +149,7 @@ class DialogTagDetail extends LitElement
@click="${this._deleteEntry}"
.disabled=${this._submitting}
>
${this.hass!.localize("ui.panel.config.tags.detail.delete")}
${this.hass!.localize("ui.panel.config.tag.detail.delete")}
</mwc-button>
`
: html``}
@@ -161,8 +159,8 @@ class DialogTagDetail extends LitElement
.disabled=${this._submitting}
>
${this._params.entry
? this.hass!.localize("ui.panel.config.tags.detail.update")
: this.hass!.localize("ui.panel.config.tags.detail.create")}
? this.hass!.localize("ui.panel.config.tag.detail.update")
: this.hass!.localize("ui.panel.config.tag.detail.create")}
</mwc-button>
${this._params.openWrite && !this._params.entry
? html` <mwc-button
@@ -171,7 +169,7 @@ class DialogTagDetail extends LitElement
.disabled=${this._submitting}
>
${this.hass!.localize(
"ui.panel.config.tags.detail.create_and_write"
"ui.panel.config.tag.detail.create_and_write"
)}
</mwc-button>`
: ""}
+16 -18
View File
@@ -74,7 +74,7 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
template: (_icon, tag) => html`<tag-image .tag=${tag}></tag-image>`,
},
display_name: {
title: this.hass.localize("ui.panel.config.tags.headers.name"),
title: this.hass.localize("ui.panel.config.tag.headers.name"),
sortable: true,
filterable: true,
grows: true,
@@ -86,16 +86,14 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
.hass=${this.hass}
.datetime=${tag.last_scanned_datetime}
></ha-relative-time>`
: this.hass.localize("ui.panel.config.tags.never_scanned")}
: this.hass.localize("ui.panel.config.tag.never_scanned")}
</div>`
: ""}`,
},
};
if (!narrow) {
columns.last_scanned_datetime = {
title: this.hass.localize(
"ui.panel.config.tags.headers.last_scanned"
),
title: this.hass.localize("ui.panel.config.tag.headers.last_scanned"),
sortable: true,
direction: "desc",
width: "20%",
@@ -105,7 +103,7 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
.hass=${this.hass}
.datetime=${last_scanned_datetime}
></ha-relative-time>`
: this.hass.localize("ui.panel.config.tags.never_scanned")}
: this.hass.localize("ui.panel.config.tag.never_scanned")}
`,
};
}
@@ -117,7 +115,7 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
.tag=${tag}
@click=${(ev: Event) =>
this._openWrite((ev.currentTarget as any).tag)}
title=${this.hass.localize("ui.panel.config.tags.write")}
title=${this.hass.localize("ui.panel.config.tag.write")}
>
<ha-svg-icon .path=${mdiContentDuplicate}></ha-svg-icon>
</mwc-icon-button>`,
@@ -130,7 +128,7 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
.tag=${tag}
@click=${(ev: Event) =>
this._createAutomation((ev.currentTarget as any).tag)}
title=${this.hass.localize("ui.panel.config.tags.create_automation")}
title=${this.hass.localize("ui.panel.config.tag.create_automation")}
>
<ha-svg-icon .path=${mdiRobot}></ha-svg-icon>
</mwc-icon-button>`,
@@ -142,7 +140,7 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
.tag=${tag}
@click=${(ev: Event) =>
this._openDialog((ev.currentTarget as any).tag)}
title=${this.hass.localize("ui.panel.config.tags.edit")}
title=${this.hass.localize("ui.panel.config.tag.edit")}
>
<ha-svg-icon .path=${mdiCog}></ha-svg-icon>
</mwc-icon-button>`,
@@ -201,7 +199,7 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
this.hass.language
)}
.data=${this._data(this._tags)}
.noDataText=${this.hass.localize("ui.panel.config.tags.no_tags")}
.noDataText=${this.hass.localize("ui.panel.config.tag.no_tags")}
hasFab
>
<mwc-icon-button slot="toolbar-icon" @click=${this._showHelp}>
@@ -209,7 +207,7 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
</mwc-icon-button>
<ha-fab
slot="fab"
.label=${this.hass.localize("ui.panel.config.tags.add_tag")}
.label=${this.hass.localize("ui.panel.config.tag.add_tag")}
extended
@click=${this._addTag}
>
@@ -221,18 +219,18 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
private _showHelp() {
showAlertDialog(this, {
title: this.hass.localize("ui.panel.config.tags.caption"),
title: this.hass.localize("ui.panel.config.tag.caption"),
text: html`
<p>
${this.hass.localize(
"ui.panel.config.tags.detail.usage",
"ui.panel.config.tag.detail.usage",
"companion_link",
html`<a
href="https://companion.home-assistant.io/"
target="_blank"
rel="noreferrer"
>${this.hass!.localize(
"ui.panel.config.tags.detail.companion_apps"
"ui.panel.config.tag.detail.companion_apps"
)}</a
>`
)}
@@ -243,7 +241,7 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
target="_blank"
rel="noreferrer"
>
${this.hass.localize("ui.panel.config.tags.learn_more")}
${this.hass.localize("ui.panel.config.tag.learn_more")}
</a>
</p>
`,
@@ -264,7 +262,7 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
private _createAutomation(tag: Tag) {
const data = {
alias: this.hass.localize(
"ui.panel.config.tags.automation_title",
"ui.panel.config.tag.automation_title",
"name",
tag.name || tag.id
),
@@ -312,9 +310,9 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
private async _removeTag(selectedTag: Tag) {
if (
!(await showConfirmationDialog(this, {
title: this.hass!.localize("ui.panel.config.tags.confirm_remove_title"),
title: this.hass!.localize("ui.panel.config.tag.confirm_remove_title"),
text: this.hass.localize(
"ui.panel.config.tags.confirm_remove",
"ui.panel.config.tag.confirm_remove",
"tag",
selectedTag.name || selectedTag.id
),
@@ -86,10 +86,15 @@ class HaPanelDevService extends LitElement {
</p>
${this._yamlMode
? html`<ha-yaml-editor
.defaultValue=${this._serviceData}
@value-changed=${this._yamlChanged}
></ha-yaml-editor>`
? html`<ha-service-picker
.hass=${this.hass}
.value=${this._serviceData?.service}
@value-changed=${this._serviceChanged}
></ha-service-picker>
<ha-yaml-editor
.defaultValue=${this._serviceData}
@value-changed=${this._yamlChanged}
></ha-yaml-editor>`
: html`<ha-card
><div>
<ha-service-control
@@ -97,7 +102,7 @@ class HaPanelDevService extends LitElement {
.value=${this._serviceData}
.narrow=${this.narrow}
showAdvanced
@value-changed=${this._serviceChanged}
@value-changed=${this._serviceDataChanged}
></ha-service-control></div
></ha-card>`}
</div>
@@ -266,11 +271,17 @@ class HaPanelDevService extends LitElement {
if (!ev.detail.isValid) {
return;
}
this._serviceChanged(ev);
this._serviceDataChanged(ev);
}
private _serviceDataChanged(ev) {
this._serviceData = ev.detail.value;
}
private _serviceChanged(ev) {
this._serviceData = ev.detail.value;
ev.stopPropagation();
this._serviceData = { service: ev.detail.value || "", data: {} };
this._yamlEditor?.setValue(this._serviceData);
}
private _fillExampleData() {
+1 -1
View File
@@ -257,7 +257,7 @@ class LovelacePanel extends LitElement {
}
}
this._state = "loaded";
this._state = this._state === "yaml-editor" ? this._state : "loaded";
this._setLovelaceConfig(conf, confMode);
}
+36 -3
View File
@@ -1,3 +1,4 @@
import { undoDepth } from "@codemirror/history";
import "@material/mwc-button";
import "@polymer/app-layout/app-header/app-header";
import "@polymer/app-layout/app-toolbar/app-toolbar";
@@ -10,11 +11,13 @@ import {
internalProperty,
LitElement,
property,
PropertyValues,
TemplateResult,
} from "lit-element";
import { classMap } from "lit-html/directives/class-map";
import { array, assert, object, optional, string, type } from "superstruct";
import { computeRTL } from "../../common/util/compute_rtl";
import { deepEqual } from "../../common/util/deep-equal";
import "../../components/ha-circular-progress";
import "../../components/ha-code-editor";
import type { HaCodeEditor } from "../../components/ha-code-editor";
@@ -28,6 +31,7 @@ import {
import "../../layouts/ha-app-layout";
import { haStyle } from "../../resources/styles";
import type { HomeAssistant } from "../../types";
import { showToast } from "../../util/toast";
import type { Lovelace } from "./types";
const lovelaceStruct = type({
@@ -100,10 +104,37 @@ class LovelaceFullConfigEditor extends LitElement {
`;
}
protected firstUpdated() {
protected firstUpdated(changedProps: PropertyValues) {
super.firstUpdated(changedProps);
this.yamlEditor.value = safeDump(this.lovelace!.config);
}
protected updated(changedProps: PropertyValues) {
const oldLovelace = changedProps.get("lovelace") as Lovelace | undefined;
if (
oldLovelace &&
this.lovelace &&
oldLovelace.config !== this.lovelace.config &&
!deepEqual(oldLovelace.config, this.lovelace.config)
) {
showToast(this, {
message: this.hass!.localize(
"ui.panel.lovelace.editor.raw_editor.lovelace_changed"
),
action: {
action: () => {
this.yamlEditor.value = safeDump(this.lovelace!.config);
},
text: this.hass!.localize(
"ui.panel.lovelace.editor.raw_editor.reload"
),
},
duration: 0,
dismissable: false,
});
}
}
static get styles(): CSSResult[] {
return [
haStyle,
@@ -148,11 +179,13 @@ class LovelaceFullConfigEditor extends LitElement {
}
private _yamlChanged() {
this._changed = true;
if (!window.onbeforeunload) {
this._changed = undoDepth(this.yamlEditor.codemirror!.state) > 0;
if (this._changed && !window.onbeforeunload) {
window.onbeforeunload = () => {
return true;
};
} else if (!this._changed && window.onbeforeunload) {
window.onbeforeunload = null;
}
}
@@ -41,7 +41,7 @@ class HuiSectionRow extends LitElement implements LovelaceRow {
static get styles(): CSSResult {
return css`
.label {
color: var(--primary-text-color);
color: var(--section-header-text-color, var(--primary-text-color));
margin-left: 8px;
margin-bottom: 8px;
margin-top: 16px;
+78 -4
View File
@@ -1,36 +1,108 @@
import { HighlightStyle, tags } from "@codemirror/highlight";
import { EditorView as CMEditorView } from "@codemirror/view";
import { EditorView as CMEditorView, KeyBinding } from "@codemirror/view";
import { StreamLanguage } from "@codemirror/stream-parser";
import { jinja2 } from "@codemirror/legacy-modes/mode/jinja2";
import { yaml } from "@codemirror/legacy-modes/mode/yaml";
import { indentLess, indentMore } from "@codemirror/commands";
export { keymap } from "@codemirror/view";
export { CMEditorView as EditorView };
export { EditorState, Prec, tagExtension } from "@codemirror/state";
export { defaultKeymap, defaultTabBinding } from "@codemirror/commands";
export { defaultKeymap } from "@codemirror/commands";
export { lineNumbers } from "@codemirror/gutter";
export { searchKeymap, highlightSelectionMatches } from "@codemirror/search";
export { history, historyKeymap } from "@codemirror/history";
export const langs = {
jinja2: StreamLanguage.define(jinja2),
yaml: StreamLanguage.define(yaml),
};
export const tabKeyBindings: KeyBinding[] = [
{ key: "Tab", run: indentMore },
{
key: "Shift-Tab",
run: indentLess,
},
];
export const theme = CMEditorView.theme({
$: {
color: "var(--primary-text-color)",
backgroundColor:
"var(--code-editor-background-color, var(--card-background-color))",
"& ::selection": { backgroundColor: "rgba(var(--rgb-primary-color), 0.2)" },
"& ::selection": { backgroundColor: "rgba(var(--rgb-primary-color), 0.3)" },
height: "var(--code-mirror-height, auto)",
},
$scroller: { outline: "none" },
$content: { caretColor: "var(--secondary-text-color)" },
$$focused: { outline: "none" },
"$$focused $cursor": { borderLeftColor: "#var(--secondary-text-color)" },
"$$focused $selectionBackground, $selectionBackground": {
backgroundColor: "rgba(var(--rgb-primary-color), 0.2)",
backgroundColor: "rgba(var(--rgb-primary-color), 0.3)",
},
$panels: {
backgroundColor: "var(--primary-background-color)",
color: "var(--primary-text-color)",
},
"$panels.top": { borderBottom: "1px solid var(--divider-color)" },
"$panels.bottom": { borderTop: "1px solid var(--divider-color)" },
"$panel.search input": { margin: "4px 4px 0" },
$button: {
border: "1px solid var(--primary-color)",
padding: "0px 16px",
textTransform: "uppercase",
margin: "4px",
background: "none",
color: "var(--primary-color)",
fontFamily:
"var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif))",
fontSize: "var(--mdc-typography-button-font-size, 0.875rem)",
height: "36px",
fontWeight: "var(--mdc-typography-button-font-weight, 500)",
borderRadius: "4px",
letterSpacing: "var(--mdc-typography-button-letter-spacing, 0.0892857em)",
},
$textfield: {
padding: "4px 0px 5px",
borderRadius: "0",
fontSize: "16px",
color: "var(--primary-text-color)",
border: "0",
background: "none",
fontFamily: "Roboto",
borderBottom:
"1px solid var(--paper-input-container-color, var(--secondary-text-color))",
margin: "4px 4px 0",
"& ::placeholder": {
color: "var(--paper-input-container-color, var(--secondary-text-color))",
},
"&:focus": {
outline: "none",
borderBottom: "2px solid var(--primary-color)",
paddingBottom: "4px",
},
},
$selectionMatch: {
backgroundColor: "rgba(var(--rgb-primary-color), 0.1)",
},
$searchMatch: {
backgroundColor: "rgba(var(--rgb-accent-color), .2)",
outline: "1px solid rgba(var(--rgb-accent-color), .4)",
},
"$searchMatch.selected": {
backgroundColor: "rgba(var(--rgb-accent-color), .4)",
outline: "1px solid var(--accent-color)",
},
$gutters: {
@@ -40,10 +112,12 @@ export const theme = CMEditorView.theme({
border: "none",
borderRight:
"1px solid var(--paper-input-container-color, var(--secondary-text-color))",
paddingRight: "1px",
},
"$$focused $gutters": {
borderRight:
"2px solid var(--paper-input-container-focus-color, var(--primary-color))",
paddingRight: "0",
},
"$gutterElementags.lineNumber": { color: "inherit" },
});
+12 -6
View File
@@ -311,6 +311,8 @@
"was_disconnected": "was disconnected",
"was_opened": "was opened",
"was_closed": "was closed",
"is_opening": "is opening",
"is_closing": "is closing",
"was_unlocked": "was unlocked",
"was_locked": "was locked",
"was_plugged_in": "was plugged in",
@@ -556,7 +558,7 @@
"areas": "[%key:ui::panel::config::areas::caption%]",
"scene": "[%key:ui::panel::config::scene::caption%]",
"helpers": "[%key:ui::panel::config::helpers::caption%]",
"tags": "[%key:ui::panel::config::tags::caption%]",
"tag": "[%key:ui::panel::config::tag::caption%]",
"person": "[%key:ui::panel::config::person::caption%]",
"devices": "[%key:ui::panel::config::devices::caption%]",
"entities": "[%key:ui::panel::config::entities::caption%]",
@@ -598,8 +600,8 @@
"last_changed": "Last changed",
"last_updated": "Last updated",
"script": {
"last_action": "Last Action",
"last_triggered": "Last Triggered"
"last_action": "Last action",
"last_triggered": "Last triggered"
},
"sun": {
"elevation": "Elevation",
@@ -743,7 +745,8 @@
"remove": "Remove Device",
"clusters": "Manage Clusters",
"reconfigure": "Reconfigure Device",
"zigbee_information": "Zigbee device signature"
"zigbee_information": "Zigbee device signature",
"view_in_visualization": "View in Visualization"
},
"services": {
"reconfigure": "Reconfigure ZHA device (heal device). Use this if you are having issues with the device. If the device in question is a battery powered device please ensure it is awake and accepting commands when you use this service.",
@@ -883,7 +886,7 @@
"confirmation_text": "All devices in this area will become unassigned."
}
},
"tags": {
"tag": {
"caption": "Tags",
"description": "Trigger automations when a NFC tag, QR code, etc. is scanned",
"learn_more": "Learn more about tags",
@@ -2363,7 +2366,8 @@
"header": "Network Visualization",
"caption": "Visualization",
"highlight_label": "Highlight Devices",
"zoom_label": "Zoom To Device"
"zoom_label": "Zoom To Device",
"refresh_topology": "Refresh Topology"
},
"group_binding": {
"header": "Group Binding",
@@ -2650,6 +2654,8 @@
"save": "Save",
"unsaved_changes": "Unsaved changes",
"saved": "Saved",
"reload": "Reload",
"lovelace_changed": "The Lovelace config was updated, do you want to load the updated config in the editor and lose your current changes?",
"confirm_remove_config_title": "Are you sure you want to remove your Lovelace UI configuration?",
"confirm_remove_config_text": "We will automatically generate your Lovelace UI views with your areas and devices if you remove your Lovelace UI configuration.",
"confirm_unsaved_changes": "You have unsaved changes, are you sure you want to exit?",
+1 -1
View File
@@ -1578,7 +1578,7 @@
}
}
},
"tags": {
"tag": {
"description": "Задействайте автоматизации при сканиране на NFC етикет, QR код и др",
"detail": {
"create": "Създаване",
+46 -9
View File
@@ -120,7 +120,7 @@
},
"automation": {
"last_triggered": "Última execució",
"trigger": "Executar"
"trigger": "Executar accions"
},
"camera": {
"not_available": "Imatge no disponible"
@@ -200,7 +200,8 @@
},
"script": {
"cancel": "Cancel·la",
"cancel_multiple": "Cancel·la {number}"
"cancel_multiple": "Cancel·la {number}",
"run": "Executa"
},
"service": {
"run": "Executa"
@@ -295,6 +296,19 @@
"yes": "Sí"
},
"components": {
"addon-picker": {
"addon": "Complement",
"error": {
"fetch_addons": {
"description": "L'obtenció dels complements ha retornat un error.",
"title": "S'ha produït un error en l'obtenció dels complements"
},
"no_supervisor": {
"description": "No s'ha trobat cap Supervisor, per tant, no es poden carregar complements.",
"title": "Sense Supervisor"
}
}
},
"area-picker": {
"add_dialog": {
"add": "Afegeix",
@@ -682,6 +696,7 @@
"scene": "Escenes",
"script": "Programació (scripts)",
"server_control": "Controls del servidor",
"tag": "Etiquetes",
"tags": "Etiquetes",
"users": "Usuaris",
"zone": "Zones"
@@ -950,7 +965,7 @@
"delete_confirm": "Segur que vols eliminar-ho?",
"duplicate": "Duplica",
"header": "Condicions",
"introduction": "Les condicions són opcionals i impedeixen que continui l'execució mentre totes elles no es satisfacin.",
"introduction": "Les condicions són opcionals i impedeixen que s'executi l'automatització tret de que totes elles se satisfacin.",
"learn_more": "Més informació sobre les condicions",
"name": "Condició",
"type_select": "Tipus de condició",
@@ -1485,6 +1500,7 @@
"cant_edit": "Només pots editar els elements creats a la interfície d'usuari (UI).",
"caption": "Dispositius",
"confirm_delete": "Estàs segur que vols eliminar aquest dispositiu?",
"confirm_disable_config_entry": "No hi ha més dispositius per a l'entrada de configuració {entry_name}. En comptes, vols desactivar l'entrada de configuració?",
"confirm_rename_entity_ids": "Vols, també, canviar el nom dels ID's de les entitats?",
"confirm_rename_entity_ids_warning": "Això no canviarà cap configuració (com automatitzacions, scripts, escenes, panells) que estigui utilitzant aquestes entitats. Les hauràs d'actualitzar tu mateix per utilitzar els nous identificadors.",
"data_table": {
@@ -1597,7 +1613,8 @@
},
"filtering": {
"clear": "Esborra",
"filtering_by": "Filtratge per"
"filtering_by": "Filtratge per",
"show": "Mostra"
},
"header": "Configuració de Home Assistant",
"helpers": {
@@ -1668,7 +1685,19 @@
"delete_confirm": "Estàs segur que vols eliminar aquesta integració?",
"device_unavailable": "Dispositiu no disponible",
"devices": "{count} {count, plural,\n one {dispositiu}\n other {dispositius}\n}",
"disable_restart_confirm": "Reinicia Home Assistant per acabar de desactivar aquesta integració",
"disable": {
"disable_confirm": "Estàs segur que vols desactivar aquesta entrada de configuració? Els seus dispositius i entitats es desactivaran.",
"disabled": "Desactivada",
"disabled_by": {
"device": "dispositiu",
"integration": "integració",
"user": "usuari"
},
"disabled_cause": "Desactivada per {cause}"
},
"documentation": "Documentació",
"enable_restart_confirm": "Reinicia Home Assistant per acabar d'activar aquesta integració",
"entities": "{count} {count, plural,\n one {entitat}\n other {entitats}\n}",
"entity_unavailable": "Entitat no disponible",
"firmware": "Firmware: {version}",
@@ -1711,6 +1740,11 @@
"confirm_new": "Vols configurar {integration}?",
"description": "Gestiona les integracions amb serveis, dispositius, ...",
"details": "Detalls de la integració",
"disable": {
"disabled_integrations": "{number} desactivada/es",
"hide_disabled": "Amaga integracions desactivades",
"show_disabled": "Mostra integracions desactivades"
},
"discovered": "Descobertes",
"home_assistant_website": "lloc web de Home Assistant",
"ignore": {
@@ -2047,7 +2081,7 @@
"id": "ID de l'entitat",
"id_already_exists": "Aquest ID ja existeix",
"id_already_exists_save_error": "No pots desar aquest script perquè l'ID no és únic, tria'n un altre o deixa-ho en blanc perquè se'n generi un automàticament.",
"introduction": "Utilitza els scripts per executar seqüències d'accions.",
"introduction": "Utilitza els scripts per executar una seqüència d'accions.",
"link_available_actions": "Més informació sobre les accions disponibles.",
"load_error_not_editable": "Només es poden editar els scripts del fitxer scripts.yaml.",
"max": {
@@ -2139,7 +2173,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Afegeix etiqueta",
"automation_title": "S'escanegi l'etiqueta {name}",
"caption": "Etiquetes",
@@ -2536,6 +2570,7 @@
"states": {
"alert_entity_field": "L'entitat és un camp obligatori",
"attributes": "Atributs",
"copy_id": "Copia l'identificador al porta-retalls",
"current_entities": "Entitats actuals",
"description1": "Defineix la representació d'un dispositiu a Home Assistant.",
"description2": "No hi haurà cap comunicació amb el dispositiu real.",
@@ -2594,11 +2629,11 @@
},
"cards": {
"actions": {
"action_confirmation": "Estàs segur que vols exectuar l'acció \"{action}\"?",
"action_confirmation": "Estàs segur que vols executar l'acció \"{action}\"?",
"no_entity_more_info": "No s'ha proporcionat cap entitat per mostrar el diàleg de més informació",
"no_entity_toggle": "No s'ha proporcionat cap entitat a commutar",
"no_navigation_path": "No s'ha especificat cap ruta de navegació",
"no_service": "No s'ha especificat cap servei per a l'execució",
"no_service": "No s'ha especificat cap servei a executar",
"no_url": "No s'ha especificat cap URL per obrir"
},
"confirm_delete": "Estàs segur que vols eliminar aquesta targeta?",
@@ -2969,7 +3004,7 @@
"confirm_remove_config_text": "Si elimines la configuració de la interfície d'usuari Lovelace es generaran automàticament les visualitzacions de Lovelace amb les teves àrees i dispositius.",
"confirm_remove_config_title": "Estàs segur que vols eliminar la configuració de la interfície d'usuari Lovelace?",
"confirm_unsaved_changes": "Hi han canvis no desats. Segur que vols sortir?",
"confirm_unsaved_comments": "La configuració conté comentaris que es descartaran. Vols continuar?",
"confirm_unsaved_comments": "La configuració pot contenir comentaris que no es desaran. Vols continuar?",
"error_invalid_config": "La configuració no és vàlida: {error}",
"error_parse_yaml": "No es pot analitzar YAML: {error}",
"error_remove": "No s'ha pogut eliminar la configuració: {error}",
@@ -3062,8 +3097,10 @@
},
"my": {
"component_not_loaded": "La instància de Home Assistant no admet aquesta redirecció. Necessites la integració {integration} per poder fer aquesta redirecció.",
"documentation": "documentació",
"error": "S'ha produït un error desconegut",
"faq_link": "Preguntes freqüents de Home Assistant",
"no_supervisor": "La teva instal·lació de Home Assistant no admet aquesta redirecció. Necessites tenir instal·lat o bé el Sistema Operatiu Home Assistant o Home Assistant Supervisat. Per a més informació, consulta {docs_link}.",
"not_supported": "La instància de Home Assistant no admet aquesta redirecció. Consulta {link} per veure les redireccions compatibles i en quina versió es van introduir."
},
"page-authorize": {
+58 -7
View File
@@ -120,7 +120,7 @@
},
"automation": {
"last_triggered": "Naposledy spuštěno",
"trigger": "Spustit"
"trigger": "Spustit akce"
},
"camera": {
"not_available": "Obrázek není k dispozici"
@@ -200,7 +200,8 @@
},
"script": {
"cancel": "Zrušit",
"cancel_multiple": "Zrušit {number}"
"cancel_multiple": "Zrušit {number}",
"run": "Spustit"
},
"service": {
"run": "Spustit"
@@ -295,6 +296,19 @@
"yes": "Ano"
},
"components": {
"addon-picker": {
"addon": "Doplněk",
"error": {
"fetch_addons": {
"description": "Načítání doplňků skončilo chybou.",
"title": "Chyba při načítání doplňků"
},
"no_supervisor": {
"description": "Nebyl nalezen žádný Supervisor, takže doplňky nelze načíst.",
"title": "Žádný Supervisor"
}
}
},
"area-picker": {
"add_dialog": {
"add": "Přidat",
@@ -468,7 +482,10 @@
}
},
"service-control": {
"service_data": "Data služby"
"required": "Toto pole je povinné",
"service_data": "Data služby",
"target": "Cíle",
"target_description": "Co by tato služba měla používat jako cílové oblasti, zařízení nebo entity."
},
"service-picker": {
"service": "Služba"
@@ -478,7 +495,7 @@
"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í.",
"expand_device_id": "Rozdělit toto zařízení na jednotlivé entity, které obsahuje. 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"
@@ -679,6 +696,7 @@
"scene": "Scény",
"script": "Skripty",
"server_control": "Ovládání serveru",
"tag": "Štítky",
"tags": "Štítky",
"users": "Uživatelé",
"zone": "Zóny"
@@ -1482,6 +1500,7 @@
"cant_edit": "Můžete upravovat pouze položky, které jsou vytvořeny v uživatelském rozhraní.",
"caption": "Zařízení",
"confirm_delete": "Opravdu chcete toto zařízení odstranit?",
"confirm_disable_config_entry": "Pro položku konfigurace {entry_name} nejsou k dispozici žádná další zařízení, chcete položku konfigurace místo toho zakázat?",
"confirm_rename_entity_ids": "Chcete také přejmenovat 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": {
@@ -1594,7 +1613,8 @@
},
"filtering": {
"clear": "Vymazat",
"filtering_by": "Filtrování podle"
"filtering_by": "Filtrování podle",
"show": "Zobrazit"
},
"header": "Nastavení Home Assistant",
"helpers": {
@@ -1665,7 +1685,19 @@
"delete_confirm": "Opravdu chcete odstranit tuto integraci?",
"device_unavailable": "Zařízení není dostupné",
"devices": "{count} {count, plural,\n one {zařízení}\n other {zařízení}\n}",
"disable_restart_confirm": "Restartujte Home Assistant pro dokončení odstranění této integrace",
"disable": {
"disable_confirm": "Opravdu chcete zakázat tuto položku konfigurace? Její zařízení a entity budou zakázány.",
"disabled": "Zakázáno",
"disabled_by": {
"device": "zařízením",
"integration": "integrací",
"user": "uživatelem"
},
"disabled_cause": "Zakázáno {cause}"
},
"documentation": "Dokumentace",
"enable_restart_confirm": "Restartujte Home Assistant pro dokončení přidání této integrace",
"entities": "{count} {count, plural,\n one {entita}\n other {entit}\n}",
"entity_unavailable": "Entita není dostupná",
"firmware": "Firmware: {version}",
@@ -1685,8 +1717,10 @@
"config_flow": {
"aborted": "Přerušeno",
"close": "Zavřít",
"could_not_load": "Konfiguraci nelze načíst",
"created_config": "Bylo vytvořeno nastavení pro {name}.",
"dismiss": "Zavřít dialog",
"error": "Chyba",
"error_saving_area": "Chyba při ukládání oblasti: {error}",
"external_step": {
"description": "K dokončení tohoto kroku je nutné navštívit externí webovou stránku.",
@@ -1695,6 +1729,10 @@
"finish": "Dokončit",
"loading_first_time": "Počkejte prosím, než bude integrace nainstalována.",
"not_all_required_fields": "Nejsou vyplněna všechna povinná pole.",
"pick_flow_step": {
"new_flow": "Ne, nastavit další instanci integrace {integration}",
"title": "Objevili jsme tyto integrace, chcete je nastavit?"
},
"submit": "Odeslat"
},
"configure": "Nastavit",
@@ -1702,6 +1740,11 @@
"confirm_new": "Chcete nastavit {integration}?",
"description": "Správa integrací a jejich služeb, zařízení, ...",
"details": "Podrobnosti o integraci",
"disable": {
"disabled_integrations": "{number} zakázáno",
"hide_disabled": "Skrýt zakázané integrace",
"show_disabled": "Zobrazit zakázané integrace"
},
"discovered": "Objeveno",
"home_assistant_website": "stránky Home Assistant",
"ignore": {
@@ -2130,7 +2173,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Přidat štítek",
"automation_title": "Štítek {name} je naskenován",
"caption": "Štítky",
@@ -2511,17 +2554,23 @@
"type": "Typ události"
},
"services": {
"accepts_target": "Tato služba přijímá cíl, například: `entity_id: light.bed_light`",
"all_parameters": "Všechny dostupné parametry",
"call_service": "Zavolat službu",
"column_description": "Popis",
"column_example": "Příklad",
"column_parameter": "Parametr",
"description": "Vývojářský nástroj pro služby umožňuje zavolat jakoukoli dostupnou službu v Home Assistant",
"fill_example_data": "Vyplnit ukázková data",
"title": "Služby"
"title": "Služby",
"ui_mode": "Přejít do režimu uživatelského rozhraní",
"yaml_mode": "Přejít do režimu YAML",
"yaml_parameters": "Parametry jsou dostupné pouze v režimu YAML"
},
"states": {
"alert_entity_field": "Entita je povinné pole",
"attributes": "Atributy",
"copy_id": "Zkopírovat ID do schránky",
"current_entities": "Současné entity",
"description1": "Nastavte stav zařízení v Home Assistant.",
"description2": "Stav skutečného zařízení se nezmění.",
@@ -3048,8 +3097,10 @@
},
"my": {
"component_not_loaded": "Toto přesměrování není vaší instancí Home Assistant podporováno. Potřebujete integraci \"{integration}\", aby šlo použít toto přesměrování.",
"documentation": "dokumentace",
"error": "Nastala neznámá chyba",
"faq_link": "Časté dotazy týkající se My Home Assistant",
"no_supervisor": "Toto přesměrování není podporováno vaší instalací Home Assistant. Potřebuje buď operační systém Home Assistant, nebo metodu instalace Home Assistant Supervised. Další informace naleznete na {docs_link}.",
"not_supported": "Toto přesměrování není vaší instancí Home Assistant podporováno. Zkontrolujte {link} pro podporovaná přesměrování a verzi, ve které byla zavedena."
},
"page-authorize": {
+1 -1
View File
@@ -806,7 +806,7 @@
}
}
},
"tags": {
"tag": {
"detail": {
"companion_apps": "apiau cydymaith",
"usage": "Gall tag sbarduno awtomeiddiad wrth ei sganio, gallwch ddefnyddio tagiau NFC, codau QR neu unrhyw fath arall o dag. Defnyddiwch ein {companion_link} i ysgrifennu'r tag hwn i dag NFC rhaglenadwy neu i greu cod QR isod."
+1 -1
View File
@@ -2089,7 +2089,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Tilføj tag",
"automation_title": "Tag {name} blev scannet",
"caption": "Tags",
+63 -5
View File
@@ -200,7 +200,8 @@
},
"script": {
"cancel": "Abbrechen",
"cancel_multiple": "Abbrechen {number}"
"cancel_multiple": "Abbrechen {number}",
"run": "Ausführen"
},
"service": {
"run": "Ausführen"
@@ -295,6 +296,19 @@
"yes": "Ja"
},
"components": {
"addon-picker": {
"addon": "Add-on",
"error": {
"fetch_addons": {
"description": "Das Abrufen von Add-ons hat einen Fehler zurückgegeben.",
"title": "Fehler beim Abrufen der Add-ons"
},
"no_supervisor": {
"description": "Kein Supervisor gefunden, daher konnten Add-ons nicht geladen werden.",
"title": "Kein Supervisor"
}
}
},
"area-picker": {
"add_dialog": {
"add": "Hinzufügen",
@@ -467,6 +481,12 @@
"week": "Vor {count} {count, plural,\n one {Woche}\n other {Wochen}\n}"
}
},
"service-control": {
"required": "Dieses Feld ist erforderlich",
"service_data": "Dienstdaten",
"target": "Ziele",
"target_description": "Was dieser Dienst als Bereiche, Geräte oder Entitäten verwenden soll."
},
"service-picker": {
"service": "Dienst"
},
@@ -676,6 +696,7 @@
"scene": "Szenen",
"script": "Skripte",
"server_control": "Serversteuerung",
"tag": "NFC Tags",
"tags": "Tags",
"users": "Benutzer",
"zone": "Zonen"
@@ -890,7 +911,8 @@
},
"event": {
"event": "Ereignis:",
"label": "Ereignis auslösen"
"label": "Ereignis auslösen",
"service_data": "Dienstdaten"
},
"repeat": {
"label": "Wiederholen",
@@ -1478,6 +1500,7 @@
"cant_edit": "Du kannst nur Elemente bearbeiten, die in der Benutzeroberfläche erstellt wurden.",
"caption": "Geräte",
"confirm_delete": "Möchtest du dieses Gerät wirklich löschen?",
"confirm_disable_config_entry": "Es gibt keine Geräte mehr für den Konfigurationseintrag {entry_name}. Möchtest du stattdessen den Konfigurationseintrag deaktivieren?",
"confirm_rename_entity_ids": "Möchten Sie auch die Entitäts-IDs Ihrer Entitäten umbenennen?",
"confirm_rename_entity_ids_warning": "Dies ändert keine Konfiguration (wie Automatisierungen, Skripte, Szenen, Dashboards), die derzeit diese Entitäten verwendet! Du musst sie selbst aktualisieren, um die neuen Entitäts-IDs zu verwenden!",
"data_table": {
@@ -1590,7 +1613,8 @@
},
"filtering": {
"clear": "Leeren",
"filtering_by": "Filtern nach"
"filtering_by": "Filtern nach",
"show": "Anzeigen"
},
"header": "Home Assistant konfigurieren",
"helpers": {
@@ -1661,7 +1685,19 @@
"delete_confirm": "Möchtest du diese Integration wirklich löschen?",
"device_unavailable": "Gerät nicht verfügbar",
"devices": "{count} {count, plural,\n one {Gerät}\n other {Geräte}\n}",
"disable_restart_confirm": "Home Assistant neu starten, um das Deaktivieren dieser Integration abzuschließen",
"disable": {
"disable_confirm": "Möchtest du diesen Konfigurationseintrag wirklich deaktivieren? Die Geräte und Entitäten werden deaktiviert.",
"disabled": "Deaktiviert",
"disabled_by": {
"device": "Gerät",
"integration": "Integration",
"user": "Benutzer"
},
"disabled_cause": "Deaktiviert durch {cause}."
},
"documentation": "Dokumentation",
"enable_restart_confirm": "Home Assistant neu starten, um das Aktivieren dieser Integration abzuschließen",
"entities": "{count} {count, plural,\none {Entität}\nother {Entitäten}\n}",
"entity_unavailable": "Entität nicht verfügbar",
"firmware": "Firmware: {version}",
@@ -1681,8 +1717,10 @@
"config_flow": {
"aborted": "Abgebrochen",
"close": "Schließen",
"could_not_load": "Der Konfigurationsfluss konnte nicht geladen werden",
"created_config": "Erstellte Konfiguration für {name}.",
"dismiss": "Dialog schließen",
"error": "Fehler",
"error_saving_area": "Fehler beim Speichern des Bereichs: {error}",
"external_step": {
"description": "Für diesen Schritt müssen Sie eine externe Website besuchen, um den Vorgang abzuschließen.",
@@ -1691,6 +1729,10 @@
"finish": "Fertig",
"loading_first_time": "Bitte warten, während die Integration installiert wird",
"not_all_required_fields": "Nicht alle Pflichtfelder sind ausgefüllt.",
"pick_flow_step": {
"new_flow": "Nein, richte eine andere Instanz von {integration} ein",
"title": "Wir haben diese entdeckt, willst du sie einrichten?"
},
"submit": "Absenden"
},
"configure": "Konfigurieren",
@@ -1698,6 +1740,11 @@
"confirm_new": "Möchtest du {integration} einrichten?",
"description": "Integrationen zu Diensten, Geräten, usw. verwalten",
"details": "Details zur Integration",
"disable": {
"disabled_integrations": "{number} deaktiviert",
"hide_disabled": "Deaktivierte Integrationen ausblenden",
"show_disabled": "Deaktivierte Integrationen anzeigen"
},
"discovered": "Entdeckt",
"home_assistant_website": "Home Assistant Website",
"ignore": {
@@ -2126,7 +2173,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Tag hinzufügen",
"automation_title": "NFC Tag {name} ist gescannt",
"caption": "NFC Tags",
@@ -2331,6 +2378,7 @@
"common": {
"add_node": "Knoten hinzufügen",
"close": "Schließen",
"home_id": "Heim-ID",
"network": "Netzwerk",
"node_id": "Knoten-ID",
"remove_node": "Node entfernen"
@@ -2344,6 +2392,7 @@
"dump_not_ready_text": "Wenn du einen Export erstellst, während nicht alle Knoten bereit sind, können benötigte Daten fehlen. Gib deinem Netzwerk etwas Zeit, um alle Knoten abzufragen. Möchtest du mit dem Dump fortfahren?",
"dump_not_ready_title": "Es sind noch nicht alle Knoten bereit",
"header": "Verwalte dein Z-Wave-Netzwerk",
"home_id": "Heim-ID",
"introduction": "Verwalte dein Z-Wave-Netzwerk und Z-Wave-Knoten",
"nodes_ready": "Knoten bereit",
"server_version": "Serverversion"
@@ -2495,17 +2544,23 @@
"type": "Ereignistyp"
},
"services": {
"accepts_target": "Dieser Dienst akzeptiert ein Ziel, zum Beispiel: \"entity_id: light.bed_light\"",
"all_parameters": "Alle verfügbare Parameter",
"call_service": "Dienst ausführen",
"column_description": "Beschreibung",
"column_example": "Beispiel",
"column_parameter": "Parameter",
"description": "Mit dem Dienstentwicklungstool kannst du jeden verfügbaren Dienst in Home Assistant aufrufen.",
"fill_example_data": "Mit Beispieldaten füllen",
"title": "Dienste"
"title": "Dienste",
"ui_mode": "Zum UI Modus",
"yaml_mode": "Zum YAML Modus",
"yaml_parameters": "Parameter nur im YAML Modus verfügbar"
},
"states": {
"alert_entity_field": "Die Entität ist ein Pflichtfeld",
"attributes": "Attribute",
"copy_id": "ID in die Zwischenablage kopieren",
"current_entities": "Aktuelle Entitäten",
"description1": "Stelle die Darstellung eines Geräts in Home Assistant ein.",
"description2": "Dies führt nicht zur Kommunikation mit dem eigentlichen Gerät.",
@@ -3031,8 +3086,11 @@
"playback_title": "Nachrichtenwiedergabe"
},
"my": {
"component_not_loaded": "Diese Weiterleitung wird von deiner Home Assistant-Instanz nicht unterstützt. Du benötigst die Integration {integration}, um diese Weiterleitung zu verwenden.",
"documentation": "Dokumentation",
"error": "Ein unbekannter Fehler ist aufgetreten.",
"faq_link": "Meine Home Assistant FAQ",
"no_supervisor": "Diese Weiterleitung wird von deiner Home Assistant-Installation nicht unterstützt. Benötigt entweder das Home Assistant-Betriebssystem oder die Home Assistant Supervised-Installationsmethode. Weitere Informationen finden Sie unter {docs_link}.",
"not_supported": "Diese Weiterleitung wird von deiner Home Assistant-Instanz nicht unterstützt. Überprüfe den {link} auf die unterstützten Weiterleitungen und die Version, in der sie eingeführt wurden."
},
"page-authorize": {
+40 -3
View File
@@ -200,7 +200,8 @@
},
"script": {
"cancel": "Ακύρωση",
"cancel_multiple": "Ακύρωση {number}"
"cancel_multiple": "Ακύρωση {number}",
"run": "Εκτέλεση"
},
"service": {
"run": "Εκτέλεση"
@@ -295,6 +296,19 @@
"yes": "Ναι"
},
"components": {
"addon-picker": {
"addon": "Πρόσθετο",
"error": {
"fetch_addons": {
"description": "Σφάλμα κατά την ανάκτηση των προσθέτων",
"title": "Σφάλμα κατά την ανάκτηση των προσθέτων"
},
"no_supervisor": {
"description": "Δεν βρέθηκε επόπτης, επομένως δεν ήταν δυνατή η φόρτωση των προσθέτων.",
"title": "Χωρίς επόπτη"
}
}
},
"area-picker": {
"add_dialog": {
"add": "Προσθήκη",
@@ -682,6 +696,7 @@
"scene": "Σκηνές",
"script": "Scripts",
"server_control": "Στοιχεία ελέγχου Server",
"tag": "Ετικέτες",
"tags": "Ετικέτες",
"users": "Χρήστες",
"zone": "Ζώνες"
@@ -1485,6 +1500,7 @@
"cant_edit": "Μπορείτε να επεξεργαστείτε μόνο στοιχεία που έχουν δημιουργηθεί στο UI.",
"caption": "Συσκευές",
"confirm_delete": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη συσκευή;",
"confirm_disable_config_entry": "Δεν υπάρχουν άλλες συσκευές για την καταχώριση {entry_name} , θέλετε να απενεργοποιήσετε την καταχώριση {entry_name} ;",
"confirm_rename_entity_ids": "Θέλετε επίσης να μετονομάσετε τα αναγνωριστικά των οντοτήτων σας;",
"confirm_rename_entity_ids_warning": "Αυτό δεν θα αλλάξει καμία διαμόρφωση (όπως αυτοματισμοί, σενάρια, σκηνές, πίνακες ελέγχου) που χρησιμοποιεί αυτήν τη στιγμή αυτές τις οντότητες! Θα πρέπει να τα ενημερώσετε μόνοι σας για να χρησιμοποιήσετε τα νέα αναγνωριστικά οντοτήτων!",
"data_table": {
@@ -1597,7 +1613,8 @@
},
"filtering": {
"clear": "Εκκαθάριση",
"filtering_by": "Φιλτράρισμα κατά"
"filtering_by": "Φιλτράρισμα κατά",
"show": "Εμφάνισε"
},
"header": "Διαμόρφωση του Home Assistant",
"helpers": {
@@ -1668,7 +1685,19 @@
"delete_confirm": "Είστε σίγουρος ότι θέλετε να διαγραφεί αυτή η ενοποίηση;",
"device_unavailable": "Η συσκευή δεν είναι διαθέσιμη",
"devices": "{count} {count, plural,\n one {συσκευή}\n other {συσκευές}\n}",
"disable_restart_confirm": "Επανεκκινήστε το Home Assistant για να ολοκληρώσετε την απενεργοποίηση αυτής της ενσωμάτωσης",
"disable": {
"disable_confirm": "Είστε βέβαιοι ότι θέλετε να απενεργοποιήσετε αυτήν την καταχώριση διαμόρφωσης; Οι συσκευές και οι οντότητές του θα απενεργοποιηθούν.",
"disabled": "Απενεργοποιημένο",
"disabled_by": {
"device": "συσκευή",
"integration": "ενσωμάτωση",
"user": "Χρήστης"
},
"disabled_cause": "Απενεργοποιήθηκε από {cause}."
},
"documentation": "Τεκμηρίωση",
"enable_restart_confirm": "Επανεκκινήστε το Home Assistant για να ολοκληρώσετε την ενεργοποίηση αυτής της ενσωμάτωσης",
"entities": "{count} {count, plural,\n one {οντότητα}\n other {οντότητες}\n}",
"entity_unavailable": "Η οντότητα δεν είναι διαθέσιμη",
"firmware": "Υλικολογισμικό: {version}",
@@ -1711,6 +1740,11 @@
"confirm_new": "Θέλετε να ρυθμίσετε το {integration};",
"description": "Διαχείριση ενοποιήσεων με υπηρεσίες, συσκευές, ...",
"details": "Λεπτομέρειες ενσωμάτωσης",
"disable": {
"disabled_integrations": "{number} απενεργοποιημένο",
"hide_disabled": "Απόκρυψη απενεργοποιημένων ενσωματώσεων",
"show_disabled": "Εμφάνιση απενεργοποιημένων ενσωματώσεων"
},
"discovered": "Ανακαλύφθηκε",
"home_assistant_website": "Ιστότοπος του Home Assistant.",
"ignore": {
@@ -2139,7 +2173,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Προσθήκη ετικέτας",
"automation_title": "Η ετικέτα {name} σαρώθηκε",
"caption": "Ετικέτες",
@@ -2536,6 +2570,7 @@
"states": {
"alert_entity_field": "Η οντότητα είναι ένα υποχρεωτικό πεδίο",
"attributes": "Χαρακτηριστικά",
"copy_id": "Αντιγραφή αναγνωριστικού στο πρόχειρο",
"current_entities": "Τρέχουσες οντότητες",
"description1": "Ορίστε την αναπαράσταση μιας συσκευής μέσα στο Home Assistant",
"description2": "Αυτό δε θα επικοινωνεί με την τρέχουσα συσκευή.",
@@ -3062,8 +3097,10 @@
},
"my": {
"component_not_loaded": "Αυτή η ανακατεύθυνση δεν υποστηρίζεται από την παρουσία του Home Assistant. Χρειάζεστε την ενσωμάτωση {ενσωμάτωση} για να χρησιμοποιήσετε αυτήν την ανακατεύθυνση.",
"documentation": "Τεκμηρίωση",
"error": "Παρουσιάστηκε άγνωστο σφάλμα",
"faq_link": "Συνήθεις ερωτήσεις για το Home Assistant",
"no_supervisor": "Αυτή η ανακατεύθυνση δεν υποστηρίζεται από την εγκατάσταση του Home Assistant σας. Χρειάζεται είτε το λειτουργικό σύστημα του Home Assistant ή τη μέθοδο της εποπτευόμενης εγκατάστασης του Home Assistant. Για περισσότερες πληροφορίες, ανατρέξτε στο {docs_link} .",
"not_supported": "Αυτή η ανακατεύθυνση δεν υποστηρίζεται από τo Home Assistant σας. Ελέγξτε το {link} για τις υποστηριζόμενες ανακατευθύνσεις και την έκδοση που εισήγαγαν."
},
"page-authorize": {
+50 -1
View File
@@ -1 +1,50 @@
{}
{
"ui": {
"card": {
"light": {
"color_temperature": "Colour temperature"
}
},
"panel": {
"config": {
"automation": {
"editor": {
"conditions": {
"type": {
"time": {
"weekdays": {
"mon": "Monday"
}
}
}
}
}
},
"integrations": {
"caption": "Integrations",
"configure": "Configure",
"configured": "Configured",
"description": "Manage and set up integrations",
"discovered": "Discovered",
"new": "Set up a new integration",
"no_integrations": "It seems like you don't have any integrations configured yet. Click on the button below to add your first integration!"
}
},
"lovelace": {
"editor": {
"card": {
"iframe": {
"description": "The Webpage card allows you to embed your favourite webpage right into Home Assistant."
}
}
}
},
"profile": {
"themes": {
"accent_color": "Accent colour",
"primary_color": "Primary colour"
}
}
}
}
}
+2 -1
View File
@@ -696,6 +696,7 @@
"scene": "Scenes",
"script": "Scripts",
"server_control": "Server Controls",
"tag": "Tags",
"tags": "Tags",
"users": "Users",
"zone": "Zones"
@@ -2172,7 +2173,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Add tag",
"automation_title": "Tag {name} is scanned",
"caption": "Tags",
-50
View File
@@ -1,50 +0,0 @@
{
"ui": {
"card": {
"light": {
"color_temperature": "Colour temperature"
}
},
"panel": {
"config": {
"automation": {
"editor": {
"conditions": {
"type": {
"time": {
"weekdays": {
"mon": "Monday"
}
}
}
}
}
},
"integrations": {
"caption": "Integrations",
"configure": "Configure",
"configured": "Configured",
"description": "Manage and set up integrations",
"discovered": "Discovered",
"new": "Set up a new integration",
"no_integrations": "It seems like you don't have any integrations configured yet. Click on the button below to add your first integration!"
}
},
"lovelace": {
"editor": {
"card": {
"iframe": {
"description": "The Webpage card allows you to embed your favourite webpage right into Home Assistant."
}
}
}
},
"profile": {
"themes": {
"accent_color": "Accent colour",
"primary_color": "Primary colour"
}
}
}
}
}
+211 -96
View File
@@ -30,7 +30,7 @@
"climate": {
"fan_mode": {
"auto": "Automatico",
"off": "Desactivado",
"off": "Apagado",
"on": "Encendido"
},
"hvac_action": {
@@ -44,8 +44,8 @@
"preset_mode": {
"activity": "Actividad",
"away": "Fuera de casa",
"boost": "Aumentar",
"comfort": "Comodidad",
"boost": "Ráfaga",
"comfort": "Confort",
"eco": "Eco",
"home": "En Casa",
"none": "Ninguno",
@@ -110,9 +110,9 @@
},
"card": {
"alarm_control_panel": {
"arm_away": "Proteger fuera de casa",
"arm_away": "Activar fuera de casa",
"arm_custom_bypass": "Bypass personalizado",
"arm_home": "Proteger en casa",
"arm_home": "Activar en casa",
"arm_night": "Armado nocturno",
"clear_code": "Limpiar",
"code": "Código",
@@ -120,7 +120,7 @@
},
"automation": {
"last_triggered": "Última activación",
"trigger": "Ejecutar"
"trigger": "Ejecutar acciones"
},
"camera": {
"not_available": "Imagen no disponible"
@@ -153,7 +153,7 @@
},
"cover": {
"position": "Posición",
"tilt_position": "Posición de inclinación"
"tilt_position": "Posición de la lona"
},
"fan": {
"direction": "Dirección",
@@ -200,7 +200,8 @@
},
"script": {
"cancel": "Cancelar",
"cancel_multiple": "Cancelar {number}"
"cancel_multiple": "Cancelar {number}",
"run": "Ejecutar"
},
"service": {
"run": "Ejecutar"
@@ -216,7 +217,7 @@
"vacuum": {
"actions": {
"resume_cleaning": "Reanudar la limpieza",
"return_to_base": "Regresar al dock",
"return_to_base": "Regresar a la base",
"start_cleaning": "Comenzar a limpiar",
"turn_off": "Apagar",
"turn_on": "Encender"
@@ -295,6 +296,19 @@
"yes": "Sí"
},
"components": {
"addon-picker": {
"addon": "Complemento",
"error": {
"fetch_addons": {
"description": "La obtención de complementos devolvió un error.",
"title": "Error al obtener complementos"
},
"no_supervisor": {
"description": "No se encontró ningún supervisor, por lo que no se pudieron cargar los complementos.",
"title": "Sin supervisor"
}
}
},
"area-picker": {
"add_dialog": {
"add": "Agregar",
@@ -355,16 +369,21 @@
"no_history_found": "No se encontró historial de estado."
},
"logbook": {
"by": "por",
"by_service": "por servicio",
"entries_not_found": "No se encontraron entradas en el libro de registro.",
"messages": {
"became_unavailable": "dejó de estar disponible",
"changed_to_state": "cambiado a {state}",
"cleared_device_class": "despejado (no se detecta {device_class})",
"detected_device_class": "detectado {device_class}",
"rose": "salió",
"set": "se ocultó",
"turned_off": "apagado",
"turned_on": "encendido",
"was_at_home": "fue detectado en casa",
"was_at_state": "estaba en {state}",
"was_away": "se detectó ausente",
"was_closed": "fue cerrado",
"was_connected": "fue conectado",
"was_disconnected": "fue desconectado",
@@ -405,6 +424,8 @@
"video": "Video"
},
"documentation": "documentación",
"learn_adding_local_media": "Obtenga más información sobre cómo agregar medios en {documentation}.",
"local_media_files": "Coloque sus archivos de video, audio e imagen en el directorio de medios para poder explorarlos y reproducirlos en el navegador o en reproductores multimedia compatibles.",
"media_browsing_error": "Error de navegación de medios",
"media_not_supported": "El Reproductor multimedia no es compatible con este tipo de medios",
"media_player": "Reproductor multimedia",
@@ -515,9 +536,9 @@
"enabled_restart_confirm": "Reinicie Home Assistant para terminar de habilitar las entidades",
"entity_id": "Identificación de la entidad",
"follow_device_area": "Siga el área del dispositivo",
"icon": "Sobrescribir icono",
"icon": "Ícono",
"icon_error": "Los iconos deben estar en el formato 'prefijo:nombre del icono', por ejemplo, 'mdi: home'",
"name": "Sustituir nombre",
"name": "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.",
@@ -525,7 +546,7 @@
},
"faq": "documentación",
"info_customize": "Puede sobrescribir algunos atributos en la sección {customize_link} .",
"no_unique_id": "Esta entidad no tiene un identificador única, por lo tanto, su configuración no se puede administrar desde la interfaz de usuario.",
"no_unique_id": "Esta entidad (\"{entity_id}\") no tiene un identificador único y por lo tanto su configuración no se puede administrar desde la interfaz de usuario. Para más detalles, consulte en {faq_link}",
"related": "Relacionado",
"settings": "Configuraciones"
},
@@ -533,7 +554,7 @@
"cancel": "Cancelar",
"close": "cerrar",
"default_confirmation_title": "¿Está seguro?",
"ok": "De acuerdo"
"ok": "OK"
},
"helper_settings": {
"counter": {
@@ -589,7 +610,9 @@
"more_info_control": {
"cover": {
"close_cover": "Cerrar cubierta",
"close_tile_cover": "Cerrar cubierta de lona",
"open_cover": "Abrir cubierta",
"open_tilt_cover": "Abrir cubierta de lona",
"stop_cover": "Evitar que la cubierta se mueva"
},
"details": "Detalles",
@@ -810,7 +833,7 @@
"confirmation_text": "Todos los dispositivos en esta área quedarán sin asignar.",
"confirmation_title": "¿Está seguro de que desea eliminar esta área?"
},
"description": "Gestione las áreas de su casa.",
"description": "Agrupar dispositivos y entidades en áreas",
"editor": {
"area_id": "Identificador del área",
"create": "Crear",
@@ -832,7 +855,7 @@
},
"automation": {
"caption": "Automatizaciones",
"description": "Crear y editar automatizaciones",
"description": "Crea reglas de comportamiento personalizadas para tu hogar",
"dialog_new": {
"blueprint": {
"use_blueprint": "Utilizar un plano"
@@ -851,7 +874,7 @@
"actions": {
"add": "Agregar acción",
"delete": "Eliminar",
"delete_confirm": "¿Seguro que quieres borrar?",
"delete_confirm": "¿Está seguro que quiere eliminar?",
"duplicate": "Duplicar",
"header": "Acciones",
"introduction": "Las acciones son lo que hará Home Assistant cuando se active la automatización.",
@@ -862,6 +885,9 @@
"choose": {
"add_option": "Agregar opción",
"conditions": "Condiciones",
"default": "Acciones predeterminadas",
"label": "Elegir",
"option": "Opción {number}",
"remove_option": "Eliminar opción",
"sequence": "Acciones"
},
@@ -885,17 +911,22 @@
"event": {
"event": "Evento",
"label": "Disparar evento",
"service_data": "Datos"
"service_data": "Datos del servicio"
},
"repeat": {
"label": "Repetir",
"sequence": "Acciones",
"type_select": "Tipo de repetición",
"type": {
"count": {
"label": "Cantidad"
},
"until": {
"conditions": "Hasta que las condiciones",
"label": "Hasta"
},
"while": {
"conditions": "Mientras que las condiciones",
"label": "Mientras"
}
}
@@ -904,7 +935,7 @@
"label": "Activar escena"
},
"service": {
"label": "Llamar servico"
"label": "Llamar al servicio"
},
"wait_for_trigger": {
"continue_timeout": "Continuar cuando el tiempo venza",
@@ -930,7 +961,7 @@
"conditions": {
"add": "Agregar condición",
"delete": "Eliminar",
"delete_confirm": "¿Seguro que quieres borrar?",
"delete_confirm": "¿Está seguro que quiere eliminar?",
"duplicate": "Duplicar",
"header": "Condiciones",
"introduction": "Las condiciones son opcionales y evitarán una mayor ejecución a menos que se cumplan todas las condiciones.",
@@ -1061,10 +1092,10 @@
"label": "Evento:"
},
"geo_location": {
"enter": "Entrar",
"enter": "Al ingresar",
"event": "Evento:",
"label": "Geolocalización",
"leave": "Salir",
"leave": "Al salir",
"source": "Fuente",
"zone": "Zona"
},
@@ -1095,7 +1126,7 @@
"sun": {
"event": "Evento:",
"label": "Sol",
"offset": "Compensar (opcional)",
"offset": "Compensación (opcional)",
"sunrise": "Salida del sol",
"sunset": "Puesta de sol"
},
@@ -1123,11 +1154,11 @@
"webhook_id": "ID de Webhook"
},
"zone": {
"enter": "Entrar",
"enter": "Al ingresar",
"entity": "Entidad con ubicación",
"event": "Evento:",
"label": "Zona",
"leave": "Salir",
"leave": "Al salir",
"zone": "Zona"
}
},
@@ -1217,7 +1248,7 @@
"info_state_reporting": "Si habilita los informes de estado, Home Assistant enviará todos los cambios de estado de las entidades expuestas a Amazon. Esto le permite ver siempre los últimos estados en la aplicación Alexa y usar los cambios de estado para crear rutinas.",
"manage_entities": "Administrar entidades",
"state_reporting_error": "No se puede {enable_disable} informar el estado.",
"sync_entities": "Sincronizar entidades",
"sync_entities": "Sincronizar entidades con Amazon",
"sync_entities_error": "Error al sincronizar entidades:",
"title": "Alexa"
},
@@ -1299,18 +1330,18 @@
"not_exposed_entities": "Entidades no expuestas",
"title": "Alexa"
},
"description_features": "Control fuera de casa, integre con Alexa y con Google Assistant.",
"description_features": "Controle su hogar cuando esté fuera e integre con Alexa y el Asistente de Google",
"description_login": "Ha iniciado sesión como {email}",
"description_not_login": "No ha iniciado sesión",
"dialog_certificate": {
"certificate_expiration_date": "Fecha de vencimiento del certificado",
"certificate_expiration_date": "Fecha de vencimiento del certificado:",
"certificate_information": "Información del certificado",
"close": "Cerrar",
"fingerprint": "Huella digital del certificado:",
"will_be_auto_renewed": "Se renovará automáticamente"
},
"dialog_cloudhook": {
"available_at": "El webhook está disponible en la siguiente url:",
"available_at": "El webhook está disponible en la siguiente URL:",
"close": "Cerrar",
"confirm_disable": "¿Está seguro de que desea deshabilitar este webhook?",
"copied_to_clipboard": "Copiado al portapapeles",
@@ -1394,7 +1425,7 @@
},
"core": {
"caption": "General",
"description": "Cambiar la configuración general de Home Assistant",
"description": "Sistema de unidades, ubicación, zona horaria y otros parámetros generales",
"section": {
"core": {
"core_config": {
@@ -1468,8 +1499,9 @@
"cant_edit": "Solo puede editar elementos que se crean en la interfaz de usuario.",
"caption": "Dispositivos",
"confirm_delete": "¿Está seguro de que desea eliminar este dispositivo?",
"confirm_rename_entity_ids": "¿También desea cambiar el nombre de la identificación de la entidad de sus entidades?",
"confirm_rename_entity_ids_warning": "Esto no cambiará ninguna configuración (como automatizaciones, scripts, escenas, Lovelace) que esté usando actualmente estas entidades, tendrás que actualizarlas tú mismo.",
"confirm_disable_config_entry": "No hay más dispositivos para la entrada de configuración {entry_name} , ¿quiere deshabilitarla?",
"confirm_rename_entity_ids": "¿También desea cambiar el nombre de los ID de entidad de las entidades?",
"confirm_rename_entity_ids_warning": "Esto no cambiará ninguna configuración (como automatizaciones, scripts, escenas, tableros) que esté usando actualmente estas entidades! Deberá actualizarlas usted mismo para poder utilizar los nuevos ID de entidad!",
"data_table": {
"area": "Área",
"battery": "Batería",
@@ -1480,7 +1512,7 @@
"no_devices": "Sin dispositivos"
},
"delete": "Eliminar",
"description": "Administrar dispositivos conectados",
"description": "Administrar dispositivos configurados",
"device_info": "Información del dispositivo",
"device_not_found": "Dispositivo no encontrado.",
"disabled": "Deshabilitado",
@@ -1504,6 +1536,7 @@
"picker": {
"filter": {
"filter": "Filtrar",
"hidden_devices": "{number} oculto/s {number, plural,\n one {dispositivo}\n other {dispositivos}\n}",
"show_all": "Mostrar todo",
"show_disabled": "Mostrar los dispositivos deshabilitados"
},
@@ -1534,15 +1567,16 @@
"disable_selected": {
"button": "Deshabilitar selección",
"confirm_text": "Las entidades deshabilitadas no serán agregadas a Home Assistant.",
"confirm_title": "¿Desea deshabilitar {number} entidades?"
"confirm_title": "¿Desea deshabilitar {number} entidad/es?"
},
"enable_selected": {
"button": "Habilitar selección",
"confirm_text": "Esto los hará disponibles en Home Assistant nuevamente si ahora están deshabilitados.",
"confirm_title": "¿Desea habilitar {number} entidades?"
"confirm_title": "¿Desea habilitar {number} entidad/es?"
},
"filter": {
"filter": "Filtrar",
"hidden_entities": "{number} oculta/a {number, plural,\n one {dispositivo}\n other {dispositivos}\n}",
"show_all": "Mostrar todo",
"show_disabled": "Mostrar entidades deshabilitadas",
"show_readonly": "Mostrar entidades de solo lectura",
@@ -1561,9 +1595,9 @@
"remove_selected": {
"button": "Eliminar selección",
"confirm_partly_text": "Solo puede eliminar {removable} de las entidades {selected} . Las entidades solo se pueden eliminar cuando la integración ya no proporciona las entidades. En ocasiones, debe reiniciar Home Assistant antes de poder eliminar las entidades de una integración eliminada. ¿Está seguro de que desea quitar las entidades eliminables?",
"confirm_partly_title": "Sólo se pueden eliminar {número} entidades seleccionadas.",
"confirm_partly_title": "Sólo se puede/n eliminar {número} entidad/es seleccionada/s.",
"confirm_text": "Debe eliminarlos de su configuración de Lovelace y de sus automatizaciones si contienen estas entidades.",
"confirm_title": "¿Desea eliminar {number} entidades?"
"confirm_title": "¿Desea eliminar {number} entidad/es?"
},
"search": "Buscar entidades",
"selected": "{number} seleccionadas",
@@ -1578,12 +1612,13 @@
},
"filtering": {
"clear": "Limpiar",
"filtering_by": "Filtrar por"
"filtering_by": "Filtrar por",
"show": "Mostrar"
},
"header": "Configurar Home Assistant",
"helpers": {
"caption": "Auxiliares",
"description": "Gestionar elementos ayudan a construir automatizaciones",
"description": "Elementos que ayudan a crear automatizaciones",
"dialog": {
"add_helper": "Agregar auxiliar",
"add_platform": "Añadir {platform}",
@@ -1615,7 +1650,7 @@
"copy_github": "Para GitHub",
"copy_raw": "Texto sin formato",
"custom_uis": "Interfaces de usuario personalizadas:",
"description": "Información sobre la instalación de Home Assistant",
"description": "Versión, estado del sistema y enlaces a la documentación",
"developed_by": "Desarrollado por un grupo de personas increíbles.",
"documentation": "Documentación",
"frontend": "frontend-ui",
@@ -1647,17 +1682,31 @@
"area": "En {area}",
"delete": "Eliminar",
"delete_confirm": "¿Estás seguro de que quieres eliminar esta integración?",
"device_unavailable": "dispositivo no disponible",
"device_unavailable": "Dispositivo no disponible",
"devices": "{count} {count, plural,\n one {dispositivo}\n other {dispositivos}\n}",
"disable_restart_confirm": "Reinicie Home Assistant para terminar de deshabilitar esta integración",
"disable": {
"disable_confirm": "¿Está seguro de que desea deshabilitar esta entrada de configuración? Sus dispositivos y entidades serán deshabilitados.",
"disabled": "Deshabilitado",
"disabled_by": {
"device": "Dispositivo",
"integration": "Integración",
"user": "Usuario"
},
"disabled_cause": "El dispositivo está inhabilitado por {cause}."
},
"documentation": "Documentación",
"enable_restart_confirm": "Reinicie Home Assistant para terminar de habilitar esta integración",
"entities": "{count} {count, plural,\n one {entidad}\n other {entidades}\n}",
"entity_unavailable": "entidad no disponible",
"entity_unavailable": "Entidad no disponible",
"firmware": "Firmware: {version}",
"hub": "Conectado a través de",
"manuf": "por {manufacturer}",
"no_area": "Ninguna área",
"options": "Opciones",
"reload": "Recargar",
"reload_confirm": "La integración se recargó",
"reload_restart_confirm": "Reinicie Home Assistant para terminar de recargar esta integración",
"rename": "Renombrar",
"restart_confirm": "Reinicie Home Assistant para terminar de eliminar esta integración.",
"services": "{count} {count, plural,\n one {service}\n other {services}\n}",
@@ -1688,8 +1737,13 @@
"configure": "Configurar",
"configured": "Configurado",
"confirm_new": "¿Quieres configurar {integration} ?",
"description": "Gestione las integraciones",
"description": "Gestionar integraciones con servicios, dispositivos, ...",
"details": "Detalles de integración",
"disable": {
"disabled_integrations": "{number} inhabilitado",
"hide_disabled": "Ocultar integraciones deshabilitadas",
"show_disabled": "Mostrar integraciones deshabilitadas"
},
"discovered": "Descubierto",
"home_assistant_website": "Sitio web de Home Assistant",
"ignore": {
@@ -1756,7 +1810,7 @@
"title": "Título",
"title_required": "Se requiere título.",
"update": "Actualizar",
"url": "Url",
"url": "URL",
"url_error_msg": "La URL debe contener un - y no puede contener espacios o caracteres especiales, excepto _ y -"
},
"picker": {
@@ -1772,7 +1826,7 @@
"open": "Abrir"
}
},
"description": "Configure sus paneles de Lovelace",
"description": "Crear conjuntos personalizados de tarjetas para controlar su hogar",
"resources": {
"cant_edit_yaml": "Está utilizando Lovelace en modo YAML, por lo tanto, no puede administrar sus recursos a través de la interfaz de usuario. Adminístrelos en configuration.yaml.",
"caption": "Recursos",
@@ -1784,8 +1838,8 @@
"new_resource": "Agregar nuevo recurso",
"type": "Tipo de recurso",
"update": "Actualizar",
"url": "Url",
"url_error_msg": "Url es un campo requerido",
"url": "URL",
"url_error_msg": "URL es un campo requerido",
"warning_header": "¡Tenga cuidado!",
"warning_text": "Agregar recursos puede ser peligroso, asegúrese de conocer la fuente del recurso y confíe en ellos. Los malos recursos podrían dañar seriamente su sistema."
},
@@ -1793,11 +1847,11 @@
"add_resource": "Agregar recurso",
"headers": {
"type": "Tipo",
"url": "Url"
"url": "URL"
},
"no_resources": "Sin recursos"
},
"refresh_body": "Tiene que actualizar la página para completar la eliminación, ¿desea actualizar ahora?",
"refresh_body": "Debe actualizar la página para completar la eliminación, ¿desea actualizar ahora?",
"refresh_header": "¿Desea refrescar?",
"types": {
"css": "Hoja de estilo",
@@ -1827,8 +1881,16 @@
"controller": "Controlador",
"instance": "Instancia",
"network": "Red",
"node_id": "ID de nodo",
"ozw_instance": "Instancia de OpenZWave",
"query_stage": "Etapa de la consulta",
"wakeup_instructions": "Instrucciones para despertar"
"wakeup_instructions": "Instrucciones para despertar",
"zwave": "Z-Wave"
},
"device_info": {
"node_failed": "Nodo fallido",
"stage": "Etapa",
"zwave_info": "Información de Z-Wave"
},
"navigation": {
"network": "Red",
@@ -1856,7 +1918,7 @@
},
"offline": "Fuera de línea",
"online": "En línea",
"starting": "Comenzando",
"starting": "Iniciando",
"unknown": "Desconocido"
},
"network": {
@@ -1874,10 +1936,23 @@
"product_manual": "Manual del producto"
},
"node_query_stages": {
"associations": "Actualizando grupos de asociaciones y membresías",
"cacheload": "Cargando información del archivo de caché de OpenZWave. Los nodos de batería permanecerán en esta etapa hasta que el nodo se active.",
"complete": "El proceso de consulta está completo",
"configuration": "Obteniendo los valores de configuración del nodo",
"dynamic": "Obteniendo los valores que cambian con frecuencia del nodo",
"session": "Obteniendo valores que cambian con poca frecuencia del nodo"
"instances": "Obteniendo detalles sobre qué instancias o canales admite un dispositivo",
"manufacturerspecific1": "Obteniendo códigos de identificación de producto y fabricante del nodo",
"manufacturerspecific2": "Obteniendo códigos adicionales de identificación de producto y fabricante del nodo",
"neighbors": "Obtener una lista de los vecinos del nodo",
"nodeinfo": "Obteniendo clases de comando admitidas del nodo",
"nodeplusinfo": "Obteniendo información de Z-Wave + del nodo",
"probe": "Comprobando si el nodo está despierto / vivo",
"protocolinfo": "Obtener las capacidades básicas de Z-Wave de este nodo desde el controlador",
"session": "Obteniendo valores que cambian con poca frecuencia del nodo",
"static": "Obteniendo valores estáticos del dispositivo",
"versions": "Obteniendo información sobre firmware y versiones de clases de comando",
"wakeup": "Configurando soporte para mensajes y colas de activación"
},
"node": {
"button": "Detalles del nodo",
@@ -1942,7 +2017,7 @@
},
"introduction": "Aquí puede definir cada persona de interés en Home Assistant.",
"learn_more": "Más información sobre las personas",
"no_persons_created_yet": "Parece que todavía no has creado ninguna persona.",
"no_persons_created_yet": "Parece que aún no se ha 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 interfaz de usuario.",
"person_not_found": "No pudimos encontrar a la persona que intentaba editar.",
"person_not_found_title": "Persona no encontrada"
@@ -1950,7 +2025,7 @@
"scene": {
"activated": "Escena activada {name}.",
"caption": "Escenas",
"description": "Gestionar escenas",
"description": "Capture estados del dispositivo y recupérelos fácilmente más tarde",
"editor": {
"default_name": "Nueva escena",
"devices": {
@@ -1994,7 +2069,7 @@
},
"script": {
"caption": "Scripts",
"description": "Crear y editar scripts",
"description": "Ejecuta una secuencia de acciones",
"editor": {
"alias": "Nombre",
"default_name": "Nuevo script",
@@ -2005,7 +2080,7 @@
"id": "ID de la entidad",
"id_already_exists": "Este ID ya existe",
"id_already_exists_save_error": "No puede guardar este script porque el ID no es único, elija otro ID o déjelo en blanco para generar uno automáticamente.",
"introduction": "Use scripts para ejecutar una secuencia de acciones.",
"introduction": "Utilice scripts para ejecutar una secuencia de acciones.",
"link_available_actions": "Obtenga más información sobre las acciones disponibles.",
"load_error_not_editable": "Solo los scripts dentro de scripts.yaml son editables.",
"max": {
@@ -2047,9 +2122,15 @@
"section": {
"reloading": {
"automation": "Recargar automatizaciones",
"command_line": "Recargar entidades de línea de comando",
"core": "Recargar ubicación y personalizaciones",
"group": "Recargar grupos, entidades grupales, y servicios de notificación",
"filesize": "Recargar entidades de tamaño de archivo",
"filter": "Recargar entidades de filtro",
"generic": "Recargar entidades de cámara IP genéricas",
"generic_thermostat": "Recargar entidades de termostato genéricas",
"group": "Recargar grupos, entidades grupales, y servicios de notificación de grupo",
"heading": "Recarga de configuración YAML",
"history_stats": "Recargar entidades de estadísticas del historial",
"homekit": "Recargar HomeKit",
"input_boolean": "Recargar controles booleanos",
"input_datetime": "Recargar controles de fechas",
@@ -2057,16 +2138,21 @@
"input_select": "Recargar controles de selección",
"input_text": "Recargar controles de texto",
"introduction": "Algunas partes de Home Assistant pueden recargarse sin requerir un reinicio. Al presionar recargar se descargará su configuración YAML actual y se cargará la nueva.",
"mqtt": "Recargar entidades MQTT",
"min_max": "Recargar entidades de mín/máx",
"mqtt": "Recargar entidades MQTT manualmente configuradas",
"person": "Recargar personas",
"ping": "Recargar entidades de sensor binario PING",
"reload": "Recargar {domain}",
"rest": "Recargar entidades \"rest\" y servicios de notificación.",
"rest": "Recargar entidades y servicios de notificación REST.",
"rpi_gpio": "Recargue las entidades GPIO de la Raspberry Pi",
"scene": "Recargar escenas",
"script": "Recargar scripts",
"smtp": "Recargar servicios de notificación smtp",
"smtp": "Recargar servicios de notificación SMTP",
"statistics": "Recargar entidades de estadísticas",
"telegram": "Recargar servicios de notificación de telegram",
"template": "Recargar las entidades de la plantilla",
"trend": "Recargar entidades de tendencia",
"universal": "Recargar entidades de reproductor multimedia universal",
"zone": "Recargar zonas"
},
"server_management": {
@@ -2086,14 +2172,14 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Añadir etiqueta",
"automation_title": "La etiqueta {name} ha sido escaneada",
"caption": "Etiquetas",
"confirm_remove": "¿Está seguro de que desea eliminar la etiqueta {tag}?",
"confirm_remove_title": "¿Eliminar etiqueta?",
"create_automation": "Crea automatización con etiqueta",
"description": "Gestionar etiquetas",
"description": "Activar automatizaciones cuando se escanea una etiqueta NFC, un código QR, etc.",
"detail": {
"companion_apps": "aplicaciones complementarias",
"create": "Crear",
@@ -2126,7 +2212,7 @@
"password_not_match": "Las contraseñas no coinciden"
},
"caption": "Usuarios",
"description": "Administrar usuarios",
"description": "Administrar las cuentas de usuario de Home Assistant",
"editor": {
"activate_user": "Activar usuario",
"active": "Activo",
@@ -2139,7 +2225,7 @@
"delete_user": "Eliminar usuario",
"group": "Grupo",
"id": "Identificación",
"name": "Nombre",
"name": "Nombre para mostrar",
"new_password": "Nueva contraseña",
"owner": "Propietario",
"password_changed": "La contraseña se cambió con éxito",
@@ -2156,8 +2242,8 @@
"group": "Grupo",
"is_active": "Activo",
"is_owner": "Propietario",
"name": "Nombre",
"system": "Sistema",
"name": "Nombre para mostrar",
"system": "Generado por el sistema",
"username": "Nombre de usuario"
}
},
@@ -2260,7 +2346,7 @@
"create": "Crear",
"delete": "Eliminar",
"icon": "Ícono",
"icon_error_msg": "El ícono debe tener el formato prefijo:nombre del ícono, por ejemplo: mdi:home",
"icon_error_msg": "El ícono debe tener el formato 'prefijo:nombreicono', por ejemplo: 'mdi:home''",
"latitude": "Latitud",
"longitude": "Longitud",
"name": "Nombre",
@@ -2467,6 +2553,7 @@
"type": "Tipo de evento"
},
"services": {
"accepts_target": "Este servicio acepta un objetivo, por ejemplo: 'entity_id: light.bed_light'",
"all_parameters": "Todos los parámetros disponibles",
"call_service": "Llamar al Servicio",
"column_description": "Descripción",
@@ -2477,11 +2564,12 @@
"title": "Servicios",
"ui_mode": "Ir al modo IU",
"yaml_mode": "Ir al modo YAML",
"yaml_parameters": "Parámetros solo disponibles en modo YAML"
"yaml_parameters": "Parámetros sólo disponibles en modo YAML"
},
"states": {
"alert_entity_field": "La entidad es un campo obligatorio.",
"attributes": "Atributos",
"copy_id": "Copiar ID al portapapeles",
"current_entities": "Entidades actuales",
"description1": "Establecer la representación de un dispositivo dentro de Home Assistant.",
"description2": "Esto no se comunicará con el dispositivo real.",
@@ -2507,6 +2595,7 @@
"jinja_documentation": "Documentación de plantillas Jinja2",
"listeners": "Esta plantilla escucha los eventos de los siguientes cambios de estado:",
"no_listeners": "Esta plantilla no escucha ningún evento de cambio de estado y no se actualizará automáticamente.",
"reset": "Restablecer a la plantilla de demostración",
"result_type": "Tipo de resultado",
"template_extensions": "Extensiones de plantilla de Home Assistant",
"time": "Esta plantilla se actualiza al comienzo de cada minuto.",
@@ -2559,7 +2648,7 @@
"call_service": "Servicio de llamadas {name}",
"hold": "Mantener:",
"more_info": "Mostrar más información: {name}",
"navigate_to": "Navegue a {location}",
"navigate_to": "Navegar a {location}",
"tap": "Toque:",
"toggle": "Alternar {name}",
"url": "Abrir ventana a {url_path}"
@@ -2570,7 +2659,7 @@
},
"shopping-list": {
"add_item": "Agregar elemento",
"checked_items": "lementos marcados",
"checked_items": "Elementos marcados",
"clear_items": "Borrar elementos marcados",
"drag_and_drop": "Arrastrar y soltar",
"reorder_items": "Reordenar elementos"
@@ -2580,7 +2669,7 @@
}
},
"changed_toast": {
"message": "La configuración de la UI de Lovelace para éste panel fue actualizada, ¿refrescar para ver los cambios?"
"message": "Se actualizó la configuración de la interfaz de usuario de Lovelace para este panel. ¿Actualizar para ver cambios?"
},
"components": {
"timestamp-display": {
@@ -2596,6 +2685,7 @@
"more-info": "Más información",
"navigate": "Navegar",
"none": "Sin acción",
"toggle": "Alternar",
"url": "URL"
},
"navigation_path": "Ruta de navegación",
@@ -2608,11 +2698,13 @@
"name": "Panel de alarma"
},
"button": {
"default_action_help": "La acción predeterminada depende de las capacidades de la entidad, se alternará o se mostrará el cuadro de diálogo de más información.",
"description": "La tarjeta Botón le permite agregar botones para realizar tareas.",
"name": "Botón"
},
"calendar": {
"calendar_entities": "Entidades del calendario",
"description": "La tarjeta Calendario muestra un calendario que incluye vistas de día, semana y lista",
"inital_view": "Vista inicial",
"name": "Calendario",
"views": {
@@ -2659,7 +2751,8 @@
"last-triggered": "Última activación",
"last-updated": "Última actualización",
"none": "Sin información secundaria",
"position": "Posición"
"position": "Posición",
"tilt-position": "Posición de la lona"
},
"show_header_toggle": "¿Mostrar alternancia de encabezado?",
"special_row": "fila especial",
@@ -2697,7 +2790,7 @@
"icon_height": "Altura del icono",
"image": "Ruta de la imagen",
"manual": "Manual",
"manual_description": "¿Necesita agregar una tarjeta personalizada o simplemente desea escribir manualmente el yaml?",
"manual_description": "¿Necesita agregar una tarjeta personalizada o simplemente desea escribir manualmente el YAML?",
"maximum": "Máximo",
"minimum": "Mínimo",
"name": "Nombre",
@@ -2714,7 +2807,7 @@
"theme": "Tema",
"title": "Título",
"unit": "Unidad",
"url": "Url"
"url": "URL"
},
"glance": {
"columns": "Columnas",
@@ -2778,7 +2871,7 @@
"name": "Entidad de imagen"
},
"picture-glance": {
"description": "La tarjeta Picture Glance muestra una imagen y los estados de entidad correspondientes como un icono. Las entidades en el lado derecho permiten alternar acciones, otras muestran el diálogo de más información.",
"description": "La tarjeta Picture Glance muestra una imagen y los estados de entidad correspondientes como un icono. Las entidades en el lado derecho permiten alternar acciones y las demás muestran el diálogo de más información.",
"name": "Picture Glance",
"state_entity": "Entidad de estado"
},
@@ -2837,7 +2930,7 @@
"clear": "Limpiar",
"confirm_cancel": "¿Está seguro de que desea cancelar?",
"delete": "Eliminar tarjeta",
"duplicate": "Tarjeta duplicada",
"duplicate": "Duplicar tarjeta",
"edit": "Editar",
"header": "Configuración de la tarjeta",
"move": "Mover a la vista",
@@ -2898,16 +2991,19 @@
"raw_editor": "Editor de configuración en texto"
},
"migrate": {
"header": "Configuración inválida",
"header": "Configuración no compatible",
"migrate": "Migrar configuración",
"para_migrate": "Home Assistant puede agregar la identificación a todas sus tarjetas y vistas automáticamente presionando el botón 'Migrar configuración'.",
"para_no_id": "Este elemento no tiene un ID. Por favor agregue uno a este elemento en 'ui-lovelace.yaml'."
"para_no_id": "Este elemento no tiene un ID. Por favor agréguele un ID en 'ui-lovelace.yaml'."
},
"move_card": {
"header": "Elija una vista para mover la tarjeta"
},
"raw_editor": {
"confirm_remove_config_text": "Generaremos automáticamente sus vistas de Lovelace UI con sus áreas y dispositivos si elimina su configuración de Lovelace UI.",
"confirm_remove_config_title": "¿Está seguro de que desea eliminar la configuración de Lovelace UI? Generaremos automáticamente sus vistas de Lovelace UI con sus áreas y dispositivos.",
"confirm_remove_config_title": "¿Está seguro de que desea eliminar la configuración de la interfaz de usuario de Lovelace?",
"confirm_unsaved_changes": "Tiene cambios sin guardar, ¿está seguro de que desea salir?",
"confirm_unsaved_comments": "Su configuración contiene comentarios, estos no se guardarán. ¿Desea continuar?",
"confirm_unsaved_comments": "Su configuración puede contener comentarios, estos no se guardarán. ¿Desea continuar?",
"error_invalid_config": "Su configuración no es válida: {error}",
"error_parse_yaml": "No se puede analizar el YAML: {error}",
"error_remove": "No se puede eliminar la configuración: {error}",
@@ -2923,13 +3019,17 @@
"close": "Cerrar",
"empty_config": "Comience con un tablero vacío",
"header": "Toma el control de tu interfaz de usuario de Lovelace",
"para": "Este panel está siendo mantenido actualmente por Home Assistant. Se actualiza automáticamente cuando nuevas entidades o componentes de la interfaz de usuario de Lovelace están disponibles. Si tomas el control, este panel ya no se actualizará automáticamente. Siempre puedes crear un nuevo panel en la configuración para jugar con él.",
"para": "Este panel está siendo mantenido actualmente por Home Assistant. Se actualiza automáticamente cuando nuevas entidades o componentes de la interfaz de usuario de Lovelace están disponibles. Si tomas el control, este panel ya no se actualizará automáticamente. Siempre puede crear un nuevo panel en la configuración y modificarlo a su gusto.",
"para_sure": "¿Está seguro de que desea tomar el control de su interfaz de usuario?",
"save": "Tomar el control",
"yaml_config": "Para ayudarlo a comenzar, aquí está la configuración actual de este tablero:",
"yaml_control": "Para tomar el control en modo YAML, cree un archivo YAML con el nombre que especificó en su configuración para este tablero, o el valor predeterminado 'ui-lovelace.yaml'.",
"yaml_mode": "Está utilizando el modo YAML para este panel, lo que significa que no puede cambiar su configuración de Lovelace desde la interfaz de usuario. Si desea administrar este panel de control desde la interfaz de usuario, elimine 'mode: yaml' de su configuración de Lovelace en 'configuration.yaml.'."
},
"select_view": {
"dashboard_label": "Tablero",
"header": "Elija una vista"
},
"sub-element-editor": {
"types": {
"footer": "Editor de pie de página",
@@ -2944,7 +3044,7 @@
},
"view": {
"panel_mode": {
"description": "Esto hace que la primera carta sea de ancho completo; otras cartas en esta vista no se mostrarán.",
"description": "Esto hace que la primera tarjeta tenga el ancho completo. No se mostrarán otras tarjetas en esta vista, así como las insignias.",
"title": "¿Modo de panel?",
"warning_multiple_cards": "Esta vista contiene más de una tarjeta, pero una vista de panel solo puede mostrar 1 tarjeta."
}
@@ -2960,7 +3060,7 @@
},
"reload_lovelace": "Recargar UI",
"reload_resources": {
"refresh_body": "Tiene que actualizar la página para completar la recarga, ¿desea actualizar ahora?",
"refresh_body": "Debe actualizar la página para completar la recarga, ¿desea actualizar ahora?",
"refresh_header": "¿Desea refrescar?"
},
"unused_entities": {
@@ -2984,7 +3084,7 @@
"attribute_not_found": "El atributo {attribute} no está disponible en: {entity}",
"entity_non_numeric": "Entidad no es numérica: {entity}",
"entity_not_found": "Entidad no disponible: {entity}",
"entity_unavailable": "{entidad} no se encuentra disponible",
"entity_unavailable": "{entity} no se encuentra disponible",
"starting": "Home Assistant está comenzando, no todo puede estar disponible aún"
}
},
@@ -2996,8 +3096,11 @@
},
"my": {
"component_not_loaded": "Esta redirección no es compatible con su instancia de Home Assistant. Necesita la integración {integration} para usar este redireccionamiento.",
"documentation": "documentación",
"error": "Se ha producido un error desconocido",
"faq_link": "Preguntas frecuentes de mi Home Assistant"
"faq_link": "Preguntas frecuentes de mi Home Assistant",
"no_supervisor": "Esta redirección no es compatible con su instalación de Home Assistant. Necesita el sistema operativo Home Assistant o el método de instalación supervisado por Home Assistant. Para obtener más información, consulte en {docs_link} .",
"not_supported": "Esta redirección no es compatible con su instancia de Home Assistant. Consulte en {link} para conocer las redirecciones admitidas y la versión en la que se introdujeron."
},
"page-authorize": {
"abort_intro": "Inicio de sesión cancelado",
@@ -3008,11 +3111,11 @@
"providers": {
"command_line": {
"abort": {
"login_expired": "La sesión expiró, por favor inicie sesión nuevamente."
"login_expired": "La sesión expiró, por favor inicie nuevamente."
},
"error": {
"invalid_auth": "Nombre de usuario o contraseña inválidos",
"invalid_code": "Código de autenticación inválido"
"invalid_auth": "Nombre de usuario o contraseña no válido",
"invalid_code": "Código de autenticación no válido"
},
"step": {
"init": {
@@ -3025,7 +3128,7 @@
"data": {
"code": "Código de autenticación de dos factores"
},
"description": "Abra el **{mfa_module_name}** en su dispositivo para ver su código de autenticar de dos factores y verificar su identidad:"
"description": "Abra el **{mfa_module_name}** en su dispositivo para ver su código de autenticación de dos factores y verificar su identidad:"
}
}
},
@@ -3048,7 +3151,7 @@
"data": {
"code": "Código de autenticación de dos factores"
},
"description": "Abra el **{mfa_module_name}** en su dispositivo para ver su código de autenticar de dos factores y verificar su identidad:"
"description": "Abra el **{mfa_module_name}** en su dispositivo para ver su código de autenticación de dos factores y verificar su identidad:"
}
}
},
@@ -3058,7 +3161,7 @@
"no_api_password_set": "No tienes una contraseña API configurada."
},
"error": {
"invalid_auth": "Contraseña API inválida",
"invalid_auth": "Contraseña API no válida",
"invalid_code": "Código de autenticación inválido"
},
"step": {
@@ -3072,13 +3175,13 @@
"data": {
"code": "Código de autenticación de dos factores"
},
"description": "Abra el **{mfa_module_name}** en su dispositivo para ver su código de autenticar de dos factores y verificar su identidad:"
"description": "Abra el **{mfa_module_name}** en su dispositivo para ver su código de autenticación de dos factores y verificar su identidad:"
}
}
},
"trusted_networks": {
"abort": {
"not_allowed": "El equipo no está permitido."
"not_allowed": "Su equipo no está permitido."
},
"step": {
"init": {
@@ -3150,7 +3253,8 @@
"intro": "Hola {name}, bienvenido a Home Assistant. ¿Cómo te gustaría llamar a tu casa?",
"intro_location": "Nos gustaría saber dónde vives. Esta información ayudará a mostrar información y configurar automatizaciones basadas en el sol. Estos datos nunca se comparten fuera de tu red.",
"intro_location_detect": "Podemos ayudarte a completar esta información realizando una solicitud única a un servicio externo.",
"location_name_default": "En Casa"
"location_name": "Nombre de su instalación de Home Assistant",
"location_name_default": "Casa"
},
"integration": {
"finish": "Terminar",
@@ -3159,7 +3263,10 @@
},
"intro": "¿Estás listo para despertar tu hogar, reclamar tu privacidad y unirte a una comunidad mundial de experimentadores?",
"restore": {
"in_progress": "Restauración en progreso"
"description": "También se puede restaurar desde una instantánea anterior.",
"hide_log": "Ocultar registro completo",
"in_progress": "Restauración en progreso",
"show_log": "Mostrar registro completo"
},
"user": {
"create_account": "Crear una cuenta",
@@ -3266,7 +3373,7 @@
"created_at": "Creado en {date}",
"current_token_tooltip": "No se puede eliminar el token de actualización actual",
"delete_failed": "No se pudo eliminar el token de actualización.",
"description": "Cada token de actualización representa una sesión de inicio de sesión. Los tokens de actualización se eliminarán automáticamente cuando haga clic en cerrar sesión. Los siguientes tokens de actualización están actualmente activos para su cuenta.",
"description": "Cada token de actualización representa un inicio de sesión. Los tokens de actualización se eliminarán automáticamente cuando haga clic en cerrar sesión. Los siguientes tokens de actualización están actualmente activos para su cuenta.",
"header": "Actualizar tokens",
"last_used": "Utilizado por última vez en {date} desde {location}.",
"not_used": "Nunca se ha utilizado",
@@ -3277,10 +3384,18 @@
"header": "Conexión cerrada automáticamente"
},
"themes": {
"accent_color": "Color de acento",
"dark_mode": {
"auto": "Automático",
"dark": "Oscuro",
"light": "Claro"
},
"dropdown_label": "Tema",
"error_no_theme": "No hay temas disponibles.",
"header": "Tema",
"link_promo": "Más información sobre los temas"
"link_promo": "Más información sobre los temas",
"primary_color": "Color primario",
"reset": "Restablecer"
},
"vibrate": {
"description": "Habilitar o deshabilitar la vibración en este dispositivo al controlar dispositivos.",
+6 -4
View File
@@ -120,7 +120,7 @@
},
"automation": {
"last_triggered": "Última activación",
"trigger": "Ejecutar"
"trigger": "Ejecutar acciones"
},
"camera": {
"not_available": "Imagen no disponible"
@@ -200,7 +200,8 @@
},
"script": {
"cancel": "Cancelar",
"cancel_multiple": "Cancelar {number}"
"cancel_multiple": "Cancelar {number}",
"run": "Ejecutar"
},
"service": {
"run": "Ejecutar"
@@ -695,6 +696,7 @@
"scene": "Escenas",
"script": "Scripts",
"server_control": "Controles del servidor",
"tag": "Etiquetas",
"tags": "Etiquetas",
"users": "Usuarios",
"zone": "Zonas"
@@ -963,7 +965,7 @@
"delete_confirm": "¿Estás seguro de que quieres eliminarlo?",
"duplicate": "Duplicar",
"header": "Condiciones",
"introduction": "Las condiciones son opcionales e impedirán cualquier\nejecución posterior a menos que se cumplan todas las condiciones.",
"introduction": "Las condiciones son opcionales y evitarán que la automatización funcione a menos que se cumplan todas las condiciones.",
"learn_more": "Aprende más sobre las condiciones",
"name": "Condición",
"type_select": "Tipo de condición",
@@ -2171,7 +2173,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Añadir etiqueta",
"automation_title": "Se escanea la etiqueta {name}",
"caption": "Etiquetas",
+23 -21
View File
@@ -120,7 +120,7 @@
},
"automation": {
"last_triggered": "Viimati käivitatud",
"trigger": "Käivita"
"trigger": "Käivita toimingud"
},
"camera": {
"not_available": "Kujutis pole saadaval"
@@ -200,7 +200,8 @@
},
"script": {
"cancel": "Loobu",
"cancel_multiple": "Loobu {number}"
"cancel_multiple": "Loobu {number}",
"run": "Käivita"
},
"service": {
"run": "Käivita"
@@ -695,6 +696,7 @@
"scene": "Stseenid",
"script": "Scriptid",
"server_control": "Serveri juhtimine",
"tag": "Märgised",
"tags": "Märgised",
"users": "Kasutajad",
"zone": "Tsoonid"
@@ -963,7 +965,7 @@
"delete_confirm": "Oled kindel, et soovid kustutada?",
"duplicate": "Duubelda",
"header": "Tingimused",
"introduction": "Tingimused on automatiseeringu valikuline osa ja neid saab kasutada, et vältida tegevuse käivitumist päästiku vallandumisel. Tingimused tunduvadga sarnased päästikutele, kuid on siiski erinevad. Päästik jälgib süsteemis toimuvaid sündmusi, tingimus jälgib ainult süsteem praegust olekut. Päästik võib märgata, et lülitit ollakse parasjagu lülitamas. Tingimus võib näha ainult seda, kas lüliti on praegu sisse või välja lülitatud.",
"introduction": "Tingimused on valikulised ja takistavad automatiseerimise käivitamist,lja arvatud juhul kui kõik tingimused on täidetud.",
"learn_more": "Lisateave tingimuste kohta",
"name": "Tingimus",
"type_select": "Tingimuse tüüp",
@@ -1267,7 +1269,7 @@
"manage_entities": "Halda olemeid",
"security_devices": "Turvaseadmed",
"sync_entities": "Sünkrooni olemid Google'iga",
"sync_entities_404_message": "Teie olemite Google'iga sünkroonimine ebaõnnestus, paluge Google'il teie olemite sünkroonimiseks \"Hey Google, sync my devices\".",
"sync_entities_404_message": "Teie olemite Google'iga sünkroonimine ebaõnnestus, paluge Google'il teie olemite sünkroonimist \"Hey Google, sync my devices\".",
"title": "Google Assistant"
},
"integrations": "Sidumised",
@@ -1280,9 +1282,9 @@
"remote": {
"access_is_being_prepared": "Kaugjuurdepääs on ettevalmistamisel. Teavitame teid, kui see on valmis.",
"certificate_info": "Sertifikaadi teave",
"info": "Home Assistant Cloud pakub turvalist kaugühendust teie Home Assistantiga kodust eemal olles.",
"info": "Home Assistant Cloud pakub turvalist kaugühendust Home Assistantiga kodust eemal olles.",
"instance_is_available": "Teie Home Assistant on saadaval aadressil",
"instance_will_be_available": "Teie Home Assistanti on aadressiks saab",
"instance_will_be_available": "Teie Home Assistanti aadressiks saab",
"link_learn_how_it_works": "Loe kuidas see töötab",
"title": "Kaugjuhtimine"
},
@@ -1466,7 +1468,7 @@
},
"warning": {
"include_link": "kaasa customize.yaml",
"include_sentence": "Tundub, et teie configuration.yaml ei tee õigesti",
"include_sentence": "Tundub, et Teie configuration.yaml ei tee õigesti",
"not_applied": "Siin tehtud muudatused on salvestatud kuid neid ei rakendata enne konfiguratsiooni uuesti laadimist kui kaasamine pole paigas."
}
},
@@ -1746,7 +1748,7 @@
"discovered": "Leitud",
"home_assistant_website": "Home Assistant veebisait",
"ignore": {
"confirm_delete_ignore": "See muudab sidumiseteie avastatudsidumistes uuesti ilmnema kui see avastatakse. See võib vajada taaskäivitamist või võtta veidi aega.",
"confirm_delete_ignore": "See muudab sidumise teie avastatud sidumistes uuesti ilmnema kui see avastatakse. See võib vajada taaskäivitamist või võtta veidi aega.",
"confirm_delete_ignore_title": "Kas lõpetada {name} eiramine?",
"confirm_ignore": "Olete Te kindel, et ei soovi seda integratsiooni seadistada? Selle saate tagasi võtta klõpsates paremas ülanurgas menüüs valikul „Kuva ignoreeritud sidumised”.",
"confirm_ignore_title": "Kas eirata {name} avastamist?",
@@ -2079,7 +2081,7 @@
"id": "Olemi ID",
"id_already_exists": "See ID on juba olemas",
"id_already_exists_save_error": "Te ei saa seda skripti salvestada kuna ID pole kordumatu. Valige mõni teine ID või jätke see väli tühjaks, et see automaatselt luua.",
"introduction": "Skriptide abil saate käivitada toimingute jada.",
"introduction": "Skriptide abil saad käivitada toimingute jada.",
"link_available_actions": "Vaadake lisateavet saadaolevate toimingute kohta.",
"load_error_not_editable": "Ainult scripts.yaml failis asuvad skriptid on muudetavad.",
"max": {
@@ -2171,13 +2173,13 @@
}
}
},
"tags": {
"add_tag": "Lisa TAG",
"automation_title": "TAG {name} on skannitud",
"caption": "TAGid",
"tag": {
"add_tag": "Lisa märgis",
"automation_title": "Märgis {name} on skannitud",
"caption": "Märgised",
"confirm_remove": "Kas soovid kindlasti eemaldada märgise {tag}?",
"confirm_remove_title": "Kas kustutan märgise?",
"create_automation": "Lisa automatiseering TAG abil",
"create_automation": "Lisa automatiseering märgise abil",
"description": "Käivita automaatiseering NFC-sildi, QR-koodi jne. skännimisel",
"detail": {
"companion_apps": "mobiilirakendused",
@@ -2186,8 +2188,8 @@
"delete": "Kustuta",
"description": "Kirjeldus",
"name": "Nimi",
"new_tag": "Uus TAG",
"tag_id": "TAG ID",
"new_tag": "Uus märgis",
"tag_id": "Märgise ID",
"tag_id_placeholder": "Tühjaks jätmise korral luuakse automaatselt",
"update": "Uuenda",
"usage": "Silt võib skannimisel käivitada automaatiseeringu. Võite kasutada NFC-silte, QR-koode või muud tüüpi silte. Kasutage meie äppi {companion_link}, et kirjutada see silt programmeeritavale NFC-märgendile või luua allpool QR-kood."
@@ -2198,9 +2200,9 @@
"name": "Nimi"
},
"learn_more": "Lisateave märgiste kohta",
"never_scanned": "TAGe pole skaneeritud",
"no_tags": "TAGe pole",
"write": "Salvesta TAG"
"never_scanned": "Märgiseid pole skännitud",
"no_tags": "Märgiseid pole",
"write": "Salvesta märgis"
},
"users": {
"add_user": {
@@ -2631,7 +2633,7 @@
"no_entity_more_info": "Lisateabe kuvamise olem puudub",
"no_entity_toggle": "Lülitamiseks vajalik olem puudub",
"no_navigation_path": "Navigeerimisteed pole määratud",
"no_service": "Täitmiseks pole teenust määratud",
"no_service": "Käivitamiseks pole teenust määratud",
"no_url": "Avamiseks vajalik link puudub"
},
"confirm_delete": "Oled kindel, et soovid selle kaardi kustutada?",
@@ -3250,7 +3252,7 @@
"button_detect": "Tuvasta",
"finish": "Edasi",
"intro": "Tere tulemast Home Assistant'i kasutama, {name}. Kuidas sa soovid oma kodu nimetada?",
"intro_location": "Soovime teada, kus sa elad. See teave aitab informatsiooni kuvamisel ja päikesepõhiste automatiseeringute loomisel. Neid andmeid ei jagata kunagi väljaspool teie võrku.",
"intro_location": "Soovime teada kus sa elad. See teave aitab teabe kuvamisel ja päikesepõhiste automatiseeringute loomisel. Neid andmeid ei jagata kunagi väljaspool teie võrku.",
"intro_location_detect": "Me saame aidata sul seda teavet leida, tehes ühekordse päringu välisele teenusele.",
"location_name": "Sinu Home Assistant paigalduse nimi",
"location_name_default": "Kodu"
+1 -1
View File
@@ -1297,7 +1297,7 @@
}
}
},
"tags": {
"tag": {
"detail": {
"delete": "حذف",
"name": "نام",
+1 -1
View File
@@ -2070,7 +2070,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Lisää tunniste",
"automation_title": "Tunniste {name} skannataan",
"caption": "Tunnisteet",
+40 -3
View File
@@ -200,7 +200,8 @@
},
"script": {
"cancel": "Annuler",
"cancel_multiple": "Annuler {number}"
"cancel_multiple": "Annuler {number}",
"run": "Exécuter"
},
"service": {
"run": "Exécuter"
@@ -295,6 +296,19 @@
"yes": "Oui"
},
"components": {
"addon-picker": {
"addon": "Modules complémentaires",
"error": {
"fetch_addons": {
"description": "La récupération des modules complémentaires a renvoyé une erreur.",
"title": "Erreur lors de la récupération des modules complémentaires"
},
"no_supervisor": {
"description": "Aucun Superviseur n'a été trouvé, donc les modules complémentaires n'ont pas pu être chargés.",
"title": "Aucun superviseur"
}
}
},
"area-picker": {
"add_dialog": {
"add": "Ajouter",
@@ -682,6 +696,7 @@
"scene": "Scènes",
"script": "Scripts",
"server_control": "Contrôle du serveur",
"tag": "Balises",
"tags": "Balises",
"users": "Utilisateurs",
"zone": "Zones"
@@ -1485,6 +1500,7 @@
"cant_edit": "Vous ne pouvez modifier que les éléments créés dans l'interface utilisateur.",
"caption": "Appareils",
"confirm_delete": "Voulez-vous vraiment supprimer cet appareil ?",
"confirm_disable_config_entry": "Il n'y a plus de périphériques pour l'entrée de configuration {entry_name} , voulez-vous à la place désactiver l'entrée de configuration?",
"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 automatisations, les scripts, les scènes, Lovelace) qui utilisent actuellement ces entités, vous devrez les mettre à jour vous-même.",
"data_table": {
@@ -1597,7 +1613,8 @@
},
"filtering": {
"clear": "Effacer",
"filtering_by": "Filtrage par"
"filtering_by": "Filtrage par",
"show": "Montrer"
},
"header": "Configurer Home Assistant",
"helpers": {
@@ -1668,7 +1685,19 @@
"delete_confirm": "Êtes-vous sûr de vouloir supprimer cette intégration?",
"device_unavailable": "Appareil non disponible",
"devices": "{count} {count, plural,\n zero {appareil}\n one {appareil}\n other {appareils}\n}",
"disable_restart_confirm": "Redémarrez Home Assistant pour terminer la désactivation de cette intégration",
"disable": {
"disable_confirm": "Voulez-vous vraiment désactiver cette entrée de configuration? Ses appareils et entités seront désactivés.",
"disabled": "Désactivé",
"disabled_by": {
"device": "appareil",
"integration": "intégration",
"user": "utilisateur"
},
"disabled_cause": "Désactivé par {cause}"
},
"documentation": "Documentation",
"enable_restart_confirm": "Redémarrez Home Assistant pour terminer l'activation de cette intégration",
"entities": "{count} {count, plural,\n zero {entité}\n one {entité}\n other {entités}\n}",
"entity_unavailable": "Entité indisponible",
"firmware": "Firmware: {version}",
@@ -1711,6 +1740,11 @@
"confirm_new": "Voulez-vous configurer {intégration} ?",
"description": "Gérer les appareils et services connectés",
"details": "Détails de l'intégration",
"disable": {
"disabled_integrations": "{number} désactivé",
"hide_disabled": "Masquer les intégrations désactivées",
"show_disabled": "Afficher les intégrations désactivées"
},
"discovered": "Découvert",
"home_assistant_website": "site web de Home Assistant",
"ignore": {
@@ -2139,7 +2173,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Ajouter une balise",
"automation_title": "La balise {name} est analysée",
"caption": "Balises",
@@ -2536,6 +2570,7 @@
"states": {
"alert_entity_field": "L'entité est un champ obligatoire",
"attributes": "Attributs",
"copy_id": "Copier l'ID dans le presse-papiers",
"current_entities": "Entités actuelles",
"description1": "Définir la représentation d'un périphérique dans Home Assistant.",
"description2": "Cela ne communiquera pas avec le périphérique réel.",
@@ -3062,8 +3097,10 @@
},
"my": {
"component_not_loaded": "Cette redirection n'est pas prise en charge par votre instance Home Assistant. Vous avez besoin de l'intégration {integration} pour utiliser cette redirection.",
"documentation": "documentation",
"error": "Une erreur inconnue est survenue",
"faq_link": "Ma Home Assistant FAQ",
"no_supervisor": "Cette redirection n'est pas prise en charge par votre installation Home Assistant. Il nécessite soit le système d'exploitation Home Assistant, soit la méthode d'installation supervisée par Home Assistant. Pour plus d'informations, consultez le {docs_link} .",
"not_supported": "Cette redirection n'est pas prise en charge par votre instance Home Assistant. Vérifiez le {link} pour les redirections prises en charge et la version dans laquelle elles ont été introduites."
},
"page-authorize": {
+1 -1
View File
@@ -1771,7 +1771,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "הוסף תג",
"automation_title": "התג {name} נסרק",
"caption": "תגים",
+1 -1
View File
@@ -2098,7 +2098,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Címke hozzáadása",
"automation_title": "{name} címke beolvasva",
"caption": "Címkék",
+362 -63
View File
@@ -40,24 +40,46 @@
"heating": "Memanaskan",
"idle": "Diam",
"off": "Mati"
},
"preset_mode": {
"activity": "Aktivitas",
"away": "Keluar",
"comfort": "Nyaman",
"eco": "Eco",
"home": "Rumah",
"none": "Tidak ada",
"sleep": "Tidur"
}
},
"humidifier": {
"mode": {
"auto": "Otomatis",
"away": "Keluar",
"baby": "Bayi",
"comfort": "Nyaman",
"eco": "Eco",
"home": "Rumah",
"normal": "Normal",
"sleep": "Tidur"
}
}
},
"state_badge": {
"alarm_control_panel": {
"armed": "Armed",
"armed_away": "Armed",
"armed_custom_bypass": "Armed",
"armed_home": "Armed",
"armed_night": "Armed",
"arming": "Arming",
"disarmed": "Disarm",
"disarming": "Disarm",
"armed": "Diaktifkan",
"armed_away": "Diaktifkan",
"armed_custom_bypass": "Diaktifkan",
"armed_home": "Diaktifkan",
"armed_night": "Diaktifkan",
"arming": "Mengaktifkan",
"disarmed": "Nonaktif",
"disarming": "Nonaktif",
"pending": "Tunda",
"triggered": "Picu"
},
"default": {
"entity_not_found": "Entitas tidak ditemukan",
"error": "Kesalahan",
"unavailable": "Tak Tersedia",
"unknown": "Tak Diketahui"
},
@@ -86,18 +108,22 @@
},
"card": {
"alarm_control_panel": {
"arm_away": "Aktifkan utk keluar",
"arm_home": "Aktifkan utk di rumah",
"arm_night": "Aktifkan utk malam",
"clear_code": "Hapus",
"code": "Kode"
"code": "Kode",
"disarm": "Nonaktifkan"
},
"automation": {
"last_triggered": "Terakhir terpicu",
"trigger": "Picu"
"trigger": "Jalankan Aksi"
},
"camera": {
"not_available": "Gambar tidak tersedia"
},
"climate": {
"aux_heat": "Aux panas",
"aux_heat": "Pemanasan tambahan",
"away_mode": "Mode keluar rumah",
"cooling": "Pendinginan {name}",
"current_temperature": "Suhu {name} saat ini",
@@ -112,8 +138,8 @@
"swing_mode": "Mode ayunan",
"target_humidity": "Target kelembaban",
"target_temperature": "Target suhu",
"target_temperature_entity": "target suhu {name}",
"target_temperature_mode": "{nama} target suhu {mode}"
"target_temperature_entity": "Target suhu {name}",
"target_temperature_mode": "Target suhu {name} {mode}"
},
"counter": {
"actions": {
@@ -171,7 +197,8 @@
},
"script": {
"cancel": "Batalkan",
"cancel_multiple": "Batalkan {number}"
"cancel_multiple": "Batalkan {number}",
"run": "Jalankan"
},
"service": {
"run": "Jalankan"
@@ -343,6 +370,17 @@
"by_service": "berdasarkan layanan",
"entries_not_found": "Tidak ada entri buku log yang ditemukan.",
"messages": {
"became_unavailable": "menjadi tidak tersedia",
"changed_to_state": "berubah menjadi {state}",
"cleared_device_class": "dibersihkan (tidak ada {device_class} yang terdeteksi)",
"detected_device_class": "terdeteksi {device_class}",
"rose": "terbit",
"set": "terbenam",
"turned_off": "dimatikan",
"turned_on": "dinyalakan",
"was_at_home": "terdeteksi di rumah",
"was_at_state": "terdeteksi pada {state}",
"was_away": "terdeteksi keluar",
"was_closed": "telah ditutup",
"was_connected": "telah terhubung",
"was_disconnected": "telah terputus",
@@ -376,13 +414,37 @@
"music": "Musik",
"playlist": "Daftar Putar",
"podcast": "Podcast",
"season": "Musim"
"season": "Musim",
"track": "Lacak",
"tv_show": "Acara TV",
"url": "URL",
"video": "Video"
},
"learn_adding_local_media": "Pelajari lebih lanjut tentang menambahkan media di {documentation}."
"documentation": "dokumentasi",
"learn_adding_local_media": "Pelajari lebih lanjut tentang menambahkan media di {documentation}.",
"local_media_files": "Tempatkan file video, audio, dan gambar Anda di direktori media untuk dapat menelusuri dan memutarnya di browser atau pada pemutar media yang didukung.",
"media_browsing_error": "Kesalahan Browser Media",
"media_not_supported": "Pemutar Media Browser tidak mendukung jenis media ini",
"media_player": "Pemutar Media",
"media-player-browser": "Browser Pemutar Media",
"no_items": "Tidak ada item",
"no_local_media_found": "Tidak ditemukan media lokal",
"no_media_folder": "Sepertinya Anda belum membuat direktori media.",
"pick": "Pilih",
"pick-media": "Pilih Media",
"play": "Putar",
"play-media": "Putar Media",
"setup_local_help": "Periksa {documentation} tentang cara menyiapkan media lokal.",
"video_not_supported": "Browser Anda tidak mendukung elemen video.",
"web-browser": "Browser Web"
},
"picture-upload": {
"label": "Gambar",
"unsupported_format": "Format tidak didukung, pilih gambar JPEG, PNG, atau GIF."
},
"related-items": {
"area": "Area",
"automation": "Bagian dari otomatisasi berikut",
"automation": "Bagian dari otomasi berikut",
"device": "Perangkat",
"entity": "Entitas terkait",
"group": "Bagian dari grup berikut",
@@ -399,8 +461,18 @@
"second": "{count} {count, plural,\n one { detik }\n other { detik }\n}",
"week": "{count} {count, plural,\n one { minggu }\n other { minggu }\n}"
},
"future_duration": {
"day": "Dalam {count} {count, plural,\n one {hari}\n other {hari}\n}",
"hour": "Dalam {count} {count, plural,\n one {jam}\n other {jam}\n}",
"minute": "Dalam {count} {count, plural,\n one {menit}\n other {menit}\n}",
"second": "Dalam {count} {count, plural,\n one {detik}\n other {detik}\n}",
"week": "Dalam {count} {count, plural,\n one {minggu}\n other {minggu}\n}"
},
"just_now": "Baru saja",
"never": "Tak pernah",
"past_duration": {
"day": "{count} {count, plural,\n one {hari}\n other {hari}\n} lalu",
"hour": "{count} {count, plural,\n one {jam}\n other {jam}\n} lalu",
"minute": "{count} {count, plural,\n one {menit}\n other {menit}\n} lalu",
"second": "{count} {count, plural,\n one {detik}\n other {detik}\n} lalu",
"week": "{count} {count, plural,\n one {minggu}\n other {minggu}\n} lalu"
@@ -603,7 +675,7 @@
"commands": {
"navigation": {
"areas": "Area",
"automation": "Otomatisasi",
"automation": "Otomasi",
"blueprint": "Blueprint",
"core": "Umum",
"customize": "Penyesuaian",
@@ -619,12 +691,13 @@
"scene": "Scene",
"script": "Skrip",
"server_control": "Kontrol Server",
"tag": "Tag",
"tags": "Tag",
"users": "Pengguna",
"zone": "Zona"
},
"reload": {
"automation": "Muat ulang otomatisasi",
"automation": "Muat ulang otomasi",
"command_line": "Muat ulang entitas baris perintah",
"core": "Muat ulang lokasi & penyesuaian",
"filesize": "Muat ulang entitas ukuran file",
@@ -711,6 +784,12 @@
"errors": {
"config": {
"edit_in_yaml_supported": "Anda masih dapat mengedit konfigurasi Anda di YAML.",
"editor_not_available": "Tidak ada editor visual yang tersedia untuk tipe \"{type}\".",
"editor_not_supported": "Editor visual tidak didukung untuk konfigurasi ini",
"error_detected": "Kesalahan konfigurasi terdeteksi",
"key_missing": "Kunci yang diperlukan \"{key}\" tidak ada.",
"key_not_expected": "Kunci \"{key}\" tidak diharapkan atau tidak didukung oleh editor visual.",
"key_wrong_type": "Nilai yang disediakan untuk \"{key}\" tidak didukung oleh editor visual. Kami mendukung ({type_correct}) tetapi diterima ({type_wrong}).",
"no_type_provided": "Tidak ada tipe yang tersedia."
}
},
@@ -721,12 +800,18 @@
},
"notification_drawer": {
"click_to_configure": "Klik tombol untuk mengonfigurasi {entity}",
"close": "Tutup",
"dismiss_all": "Tutup semua",
"empty": "Tidak Ada Notifikasi",
"title": "Notifikasi"
},
"notification_toast": {
"connection_lost": "Koneksi terputus. Menghubungkan kembali…",
"service_call_failed": "Gagal memanggil layanan {service}."
"dismiss": "Tutup",
"service_call_failed": "Gagal memanggil layanan {service}.",
"started": "Home Assistant telah dimulai!",
"starting": "Home Assistant sedang dimulai, belum semuanya akan tersedia hingga selesai.",
"triggered": "Dipicu {name}"
},
"panel": {
"config": {
@@ -765,7 +850,7 @@
}
},
"automation": {
"caption": "Otomatisasi",
"caption": "Otomasi",
"description": "Buat aturan perilaku khusus untuk rumah Anda",
"dialog_new": {
"blueprint": {
@@ -1079,10 +1164,10 @@
},
"picker": {
"add_automation": "Tambah otomasi",
"delete_automation": "Hapus otomatisasi",
"delete_confirm": "Yakin ingin menghapus otomatisasi ini?",
"delete_automation": "Hapus otomasi",
"delete_confirm": "Yakin ingin menghapus otomasi ini?",
"duplicate": "Gandakan",
"duplicate_automation": "Gandakan otomatisasi",
"duplicate_automation": "Gandakan otomasi",
"edit_automation": "Edit otomasi",
"header": "Editor Otomasi",
"headers": {
@@ -1093,7 +1178,7 @@
"no_automations": "Kami tidak dapat menemukan otomasi yang dapat diedit",
"only_editable": "Hanya otomasi yang didefinisikan di automations.yaml yang bisa diedit.",
"pick_automation": "Pilih otomasi untuk diedit",
"show_info_automation": "Tampilkan info tentang otomatisasi"
"show_info_automation": "Tampilkan info tentang otomasi"
},
"thingtalk": {
"create": "Buat otomasi",
@@ -1104,10 +1189,10 @@
},
"task_selection": {
"error_empty": "Masukkan perintah atau ketuk lewati.",
"error_unsupported": "Kami tidak dapat membuat otomatisasi untuk itu (belum?).",
"error_unsupported": "Kami (masih?) belum dapat membuat otomasi untuk itu.",
"for_example": "Misalnya:",
"header": "Buat otomatisasi baru",
"introduction": "Ketik di bawah ini apa yang harus dilakukan oleh otomatisasi ini, dan kami akan mencoba mengubahnya menjadi otomatisasi Home Assistant.",
"header": "Buat otomasi baru",
"introduction": "Ketik di bawah ini apa yang harus dilakukan oleh otomasi ini, dan kami akan mencoba mengubahnya menjadi otomasi Home Assistant.",
"language_note": "Catatan: Saat ini hanya bahasa Inggris yang didukung."
}
}
@@ -1121,10 +1206,10 @@
"import_btn": "Pratinjau blueprint",
"import_header": "Blueprint \"{name}\"",
"import_introduction_link": "Anda dapat mengimpor blueprint pengguna lain dari Github dan {community_link}. Masukkan URL blueprint di bawah ini.",
"importing": "Memuat blueprint...",
"importing": "Memuat blueprint",
"raw_blueprint": "Isi blueprint",
"save_btn": "Impor blueprint",
"saving": "Mengimpor blueprint...",
"saving": "Mengimpor blueprint",
"unsupported_blueprint": "Blueprint ini tidak didukung",
"url": "URL blueprint"
},
@@ -1199,7 +1284,7 @@
"title": "Kontrol Jarak Jauh"
},
"sign_out": "Keluar",
"thank_you_note": "Terima kasih telah menjadi bagian dari Home Assistant Cloud. Berkat orang-orang seperti Anda, kami dapat membuat pengalaman otomatisasi rumah yang hebat untuk semua orang. Terima kasih!",
"thank_you_note": "Terima kasih telah menjadi bagian dari Home Assistant Cloud. Berkat orang-orang seperti Anda, kami dapat membuat pengalaman otomasi rumah yang hebat untuk semua orang. Terima kasih!",
"tts": {
"default_language": "Bahasa baku untuk digunakan",
"dialog": {
@@ -1210,7 +1295,7 @@
"target_browser": "Browser"
},
"female": "Perempuan",
"info": "Bawa kepribadian ke rumah Anda dengan memintanya berbicara kepada Anda dengan menggunakan layanan Teks ke Ucapan kami. Anda dapat menggunakan ini dalam otomatisasi dan skrip dengan menggunakan layanan {service}.",
"info": "Bawa kepribadian ke rumah Anda dengan memintanya berbicara kepada Anda dengan menggunakan layanan Teks ke Ucapan kami. Anda dapat menggunakan ini dalam otomasi dan skrip dengan menggunakan layanan {service}.",
"male": "Pria",
"title": "Teks ke Ucapan",
"try": "Coba"
@@ -1218,11 +1303,11 @@
"webhooks": {
"disable_hook_error_msg": "Gagal menonaktifkan webhook:",
"info": "Semua yang dikonfigurasi untuk dipicu oleh webhook dapat ditetapkan URL-nya, yang dapat diakses publik untuk memungkinkan Anda mengirim data kembali ke Home Assistant dari mana saja, tanpa mengekspos instans Anda ke internet.",
"link_learn_more": "Pelajari lebih lanjut tentang membuat otomatisasi yang didukung webhook.",
"loading": "Memuat...",
"link_learn_more": "Pelajari lebih lanjut tentang membuat otomasi yang didukung webhook.",
"loading": "Memuat",
"manage": "Kelola",
"no_hooks_yet": "Sepertinya Anda belum memiliki webhook. Mulailah dengan mengonfigurasi",
"no_hooks_yet_link_automation": "otomatisasi webhook",
"no_hooks_yet_link_automation": "otomasi webhook",
"no_hooks_yet_link_integration": "integrasi berbasis webhook",
"no_hooks_yet2": " atau dengan membuat ",
"title": "Webhook"
@@ -1386,26 +1471,26 @@
"add_prompt": "Belum ada {name} yang ditambahkan menggunakan perangkat ini. Anda dapat menambahkannya dengan mengklik tombol + di atas.",
"automation": {
"actions": {
"caption": "Ketika sesuatu dipicu...",
"caption": "Ketika sesuatu dipicu",
"no_actions": "Tidak ada aksi",
"unknown_action": "Aksi tidak diketahui"
},
"automations": "Otomatisasi",
"automations": "Otomasi",
"conditions": {
"caption": "Lakukan sesuatu hanya jika...",
"caption": "Lakukan sesuatu hanya jika",
"no_conditions": "Tidak ada kondisi",
"unknown_condition": "Kondisi tidak diketahui"
},
"create": "Buat otomatisasi dengan perangkat",
"create_disable": "Tidak dapat membuat otomatisasi dengan perangkat yang dinonaktifkan",
"no_automations": "Tidak ada otomatisasi",
"no_device_automations": "Tidak ada otomatisasi yang tersedia untuk perangkat ini.",
"create": "Buat otomasi dengan perangkat",
"create_disable": "Tidak dapat membuat otomasi dengan perangkat yang dinonaktifkan",
"no_automations": "Tidak ada otomasi",
"no_device_automations": "Tidak ada otomasi yang tersedia untuk perangkat ini.",
"triggers": {
"caption": "Lakukan sesuatu jika...",
"caption": "Lakukan sesuatu jika",
"no_triggers": "Tidak ada pemicu",
"unknown_trigger": "Pemicu tidak diketahui"
},
"unknown_automation": "Otomatisasi tidak diketahui"
"unknown_automation": "Otomasi tidak diketahui"
},
"cant_edit": "Anda hanya dapat mengedit item yang dibuat di antarmuka.",
"caption": "Perangkat",
@@ -1689,7 +1774,7 @@
"description": "Lihat log Home Assistant",
"details": "Detail Log ({level})",
"load_full_log": "Muat Log Lengkap Home Assistant",
"loading_log": "Memuat log kesalahan...",
"loading_log": "Memuat log kesalahan",
"multiple_messages": "pesan pertama kali muncul pada {time} dan muncul {counter} kali",
"no_errors": "Tidak ada kesalahan yang dilaporkan.",
"no_issues": "Tidak ada masalah baru!",
@@ -1883,7 +1968,7 @@
"complete": "Penyegaran Node Selesai",
"description": "Ini akan memberi tahu OpenZWave untuk mewawancarai kembali node dan memperbarui kelas, kapabilitas, dan nilai perintah node.",
"node_status": "Status Node",
"refreshing_description": "Menyegarkan informasi node...",
"refreshing_description": "Menyegarkan informasi node",
"start_refresh_button": "Mulai Segarkan",
"step": "Langkah",
"title": "Segarkan Informasi Node",
@@ -1991,7 +2076,7 @@
"id": "ID Entitas",
"id_already_exists": "ID ini sudah ada",
"id_already_exists_save_error": "Anda tidak dapat menyimpan skrip ini karena ID tidak unik, pilih ID lain atau biarkan kosong untuk membuat ID secara otomatis.",
"introduction": "Gunakan skrip untuk menjalankan serangkaian tindakan berurutan.",
"introduction": "Gunakan skrip untuk menjalankan serangkaian aksi berurutan.",
"link_available_actions": "Pelajari lebih lanjut tentang tindakan yang tersedia.",
"load_error_not_editable": "Hanya skrip di dalam scripts.yaml yang dapat diedit.",
"max": {
@@ -2032,7 +2117,7 @@
"description": "Mulai ulang dan hentikan server Home Assistant",
"section": {
"reloading": {
"automation": "Muat ulang otomatisasi",
"automation": "Muat ulang otomasi",
"command_line": "Muat ulang entitas baris perintah",
"core": "Muat ulang lokasi & penyesuaian",
"filesize": "Muat ulang entitas ukuran file",
@@ -2083,13 +2168,13 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Tambahkan tag",
"automation_title": "Tag {name} dipindai",
"caption": "Tag",
"confirm_remove": "Yakin ingin menghapus tag {tag}?",
"confirm_remove_title": "Hapus tag?",
"create_automation": "Buat otomatisasi dengan tag",
"create_automation": "Buat otomasi dengan tag",
"description": "Picu otomasi ketika tag NFC, kode QR, dll dipindai",
"detail": {
"companion_apps": "aplikasi pendamping",
@@ -2102,7 +2187,7 @@
"tag_id": "ID Tag",
"tag_id_placeholder": "Dibuat otomatis saat dibiarkan kosong",
"update": "Perbarui",
"usage": "Tag dapat memicu otomatisasi saat dipindai, Anda dapat menggunakan tag NFC, kode QR, atau jenis tag lainnya. Gunakan {companion_link} untuk menulis tag ini ke tag NFC yang dapat diprogram atau buat kode QR di bawah ini."
"usage": "Tag dapat memicu otomasi saat dipindai, Anda dapat menggunakan tag NFC, kode QR, atau jenis tag lainnya. Gunakan {companion_link} untuk menulis tag ini ke tag NFC yang dapat diprogram atau buat kode QR di bawah ini."
},
"edit": "Edit",
"headers": {
@@ -2167,7 +2252,7 @@
"no_devices_found": "Tidak ada perangkat yang ditemukan, pastikan perangkat dalam mode pairing dan tetap aktifkan saat pencarian sedang berjalan.",
"pairing_mode": "Pastikan perangkat Anda dalam mode pairing. Periksa petunjuk perangkat Anda tentang cara melakukannya.",
"search_again": "Cari Lagi",
"spinner": "Mencari perangkat ZHA Zigbee..."
"spinner": "Mencari perangkat ZHA Zigbee"
},
"button": "Konfigurasikan",
"cluster_attributes": {
@@ -2272,7 +2357,7 @@
"edit_home_zone_narrow": "Radius zona Rumah belum dapat diedit dari antarmuka. Lokasi dapat diubah dari konfigurasi umum.",
"go_to_core_config": "Buka konfigurasi umum?",
"home_zone_core_config": "Lokasi zona rumah Anda dapat diedit dari halaman konfigurasi umum. Radius zona Rumah belum dapat diedit dari antarmuka. Apakah Anda ingin membuka konfigurasi umum?",
"introduction": "Zona memungkinkan Anda untuk menentukan wilayah tertentu di bumi. Ketika seseorang berada dalam zona, status akan mengambil nama dari zona tersebut. Zona juga dapat digunakan sebagai pemicu atau kondisi di dalam pengaturan otomatisasi.",
"introduction": "Zona memungkinkan Anda untuk menentukan wilayah tertentu di bumi. Ketika seseorang berada dalam zona, status akan mengambil nama dari zona tersebut. Zona juga dapat digunakan sebagai pemicu atau kondisi di dalam pengaturan otomasi.",
"no_zones_created_yet": "Sepertinya Anda belum membuat zona."
},
"zwave_js": {
@@ -2368,7 +2453,8 @@
"network_status": {
"network_started": "Jaringan Z-Wave Dimulai",
"network_started_note_all_queried": "Semua node telah dikueri.",
"network_starting": "Memulai Jaringan Z-Wave...",
"network_started_note_some_queried": "Semua node yang bangun telah dikueri. Node yang tidur akan dikueri ketika nodenya bangun.",
"network_starting": "Memulai Jaringan Z-Wave…",
"network_starting_note": "Ini mungkin memakan waktu cukup lama tergantung pada ukuran jaringan Anda.",
"network_stopped": "Jaringan Z-Wave Berhenti"
},
@@ -2405,6 +2491,7 @@
},
"ozw_log": {
"header": "OZW Log",
"introduction": "Tampilkan log. Nilai 0 adalah nilai minimum (memuat keselurukan log) dan 1000 adalah nilai maksimum. Tombol Muat akan menampilkan log secara statis dan tombol Lihat Terakhir akan memperbarui secara otomatis dengan jumlah baris terlihat sesuai dengan yang Anda pilih.",
"last_log_lines": "Jumlah baris log terakhir",
"load": "Muat",
"tail": "Lihat Terakhir"
@@ -2434,24 +2521,90 @@
}
}
},
"custom": {
"external_panel": {
"complete_access": "Ini akan memiliki akses ke semua data di Home Assistant.",
"hide_message": "Periksa dokumentasi komponen panel_custom untuk menyembunyikan pesan ini",
"question_trust": "Apakah Anda mempercayai panel eksternal {name} di {link}?"
}
},
"developer-tools": {
"tabs": {
"events": {
"title": "Peristiwa"
"alert_event_type": "Jenis peristiwa adalah bidang wajib diisi",
"available_events": "Peristiwa yang Tersedia",
"count_listeners": " ({count} listener)",
"data": "Data Peristiwa (YAML, opsional)",
"documentation": "Dokumentasi Peristiwa.",
"listen_to_events": "Dengarkan ",
"title": "Peristiwa",
"type": "Jenis Peristiwa"
},
"services": {
"title": "Layanan"
"accepts_target": "Layanan ini menerima target, misalnya: 'entity_id: light.bed_light'",
"all_parameters": "Semua parameter yang tersedia",
"call_service": "Panggil Layanan",
"column_description": "Deskripsi",
"column_example": "Contoh",
"column_parameter": "Parameter",
"description": "Alat pengembang untuk layanan memungkinkan Anda memanggil layanan apa pun yang tersedia di Home Assistant.",
"fill_example_data": "Isi dengan Data Contoh",
"title": "Layanan",
"ui_mode": "Masuk ke mode antarmuka",
"yaml_mode": "Masuk ke mode YAML",
"yaml_parameters": "Parameter hanya tersedia dalam mode YAML"
},
"states": {
"alert_entity_field": "Entitas adalah bidang wajib",
"attributes": "Atribut",
"copy_id": "Salin ID ke papan klip",
"current_entities": "Entitas saat ini",
"description2": "Ini tidak akan berkomunikasi dengan perangkat yang sebenarnya.",
"entity": "Entitas",
"filter_attributes": "Filter atribut",
"filter_entities": "Filter entitas",
"filter_states": "Filter status",
"last_changed": "Terakhir diubah",
"last_updated": "Terakhir diperbarui",
"more_info": "Info Lebih Lanjut",
"no_entities": "Tidak ada entitas",
"set_state": "Setel Status",
"state": "Status",
"state_attributes": "Atribut status (YAML, opsional)",
"title": "Status"
},
"templates": {
"description": "Template dirender menggunakan mesin templat Jinja2 dengan beberapa ekstensi khusus Home Assistant.",
"domain": "Domain",
"editor": "Editor templat",
"entity": "Entitas",
"jinja_documentation": "Dokumentasi templat Jinja2",
"no_listeners": "Templat ini tidak mendengarkan peristiwa apa pun dan tidak akan diperbarui secara otomatis.",
"reset": "Setel ulang ke template demo",
"result_type": "Jenis hasil",
"template_extensions": "Ekstensi templat Home Assistant",
"time": "Templat ini diperbarui pada awal setiap menit.",
"title": "Templat"
"title": "Templat",
"unknown_error_template": "Kesalahan tidak diketahui saat merender templat"
}
}
},
"history": {
"ranges": {
"last_week": "Minggu lalu",
"this_week": "Minggu ini",
"today": "Hari ini",
"yesterday": "Kemarin"
}
},
"logbook": {
"ranges": {
"last_week": "Minggu lalu",
"this_week": "Minggu ini",
"today": "Hari ini",
"yesterday": "Kemarin"
}
},
"lovelace": {
"add_entities": {
"generated_unsupported": "Anda hanya dapat menggunakan fungsi ini jika Anda telah mengontrol antarmuka Lovelace.",
@@ -2497,7 +2650,7 @@
"reorder_items": "Susun ulang item"
},
"starting": {
"description": "Home Assistant sedang memulai, harap tunggu..."
"description": "Home Assistant sedang memulai, harap tunggu"
}
},
"changed_toast": {
@@ -2926,10 +3079,20 @@
"empty": "Anda tidak memiliki pesan apa pun",
"playback_title": "Pemutaran pesan"
},
"my": {
"component_not_loaded": "Pengalihan ini tidak didukung oleh instans Home Assistant Anda. Anda memerlukan integrasi {integrasi} untuk menggunakan pengalihan ini.",
"documentation": "dokumentasi",
"error": "Terjadi kesalahan yang tidak diketahui",
"faq_link": "FAQ Home Assistant Saya",
"no_supervisor": "Pengalihan ini tidak didukung oleh instalasi Home Assistant Anda. Pengalihan ini memerlukan metode instalasi Home Assistant Operating System atau Home Assistant Supervised. Untuk informasi selengkapnya, lihat {docs_link}.",
"not_supported": "Pengalihan ini tidak didukung oleh instans Home Assistant Anda. Periksa {link} tentang pengalihan yang didukung dan versi mana mulai diperkenalkan."
},
"page-authorize": {
"abort_intro": "Proses masuk dibatalkan",
"authorizing_client": "Anda akan memberi akses {clientId} ke instans Home Assistant Anda.",
"form": {
"error": "Kesalahan: {error}",
"next": "Berikutnya",
"providers": {
"command_line": {
"abort": {
@@ -3002,43 +3165,104 @@
}
},
"trusted_networks": {
"abort": {
"not_allowed": "Komputer Anda tidak diperbolehkan."
},
"step": {
"init": {
"data": {
"user": "Pengguna"
},
"description": "Pilih pengguna yang ingin login sebagai:"
"description": "Pilih pengguna yang diinginkan untuk masuk:"
}
}
}
},
"start_over": "Mulai dari awal",
"unknown_error": "Ada yang salah",
"working": "Mohon tunggu"
},
"initializing": "Inisialisasi",
"logging_in_to_with": "Masuk ke **{locationName}** dengan **{authProviderName}**.",
"logging_in_with": "Masuk dengan **{authProviderName}**.",
"pick_auth_provider": "Atau masuk dengan"
},
"page-demo": {
"cards": {
"demo": {
"demo_by": "oleh {name}",
"introduction": "Selamat datang di rumah! Anda berhasil membuka demo Home Assistant, tempat kami menampilkan antarmuka terbaik yang dibuat oleh komunitas kami.",
"learn_more": "Pelajari lebih lanjut tentang Home Assistant",
"next_demo": "Demo berikutnya"
}
},
"config": {
"arsaboo": {
"labels": {
"activity": "Aktivitas",
"air": "Udara",
"commute_home": "Perjalanan ke Rumah",
"entertainment": "Hiburan",
"hdmi_input": "Input HDMI",
"hdmi_switcher": "Pengalih HDMI",
"information": "Informasi",
"lights": "Lampu",
"morning_commute": "Perjalanan Pagi",
"total_tv_time": "Total Waktu TV",
"turn_tv_off": "Matikan Televisi",
"volume": "Volume"
},
"names": {
"family_room": "Ruang Keluarga",
"hallway": "Lorong",
"kitchen": "Dapur",
"left": "Kiri",
"master_bedroom": "Kamar Tidur Utama",
"mirror": "Cermin",
"patio": "Teras",
"right": "Kanan",
"temperature_study": "Studi Suhu",
"upstairs": "Atas"
},
"unit": {
"minutes_abbr": "min",
"watching": "menonton"
}
}
}
},
"page-onboarding": {
"core-config": {
"button_detect": "Deteksi",
"finish": "Berikutnya",
"intro": "Halo {name}, selamat datang di Home Assistant. Nama apa yang ingin diberikan untuk rumah Anda?",
"intro_location": "Kami ingin mengetahui tempat tinggal Anda. Informasi ini akan membantu menampilkan informasi dan menyiapkan otomasi berbasis matahari. Data ini tidak pernah dibagikan di luar jaringan Anda.",
"intro_location_detect": "Kami dapat membantu Anda mengisi informasi ini dengan membuat permintaan satu kali ke layanan eksternal.",
"location_name": "Beri nama instalasi Home Assistant Anda",
"location_name_default": "Rumah"
},
"integration": {
"finish": "Selesai"
"finish": "Selesai",
"intro": "Perangkat dan layanan diwakili di Home Assistant sebagai integrasi. Anda dapat mengaturnya sekarang, atau melakukannya nanti dari layar konfigurasi.",
"more_integrations": "Lebih Lanjut"
},
"intro": "Siap untuk membuat rumah Anda lebih hidup, merebut kembali privasi Anda, dan bergabung dengan komunitas pemikir di seluruh dunia?",
"restore": {
"description": "Atau, Anda dapat memulihkan dari snapshot sebelumnya.",
"hide_log": "Sembunyikan log lengkap",
"in_progress": "Pemulihan sedang berlangsung",
"show_log": "Tampilkan log lengkap"
},
"user": {
"create_account": "Buat Akun",
"data": {
"name": "Nama",
"password": "Kata Sandi",
"password_confirm": "Konfirmasi Kata Sandi",
"username": "Nama Pengguna"
},
"error": {
"password_not_match": "Kata sandi tidak cocok",
"required_fields": "Isi semua bidang yang wajib diisi"
},
"intro": "Mari kita mulai dengan membuat akun pengguna.",
@@ -3046,28 +3270,82 @@
}
},
"profile": {
"advanced_mode": {
"description": "Temukan fitur lanjutan.",
"link_promo": "Pelajari lebih lanjut",
"title": "Mode Tingkat Lanjut"
},
"change_password": {
"confirm_new_password": "Konfirmasi Kata Sandi Baru",
"current_password": "Kata Sandi Saat Ini",
"error_new_is_old": "Kata sandi baru harus berbeda dari kata sandi saat ini",
"error_new_mismatch": "Kata sandi baru yang dimasukkan tidak sama",
"error_required": "Wajib",
"header": "Ubah Kata Sandi",
"new_password": "Kata Sandi Baru",
"submit": "Kirimkan",
"success": "Kata sandi berhasil diubah"
},
"current_user": "Anda saat ini masuk sebagai {fullName} .",
"customize_sidebar": {
"button": "Edit",
"description": "Anda juga dapat menekan dan menahan header bilah samping untuk mengaktifkan mode edit.",
"header": "Ubah urutan dan sembunyikan item dari bilah samping"
},
"dashboard": {
"description": "Pilih dasbor baku untuk perangkat ini.",
"dropdown_label": "Dasbor",
"header": "Dasbor"
},
"enable_shortcuts": {
"description": "Aktifkan atau nonaktifkan pintasan keyboard untuk melakukan berbagai tindakan di antarmuka.",
"header": "Pintasan Keyboard"
},
"force_narrow": {
"description": "Ini akan menyembunyikan bilah samping secara baku, mirip dengan pengalaman seluler.",
"header": "Selalu sembunyikan bilah samping"
},
"is_owner": "Anda adalah pemilik.",
"language": {
"dropdown_label": "Bahasa",
"header": "Bahasa",
"link_promo": "Bantu menerjemahkan"
},
"logout": "Keluar",
"logout_text": "Yakin ingin keluar?",
"logout_title": "Keluar?",
"long_lived_access_tokens": {
"confirm_delete": "Yakin ingin menghapus token akses untuk {name}?",
"create": "Buat Token",
"create_failed": "Gagal membuat token akses.",
"created": "Dibuat pada {date}",
"delete_failed": "Gagal menghapus token akses.",
"description": "Buat token akses yang berumur panjang untuk memungkinkan skrip Anda berinteraksi dengan Home Assistant. Setiap token akan berlaku selama 10 tahun sejak pembuatan. Berikut adalah token akses yang berumur panjang yang saat ini aktif.",
"empty_state": "Anda belum memiliki token akses yang berumur panjang.",
"header": "Token Akses yang Berumur Panjang",
"learn_auth_requests": "Pelajari cara membuat permintaan yang diautentikasi.",
"name": "Nama",
"prompt_copy_token": "Salin token akses Anda. Ini tidak akan ditampilkan lagi.",
"prompt_name": "Beri nama token"
},
"mfa_setup": {
"close": "Tutup",
"step_done": "Penyiapan selesai untuk {step}",
"submit": "Kirimkan",
"title_aborted": "Dibatalkan",
"title_success": "Sukses!"
},
"mfa": {
"confirm_disable": "Yakin ingin menonaktifkan {name}?"
"confirm_disable": "Yakin ingin menonaktifkan {name}?",
"disable": "Nonaktifkan",
"enable": "Aktifkan",
"header": "Modul Autentikasi Multifaktor"
},
"push_notifications": {
"add_device_prompt": {
"input_label": "Nama perangkat",
"title": "Apa nama perangkat ini?"
},
"description": "Kirim notifikasi ke perangkat ini.",
"error_load_platform": "Konfigurasi notify.html5.",
"error_use_https": "SSL harus diaktifkan untuk antarmuka.",
@@ -3086,16 +3364,37 @@
"not_used": "Belum pernah digunakan",
"token_title": "Buat token baru untuk {clientId}"
},
"suspend": {
"description": "Haruskah koneksi ke server ditutup setelah disembunyikan selama 5 menit?",
"header": "Tutup koneksi secara otomatis"
},
"themes": {
"accent_color": "Warna aksen",
"dark_mode": {
"auto": "Otomatis",
"dark": "Gelap",
"light": "Terang"
},
"dropdown_label": "Tema",
"error_no_theme": "Tidak ada tema yang tersedia.",
"header": "Tema",
"link_promo": "Pelajari tentang tema"
"link_promo": "Pelajari tentang tema",
"primary_color": "Warna primer",
"reset": "Setel ulang"
},
"vibrate": {
"description": "Aktifkan atau nonaktifkan getaran pada perangkat ini saat mengontrol perangkat.",
"header": "Bergetar"
}
},
"shopping_list": {
"start_conversation": "Mulai percakapan"
}
},
"sidebar": {
"external_app_configuration": "Konfigurasi Aplikasi"
"done": "Selesai",
"external_app_configuration": "Konfigurasi Aplikasi",
"sidebar_toggle": "Alihkan Bilah Samping"
}
}
}
+1 -1
View File
@@ -1383,7 +1383,7 @@
}
}
},
"tags": {
"tag": {
"detail": {
"create": "Stofna",
"delete": "Eyða",
+80 -26
View File
@@ -120,7 +120,7 @@
},
"automation": {
"last_triggered": "Ultima attivazione",
"trigger": "Esegui"
"trigger": "Esegui azioni"
},
"camera": {
"not_available": "Immagine non disponibile"
@@ -164,10 +164,10 @@
"speed": "Velocità"
},
"humidifier": {
"humidity": "Target umidità",
"humidity": "Umidità desiderata",
"mode": "Modalità",
"on_entity": "{name} acceso",
"target_humidity_entity": "{name} target umidità"
"target_humidity_entity": "{name} umidità desiderata"
},
"light": {
"brightness": "Luminosità",
@@ -200,7 +200,8 @@
},
"script": {
"cancel": "Annulla",
"cancel_multiple": "Annulla {number}"
"cancel_multiple": "Annulla {number}",
"run": "Esegui"
},
"service": {
"run": "Esegui"
@@ -227,7 +228,7 @@
"currently": "Attualmente",
"on_off": "Acceso / spento",
"operation": "Operazione",
"target_temperature": "Temperatura da raggiungere"
"target_temperature": "Temperatura desiderata"
},
"weather": {
"attributes": {
@@ -295,6 +296,19 @@
"yes": "Sì"
},
"components": {
"addon-picker": {
"addon": "Componente aggiuntivo",
"error": {
"fetch_addons": {
"description": "Il recupero dei componenti aggiuntivi ha restituito un errore.",
"title": "Errore durante il recupero dei componenti aggiuntivi"
},
"no_supervisor": {
"description": "Nessun Supervisore trovato, quindi non è stato possibile caricare i componenti aggiuntivi.",
"title": "Nessun Supervisore"
}
}
},
"area-picker": {
"add_dialog": {
"add": "Aggiungi",
@@ -467,6 +481,12 @@
"week": "{count} {count, plural,\n one {settimana}\n other {settimane}\n} fa"
}
},
"service-control": {
"required": "Questo campo è obbligatorio",
"service_data": "Dati del servizio",
"target": "Destinazioni",
"target_description": "Cosa deve essere utilizzato da questo servizio come aree, dispositivi o entità di destinazione."
},
"service-picker": {
"service": "Servizio"
},
@@ -474,8 +494,8 @@
"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.",
"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 nelle entità separate che contiene. 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à"
@@ -857,7 +877,7 @@
"delete_confirm": "Sei sicuro di voler eliminare questo?",
"duplicate": "Duplica",
"header": "Azioni",
"introduction": "Le azioni sono ciò che Home Assistant eseguirà quando un'attivazione (o trigger) avvia un'automazione.",
"introduction": "Le Azioni sono ciò che Home Assistant eseguirà quando un'attivazione (o trigger) avvia un'automazione.",
"learn_more": "Per saperne di più sulle azioni",
"name": "Azione",
"type_select": "Tipo di azione",
@@ -890,7 +910,8 @@
},
"event": {
"event": "Evento:",
"label": "Attiva Evento"
"label": "Attiva evento",
"service_data": "Dati del servizio"
},
"repeat": {
"label": "Ripetere",
@@ -943,10 +964,10 @@
"delete_confirm": "Sei sicuro di voler eliminare questo?",
"duplicate": "Duplica",
"header": "Condizioni",
"introduction": "Le condizioni sono facoltative e impediranno un'ulteriore esecuzione se non saranno soddisfatte tutte.",
"introduction": "Le Condizioni sono facoltative e impediranno l'esecuzione dell'automazione a meno che non siano soddisfatte tutte.",
"learn_more": "Per saperne di più sulle condizioni",
"name": "Condizione",
"type_select": "Tipo di Condizione",
"type_select": "Tipo di condizione",
"type": {
"and": {
"label": "E"
@@ -1014,7 +1035,7 @@
"unsupported_condition": "Nessun supporto dell'Interfaccia Utente per la condizione: {condition}"
},
"copy_to_clipboard": "Copia negli Appunti",
"default_name": "Nuova Automazione",
"default_name": "Nuova automazione",
"description": {
"label": "Descrizione",
"placeholder": "Descrizione facoltativa"
@@ -1042,15 +1063,15 @@
"move_up": "Sposta sopra",
"save": "Salva",
"triggers": {
"add": "Aggiungi Attivazione",
"add": "Aggiungi attivazione",
"delete": "Elimina",
"delete_confirm": "Sei sicuro di voler eliminare questo?",
"duplicate": "Duplica",
"header": "Attivazioni (o Triggers)",
"header": "Attivazioni (o Trigger)",
"introduction": "L'Attivazione (o Trigger) avvia l'elaborazione di una regola di automazione. È possibile specificare più Attivazioni per una stessa regola di automazione. Una volta avviata una Attivazione, Home Assistant convaliderà le Condizioni, se presenti, ed eseguirà l'Azione.",
"learn_more": "Per saperne di più sulle Attivazioni (o Triggers)",
"learn_more": "Per saperne di più sulle attivazioni (o trigger)",
"name": "Attivazione",
"type_select": "Tipo di Attivazione",
"type_select": "Tipo di attivazione",
"type": {
"device": {
"extra_fields": {
@@ -1066,8 +1087,8 @@
"context_user_pick": "Seleziona utente",
"context_user_picked": "Evento di attivazione dell'utente",
"context_users": "Limita agli eventi attivati da",
"event_data": "Dati dell'Evento",
"event_type": "Tipo di Evento",
"event_data": "Dati dell'evento",
"event_type": "Tipo di evento",
"label": "Evento"
},
"geo_location": {
@@ -1274,7 +1295,7 @@
"example_message": "Ciao {name}, puoi riprodurre qualsiasi testo su qualsiasi lettore multimediale supportato!",
"header": "Prova la sintesi vocale",
"play": "Riproduci",
"target": "Bersaglio",
"target": "Destinazione",
"target_browser": "Browser"
},
"female": "Donna",
@@ -1478,6 +1499,7 @@
"cant_edit": "È possibile modificare solo gli elementi creati nell'Interfaccia Utente.",
"caption": "Dispositivi",
"confirm_delete": "Sei sicuro di voler eliminare questo dispositivo?",
"confirm_disable_config_entry": "Non ci sono più dispositivi per la voce di configurazione {entry_name}, vuoi disabilitare invece la voce di configurazione?",
"confirm_rename_entity_ids": "Vuoi anche rinominare gli ID entità delle tue entità?",
"confirm_rename_entity_ids_warning": "Questo non cambierà alcuna configurazione (come automazioni, script, scene, plance) che sta attualmente utilizzando queste entità, dovrai aggiornarle tu stesso per utilizzare i nuovi ID entità!",
"data_table": {
@@ -1590,7 +1612,8 @@
},
"filtering": {
"clear": "Cancella",
"filtering_by": "Filtraggio per"
"filtering_by": "Filtraggio per",
"show": "Mostra"
},
"header": "Configura Home Assistant",
"helpers": {
@@ -1661,7 +1684,19 @@
"delete_confirm": "Sei sicuro di voler eliminare questa integrazione?",
"device_unavailable": "Dispositivo non disponibile",
"devices": "{count} {count, plural, \none {dispositivo}\nother {dispositivi}\n}",
"disable_restart_confirm": "Riavvia Home Assistant per terminare la disabilitazione di questa integrazione",
"disable": {
"disable_confirm": "Sei sicuro di voler disabilitare questa voce di configurazione? I suoi dispositivi ed entità saranno disabilitati.",
"disabled": "Disabilitato",
"disabled_by": {
"device": "dispositivo",
"integration": "Integrazione",
"user": "utente"
},
"disabled_cause": "Disabilitato da {causa}"
},
"documentation": "Documentazione",
"enable_restart_confirm": "Riavvia Home Assistant per completare l'attivazione di questa integrazione",
"entities": "{count} {count, plural, \none {entità}\nother {entità }\n}",
"entity_unavailable": "Entità non disponibile",
"firmware": "Firmware: {version}",
@@ -1681,8 +1716,10 @@
"config_flow": {
"aborted": "Terminato",
"close": "Chiudi",
"could_not_load": "Impossibile caricare il flusso di configurazione",
"created_config": "Configurazione creata per {name}.",
"dismiss": "Chiudi finestra di dialogo",
"error": "Errore",
"error_saving_area": "Errore durante il salvataggio dell'area: {error}",
"external_step": {
"description": "Questo passaggio richiede di visitare un sito Web esterno per essere completato.",
@@ -1691,6 +1728,10 @@
"finish": "Finito",
"loading_first_time": "Si prega di attendere durante l'installazione dell'integrazione",
"not_all_required_fields": "Non tutti i campi obbligatori sono compilati.",
"pick_flow_step": {
"new_flow": "No, configura un'altra istanza di {integration}",
"title": "Rilevati questi, li vuoi configurare?"
},
"submit": "Invia"
},
"configure": "Configura",
@@ -1698,6 +1739,11 @@
"confirm_new": "Vuoi configurare {integration}?",
"description": "Gestisci le integrazioni con servizi, dispositivi, ...",
"details": "Dettagli dell'integrazione",
"disable": {
"disabled_integrations": "{number} disabilitate",
"hide_disabled": "Nascondi integrazioni disabilitate",
"show_disabled": "Mostra integrazioni disabilitate"
},
"discovered": "Rilevato",
"home_assistant_website": "Sito Web di Home Assistant",
"ignore": {
@@ -2034,7 +2080,7 @@
"id": "ID Entità",
"id_already_exists": "Questo ID esiste già",
"id_already_exists_save_error": "Non è possibile salvare questo script perché l'ID non è univoco, scegliere un altro ID o lasciarlo vuoto per generarne automaticamente uno.",
"introduction": "Utilizza gli Script per eseguire una sequenza di azioni.",
"introduction": "Usa gli script per eseguire una sequenza di azioni.",
"link_available_actions": "Ulteriori informazioni sulle azioni disponibili.",
"load_error_not_editable": "Solo gli script all'interno di scripts.yaml sono modificabili.",
"max": {
@@ -2126,7 +2172,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Aggiungi etichetta",
"automation_title": "L'etichetta {name} è scansionata",
"caption": "Etichette",
@@ -2315,7 +2361,7 @@
"edit_home_zone_narrow": "Il raggio della zona Casa non può ancora essere modificato dal frontend. La posizione può essere modificata dalla configurazione generale.",
"go_to_core_config": "Passare alla configurazione generale?",
"home_zone_core_config": "La posizione della zona Casa è modificabile dalla pagina di configurazione generale. Il raggio della zona iniziale non può ancora essere modificato dal frontend. Vuoi andare alla configurazione generale?",
"introduction": "Le Zone consentono di specificare determinate regioni sulla Terra. Quando una persona si trova all'interno di una Zona, nel suo Stato ci sarà il nome dalla Zona. Le Zone possono anche essere utilizzate come Attivazioni (o Triggers) o Condizioni all'interno delle impostazioni di Automazione.",
"introduction": "Le Zone consentono di specificare determinate regioni sulla Terra. Quando una persona si trova all'interno di una Zona, nel suo Stato ci sarà il nome dalla Zona. Le Zone possono anche essere utilizzate come Attivazioni (o Trigger) o Condizioni all'interno delle impostazioni di Automazione.",
"no_zones_created_yet": "Sembra che tu non abbia ancora creato nessuna zona."
},
"zwave_js": {
@@ -2507,17 +2553,23 @@
"type": "Tipo di Evento"
},
"services": {
"accepts_target": "Questo servizio accetta una destinazione, per esempio: `entity_id: light.bed_light`.",
"all_parameters": "Tutti i parametri disponibili",
"call_service": "Chiama il Servizio",
"column_description": "Descrizione",
"column_example": "Esempio",
"column_parameter": "Parametro",
"description": "Lo strumento di sviluppo del servizio consente di chiamare qualsiasi servizio disponibile in Home Assistant.",
"fill_example_data": "Inserisci dati di esempio",
"title": "Servizi"
"title": "Servizi",
"ui_mode": "Vai in modalità Interfaccia Utente",
"yaml_mode": "Vai in modalità YAML",
"yaml_parameters": "Parametri disponibili solo in modalità YAML"
},
"states": {
"alert_entity_field": "Entità è un campo obbligatorio",
"attributes": "Attributi",
"copy_id": "Copia ID negli appunti",
"current_entities": "Entità correnti",
"description1": "Impostare la rappresentazione di un dispositivo all'interno di Home Assistant.",
"description2": "Questo non comunicherà con il dispositivo attuale.",
@@ -2580,7 +2632,7 @@
"no_entity_more_info": "Nessuna entità fornita per la finestra di dialogo con ulteriori informazioni",
"no_entity_toggle": "Nessuna entità fornita per attivare / disattivare",
"no_navigation_path": "Nessun percorso di navigazione specificato",
"no_service": "Nessun servizio per l'esecuzione specificato",
"no_service": "Nessun servizio da eseguire specificato",
"no_url": "Nessun URL da aprire specificato"
},
"confirm_delete": "Sei sicuro di voler cancellare questa scheda?",
@@ -2951,7 +3003,7 @@
"confirm_remove_config_text": "Genereremo automaticamente le tue viste dell'Interfaccia utente di Lovelace con le tue aree e dispositivi se rimuovi la tua configurazione dell'interfaccia utente di Lovelace.",
"confirm_remove_config_title": "Sei sicuro di voler rimuovere la tua configurazione dell'Interfaccia Utente di Lovelace?",
"confirm_unsaved_changes": "Hai delle modifiche non salvate, sei sicuro di voler uscire?",
"confirm_unsaved_comments": "La tua configurazione contiene commenti, questi non verranno salvati. Vuoi continuare?",
"confirm_unsaved_comments": "La tua configurazione potrebbe contenere dei commenti, questi non saranno salvati. Vuoi continuare?",
"error_invalid_config": "La tua configurazione non è valida: {error}",
"error_parse_yaml": "Impossibile analizzare YAML: {error}",
"error_remove": "Impossibile rimuovere la configurazione: {error}",
@@ -3044,8 +3096,10 @@
},
"my": {
"component_not_loaded": "Questo reindirizzamento non è supportato dalla tua istanza di Home Assistant. È necessaria l'integrazione {integration} per utilizzare questo reindirizzamento.",
"documentation": "documentazione",
"error": "Si è verificato un errore sconosciuto",
"faq_link": "My Home Assistant FAQ",
"no_supervisor": "Questo reindirizzamento non è supportato dalla tua installazione di Home Assistant. E' necessario il metodo di installazione Home Assistant Operating System oppure Home Assistant Supervised. Per maggiori informazioni, vedi {docs_link}.",
"not_supported": "Questo reindirizzamento non è supportato dall'istanza di Home Assistant. Controlla il {link} per i reindirizzamenti supportati e la versione in cui sono stati introdotti."
},
"page-authorize": {
+1 -1
View File
@@ -2119,7 +2119,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "タグを追加する",
"automation_title": "{name}タグのスキャン",
"caption": "タグ",
+1 -1
View File
@@ -2040,7 +2040,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "태그 추가",
"automation_title": "{name} 태그가 검색되었습니다",
"caption": "태그",
+1 -1
View File
@@ -2083,7 +2083,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Tag dobäisetzen",
"automation_title": "Tag {name} gouf gescannt",
"caption": "Tags",
+1 -1
View File
@@ -664,7 +664,7 @@
}
}
},
"tags": {
"tag": {
"detail": {
"companion_apps": "papildomos programos",
"usage": "Nuskaitant žymą galima suaktyvinti automatizavimą, galite naudoti NFC žymes, QR kodus ar bet kokios kitos rūšies žymą. Naudokite mūsų {companion_link}, jei norite parašyti šią žymą į programuojamą NFC žymę arba sukurti QR kodą žemiau."
+1 -1
View File
@@ -1280,7 +1280,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Pievienot birku",
"automation_title": "Birka {name} ir noskenēta",
"caption": "Birkas",
+48 -11
View File
@@ -1,7 +1,7 @@
{
"config_entry": {
"disabled_by": {
"config_entry": "Konfigurer oppføring",
"config_entry": "Config-oppføring",
"device": "Enhet",
"integration": "Integrasjon",
"user": "Bruker"
@@ -120,7 +120,7 @@
},
"automation": {
"last_triggered": "Sist utløst",
"trigger": "Utføre"
"trigger": "Kjør handlinger"
},
"camera": {
"not_available": "Bilde ikke tilgjengelig"
@@ -200,7 +200,8 @@
},
"script": {
"cancel": "Avbryt",
"cancel_multiple": "Avbryt {number}"
"cancel_multiple": "Avbryt {number}",
"run": "Kjør"
},
"service": {
"run": "Kjør"
@@ -295,6 +296,19 @@
"yes": "Ja"
},
"components": {
"addon-picker": {
"addon": "Tillegg",
"error": {
"fetch_addons": {
"description": "Henting av tillegg returnerte en feil",
"title": "Feil ved henting av tillegg"
},
"no_supervisor": {
"description": "Ingen supervisor funnet, så tillegg kunne ikke lastes inn.",
"title": "Ingen supervisor"
}
}
},
"area-picker": {
"add_dialog": {
"add": "Legg til",
@@ -682,6 +696,7 @@
"scene": "Scener",
"script": "Skript",
"server_control": "Server-kontroller",
"tag": "Tagger",
"tags": "Tagger",
"users": "Brukere",
"zone": "Soner"
@@ -950,7 +965,7 @@
"delete_confirm": "Er du sikker på at du vil slette dette?",
"duplicate": "Dupliser",
"header": "Betingelser",
"introduction": "Betingelsene er valgfrie og vil forhindre videre utførelse med mindre alle vilkår er oppfylt.",
"introduction": "Betingelsene er valgfrie og vil hindre at automatiseringen kjøres med mindre alle betingelsene er oppfylt.",
"learn_more": "Lær mer om betingelser",
"name": "Betingelse",
"type_select": "Betingelse",
@@ -1485,6 +1500,7 @@
"cant_edit": "Du kan bare redigere elementer som er opprettet i brukergrensesnittet.",
"caption": "Enheter",
"confirm_delete": "Er du sikker på at du vil slette denne enheten?",
"confirm_disable_config_entry": "Det er ikke flere enheter for konfigurasjonsoppføringen {entry_name}, vil du i stedet deaktivere konfigurasjonsoppføringen?",
"confirm_rename_entity_ids": "Vil du også endre enhets-ID-ene til enhetene dine?",
"confirm_rename_entity_ids_warning": "Dette vil ikke endre noen konfigurasjon (som automasjoner, skript, scener, dashbord) som for øyeblikket bruker disse enhetene! Du må oppdatere dem selv for å bruke de nye enhets-IDene!",
"data_table": {
@@ -1502,7 +1518,7 @@
"device_not_found": "Enhet ikke funnet",
"disabled": "Deaktivert",
"disabled_by": {
"config_entry": "Konfigurer oppføring",
"config_entry": "Config-oppføring",
"integration": "Integrasjon",
"user": "Bruker"
},
@@ -1597,7 +1613,8 @@
},
"filtering": {
"clear": "Tøm",
"filtering_by": "Filtrering etter"
"filtering_by": "Filtrering etter",
"show": "Vis"
},
"header": "Konfigurer Home Assistant",
"helpers": {
@@ -1668,7 +1685,19 @@
"delete_confirm": "Er du sikker på at du vil slette denne integrasjonen?",
"device_unavailable": "Enheten er utilgjengelig",
"devices": "{count} {count, plural,\n one {enhet}\n other {enheter}\n}",
"disable_restart_confirm": "Start Home Assistant på nytt for å fullføre deaktiveringen av denne integreringen",
"disable": {
"disable_confirm": "Er du sikker på at du vil deaktivere denne konfigurasjonsoppføringen? Enhetene og enhetene blir deaktivert.",
"disabled": "Deaktivert",
"disabled_by": {
"device": "enhet",
"integration": "integrasjon",
"user": "bruker"
},
"disabled_cause": "Deaktivert av {cause}"
},
"documentation": "Dokumentasjon",
"enable_restart_confirm": "Start Home Assistant på nytt for å fullføre aktiveringen av denne integreringen",
"entities": "{count} {count, plural,\n one {entitet}\n other {entiteter}\n}",
"entity_unavailable": "Enhet utilgjengelig",
"firmware": "Fastvare: {version}",
@@ -1711,6 +1740,11 @@
"confirm_new": "Vil du sette opp {integration}?",
"description": "Administrer integrasjoner med tjenester, enheter, ...",
"details": "Integrasjonsdetaljer",
"disable": {
"disabled_integrations": "{number} deaktivert",
"hide_disabled": "Skjul deaktiverte integrasjoner",
"show_disabled": "Vis deaktiverte integrasjoner"
},
"discovered": "Oppdaget",
"home_assistant_website": "Nettsted for Home Assistant",
"ignore": {
@@ -2047,7 +2081,7 @@
"id": "Entitets-ID",
"id_already_exists": "Denne IDen finnes allerede",
"id_already_exists_save_error": "Du kan ikke lagre dette skriptet fordi IDen ikke er unik, velg en annen ID eller la den stå tom for automatisk å generere en.",
"introduction": "Bruk skript til å utføre en sekvens med handlinger.",
"introduction": "Bruk skript for å kjøre en sekvens av handlinger.",
"link_available_actions": "Finn ut mer om tilgjengelige handlinger.",
"load_error_not_editable": "Bare skript inne i script.yaml kan redigeres.",
"max": {
@@ -2139,7 +2173,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Legg til tag",
"automation_title": "Tag {name} skannes",
"caption": "Tagger",
@@ -2536,6 +2570,7 @@
"states": {
"alert_entity_field": "Entitet er et obligatorisk felt",
"attributes": "Attributter",
"copy_id": "Kopier ID til utklippstavlen",
"current_entities": "Gjeldende entiteter",
"description1": "Angi representasjonen av en enhet i Home Assistant.",
"description2": "Dette vil ikke kommunisere med den faktiske enheten.",
@@ -2594,11 +2629,11 @@
},
"cards": {
"actions": {
"action_confirmation": "Er du sikker på at du vil utføre handlingen \"{action}\"?",
"action_confirmation": "Er du sikker på at du vil kjøre handlingen \"{action}\"?",
"no_entity_more_info": "Ingen enhet angitt for mer informasjon dialog",
"no_entity_toggle": "Ingen enhet gitt for å veksle",
"no_navigation_path": "Ingen navigasjonssti spesifisert",
"no_service": "Ingen tjeneste for utførelse spesifisert",
"no_service": "Ingen tjeneste å kjøre angitt",
"no_url": "Ingen URL-adresse å åpne angitt"
},
"confirm_delete": "Er du sikker på at du vil slette dette kortet?",
@@ -2969,7 +3004,7 @@
"confirm_remove_config_text": "Vi vil automatisk opprette Lovelace-visningene dine med områdene og enhetene dine hvis du fjerner Lovelace-konfigurasjonen.",
"confirm_remove_config_title": "Er du sikker på at du vil fjerne Lovelace UI-konfigurasjonen?",
"confirm_unsaved_changes": "Du har ulagrede endringer, er du sikker på at du vil avslutte?",
"confirm_unsaved_comments": "Konfigurasjonen din inneholder kommentarer, disse vil ikke bli lagret. Vil du fortsette?",
"confirm_unsaved_comments": "Konfigurasjonen din kan inneholde kommentarer, disse lagres ikke. Vil du fortsette?",
"error_invalid_config": "Konfigurasjonen din er ikke gyldig: {error}",
"error_parse_yaml": "Kan ikke analysere YAML: {error}",
"error_remove": "Kan ikke fjerne konfigurasjonen: {error}",
@@ -3062,8 +3097,10 @@
},
"my": {
"component_not_loaded": "Denne viderekoblingen støttes ikke av Home Assistant-forekomsten. Du trenger integrasjonen {integration} å bruke denne viderekoblingen.",
"documentation": "dokumentasjon",
"error": "Det oppstod en ukjent feil",
"faq_link": "Vanlige spørsmål om Min Home Assistant",
"no_supervisor": "Denne viderekoblingen støttes ikke av Home Assistant-installasjonen. Det trenger enten installasjonsmetoden Home Assistant OS eller Home Assistant Supervised. For mer informasjon, se {docs_link}.",
"not_supported": "Denne viderekoblingen støttes ikke av Home Assistant-forekomsten. Se på {link} for viderekoblinger som støttes, og hvilken versjon de ble introdusert."
},
"page-authorize": {
+20 -2
View File
@@ -200,7 +200,8 @@
},
"script": {
"cancel": "Annuleer",
"cancel_multiple": "Annuleer {number}"
"cancel_multiple": "Annuleer {number}",
"run": "Uitvoeren"
},
"service": {
"run": "Uitvoeren"
@@ -480,6 +481,12 @@
"week": "{count} {count, plural,\n one {week}\n other {weken}\n} geleden"
}
},
"service-control": {
"required": "Dit veld is verplicht",
"service_data": "Service data",
"target": "Doelen",
"target_description": "Wat moet deze dienst gebruiken als doelgebieden, apparaten of entiteiten."
},
"service-picker": {
"service": "Service"
},
@@ -689,6 +696,7 @@
"scene": "Scènes",
"script": "Scripts",
"server_control": "Server Controls",
"tag": "Tags",
"tags": "Tags",
"users": "Gebruikers",
"zone": "Zones"
@@ -2165,7 +2173,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Tag toevoegen",
"automation_title": "Tag {name} is gescand",
"caption": "Tags",
@@ -2359,11 +2367,17 @@
},
"zwave_js": {
"add_node": {
"cancel_inclusion": "Opname annuleren",
"controller_in_inclusion_mode": "Uw Z-Wave controller bevindt zich nu in de opnamemodus.",
"follow_device_instructions": "Volg de aanwijzingen die bij het apparaat zijn geleverd om de koppeling van het apparaat te activeren.",
"inclusion_failed": "Het knooppunt kon niet worden toegevoegd. Controleer de logs voor meer informatie.",
"inclusion_finished": "Het knooppunt is toegevoegd. Het kan een paar minuten duren voordat alle entiteiten zichtbaar zijn, omdat we het opzetten van het knooppunt op de achtergrond afwerken.",
"introduction": "Deze wizard begeleidt u bij het toevoegen van een knooppunt aan uw Z-Wave netwerk.",
"secure_inclusion_warning": "Beveiligde apparaten vereisen extra bandbreedte; te veel beveiligde apparaten kunnen uw Z-Wave-netwerk vertragen. We raden aan om alleen veilige opname te gebruiken voor apparaten die dat vereisen, zoals sloten of garagedeuropeners.",
"start_inclusion": "Start Opname",
"start_secure_inclusion": "Start Veilige Opname",
"title": "Voeg een Z-Wave knooppunt toe",
"use_secure_inclusion": "Gebruik veilige opname",
"view_device": "Bekijk apparaat"
},
"button": "Configureer",
@@ -2411,8 +2425,10 @@
},
"remove_node": {
"cancel_exclusion": "Uitsluiting annuleren",
"controller_in_exclusion_mode": "Uw Z-Wave controller bevindt zich nu in de uitsluitingsmodus.",
"exclusion_failed": "Het knooppunt kon niet worden verwijderd. Controleer de logboeken voor meer informatie.",
"exclusion_finished": "Knooppunt {id} is verwijderd uit het Z-Wave-netwerk.",
"follow_device_instructions": "Volg de instructies die bij uw apparaat zijn geleverd om uitsluiting op het apparaat te activeren.",
"introduction": "Verwijder een knooppunt uit uw Z-Wave-netwerk en verwijder het gekoppelde apparaat met bijbehorende entiteiten uit Home Assistant.",
"start_exclusion": "Start uitsluiting",
"title": "Een Z-Wave Node verwijderen"
@@ -3080,8 +3096,10 @@
"playback_title": "Bericht afspelen"
},
"my": {
"component_not_loaded": "Deze omleiding wordt niet ondersteund door uw Home Assistant-instantie. U heeft de integratie {integration} nodig om deze omleiding te gebruiken.",
"documentation": "documentatie",
"error": "Er is een onbekende fout opgetreden",
"faq_link": "My Home Assistant FAQ",
"no_supervisor": "Deze omleiding wordt niet ondersteund door uw Home Assistant-installatie. Het vereist ofwel het Home Assistant besturingssysteem of de Home Assistant gecontroleerde installatiemethode. Voor meer informatie, zie de {docs_link}.",
"not_supported": "Deze redirect wordt niet ondersteund door uw Home Assistant instantie. Controleer de {link} voor de ondersteunde redirects en de versie waarin ze zijn geïntroduceerd."
},
+13 -1
View File
@@ -1667,7 +1667,18 @@
"delete_confirm": "Czy na pewno chcesz usunąć tę integrację?",
"device_unavailable": "Urządzenie niedostępne",
"devices": "{count} {count, plural,\n one {urządzenie}\n few {urządzenia}\n many {urządzeń}\n other {urządzeń}\n}",
"disable": {
"disable_confirm": "Czy na pewno chcesz wyłączyć ten wpis? Jego urządzenia i instancje zostaną wyłączone.",
"disabled": "Wyłączone",
"disabled_by": {
"device": "Urządzenie",
"integration": "integracja",
"user": "Użytkownik"
},
"disabled_cause": "Wyłączone przez {cause}."
},
"documentation": "Dokumentacja",
"enable_restart_confirm": "Uruchom ponownie Home Assistanta, aby dokończyć uruchamianie tej integracji",
"entities": "{count} {count, plural,\n one {encja}\n few {encje}\n many {encji}\n other {encji}\n}",
"entity_unavailable": "encja niedostępna",
"firmware": "oprogramowanie: {version}",
@@ -2138,7 +2149,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Dodaj tag",
"automation_title": "Tag {name} jest skanowany",
"caption": "Tagi",
@@ -2535,6 +2546,7 @@
"states": {
"alert_entity_field": "Encja jest polem obowiązkowym",
"attributes": "Atrybuty",
"copy_id": "Skopiuj ID do schowka",
"current_entities": "Bieżące encje",
"description1": "Ustaw stany encji urządzeń Home Assistanta.",
"description2": "Nie wpłynie to na rzeczywiste urządzenia.",
+1 -1
View File
@@ -1872,7 +1872,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Adicionar etiqueta",
"caption": "Etiquetas",
"create_automation": "Criar automação com a etiqueta",
+1 -1
View File
@@ -2118,7 +2118,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Adicionar etiqueta",
"automation_title": "A etiqueta {name} é lida",
"caption": "Etiquetas",
+1 -1
View File
@@ -2027,7 +2027,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Adaugați etichetă",
"automation_title": "Eticheta {name} este scanată",
"caption": "Etichete",
+15 -14
View File
@@ -1,10 +1,10 @@
{
"config_entry": {
"disabled_by": {
"config_entry": "Конфигурация",
"config_entry": "конфигурацией",
"device": "Устройство",
"integration": "Интеграция",
"user": "Пользователь"
"integration": "интеграцией",
"user": "пользователем"
}
},
"groups": {
@@ -529,7 +529,7 @@
"confirm_delete": "Вы уверены, что хотите удалить эту запись?",
"delete": "Удалить",
"device_disabled": "Родительское устройство этого объекта скрыто.",
"enabled_cause": "Инициатор: {cause}.",
"enabled_cause": "Скрыто {cause}.",
"enabled_delay_confirm": "Объекты будут добавлены в Home Assistant через {delay} секунд",
"enabled_description": "Скрытые объекты не будут доступны в Home Assistant.",
"enabled_label": "Отображать объект",
@@ -696,6 +696,7 @@
"scene": "Сцены",
"script": "Сценарии",
"server_control": "Сервер",
"tag": "Метки",
"tags": "Метки",
"users": "Пользователи",
"zone": "Зоны"
@@ -1517,11 +1518,11 @@
"device_not_found": "Устройство не найдено",
"disabled": "Скрыто",
"disabled_by": {
"config_entry": "Конфигурация",
"integration": "Интеграция",
"user": "Пользователь"
"config_entry": "конфигурацией",
"integration": "интеграцией",
"user": "пользователем"
},
"enabled_cause": "Инициатор: {cause}.",
"enabled_cause": "Устройство скрыто {cause}.",
"enabled_description": "Скрытые устройства и их дочерние объекты не будут доступны в Home Assistant.",
"enabled_label": "Отображать устройство",
"entities": {
@@ -1689,11 +1690,11 @@
"disable_confirm": "Вы уверены, что хотите отключить эту запись конфигурации? Её дочерние устройства и объекты будут также отключены.",
"disabled": "Отключено",
"disabled_by": {
"device": "Устройство",
"integration": "Интеграция",
"user": "Пользователь"
"device": "устройством",
"integration": "интеграцией",
"user": "пользователем"
},
"disabled_cause": "Инициатор: {cause}"
"disabled_cause": "Отключено {cause}"
},
"documentation": "Документация",
"enable_restart_confirm": "Перезапустите Home Assistant, чтобы завершить подключение этой интеграции.",
@@ -2172,7 +2173,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Добавить метку",
"automation_title": "Считана метка {name}",
"caption": "Метки",
@@ -3085,7 +3086,7 @@
"entity_non_numeric": "Объект не является числом: {entity}",
"entity_not_found": "Объект {entity} недоступен.",
"entity_unavailable": "Объект \"{entity}\" сейчас недоступен",
"starting": "Home Assistant запускается, пока что не всё может быть доступно"
"starting": "Home Assistant запускается..."
}
},
"mailbox": {
+1 -1
View File
@@ -1750,7 +1750,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Pridať značku",
"caption": "Značky",
"description": "Spustiť automatizácie pri naskenovaní značky NFC, QR kódu atď.",
+1 -1
View File
@@ -2102,7 +2102,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Dodaj značko",
"automation_title": "Značka {name} se prebira",
"caption": "Značke",
+1 -1
View File
@@ -2126,7 +2126,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Lägg till tagg",
"automation_title": "Taggen {name} är skannad",
"caption": "Taggar",
+53 -16
View File
@@ -1,7 +1,7 @@
{
"config_entry": {
"disabled_by": {
"config_entry": "Config Girişi",
"config_entry": "Yapılandırma girişi",
"device": "Cihaz",
"integration": "Entegrasyon",
"user": "Kullanıcı"
@@ -69,10 +69,10 @@
"state_badge": {
"alarm_control_panel": {
"armed": "Etkin",
"armed_away": "Etkin",
"armed_custom_bypass": "Etkin",
"armed_home": "Devrede",
"armed_night": "Etkin",
"armed_away": "Aktif",
"armed_custom_bypass": "Aktif",
"armed_home": "Aktif",
"armed_night": "Aktif",
"arming": "Etkinleştir",
"disarmed": "Etkisiz",
"disarming": "Etkisiz",
@@ -120,7 +120,7 @@
},
"automation": {
"last_triggered": "Son tetiklenme",
"trigger": "Yürüt"
"trigger": "Eylemleri Çalıştırın"
},
"camera": {
"not_available": "Resim mevcut değil"
@@ -200,7 +200,8 @@
},
"script": {
"cancel": "İptal",
"cancel_multiple": "{number} iptal et"
"cancel_multiple": "{number} iptal et",
"run": "Çalıştır"
},
"service": {
"run": "Çalıştır"
@@ -295,6 +296,19 @@
"yes": "Evet"
},
"components": {
"addon-picker": {
"addon": "Eklenti",
"error": {
"fetch_addons": {
"description": "Eklentiler getirilirken bir hata döndürüldü.",
"title": "Eklentiler getirilirken hata oluştu"
},
"no_supervisor": {
"description": "Süpervizör bulunamadı, bu nedenle eklentiler yüklenemedi.",
"title": "Süpervizör Yok"
}
}
},
"area-picker": {
"add_dialog": {
"add": "Ekle",
@@ -682,6 +696,7 @@
"scene": "Sahneler",
"script": "Senaryolar",
"server_control": "Sunucu Kontrolleri",
"tag": "Etiketler",
"tags": "Etiketler",
"users": "Kullanıcılar",
"zone": "Bölgeler"
@@ -897,7 +912,7 @@
"event": {
"event": "Olay:",
"label": "Olayı Çalıştır",
"service_data": "Servis Verisi"
"service_data": "Hizmet Verisi"
},
"repeat": {
"label": "Tekrar",
@@ -950,7 +965,7 @@
"delete_confirm": "Silmek istediğinizden emin misiniz?",
"duplicate": "Kopya",
"header": "Koşullar",
"introduction": "Koşullar isteğe bağlıdır ve tüm koşullar yerine getirilmediği sürece daha fazla yürütmeyi engeller.",
"introduction": "Koşullar isteğe bağlıdır ve tüm koşullar yerine getirilmediği sürece otomasyonun çalışmasını engeller.",
"learn_more": "Koşullar hakkında daha fazla bilgi edinin",
"name": "Şart",
"type_select": "Koşul türü",
@@ -1485,6 +1500,7 @@
"cant_edit": "Yalnızca kullanıcı arayüzünde oluşturulan öğeleri düzenleyebilirsiniz.",
"caption": "Cihazlar",
"confirm_delete": "Bu cihazı silmek istediğinizden emin misiniz?",
"confirm_disable_config_entry": "Yapılandırma girişi {entry_name} için başka cihaz yok, bunun yerine yapılandırma girişini devre dışı bırakmak ister misiniz?",
"confirm_rename_entity_ids": "Varlıklarınızın varlık kimliklerini de yeniden adlandırmak istiyor musunuz?",
"confirm_rename_entity_ids_warning": "Bu, şu anda bu varlıkları kullanan herhangi bir yapılandırmayı (otomasyonlar, komut dosyaları, sahneler, kontrol panelleri gibi) değiştirmeyecektir! Yeni varlık kimliklerini kullanmak için bunları kendiniz güncellemeniz gerekecek!",
"data_table": {
@@ -1502,7 +1518,7 @@
"device_not_found": "Cihaz bulunamadı.",
"disabled": "Devre dışı",
"disabled_by": {
"config_entry": "Yapılandırma Girişi",
"config_entry": "Yapılandırma girişi",
"integration": "Entegrasyon",
"user": "Kullanıcı"
},
@@ -1597,7 +1613,8 @@
},
"filtering": {
"clear": "Temizle",
"filtering_by": "Filtreleme ölçütü"
"filtering_by": "Filtreleme ölçütü",
"show": "Göster"
},
"header": "Home Assistant'ı yapılandır",
"helpers": {
@@ -1668,7 +1685,19 @@
"delete_confirm": "Bu entegrasyonu silmek istediğinizden emin misiniz?",
"device_unavailable": "Cihaz kullanılamıyor",
"devices": "{count} {count, plural,\n one {cihaz}\n other {cihazlar}\n}",
"disable_restart_confirm": "Bu entegrasyonu devre dışı bırakmayı tamamlamak için Home Assistant'ı yeniden başlatın",
"disable": {
"disable_confirm": "Bu yapılandırma girişini devre dışı bırakmak istediğinizden emin misiniz? Cihazlar ve varlıklar devre dışı bırakılacak.",
"disabled": "Devre dışı",
"disabled_by": {
"device": "cihaz",
"integration": "entegrasyon",
"user": "kullanıcı"
},
"disabled_cause": "{cause} tarafından devre dışı bırakıldı"
},
"documentation": "Dökümanlar",
"enable_restart_confirm": "Bu entegrasyonu etkinleştirmeyi tamamlamak için Home Assistant'ı yeniden başlatın",
"entities": "{count} {count, plural,\n one {varlık}\n other {varlıklar}\n}",
"entity_unavailable": "Varlık kullanılamıyor",
"firmware": "Aygıt yazılımı: {version}",
@@ -1711,6 +1740,11 @@
"confirm_new": "{integration} kurmak istiyor musunuz?",
"description": "Bağlı aygıtları ve hizmetleri yönetin",
"details": "Entegrasyon detayları",
"disable": {
"disabled_integrations": "{number} devre dışı bırakıldı",
"hide_disabled": "Devre dışı bırakılan entegrasyonları gizle",
"show_disabled": "Devre dışı bırakılan entegrasyonları göster"
},
"discovered": "Bulundu",
"home_assistant_website": "Home Assistant web sitesi",
"ignore": {
@@ -2047,7 +2081,7 @@
"id": "Varlık kimliği",
"id_already_exists": "Bu ID zaten var",
"id_already_exists_save_error": "Kimlik benzersiz olmadığından bu komut dosyasını kaydedemezsiniz, başka bir kimlik seçin veya otomatik olarak bir tane oluşturmak için boş bırakın.",
"introduction": "Bir dizi eylemi yürütmek için komut dosyalarını kullanın.",
"introduction": "Bir dizi eylemi çalıştırmak için komut dosyalarını kullanın.",
"link_available_actions": "Kullanılabilir aksiyonlar hakkında daha fazla bilgi edinin.",
"load_error_not_editable": "Yalnızca scripts.yaml içindeki senaryolar düzenlenebilir.",
"max": {
@@ -2139,7 +2173,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Etiket ekleyin",
"automation_title": "{name} etiketi tarandı",
"caption": "Etiketler",
@@ -2536,6 +2570,7 @@
"states": {
"alert_entity_field": "Varlık zorunlu bir alandır",
"attributes": "Nitelikler",
"copy_id": "Kimliği panoya kopyala",
"current_entities": "Mevcut varlıklar",
"description1": "Home Assistant içersindeki bir cihazın görünümü ayarlayın.",
"description2": "Bu, gerçek cihaz ile iletişim kurmayacaktır.",
@@ -2594,11 +2629,11 @@
},
"cards": {
"actions": {
"action_confirmation": "\"{action}\" eylemini yürütmek istediğinizden emin misiniz?",
"action_confirmation": "\"{action}\" eylemini çalıştırmak istediğinizden emin misiniz?",
"no_entity_more_info": "Daha fazla bilgi iletişim kutusu için varlık sağlanmadı",
"no_entity_toggle": "Geçiş yapmak için varlık sağlanmadı",
"no_navigation_path": "Gezinme yolu belirtilmedi",
"no_service": "Yürütme için hizmet belirtilmedi",
"no_service": "Çalıştırılacak hizmet belirtilmedi",
"no_url": "Açılacak URL belirtilmedi"
},
"confirm_delete": "Bu kartı silmek istediğinizden emin misiniz?",
@@ -2969,7 +3004,7 @@
"confirm_remove_config_text": "Lovelace kullanıcı arayüzü yapılandırmanızı kaldırırsanız, Lovelace kullanıcı arayüzü, görünümleriniz alanlarınız ve cihazlarınız otomatik olarak oluşturulacatır.",
"confirm_remove_config_title": "Lovelace UI yapılandırmanızı kaldırmak istediğinizden emin misiniz?",
"confirm_unsaved_changes": "Kaydedilmemiş değişiklikleriniz var, çıkmak istediğinize emin misiniz?",
"confirm_unsaved_comments": "Yapılandırmanız yorum(lar) içerir, bunlar kaydedilmez. Devam etmek istiyor musun?",
"confirm_unsaved_comments": "Yapılandırmanız yorum (lar) içerebilir, bunlar kaydedilmeyecektir. Devam etmek istiyor musun?",
"error_invalid_config": "Yapılandırmanız geçerli değil: {error}",
"error_parse_yaml": "YAML alınamadı: {error}",
"error_remove": "Yapılandırma kaldırılamıyor: {error}",
@@ -3062,8 +3097,10 @@
},
"my": {
"component_not_loaded": "Bu yeniden yönlendirme, Ev Yardımcısı örneğiniz tarafından desteklenmiyor. Bu yeniden yönlendirmeyi kullanmak için {integration} tümleştirmesine ihtiyacınız var.",
"documentation": "dokümantasyon",
"error": "Bilinmeyen bir hata oluştu",
"faq_link": "Home Assistant SSS",
"no_supervisor": "Bu yönlendirme, Home Assistant kurulumunuz tarafından desteklenmiyor. Ev Asistanı İşletim Sistemi veya Ev Yardımcısı Denetimli kurulum yöntemine ihtiyaç duyar. Daha fazla bilgi için bkz. {docs_link} .",
"not_supported": "Bu yönlendirme, Home Assistant örneğiniz tarafından desteklenmiyor. Desteklenen yönlendirmeler ve bunların sunulduğu sürüm için {link} kontrol edin."
},
"page-authorize": {
+1 -1
View File
@@ -2082,7 +2082,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Додати тег",
"automation_title": "Тег {name} відсканований",
"caption": "Теги",
+1 -1
View File
@@ -1463,7 +1463,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "Thêm thẻ",
"automation_title": "Thẻ {name} được quét",
"caption": "Thẻ",
+60 -6
View File
@@ -200,7 +200,8 @@
},
"script": {
"cancel": "取消",
"cancel_multiple": "取消 {number} 个"
"cancel_multiple": "取消 {number} 个",
"run": "运行"
},
"service": {
"run": "运行"
@@ -295,6 +296,19 @@
"yes": "是"
},
"components": {
"addon-picker": {
"addon": "加载项",
"error": {
"fetch_addons": {
"description": "获取加载项时返回错误。",
"title": "获取加载项时出错"
},
"no_supervisor": {
"description": "未找到 Supervisor,因此无法载入加载项。",
"title": "未找到 Supervisor"
}
}
},
"area-picker": {
"add_dialog": {
"add": "添加",
@@ -467,6 +481,12 @@
"week": "{count} {count, plural,\n one {周}\n other {周}\n}前"
}
},
"service-control": {
"required": "此字段为必填字段",
"service_data": "服务数据",
"target": "目标",
"target_description": "该服务作用于哪些区域、设备或实体。"
},
"service-picker": {
"service": "服务"
},
@@ -474,8 +494,8 @@
"add_area_id": "选择区域",
"add_device_id": "选择设备",
"add_entity_id": "选择实体",
"expand_area_id": "在它包含的单独设备和实体中展开此区域。展开后,当区域发生更改时,不会更新设备和实体。",
"expand_device_id": "在单独的实体中展开此设备。展开后,设备发生变化时不会更新实体。",
"expand_area_id": "将此区域展开为单独设备和实体。展开后,当区域发生变化时,不会更新设备和实体。",
"expand_device_id": "将此设备展开为单独的实体。展开后,设备发生变化时不会更新实体。",
"remove_area_id": "删除区域",
"remove_device_id": "删除设备",
"remove_entity_id": "删除实体"
@@ -676,6 +696,7 @@
"scene": "场景",
"script": "脚本",
"server_control": "服务控制",
"tag": "标签",
"tags": "标签",
"users": "用户",
"zone": "地点"
@@ -1479,6 +1500,7 @@
"cant_edit": "您只能编辑在 UI 中创建的项目。",
"caption": "设备",
"confirm_delete": "您确定要删除此设备吗?",
"confirm_disable_config_entry": "配置条目 {entry_name} 没有更多设备了,是否要转而禁用整个配置条目?",
"confirm_rename_entity_ids": "是否要将实体 ID 一并重命名?",
"confirm_rename_entity_ids_warning": "此操作不会改变正在使用这些实体的配置(如自动化、脚本、场景、仪表盘),您必须手动更新它们以便使用新的实体 ID。",
"data_table": {
@@ -1591,7 +1613,8 @@
},
"filtering": {
"clear": "清除",
"filtering_by": "正在筛选:"
"filtering_by": "正在筛选:",
"show": "显示"
},
"header": "配置 Home Assistant",
"helpers": {
@@ -1662,7 +1685,19 @@
"delete_confirm": "您确定要删除此集成吗?",
"device_unavailable": "设备不可用",
"devices": "{count} {count, plural,\n one {个设备}\n other {个设备}\n}",
"disable_restart_confirm": "重启 Home Assistant 以完成此集成的禁用",
"disable": {
"disable_confirm": "您确定要禁用此配置条目吗?其设备和实体也将被禁用。",
"disabled": "已禁用",
"disabled_by": {
"device": "设备",
"integration": "集成",
"user": "用户"
},
"disabled_cause": "通过{cause}禁用"
},
"documentation": "文档",
"enable_restart_confirm": "重启 Home Assistant 以完成此集成的启用",
"entities": "{count} {count, plural,\n one {个实体}\n other {个实体}\n}",
"entity_unavailable": "实体不可用",
"firmware": "固件:{version}",
@@ -1682,8 +1717,10 @@
"config_flow": {
"aborted": "中止",
"close": "关闭",
"could_not_load": "无法加载配置向导",
"created_config": "为 {name} 创建了配置。",
"dismiss": "关闭对话框",
"error": "错误",
"error_saving_area": "保存区域时发生错误:{error}",
"external_step": {
"description": "此步骤需要访问外部网站才能完成。",
@@ -1692,6 +1729,10 @@
"finish": "完成",
"loading_first_time": "正在安装集成,请稍候",
"not_all_required_fields": "请填写所有必填字段",
"pick_flow_step": {
"new_flow": "否,设置另一个 {integration} 实例",
"title": "已发现以下集成,要设置它们吗?"
},
"submit": "提交"
},
"configure": "配置",
@@ -1699,6 +1740,11 @@
"confirm_new": "您想要配置 {integration} 吗?",
"description": "管理集成",
"details": "集成详细信息",
"disable": {
"disabled_integrations": "{number} 个已禁用",
"hide_disabled": "隐藏禁用的集成",
"show_disabled": "显示禁用的集成"
},
"discovered": "已发现",
"home_assistant_website": "Home Assistant 网站",
"ignore": {
@@ -2127,7 +2173,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "添加标签",
"automation_title": "扫描到标签 {name}",
"caption": "标签",
@@ -2508,17 +2554,23 @@
"type": "事件类型"
},
"services": {
"accepts_target": "该服务接受一个目标,例如:`entity_id: light.bed_light`",
"all_parameters": "所有可用的参数",
"call_service": "调用服务",
"column_description": "描述",
"column_example": "示例",
"column_parameter": "参数",
"description": "服务开发工具可让您调用 Home Assistant 中任何可用的服务。",
"fill_example_data": "填写示例数据",
"title": "服务"
"title": "服务",
"ui_mode": "进入 UI 模式",
"yaml_mode": "进入 YAML 模式",
"yaml_parameters": "以下参数只能在 YAML 模式下使用"
},
"states": {
"alert_entity_field": "实体是必填字段",
"attributes": "属性",
"copy_id": "将 ID 复制到剪贴板",
"current_entities": "现有实体",
"description1": "设置设备在 Home Assistant 中的呈现方式。",
"description2": "这将不影响实际设备。",
@@ -3045,8 +3097,10 @@
},
"my": {
"component_not_loaded": "您的 Home Assistant 不支持此重定向。需要使用 {integration} 集成才能使用它。",
"documentation": "文档",
"error": "发生未知错误",
"faq_link": "我的 Home Assistant 常见问题",
"no_supervisor": "您的 Home Assistant 不支持此重定向。它需要 Home Assistant OS 或 Home Assistant Supervised 安装方法。有关更多信息,请参阅 {docs_link} 。",
"not_supported": "您的 Home Assistant 不支持此重定向。请查阅{link}以获取受支持的重定向及其引入的版本。"
},
"page-authorize": {
+24 -22
View File
@@ -120,7 +120,7 @@
},
"automation": {
"last_triggered": "上次觸發",
"trigger": "執行"
"trigger": "執行自動化"
},
"camera": {
"not_available": "無法載入影像"
@@ -200,7 +200,8 @@
},
"script": {
"cancel": "取消",
"cancel_multiple": "取消 {number}"
"cancel_multiple": "取消 {number}",
"run": "執行"
},
"service": {
"run": "執行"
@@ -695,6 +696,7 @@
"scene": "場景",
"script": "腳本",
"server_control": "伺服器控制",
"tag": "標籤",
"tags": "標籤",
"users": "使用者",
"zone": "區域"
@@ -790,8 +792,8 @@
"editor_not_available": "類型 \"{type}\" 沒有可供使用的視覺化編輯器。",
"editor_not_supported": "此設定不支援視覺化編輯器",
"error_detected": "發現設定錯誤",
"key_missing": "缺少所需的密鑰 \"{key}\"。",
"key_not_expected": "視覺化編輯器不支援密鑰 \"{key}\"。",
"key_missing": "缺少所需的權杖 \"{key}\"。",
"key_not_expected": "視覺化編輯器不支援權杖 \"{key}\"。",
"key_wrong_type": "視覺化編輯器不支援所提供的 \"{key}\" 數值。支援 ({type_correct}) 但卻收到 ({type_wrong})。",
"no_type_provided": "未提供類型。"
}
@@ -963,7 +965,7 @@
"delete_confirm": "確定要刪除嗎?",
"duplicate": "複製",
"header": "觸發判斷",
"introduction": "「觸發判斷」為自動化規則中,選項使用的部分。可以用以避免誤觸發某些動作。",
"introduction": "「觸發判斷」為自動化規則中,選項使用的部分。可以用於滿足所有條件方執行、以避免誤觸發自動化。",
"learn_more": "詳細了解觸發判斷",
"name": "判斷式",
"type_select": "觸發判斷類別",
@@ -2171,7 +2173,7 @@
}
}
},
"tags": {
"tag": {
"add_tag": "新增標籤",
"automation_title": "標籤 {name} 已掃描",
"caption": "標籤",
@@ -2631,7 +2633,7 @@
"no_entity_more_info": "未提供獲得更詳細資料對話實體",
"no_entity_toggle": "未提供實體進行切換",
"no_navigation_path": "未提供指定導航路徑",
"no_service": "未提供指定執行服務",
"no_service": "未指定執行服務",
"no_url": "未提供指定開啟 URL"
},
"confirm_delete": "確定要刪除此面板?",
@@ -3168,7 +3170,7 @@
"data": {
"password": "API 密碼"
},
"description": "請輸入 Http 設定中的 API 密鑰"
"description": "請輸入 Http 設定中的 API 權杖"
},
"mfa": {
"data": {
@@ -3329,18 +3331,18 @@
"logout_text": "確定要登出?",
"logout_title": "登出?",
"long_lived_access_tokens": {
"confirm_delete": "確定要刪除{name}存取密鑰嗎?",
"create": "創建密鑰",
"create_failed": "創建存取密鑰失敗。",
"confirm_delete": "確定要刪除{name}存取權杖嗎?",
"create": "創建權杖",
"create_failed": "創建存取權杖失敗。",
"created": "新增日期:{date}",
"delete_failed": "刪除存取密鑰失敗。",
"description": "創建長效存取密鑰,可供運用腳本與 Home Assistant 實體進行互動。每個密鑰於創建後,有效期為十年。目前已啟用之永久有效密鑰如下。",
"empty_state": "尚未創建永久有效存取密鑰。",
"header": "永久有效存取密鑰",
"delete_failed": "刪除存取權杖失敗。",
"description": "創建長效存取權杖,可供運用腳本與 Home Assistant 實體進行互動。每個權杖於創建後,有效期為十年。目前已啟用之永久有效權杖如下。",
"empty_state": "尚未創建永久有效存取權杖。",
"header": "永久有效存取權杖",
"learn_auth_requests": "學習如何進行驗證請求。",
"name": "名稱",
"prompt_copy_token": "複製存取密鑰,將不會再次顯示。",
"prompt_name": "為密鑰命名"
"prompt_name": "為權杖命名"
},
"mfa_setup": {
"close": "關閉",
@@ -3368,15 +3370,15 @@
"push_notifications": "通知推送"
},
"refresh_tokens": {
"confirm_delete": "確定要刪除{name}更新密鑰嗎?",
"confirm_delete": "確定要刪除{name}更新權杖嗎?",
"created_at": "於{date}創建",
"current_token_tooltip": "無法刪除目前更新密鑰",
"delete_failed": "刪除更新密鑰失敗。",
"description": "每一個更新密鑰標示為一次登錄活動。當點選登出時,更新密鑰將會自動移除。目前你的帳號已啟用之更新密鑰如下。",
"header": "更新密鑰",
"current_token_tooltip": "無法刪除目前更新權杖",
"delete_failed": "刪除更新權杖失敗。",
"description": "每一個更新權杖標示為一次登錄活動。當點選登出時,更新權杖將會自動移除。目前你的帳號已啟用之更新權杖如下。",
"header": "更新權杖",
"last_used": "上次使用:於{date}、位置{location}",
"not_used": "從未使用過",
"token_title": "{clientId}更新密鑰"
"token_title": "{clientId}更新權杖"
},
"suspend": {
"description": "於隱藏五分鐘後關閉連線?",
+61 -28
View File
@@ -1905,10 +1905,10 @@
resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-5.0.0.tgz#3ba791f37b90e7f6170d252b63aacfcae943c039"
integrity sha512-WmKrB/575EJCzbeSJR3YQ5sET5FaizeljLRw1382qVUeGqzuWBgIS+AF5a0FO51uQTrDpoRgvuHC2IWVsgwkkA==
"@codemirror/commands@^0.17.2":
version "0.17.4"
resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-0.17.4.tgz#afca35595cf728eafa280d267285c8985a2f5c8b"
integrity sha512-YB1Iz5nHVZFJCB/WboNRBS7Bb6f/M/LoJQRm4AY2h1uWmSnxbr02DPX3XpTVhams7x7XNtIFtgk/Q4/wel/JXg==
"@codemirror/commands@^0.17.0":
version "0.17.5"
resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-0.17.5.tgz#0912955a614e554e4fbcb347a785c5c981f12826"
integrity sha512-9B/Zq6mBkSdf+2xWoOufJutNRhFdsgA9f2w9hfI7ujwFqFLIj7QKuYt+W1LAcJufHYy5BdVCyjgCamx65yb4MA==
dependencies:
"@codemirror/language" "^0.17.0"
"@codemirror/matchbrackets" "^0.17.0"
@@ -1917,7 +1917,7 @@
"@codemirror/view" "^0.17.0"
lezer-tree "^0.13.0"
"@codemirror/gutter@^0.17.2":
"@codemirror/gutter@^0.17.0":
version "0.17.2"
resolved "https://registry.yarnpkg.com/@codemirror/gutter/-/gutter-0.17.2.tgz#75c433090d05786614c0c7d14d2efae42c301151"
integrity sha512-kyfuNVg3B+yS9U3aNMK/AQ0NyOswOep8lrbldBL4BWXZ8mFzSifT3WNK887WYrEIhqeLjq5qjcsJgFyGrFR0Lg==
@@ -1926,10 +1926,10 @@
"@codemirror/state" "^0.17.0"
"@codemirror/view" "^0.17.0"
"@codemirror/highlight@^0.17.0", "@codemirror/highlight@^0.17.2":
version "0.17.2"
resolved "https://registry.yarnpkg.com/@codemirror/highlight/-/highlight-0.17.2.tgz#14825083581ed4bd8a4a06cd92a2062d5af923c8"
integrity sha512-KmSOCHjPv7yO9NAtQnqCNwjLHVwFh9InMwul0+JSsor1qLfBR1ljlmqLr7KUe9WWRnM7oD/eSuwF5uNpGtuaNw==
"@codemirror/highlight@^0.17.0":
version "0.17.3"
resolved "https://registry.yarnpkg.com/@codemirror/highlight/-/highlight-0.17.3.tgz#43f519ef93fa1c050ba2cd0631d9d855d9f3ec1e"
integrity sha512-pKuCQ/+CSbibK6ZO2E6YRowhf4LKERwCrSYmQyCw18Dgutt1D2d5t2fv0kziHYC7Jz3ZG2xnrsHABFjS57V6JA==
dependencies:
"@codemirror/language" "^0.17.0"
"@codemirror/rangeset" "^0.17.0"
@@ -1938,6 +1938,14 @@
lezer-tree "^0.13.0"
style-mod "^3.2.0"
"@codemirror/history@^0.17.0":
version "0.17.2"
resolved "https://registry.yarnpkg.com/@codemirror/history/-/history-0.17.2.tgz#d94273af95f7dbd8a0c41c370984e4bbf55d54e8"
integrity sha512-ML/FA6VJMMwsQrx7HFXaOAg/LqrLxUktE5pu230UOn0u5bxIPxbX0lLGs34994s9HPruqbCqIikSc+IfjLkFcA==
dependencies:
"@codemirror/state" "^0.17.0"
"@codemirror/view" "^0.17.0"
"@codemirror/language@^0.17.0":
version "0.17.5"
resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-0.17.5.tgz#77b551680f0bb8a6e40de7659e518de1e0c637a0"
@@ -1949,7 +1957,7 @@
lezer "^0.13.0"
lezer-tree "^0.13.0"
"@codemirror/legacy-modes@^0.17.1":
"@codemirror/legacy-modes@^0.17.0":
version "0.17.1"
resolved "https://registry.yarnpkg.com/@codemirror/legacy-modes/-/legacy-modes-0.17.1.tgz#18a1a0f4a6b5745e521443525a243b9bc321e8ae"
integrity sha512-JafuzWLKuUfKh8rF2VYgUx+fzD4upFxV9kJuIUyv94/S9RcdrDPRU46AmfSpdumY6A9F2qQuTEc5ZLaK3g0iaw==
@@ -1966,6 +1974,14 @@
"@codemirror/view" "^0.17.0"
lezer-tree "^0.13.0"
"@codemirror/panel@^0.17.0":
version "0.17.1"
resolved "https://registry.yarnpkg.com/@codemirror/panel/-/panel-0.17.1.tgz#9dfd3b464c537caebec43fffbd8a283b0210d4c1"
integrity sha512-2it2Sk02eF4WFwPVoRLhr9lPGq9lwwwHZFyb4olqI6tOyTPwk6leZ4ntabYrhvjRc7gD6S6vM14KhOtjm4hjqg==
dependencies:
"@codemirror/state" "^0.17.0"
"@codemirror/view" "^0.17.0"
"@codemirror/rangeset@^0.17.0":
version "0.17.1"
resolved "https://registry.yarnpkg.com/@codemirror/rangeset/-/rangeset-0.17.1.tgz#41066bcf4b70b2c7595cb1363780688cc3f1235b"
@@ -1973,14 +1989,26 @@
dependencies:
"@codemirror/state" "^0.17.0"
"@codemirror/state@^0.17.0", "@codemirror/state@^0.17.1":
"@codemirror/search@^0.17.0":
version "0.17.1"
resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-0.17.1.tgz#eb6ae529093b09f92b1d62c4d0ad8d09c4e218f7"
integrity sha512-wY0KP9my/0uKQk9AU39EqmkY6zMVv2Erej5b1rRBksM78JZXzjNUl4gyhtx1/0om84IZ1ocmW8MRElkAY6r1rw==
dependencies:
"@codemirror/panel" "^0.17.0"
"@codemirror/rangeset" "^0.17.0"
"@codemirror/state" "^0.17.0"
"@codemirror/text" "^0.17.0"
"@codemirror/view" "^0.17.0"
crelt "^1.0.5"
"@codemirror/state@^0.17.0":
version "0.17.2"
resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-0.17.2.tgz#b94846def08c2258bfdf09839359c31823e663ff"
integrity sha512-3WwDsBTMkiyFKJntIZjCiyq0KKo1OaKhq8k9vG/eGRm6bYL8rPOAEvufW6AKwuK3BSAftOAHFNXXq+GRNoL7zg==
dependencies:
"@codemirror/text" "^0.17.0"
"@codemirror/stream-parser@^0.17.0", "@codemirror/stream-parser@^0.17.1":
"@codemirror/stream-parser@^0.17.0":
version "0.17.1"
resolved "https://registry.yarnpkg.com/@codemirror/stream-parser/-/stream-parser-0.17.1.tgz#b8508676cffac1c34c98d4004a8449d762bef6cf"
integrity sha512-toCFLbPzzXNxCjyeNtu/s5Me1xDFQp6qCS4CNfslnW3iAg86M7W4v8SJocmVO3ALAr/6Ci/ECSIN7jsGZcAitw==
@@ -1992,15 +2020,15 @@
lezer "^0.13.0"
lezer-tree "^0.13.0"
"@codemirror/text@^0.17.0", "@codemirror/text@^0.17.2":
"@codemirror/text@^0.17.0":
version "0.17.2"
resolved "https://registry.yarnpkg.com/@codemirror/text/-/text-0.17.2.tgz#7076feeaed16556b52d9b028429296ce10eb1280"
integrity sha512-KL+cM+uJPW5skyuTRoW43lOaSQq3YDNEPx5z0V/9Wsz9R9dK4kVP5NIRMUFgl9MUCQ9UxIotvgPDpz65j9wjuA==
"@codemirror/view@^0.17.0", "@codemirror/view@^0.17.7":
version "0.17.10"
resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-0.17.10.tgz#d3bf4b2435b68c7ede784583f2c240f58ac3d5c4"
integrity sha512-Ke3mgfw1qnLekFDFYJsz8ewKa0dBnnUrlYSZd+1X1XkMaqmKZj6enbcvpW0/GnxOvGJpa+HrWCMSrRvCrlaqjA==
"@codemirror/view@^0.17.0":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-0.17.11.tgz#d9fad5aa405769f97621bb77fab7abc2edb55f2d"
integrity sha512-pl5fOiBLifExuqAuqhv/yOZvDODQrO26HEtljv4DJqx2Em5kKjzWVHhQymq0dh+nPY+qA4vZCGcT5r/ySNR52Q==
dependencies:
"@codemirror/rangeset" "^0.17.0"
"@codemirror/state" "^0.17.0"
@@ -2779,15 +2807,15 @@
"@material/feature-targeting" "9.0.0-canary.1c156d69d.0"
"@material/theme" "9.0.0-canary.1c156d69d.0"
"@mdi/js@5.6.55":
version "5.6.55"
resolved "https://registry.yarnpkg.com/@mdi/js/-/js-5.6.55.tgz#d1e99da22c8d462c17d4c5b530a7d1b77e668230"
integrity sha512-FphEd6PTivVSfsxjRB/Z5sJhxUmxA0jL/+nEQmqk8Ok1miSnw92ibj4p1SPAmgnR8OFTNCkHX23AvlU8YZQb5A==
"@mdi/js@5.9.55":
version "5.9.55"
resolved "https://registry.yarnpkg.com/@mdi/js/-/js-5.9.55.tgz#8f5bc4d924c23f30dab20545ddc768e778bbc882"
integrity sha512-BbeHMgeK2/vjdJIRnx12wvQ6s8xAYfvMmEAVsUx9b+7GiQGQ9Za8jpwp17dMKr9CgKRvemlAM4S7S3QOtEbp4A==
"@mdi/svg@5.6.55":
version "5.6.55"
resolved "https://registry.yarnpkg.com/@mdi/svg/-/svg-5.6.55.tgz#993b9a8914416794c001eb662b9ddb3628de4d12"
integrity sha512-0fhZdAwjagbCoAPJnleLsE/W46vMZKe7G6vM1U2LthK23oHXEatkaNinvYYWTtKJp2T+/4rdZ8hq28VBUPAaNQ==
"@mdi/svg@5.9.55":
version "5.9.55"
resolved "https://registry.yarnpkg.com/@mdi/svg/-/svg-5.9.55.tgz#7cba058135afd5d8a3da977f51b71ffc6a3a3699"
integrity sha512-gO0ZpKIeCn9vFg46QduK9MM+n1fuCNwSdcdlBTtbafnnuvwLveK2uj+byhdLtg/8VJGXDhp+DJ35QUMbeWeULA==
"@mrmlnc/readdir-enhanced@^2.2.1":
version "2.2.1"
@@ -6199,6 +6227,11 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
crelt@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.5.tgz#57c0d52af8c859e354bace1883eb2e1eb182bb94"
integrity sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==
cropperjs@^1.5.7:
version "1.5.7"
resolved "https://registry.yarnpkg.com/cropperjs/-/cropperjs-1.5.7.tgz#b65019725bae1c6285e881fb661b2141fa57025b"
@@ -12932,9 +12965,9 @@ strip-json-comments@^3.0.1:
integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
style-mod@^3.2.0:
version "3.2.1"
resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-3.2.1.tgz#daaa4ad2a8b2880b4c07b29c061d49b5db6cab15"
integrity sha512-cQerrMLHjR/fxC4DWC2dRrXc11hvsM7lJ2vtuMOHWU5IG7Deu5RfTbttjbY4xiRAWs3gFIZZFf694jzNPW1Ehw==
version "3.2.2"
resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-3.2.2.tgz#fc445fdd08bd5a513363079ba625f69b2618f31d"
integrity sha512-7X3zF+GjUSQ/opNrzuEOqM+lF+4SOkG5aWxrNw/5rwBrHytsH1Ly8/o9e6Wnqoul2lLT1Pmue63LgiE6mEZAGw==
subarg@^1.0.0:
version "1.0.0"