mirror of
https://github.com/home-assistant/frontend.git
synced 2025-04-25 13:57:21 +00:00
Merge pull request #8474 from home-assistant/dev
This commit is contained in:
commit
16fa6904d9
@ -192,8 +192,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) {
|
||||
|
@ -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}
|
||||
@ -146,6 +183,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 +316,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,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,8 @@ 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",
|
||||
});
|
||||
|
||||
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 _updateClicked(): Promise<void> {
|
||||
showDialogSupervisorAddonUpdate(this, { addon: this.addon });
|
||||
}
|
||||
|
||||
private async _startClicked(ev: CustomEvent): Promise<void> {
|
||||
|
@ -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, { core: this.supervisor.core });
|
||||
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),
|
||||
|
178
hassio/src/dialogs/addon/dialog-supervisor-addon-update.ts
Normal file
178
hassio/src/dialogs/addon/dialog-supervisor-addon-update.ts
Normal file
@ -0,0 +1,178 @@
|
||||
import "@material/mwc-button/mwc-button";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
internalProperty,
|
||||
LitElement,
|
||||
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 { 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 {
|
||||
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;
|
||||
await this.updateComplete;
|
||||
}
|
||||
|
||||
public closeDialog(): void {
|
||||
this._action = null;
|
||||
this._createSnapshot = true;
|
||||
this._opened = false;
|
||||
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
|
||||
.heading="Update ${this.addon.name}"
|
||||
.open=${this._opened}
|
||||
scrimClickAction
|
||||
escapeKeyAction
|
||||
>
|
||||
${this._action === null
|
||||
? html`<div>
|
||||
Are you sure you want to update this 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 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 @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"
|
||||
? `Update to version ${this.addon.version_latest} in progress`
|
||||
: "Creating snapshot in progress"}
|
||||
</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;
|
||||
}
|
||||
}
|
17
hassio/src/dialogs/addon/show-dialog-addon-update.ts
Normal file
17
hassio/src/dialogs/addon/show-dialog-addon-update.ts
Normal file
@ -0,0 +1,17 @@
|
||||
import { fireEvent } from "../../../../src/common/dom/fire_event";
|
||||
import { HassioAddonDetails } from "../../../../src/data/hassio/addon";
|
||||
|
||||
export interface SupervisorDialogSupervisorAddonUpdateParams {
|
||||
addon: HassioAddonDetails;
|
||||
}
|
||||
|
||||
export const showDialogSupervisorAddonUpdate = (
|
||||
element: HTMLElement,
|
||||
dialogParams: SupervisorDialogSupervisorAddonUpdateParams
|
||||
): void => {
|
||||
fireEvent(element, "show-dialog", {
|
||||
dialogTag: "dialog-supervisor-addon-update",
|
||||
dialogImport: () => import("./dialog-supervisor-addon-update"),
|
||||
dialogParams,
|
||||
});
|
||||
};
|
175
hassio/src/dialogs/core/dialog-supervisor-core-update.ts
Normal file
175
hassio/src/dialogs/core/dialog-supervisor-core-update.ts
Normal file
@ -0,0 +1,175 @@
|
||||
import "@material/mwc-button/mwc-button";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
internalProperty,
|
||||
LitElement,
|
||||
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 { HassioHomeAssistantInfo } from "../../../../src/data/hassio/supervisor";
|
||||
import { updateCore } from "../../../../src/data/supervisor/core";
|
||||
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 {
|
||||
public hass!: HomeAssistant;
|
||||
|
||||
public core!: HassioHomeAssistantInfo;
|
||||
|
||||
@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.core = params.core;
|
||||
await this.updateComplete;
|
||||
}
|
||||
|
||||
public closeDialog(): void {
|
||||
this._action = null;
|
||||
this._createSnapshot = true;
|
||||
this._opened = false;
|
||||
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}
|
||||
heading="Update Home Assistant Core"
|
||||
scrimClickAction
|
||||
escapeKeyAction
|
||||
>
|
||||
${this._action === null
|
||||
? html`<div>
|
||||
Are you sure you want to update Home Assistant Core to version
|
||||
${this.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 @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"
|
||||
? `Update to version ${this.core.version_latest} in progress`
|
||||
: "Creating snapshot in progress"}
|
||||
</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.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;
|
||||
}
|
||||
}
|
17
hassio/src/dialogs/core/show-dialog-core-update.ts
Normal file
17
hassio/src/dialogs/core/show-dialog-core-update.ts
Normal file
@ -0,0 +1,17 @@
|
||||
import { fireEvent } from "../../../../src/common/dom/fire_event";
|
||||
import { HassioHomeAssistantInfo } from "../../../../src/data/hassio/supervisor";
|
||||
|
||||
export interface SupervisorDialogSupervisorCoreUpdateParams {
|
||||
core: HassioHomeAssistantInfo;
|
||||
}
|
||||
|
||||
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;
|
||||
|
@ -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>`;
|
||||
}
|
||||
|
@ -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,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, { core: this.supervisor.core });
|
||||
}
|
||||
|
||||
static get styles(): CSSResult[] {
|
||||
|
@ -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 });
|
||||
|
@ -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",
|
||||
|
@ -26,7 +26,9 @@
|
||||
"@codemirror/commands": "^0.17.2",
|
||||
"@codemirror/gutter": "^0.17.2",
|
||||
"@codemirror/highlight": "^0.17.2",
|
||||
"@codemirror/history": "^0.17.2",
|
||||
"@codemirror/legacy-modes": "^0.17.1",
|
||||
"@codemirror/search": "^0.17.1",
|
||||
"@codemirror/state": "^0.17.1",
|
||||
"@codemirror/stream-parser": "^0.17.1",
|
||||
"@codemirror/text": "^0.17.2",
|
||||
|
@ -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
|
||||
|
2
setup.py
2
setup.py
@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
||||
|
||||
setup(
|
||||
name="home-assistant-frontend",
|
||||
version="20210225.0",
|
||||
version="20210226.0",
|
||||
description="The Home Assistant frontend",
|
||||
url="https://github.com/home-assistant/home-assistant-polymer",
|
||||
author="The Home Assistant Authors",
|
||||
|
@ -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,
|
||||
]),
|
||||
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,
|
||||
|
@ -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,
|
||||
});
|
||||
|
@ -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({
|
||||
|
51
src/data/supervisor/store.ts
Normal file
51
src/data/supervisor/store.ts
Normal 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`)
|
||||
);
|
||||
};
|
@ -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 = (
|
||||
|
@ -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}
|
||||
|
@ -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: [
|
||||
|
@ -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>`
|
||||
: ""}
|
||||
|
@ -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
|
||||
),
|
||||
|
@ -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";
|
||||
@ -148,11 +149,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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,24 +3,35 @@ import { EditorView as CMEditorView } 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 = [
|
||||
{ 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)",
|
||||
},
|
||||
|
||||
@ -30,7 +41,57 @@ export const theme = CMEditorView.theme({
|
||||
|
||||
"$$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": {
|
||||
padding: "2px 6px 4px",
|
||||
position: "relative",
|
||||
"& [name=close]": {
|
||||
position: "absolute",
|
||||
top: "0",
|
||||
right: "4px",
|
||||
backgroundColor: "inherit",
|
||||
border: "none",
|
||||
font: "inherit",
|
||||
padding: "4px",
|
||||
margin: 0,
|
||||
outline: "none",
|
||||
fontSize: "150%",
|
||||
},
|
||||
},
|
||||
|
||||
$button: {
|
||||
border: "1px solid var(--primary-color)",
|
||||
padding: "8px",
|
||||
textTransform: "uppercase",
|
||||
margin: "4px",
|
||||
background: "none",
|
||||
},
|
||||
|
||||
$textfield: {
|
||||
backgroundColor: "var(--secondary-background-color)",
|
||||
padding: "8px",
|
||||
},
|
||||
|
||||
$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 +101,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" },
|
||||
});
|
||||
|
@ -556,7 +556,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%]",
|
||||
@ -883,7 +883,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",
|
||||
|
@ -1578,7 +1578,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"description": "Задействайте автоматизации при сканиране на NFC етикет, QR код и др",
|
||||
"detail": {
|
||||
"create": "Създаване",
|
||||
|
@ -2139,7 +2139,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Afegeix etiqueta",
|
||||
"automation_title": "S'escanegi l'etiqueta {name}",
|
||||
"caption": "Etiquetes",
|
||||
|
@ -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"
|
||||
@ -1482,6 +1499,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 +1612,8 @@
|
||||
},
|
||||
"filtering": {
|
||||
"clear": "Vymazat",
|
||||
"filtering_by": "Filtrování podle"
|
||||
"filtering_by": "Filtrování podle",
|
||||
"show": "Zobrazit"
|
||||
},
|
||||
"header": "Nastavení Home Assistant",
|
||||
"helpers": {
|
||||
@ -1665,7 +1684,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 +1716,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 +1728,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 +1739,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 +2172,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Přidat štítek",
|
||||
"automation_title": "Štítek {name} je naskenován",
|
||||
"caption": "Štítky",
|
||||
@ -2511,17 +2553,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 +3096,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": {
|
||||
|
@ -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."
|
||||
|
@ -2089,7 +2089,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Tilføj tag",
|
||||
"automation_title": "Tag {name} blev scannet",
|
||||
"caption": "Tags",
|
||||
|
@ -2126,7 +2126,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Tag hinzufügen",
|
||||
"automation_title": "NFC Tag {name} ist gescannt",
|
||||
"caption": "NFC Tags",
|
||||
|
@ -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": "Προσθήκη",
|
||||
@ -1485,6 +1499,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 +1612,8 @@
|
||||
},
|
||||
"filtering": {
|
||||
"clear": "Εκκαθάριση",
|
||||
"filtering_by": "Φιλτράρισμα κατά"
|
||||
"filtering_by": "Φιλτράρισμα κατά",
|
||||
"show": "Εμφάνισε"
|
||||
},
|
||||
"header": "Διαμόρφωση του Home Assistant",
|
||||
"helpers": {
|
||||
@ -1668,7 +1684,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 +1739,11 @@
|
||||
"confirm_new": "Θέλετε να ρυθμίσετε το {integration};",
|
||||
"description": "Διαχείριση ενοποιήσεων με υπηρεσίες, συσκευές, ...",
|
||||
"details": "Λεπτομέρειες ενσωμάτωσης",
|
||||
"disable": {
|
||||
"disabled_integrations": "{number} απενεργοποιημένο",
|
||||
"hide_disabled": "Απόκρυψη απενεργοποιημένων ενσωματώσεων",
|
||||
"show_disabled": "Εμφάνιση απενεργοποιημένων ενσωματώσεων"
|
||||
},
|
||||
"discovered": "Ανακαλύφθηκε",
|
||||
"home_assistant_website": "Ιστότοπος του Home Assistant.",
|
||||
"ignore": {
|
||||
@ -2139,7 +2172,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Προσθήκη ετικέτας",
|
||||
"automation_title": "Η ετικέτα {name} σαρώθηκε",
|
||||
"caption": "Ετικέτες",
|
||||
@ -2536,6 +2569,7 @@
|
||||
"states": {
|
||||
"alert_entity_field": "Η οντότητα είναι ένα υποχρεωτικό πεδίο",
|
||||
"attributes": "Χαρακτηριστικά",
|
||||
"copy_id": "Αντιγραφή αναγνωριστικού στο πρόχειρο",
|
||||
"current_entities": "Τρέχουσες οντότητες",
|
||||
"description1": "Ορίστε την αναπαράσταση μιας συσκευής μέσα στο Home Assistant",
|
||||
"description2": "Αυτό δε θα επικοινωνεί με την τρέχουσα συσκευή.",
|
||||
@ -3062,8 +3096,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": {
|
||||
|
@ -2172,7 +2172,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Add tag",
|
||||
"automation_title": "Tag {name} is scanned",
|
||||
"caption": "Tags",
|
||||
|
@ -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.",
|
||||
|
@ -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"
|
||||
@ -963,7 +964,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 +2172,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Añadir etiqueta",
|
||||
"automation_title": "Se escanea la etiqueta {name}",
|
||||
"caption": "Etiquetas",
|
||||
|
@ -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"
|
||||
@ -963,7 +964,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 tunduvad väga 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, välja arvatud juhul kui kõik tingimused on täidetud.",
|
||||
"learn_more": "Lisateave tingimuste kohta",
|
||||
"name": "Tingimus",
|
||||
"type_select": "Tingimuse tüüp",
|
||||
@ -2079,7 +2080,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,7 +2172,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Lisa TAG",
|
||||
"automation_title": "TAG {name} on skannitud",
|
||||
"caption": "TAGid",
|
||||
@ -2631,7 +2632,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?",
|
||||
|
@ -1297,7 +1297,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"detail": {
|
||||
"delete": "حذف",
|
||||
"name": "نام",
|
||||
|
@ -2070,7 +2070,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Lisää tunniste",
|
||||
"automation_title": "Tunniste {name} skannataan",
|
||||
"caption": "Tunnisteet",
|
||||
|
@ -2139,7 +2139,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Ajouter une balise",
|
||||
"automation_title": "La balise {name} est analysée",
|
||||
"caption": "Balises",
|
||||
|
@ -1771,7 +1771,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "הוסף תג",
|
||||
"automation_title": "התג {name} נסרק",
|
||||
"caption": "תגים",
|
||||
|
@ -2098,7 +2098,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Címke hozzáadása",
|
||||
"automation_title": "{name} címke beolvasva",
|
||||
"caption": "Címkék",
|
||||
|
@ -40,6 +40,27 @@
|
||||
"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"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -58,6 +79,7 @@
|
||||
},
|
||||
"default": {
|
||||
"entity_not_found": "Entitas tidak ditemukan",
|
||||
"error": "Kesalahan",
|
||||
"unavailable": "Tak Tersedia",
|
||||
"unknown": "Tak Diketahui"
|
||||
},
|
||||
@ -171,7 +193,8 @@
|
||||
},
|
||||
"script": {
|
||||
"cancel": "Batalkan",
|
||||
"cancel_multiple": "Batalkan {number}"
|
||||
"cancel_multiple": "Batalkan {number}",
|
||||
"run": "Jalankan"
|
||||
},
|
||||
"service": {
|
||||
"run": "Jalankan"
|
||||
@ -343,6 +366,16 @@
|
||||
"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}",
|
||||
"set": "disetel",
|
||||
"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,9 +409,33 @@
|
||||
"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",
|
||||
@ -399,8 +456,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"
|
||||
@ -711,6 +778,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 +794,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": {
|
||||
@ -2083,7 +2162,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Tambahkan tag",
|
||||
"automation_title": "Tag {name} dipindai",
|
||||
"caption": "Tag",
|
||||
@ -2434,24 +2513,87 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"custom": {
|
||||
"external_panel": {
|
||||
"complete_access": "Ini akan memiliki akses ke semua data di Home Assistant.",
|
||||
"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",
|
||||
"data": "Data Peristiwa (YAML, opsional)",
|
||||
"documentation": "Dokumentasi Peristiwa.",
|
||||
"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.",
|
||||
@ -2926,10 +3068,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,6 +3154,9 @@
|
||||
}
|
||||
},
|
||||
"trusted_networks": {
|
||||
"abort": {
|
||||
"not_allowed": "Komputer Anda tidak diperbolehkan."
|
||||
},
|
||||
"step": {
|
||||
"init": {
|
||||
"data": {
|
||||
@ -3012,33 +3167,91 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"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 otomatisasi 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 +3259,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 +3353,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"
|
||||
}
|
||||
}
|
||||
}
|
@ -1383,7 +1383,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"detail": {
|
||||
"create": "Stofna",
|
||||
"delete": "Eyða",
|
||||
|
@ -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": {
|
||||
|
@ -2119,7 +2119,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "タグを追加する",
|
||||
"automation_title": "{name}タグのスキャン",
|
||||
"caption": "タグ",
|
||||
|
@ -2040,7 +2040,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "태그 추가",
|
||||
"automation_title": "{name} 태그가 검색되었습니다",
|
||||
"caption": "태그",
|
||||
|
@ -2083,7 +2083,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Tag dobäisetzen",
|
||||
"automation_title": "Tag {name} gouf gescannt",
|
||||
"caption": "Tags",
|
||||
|
@ -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."
|
||||
|
@ -1280,7 +1280,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Pievienot birku",
|
||||
"automation_title": "Birka {name} ir noskenēta",
|
||||
"caption": "Birkas",
|
||||
|
@ -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",
|
||||
@ -950,7 +964,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 +1499,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 +1517,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 +1612,8 @@
|
||||
},
|
||||
"filtering": {
|
||||
"clear": "Tøm",
|
||||
"filtering_by": "Filtrering etter"
|
||||
"filtering_by": "Filtrering etter",
|
||||
"show": "Vis"
|
||||
},
|
||||
"header": "Konfigurer Home Assistant",
|
||||
"helpers": {
|
||||
@ -1668,7 +1684,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 +1739,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 +2080,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 +2172,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Legg til tag",
|
||||
"automation_title": "Tag {name} skannes",
|
||||
"caption": "Tagger",
|
||||
@ -2536,6 +2569,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 +2628,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 +3003,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 +3096,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 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": {
|
||||
|
@ -200,7 +200,8 @@
|
||||
},
|
||||
"script": {
|
||||
"cancel": "Annuleer",
|
||||
"cancel_multiple": "Annuleer {number}"
|
||||
"cancel_multiple": "Annuleer {number}",
|
||||
"run": "Uitvoeren"
|
||||
},
|
||||
"service": {
|
||||
"run": "Uitvoeren"
|
||||
@ -2165,7 +2166,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Tag toevoegen",
|
||||
"automation_title": "Tag {name} is gescand",
|
||||
"caption": "Tags",
|
||||
|
@ -2138,7 +2138,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Dodaj tag",
|
||||
"automation_title": "Tag {name} jest skanowany",
|
||||
"caption": "Tagi",
|
||||
|
@ -1872,7 +1872,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Adicionar etiqueta",
|
||||
"caption": "Etiquetas",
|
||||
"create_automation": "Criar automação com a etiqueta",
|
||||
|
@ -2118,7 +2118,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Adicionar etiqueta",
|
||||
"automation_title": "A etiqueta {name} é lida",
|
||||
"caption": "Etiquetas",
|
||||
|
@ -2027,7 +2027,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Adaugați etichetă",
|
||||
"automation_title": "Eticheta {name} este scanată",
|
||||
"caption": "Etichete",
|
||||
|
@ -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": "Отображать объект",
|
||||
@ -1517,11 +1517,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 +1689,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 +2172,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Добавить метку",
|
||||
"automation_title": "Считана метка {name}",
|
||||
"caption": "Метки",
|
||||
|
@ -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ď.",
|
||||
|
@ -2102,7 +2102,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Dodaj značko",
|
||||
"automation_title": "Značka {name} se prebira",
|
||||
"caption": "Značke",
|
||||
|
@ -2126,7 +2126,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Lägg till tagg",
|
||||
"automation_title": "Taggen {name} är skannad",
|
||||
"caption": "Taggar",
|
||||
|
@ -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ı"
|
||||
@ -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",
|
||||
@ -950,7 +964,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 +1499,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 +1517,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 +1612,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 +1684,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 +1739,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 +2080,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 +2172,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Etiket ekleyin",
|
||||
"automation_title": "{name} etiketi tarandı",
|
||||
"caption": "Etiketler",
|
||||
@ -2536,6 +2569,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 +2628,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 +3003,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 +3096,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": {
|
||||
|
@ -2082,7 +2082,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Додати тег",
|
||||
"automation_title": "Тег {name} відсканований",
|
||||
"caption": "Теги",
|
||||
|
@ -1463,7 +1463,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "Thêm thẻ",
|
||||
"automation_title": "Thẻ {name} được quét",
|
||||
"caption": "Thẻ",
|
||||
|
@ -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": "服务"
|
||||
},
|
||||
@ -1479,6 +1499,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 +1612,8 @@
|
||||
},
|
||||
"filtering": {
|
||||
"clear": "清除",
|
||||
"filtering_by": "正在筛选:"
|
||||
"filtering_by": "正在筛选:",
|
||||
"show": "显示"
|
||||
},
|
||||
"header": "配置 Home Assistant",
|
||||
"helpers": {
|
||||
@ -1662,7 +1684,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 +1716,10 @@
|
||||
"config_flow": {
|
||||
"aborted": "中止",
|
||||
"close": "关闭",
|
||||
"could_not_load": "无法加载配置向导",
|
||||
"created_config": "为 {name} 创建了配置。",
|
||||
"dismiss": "关闭对话框",
|
||||
"error": "错误",
|
||||
"error_saving_area": "保存区域时发生错误:{error}",
|
||||
"external_step": {
|
||||
"description": "此步骤需要访问外部网站才能完成。",
|
||||
@ -1692,6 +1728,10 @@
|
||||
"finish": "完成",
|
||||
"loading_first_time": "正在安装集成,请稍候",
|
||||
"not_all_required_fields": "请填写所有必填字段",
|
||||
"pick_flow_step": {
|
||||
"new_flow": "否,设置另一个 {integration} 实例",
|
||||
"title": "已发现以下集成,要设置它们吗?"
|
||||
},
|
||||
"submit": "提交"
|
||||
},
|
||||
"configure": "配置",
|
||||
@ -1699,6 +1739,11 @@
|
||||
"confirm_new": "您想要配置 {integration} 吗?",
|
||||
"description": "管理集成",
|
||||
"details": "集成详细信息",
|
||||
"disable": {
|
||||
"disabled_integrations": "{number} 个已禁用",
|
||||
"hide_disabled": "隐藏禁用的集成",
|
||||
"show_disabled": "显示禁用的集成"
|
||||
},
|
||||
"discovered": "已发现",
|
||||
"home_assistant_website": "Home Assistant 网站",
|
||||
"ignore": {
|
||||
@ -2127,7 +2172,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "添加标签",
|
||||
"automation_title": "扫描到标签 {name}",
|
||||
"caption": "标签",
|
||||
@ -2508,17 +2553,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 +3096,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": {
|
||||
|
@ -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": "執行"
|
||||
@ -963,7 +964,7 @@
|
||||
"delete_confirm": "確定要刪除嗎?",
|
||||
"duplicate": "複製",
|
||||
"header": "觸發判斷",
|
||||
"introduction": "「觸發判斷」為自動化規則中,選項使用的部分。可以用以避免誤觸發某些動作。",
|
||||
"introduction": "「觸發判斷」為自動化規則中,選項使用的部分。可以用於滿足所有條件方執行、以避免誤觸發自動化。",
|
||||
"learn_more": "詳細了解觸發判斷",
|
||||
"name": "判斷式",
|
||||
"type_select": "觸發判斷類別",
|
||||
@ -2171,7 +2172,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"tag": {
|
||||
"add_tag": "新增標籤",
|
||||
"automation_title": "標籤 {name} 已掃描",
|
||||
"caption": "標籤",
|
||||
@ -2631,7 +2632,7 @@
|
||||
"no_entity_more_info": "未提供獲得更詳細資料對話實體",
|
||||
"no_entity_toggle": "未提供實體進行切換",
|
||||
"no_navigation_path": "未提供指定導航路徑",
|
||||
"no_service": "未提供指定執行服務",
|
||||
"no_service": "未指定執行服務",
|
||||
"no_url": "未提供指定開啟 URL"
|
||||
},
|
||||
"confirm_delete": "確定要刪除此面板?",
|
||||
|
33
yarn.lock
33
yarn.lock
@ -1938,6 +1938,14 @@
|
||||
lezer-tree "^0.13.0"
|
||||
style-mod "^3.2.0"
|
||||
|
||||
"@codemirror/history@^0.17.2":
|
||||
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"
|
||||
@ -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,6 +1989,18 @@
|
||||
dependencies:
|
||||
"@codemirror/state" "^0.17.0"
|
||||
|
||||
"@codemirror/search@^0.17.1":
|
||||
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", "@codemirror/state@^0.17.1":
|
||||
version "0.17.2"
|
||||
resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-0.17.2.tgz#b94846def08c2258bfdf09839359c31823e663ff"
|
||||
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user