mirror of
https://github.com/home-assistant/frontend.git
synced 2025-09-08 20:56:34 +00:00
Compare commits
24 Commits
20200805.0
...
auth-passw
Author | SHA1 | Date | |
---|---|---|---|
![]() |
bd316a36a0 | ||
![]() |
1eac9fa1cd | ||
![]() |
7f819f0020 | ||
![]() |
dec1f99a5f | ||
![]() |
c705e74fc8 | ||
![]() |
01df10f93e | ||
![]() |
9877f08cf4 | ||
![]() |
02791c51ae | ||
![]() |
49683326e6 | ||
![]() |
947773a82e | ||
![]() |
2a229df624 | ||
![]() |
0d4f43472b | ||
![]() |
b30e467685 | ||
![]() |
a56c0b52d5 | ||
![]() |
c17ebfd279 | ||
![]() |
5400b1da96 | ||
![]() |
69f4a618b2 | ||
![]() |
16b8b6698c | ||
![]() |
b29a700d40 | ||
![]() |
bbb1468439 | ||
![]() |
72f9d6a8d3 | ||
![]() |
3ec8da1f17 | ||
![]() |
dbea3848df | ||
![]() |
33871435e1 |
@@ -242,19 +242,23 @@ class HassioAddonInfo extends LitElement {
|
||||
`
|
||||
: ""}
|
||||
<div class="security">
|
||||
<ha-label-badge
|
||||
class=${classMap({
|
||||
green: this.addon.stage === "stable",
|
||||
yellow: this.addon.stage === "experimental",
|
||||
red: this.addon.stage === "deprecated",
|
||||
})}
|
||||
@click=${this._showMoreInfo}
|
||||
id="stage"
|
||||
label="stage"
|
||||
description=""
|
||||
>
|
||||
<ha-svg-icon .path=${STAGE_ICON[this.addon.stage]}></ha-svg-icon>
|
||||
</ha-label-badge>
|
||||
${this.addon.stage !== "stable"
|
||||
? html` <ha-label-badge
|
||||
class=${classMap({
|
||||
yellow: this.addon.stage === "experimental",
|
||||
red: this.addon.stage === "deprecated",
|
||||
})}
|
||||
@click=${this._showMoreInfo}
|
||||
id="stage"
|
||||
label="stage"
|
||||
description=""
|
||||
>
|
||||
<ha-svg-icon
|
||||
.path=${STAGE_ICON[this.addon.stage]}
|
||||
></ha-svg-icon>
|
||||
</ha-label-badge>`
|
||||
: ""}
|
||||
|
||||
<ha-label-badge
|
||||
class=${classMap({
|
||||
green: [5, 6].includes(Number(this.addon.rating)),
|
||||
|
@@ -31,6 +31,10 @@ class HassioMarkdownDialog extends LitElement {
|
||||
this._opened = true;
|
||||
}
|
||||
|
||||
public closeDialog() {
|
||||
this._opened = false;
|
||||
}
|
||||
|
||||
protected render(): TemplateResult {
|
||||
if (!this._opened) {
|
||||
return html``;
|
||||
@@ -38,7 +42,7 @@ class HassioMarkdownDialog extends LitElement {
|
||||
return html`
|
||||
<ha-dialog
|
||||
open
|
||||
@closing=${this._closeDialog}
|
||||
@closed=${this.closeDialog}
|
||||
.heading=${createCloseHeading(this.hass, this.title)}
|
||||
>
|
||||
<ha-markdown .content=${this.content || ""}></ha-markdown>
|
||||
@@ -46,10 +50,6 @@ class HassioMarkdownDialog extends LitElement {
|
||||
`;
|
||||
}
|
||||
|
||||
private _closeDialog(): void {
|
||||
this._opened = false;
|
||||
}
|
||||
|
||||
static get styles(): CSSResult[] {
|
||||
return [
|
||||
haStyleDialog,
|
||||
|
@@ -1,117 +1,35 @@
|
||||
import { PolymerElement } from "@polymer/polymer";
|
||||
import {
|
||||
customElement,
|
||||
property,
|
||||
internalProperty,
|
||||
html,
|
||||
PropertyValues,
|
||||
customElement,
|
||||
LitElement,
|
||||
property,
|
||||
} from "lit-element";
|
||||
import "./hassio-router";
|
||||
import { urlSyncMixin } from "../../src/state/url-sync-mixin";
|
||||
import { ProvideHassLitMixin } from "../../src/mixins/provide-hass-lit-mixin";
|
||||
import { HomeAssistant, Route } from "../../src/types";
|
||||
import { HassioPanelInfo } from "../../src/data/hassio/supervisor";
|
||||
import { applyThemesOnElement } from "../../src/common/dom/apply_themes_on_element";
|
||||
import { fireEvent } from "../../src/common/dom/fire_event";
|
||||
import { navigate } from "../../src/common/navigate";
|
||||
import { fetchHassioAddonInfo } from "../../src/data/hassio/addon";
|
||||
import {
|
||||
fetchHassioHassOsInfo,
|
||||
fetchHassioHostInfo,
|
||||
HassioHassOSInfo,
|
||||
HassioHostInfo,
|
||||
} from "../../src/data/hassio/host";
|
||||
import {
|
||||
createHassioSession,
|
||||
fetchHassioHomeAssistantInfo,
|
||||
fetchHassioSupervisorInfo,
|
||||
fetchHassioInfo,
|
||||
HassioHomeAssistantInfo,
|
||||
HassioInfo,
|
||||
HassioPanelInfo,
|
||||
HassioSupervisorInfo,
|
||||
} from "../../src/data/hassio/supervisor";
|
||||
import {
|
||||
AlertDialogParams,
|
||||
showAlertDialog,
|
||||
} from "../../src/dialogs/generic/show-dialog-box";
|
||||
import { makeDialogManager } from "../../src/dialogs/make-dialog-manager";
|
||||
import {
|
||||
HassRouterPage,
|
||||
RouterOptions,
|
||||
} from "../../src/layouts/hass-router-page";
|
||||
import { ProvideHassLitMixin } from "../../src/mixins/provide-hass-lit-mixin";
|
||||
import "../../src/resources/ha-style";
|
||||
import { HomeAssistant } from "../../src/types";
|
||||
// Don't codesplit it, that way the dashboard always loads fast.
|
||||
import "./hassio-panel";
|
||||
import { atLeastVersion } from "../../src/common/config/version";
|
||||
|
||||
@customElement("hassio-main")
|
||||
class HassioMain extends ProvideHassLitMixin(HassRouterPage) {
|
||||
export class HassioMain extends urlSyncMixin(ProvideHassLitMixin(LitElement)) {
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
|
||||
@property() public panel!: HassioPanelInfo;
|
||||
|
||||
@property() public narrow!: boolean;
|
||||
|
||||
protected routerOptions: RouterOptions = {
|
||||
// Hass.io has a page with tabs, so we route all non-matching routes to it.
|
||||
defaultPage: "dashboard",
|
||||
initialLoad: () => this._fetchData(),
|
||||
showLoading: true,
|
||||
routes: {
|
||||
dashboard: {
|
||||
tag: "hassio-panel",
|
||||
cache: true,
|
||||
},
|
||||
snapshots: "dashboard",
|
||||
store: "dashboard",
|
||||
system: "dashboard",
|
||||
addon: {
|
||||
tag: "hassio-addon-dashboard",
|
||||
load: () =>
|
||||
import(
|
||||
/* webpackChunkName: "hassio-addon-dashboard" */ "./addon-view/hassio-addon-dashboard"
|
||||
),
|
||||
},
|
||||
ingress: {
|
||||
tag: "hassio-ingress-view",
|
||||
load: () =>
|
||||
import(
|
||||
/* webpackChunkName: "hassio-ingress-view" */ "./ingress-view/hassio-ingress-view"
|
||||
),
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@internalProperty() private _supervisorInfo: HassioSupervisorInfo;
|
||||
|
||||
@internalProperty() private _hostInfo: HassioHostInfo;
|
||||
|
||||
@internalProperty() private _hassioInfo?: HassioInfo;
|
||||
|
||||
@internalProperty() private _hassOsInfo?: HassioHassOSInfo;
|
||||
|
||||
@internalProperty() private _hassInfo: HassioHomeAssistantInfo;
|
||||
@property() public route?: Route;
|
||||
|
||||
protected firstUpdated(changedProps: PropertyValues) {
|
||||
super.firstUpdated(changedProps);
|
||||
|
||||
applyThemesOnElement(
|
||||
this.parentElement,
|
||||
this.hass.themes,
|
||||
this.hass.selectedTheme?.theme || this.hass.themes.default_theme,
|
||||
this.hass.selectedTheme
|
||||
);
|
||||
this._applyTheme();
|
||||
|
||||
this.style.setProperty(
|
||||
"--app-header-background-color",
|
||||
"var(--sidebar-background-color)"
|
||||
);
|
||||
this.style.setProperty(
|
||||
"--app-header-text-color",
|
||||
"var(--sidebar-text-color)"
|
||||
);
|
||||
this.style.setProperty(
|
||||
"--app-header-border-bottom",
|
||||
"1px solid var(--divider-color)"
|
||||
);
|
||||
|
||||
this.addEventListener("hass-api-called", (ev) => this._apiCalled(ev));
|
||||
// Paulus - March 17, 2019
|
||||
// We went to a single hass-toggle-menu event in HA 0.90. However, the
|
||||
// supervisor UI can also run under older versions of Home Assistant.
|
||||
@@ -144,152 +62,59 @@ class HassioMain extends ProvideHassLitMixin(HassRouterPage) {
|
||||
});
|
||||
});
|
||||
|
||||
makeDialogManager(this, document.body);
|
||||
makeDialogManager(this, this.shadowRoot!);
|
||||
}
|
||||
|
||||
protected updatePageEl(el) {
|
||||
// the tabs page does its own routing so needs full route.
|
||||
const route = el.nodeName === "HASSIO-PANEL" ? this.route : this.routeTail;
|
||||
protected updated(changedProps: PropertyValues) {
|
||||
super.updated(changedProps);
|
||||
const oldHass = changedProps.get("hass") as HomeAssistant | undefined;
|
||||
if (!oldHass) {
|
||||
return;
|
||||
}
|
||||
if (oldHass.themes !== this.hass.themes) {
|
||||
this._applyTheme();
|
||||
}
|
||||
}
|
||||
|
||||
if ("setProperties" in el) {
|
||||
// As long as we have Polymer pages
|
||||
(el as PolymerElement).setProperties({
|
||||
hass: this.hass,
|
||||
narrow: this.narrow,
|
||||
supervisorInfo: this._supervisorInfo,
|
||||
hassioInfo: this._hassioInfo,
|
||||
hostInfo: this._hostInfo,
|
||||
hassInfo: this._hassInfo,
|
||||
hassOsInfo: this._hassOsInfo,
|
||||
route,
|
||||
});
|
||||
protected render() {
|
||||
return html`
|
||||
<hassio-router
|
||||
.hass=${this.hass}
|
||||
.route=${this.route}
|
||||
.panel=${this.panel}
|
||||
.narrow=${this.narrow}
|
||||
></hassio-router>
|
||||
`;
|
||||
}
|
||||
|
||||
private _applyTheme() {
|
||||
let themeName: string;
|
||||
let options: Partial<HomeAssistant["selectedTheme"]> | undefined;
|
||||
|
||||
if (atLeastVersion(this.hass.config.version, 0, 114)) {
|
||||
themeName =
|
||||
this.hass.selectedTheme?.theme ||
|
||||
(this.hass.themes.darkMode && this.hass.themes.default_dark_theme
|
||||
? this.hass.themes.default_dark_theme!
|
||||
: this.hass.themes.default_theme);
|
||||
|
||||
options = this.hass.selectedTheme;
|
||||
if (themeName === "default" && options?.dark === undefined) {
|
||||
options = {
|
||||
...this.hass.selectedTheme,
|
||||
dark: this.hass.themes.darkMode,
|
||||
};
|
||||
}
|
||||
} else {
|
||||
el.hass = this.hass;
|
||||
el.narrow = this.narrow;
|
||||
el.supervisorInfo = this._supervisorInfo;
|
||||
el.hassioInfo = this._hassioInfo;
|
||||
el.hostInfo = this._hostInfo;
|
||||
el.hassInfo = this._hassInfo;
|
||||
el.hassOsInfo = this._hassOsInfo;
|
||||
el.route = route;
|
||||
}
|
||||
}
|
||||
|
||||
private async _fetchData() {
|
||||
if (this.panel.config && this.panel.config.ingress) {
|
||||
await this._redirectIngress(this.panel.config.ingress);
|
||||
return;
|
||||
themeName = (this.hass.selectedTheme as unknown) as string;
|
||||
}
|
||||
|
||||
const [supervisorInfo, hostInfo, hassInfo, hassioInfo] = await Promise.all([
|
||||
fetchHassioSupervisorInfo(this.hass),
|
||||
fetchHassioHostInfo(this.hass),
|
||||
fetchHassioHomeAssistantInfo(this.hass),
|
||||
fetchHassioInfo(this.hass),
|
||||
]);
|
||||
this._supervisorInfo = supervisorInfo;
|
||||
this._hassioInfo = hassioInfo;
|
||||
this._hostInfo = hostInfo;
|
||||
this._hassInfo = hassInfo;
|
||||
|
||||
if (this._hostInfo.features && this._hostInfo.features.includes("hassos")) {
|
||||
this._hassOsInfo = await fetchHassioHassOsInfo(this.hass);
|
||||
}
|
||||
}
|
||||
|
||||
private async _redirectIngress(addonSlug: string) {
|
||||
// When we trigger a navigation, we sleep to make sure we don't
|
||||
// show the hassio dashboard before navigating away.
|
||||
const awaitAlert = async (
|
||||
alertParams: AlertDialogParams,
|
||||
action: () => void
|
||||
) => {
|
||||
await new Promise((resolve) => {
|
||||
alertParams.confirm = resolve;
|
||||
showAlertDialog(this, alertParams);
|
||||
});
|
||||
action();
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
};
|
||||
|
||||
const createSessionPromise = createHassioSession(this.hass).then(
|
||||
() => true,
|
||||
() => false
|
||||
applyThemesOnElement(
|
||||
this.parentElement,
|
||||
this.hass.themes,
|
||||
themeName,
|
||||
options
|
||||
);
|
||||
|
||||
let addon;
|
||||
|
||||
try {
|
||||
addon = await fetchHassioAddonInfo(this.hass, addonSlug);
|
||||
} catch (err) {
|
||||
await awaitAlert(
|
||||
{
|
||||
text: "Unable to fetch add-on info to start Ingress",
|
||||
title: "Supervisor",
|
||||
},
|
||||
() => history.back()
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!addon.ingress_url) {
|
||||
await awaitAlert(
|
||||
{
|
||||
text: "Add-on does not support Ingress",
|
||||
title: addon.name,
|
||||
},
|
||||
() => history.back()
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (addon.state !== "started") {
|
||||
await awaitAlert(
|
||||
{
|
||||
text: "Add-on is not running. Please start it first",
|
||||
title: addon.name,
|
||||
},
|
||||
() => navigate(this, `/hassio/addon/${addon.slug}/info`, true)
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(await createSessionPromise)) {
|
||||
await awaitAlert(
|
||||
{
|
||||
text: "Unable to create an Ingress session",
|
||||
title: addon.name,
|
||||
},
|
||||
() => history.back()
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
location.assign(addon.ingress_url);
|
||||
// await a promise that doesn't resolve, so we show the loading screen
|
||||
// while we load the next page.
|
||||
await new Promise(() => undefined);
|
||||
}
|
||||
|
||||
private _apiCalled(ev) {
|
||||
if (!ev.detail.success) {
|
||||
return;
|
||||
}
|
||||
|
||||
let tries = 1;
|
||||
|
||||
const tryUpdate = () => {
|
||||
this._fetchData().catch(() => {
|
||||
tries += 1;
|
||||
setTimeout(tryUpdate, Math.min(tries, 5) * 1000);
|
||||
});
|
||||
};
|
||||
|
||||
tryUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -4,6 +4,8 @@ import {
|
||||
LitElement,
|
||||
property,
|
||||
TemplateResult,
|
||||
css,
|
||||
CSSResult,
|
||||
} from "lit-element";
|
||||
import { HassioHassOSInfo, HassioHostInfo } from "../../src/data/hassio/host";
|
||||
import {
|
||||
@@ -33,6 +35,9 @@ class HassioPanel extends LitElement {
|
||||
@property({ attribute: false }) public hassOsInfo!: HassioHassOSInfo;
|
||||
|
||||
protected render(): TemplateResult {
|
||||
if (!this.supervisorInfo) {
|
||||
return html``;
|
||||
}
|
||||
return html`
|
||||
<hassio-panel-router
|
||||
.route=${this.route}
|
||||
@@ -46,6 +51,16 @@ class HassioPanel extends LitElement {
|
||||
></hassio-panel-router>
|
||||
`;
|
||||
}
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
:host {
|
||||
--app-header-background-color: var(--sidebar-background-color);
|
||||
--app-header-text-color: var(--sidebar-text-color);
|
||||
--app-header-border-bottom: 1px solid var(--divider-color);
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
|
150
hassio/src/hassio-router.ts
Normal file
150
hassio/src/hassio-router.ts
Normal file
@@ -0,0 +1,150 @@
|
||||
import {
|
||||
customElement,
|
||||
property,
|
||||
internalProperty,
|
||||
PropertyValues,
|
||||
} from "lit-element";
|
||||
import {
|
||||
fetchHassioHassOsInfo,
|
||||
fetchHassioHostInfo,
|
||||
HassioHassOSInfo,
|
||||
HassioHostInfo,
|
||||
} from "../../src/data/hassio/host";
|
||||
import {
|
||||
fetchHassioHomeAssistantInfo,
|
||||
fetchHassioSupervisorInfo,
|
||||
fetchHassioInfo,
|
||||
HassioHomeAssistantInfo,
|
||||
HassioInfo,
|
||||
HassioPanelInfo,
|
||||
HassioSupervisorInfo,
|
||||
} from "../../src/data/hassio/supervisor";
|
||||
import {
|
||||
HassRouterPage,
|
||||
RouterOptions,
|
||||
} from "../../src/layouts/hass-router-page";
|
||||
import "../../src/resources/ha-style";
|
||||
import { HomeAssistant } from "../../src/types";
|
||||
// Don't codesplit it, that way the dashboard always loads fast.
|
||||
import "./hassio-panel";
|
||||
|
||||
@customElement("hassio-router")
|
||||
class HassioRouter extends HassRouterPage {
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
|
||||
@property() public panel!: HassioPanelInfo;
|
||||
|
||||
@property() public narrow!: boolean;
|
||||
|
||||
protected routerOptions: RouterOptions = {
|
||||
// Hass.io has a page with tabs, so we route all non-matching routes to it.
|
||||
defaultPage: "dashboard",
|
||||
initialLoad: () => this._fetchData(),
|
||||
showLoading: true,
|
||||
routes: {
|
||||
dashboard: {
|
||||
tag: "hassio-panel",
|
||||
cache: true,
|
||||
},
|
||||
snapshots: "dashboard",
|
||||
store: "dashboard",
|
||||
system: "dashboard",
|
||||
addon: {
|
||||
tag: "hassio-addon-dashboard",
|
||||
load: () =>
|
||||
import(
|
||||
/* webpackChunkName: "hassio-addon-dashboard" */ "./addon-view/hassio-addon-dashboard"
|
||||
),
|
||||
},
|
||||
ingress: {
|
||||
tag: "hassio-ingress-view",
|
||||
load: () =>
|
||||
import(
|
||||
/* webpackChunkName: "hassio-ingress-view" */ "./ingress-view/hassio-ingress-view"
|
||||
),
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@internalProperty() private _supervisorInfo: HassioSupervisorInfo;
|
||||
|
||||
@internalProperty() private _hostInfo: HassioHostInfo;
|
||||
|
||||
@internalProperty() private _hassioInfo?: HassioInfo;
|
||||
|
||||
@internalProperty() private _hassOsInfo?: HassioHassOSInfo;
|
||||
|
||||
@internalProperty() private _hassInfo: HassioHomeAssistantInfo;
|
||||
|
||||
protected firstUpdated(changedProps: PropertyValues) {
|
||||
super.firstUpdated(changedProps);
|
||||
this.addEventListener("hass-api-called", (ev) => this._apiCalled(ev));
|
||||
}
|
||||
|
||||
protected updatePageEl(el) {
|
||||
// the tabs page does its own routing so needs full route.
|
||||
const route = el.nodeName === "HASSIO-PANEL" ? this.route : this.routeTail;
|
||||
|
||||
el.hass = this.hass;
|
||||
el.narrow = this.narrow;
|
||||
el.supervisorInfo = this._supervisorInfo;
|
||||
el.hassioInfo = this._hassioInfo;
|
||||
el.hostInfo = this._hostInfo;
|
||||
el.hassInfo = this._hassInfo;
|
||||
el.hassOsInfo = this._hassOsInfo;
|
||||
el.route = route;
|
||||
|
||||
if (el.localName === "hassio-ingress-view") {
|
||||
el.ingressPanel = this.panel.config && this.panel.config.ingress;
|
||||
}
|
||||
}
|
||||
|
||||
private async _fetchData() {
|
||||
if (this.panel.config && this.panel.config.ingress) {
|
||||
this._redirectIngress(this.panel.config.ingress);
|
||||
return;
|
||||
}
|
||||
|
||||
const [supervisorInfo, hostInfo, hassInfo, hassioInfo] = await Promise.all([
|
||||
fetchHassioSupervisorInfo(this.hass),
|
||||
fetchHassioHostInfo(this.hass),
|
||||
fetchHassioHomeAssistantInfo(this.hass),
|
||||
fetchHassioInfo(this.hass),
|
||||
]);
|
||||
this._supervisorInfo = supervisorInfo;
|
||||
this._hassioInfo = hassioInfo;
|
||||
this._hostInfo = hostInfo;
|
||||
this._hassInfo = hassInfo;
|
||||
|
||||
if (this._hostInfo.features && this._hostInfo.features.includes("hassos")) {
|
||||
this._hassOsInfo = await fetchHassioHassOsInfo(this.hass);
|
||||
}
|
||||
}
|
||||
|
||||
private _redirectIngress(addonSlug: string) {
|
||||
this.route = { prefix: "/hassio", path: `/ingress/${addonSlug}` };
|
||||
}
|
||||
|
||||
private _apiCalled(ev) {
|
||||
if (!ev.detail.success) {
|
||||
return;
|
||||
}
|
||||
|
||||
let tries = 1;
|
||||
|
||||
const tryUpdate = () => {
|
||||
this._fetchData().catch(() => {
|
||||
tries += 1;
|
||||
setTimeout(tryUpdate, Math.min(tries, 5) * 1000);
|
||||
});
|
||||
};
|
||||
|
||||
tryUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"hassio-router": HassioRouter;
|
||||
}
|
||||
}
|
@@ -17,6 +17,10 @@ import { createHassioSession } from "../../../src/data/hassio/supervisor";
|
||||
import "../../../src/layouts/hass-loading-screen";
|
||||
import "../../../src/layouts/hass-subpage";
|
||||
import { HomeAssistant, Route } from "../../../src/types";
|
||||
import { showAlertDialog } from "../../../src/dialogs/generic/show-dialog-box";
|
||||
import { navigate } from "../../../src/common/navigate";
|
||||
import { mdiMenu } from "@mdi/js";
|
||||
import { fireEvent } from "../../../src/common/dom/fire_event";
|
||||
|
||||
@customElement("hassio-ingress-view")
|
||||
class HassioIngressView extends LitElement {
|
||||
@@ -24,22 +28,45 @@ class HassioIngressView extends LitElement {
|
||||
|
||||
@property() public route!: Route;
|
||||
|
||||
@property() public ingressPanel = false;
|
||||
|
||||
@internalProperty() private _addon?: HassioAddonDetails;
|
||||
|
||||
@property({ type: Boolean })
|
||||
public narrow = false;
|
||||
|
||||
protected render(): TemplateResult {
|
||||
if (!this._addon) {
|
||||
return html` <hass-loading-screen></hass-loading-screen> `;
|
||||
}
|
||||
|
||||
return html`
|
||||
<hass-subpage .header=${this._addon.name} hassio>
|
||||
<iframe src=${this._addon.ingress_url}></iframe>
|
||||
</hass-subpage>
|
||||
`;
|
||||
const iframe = html`<iframe src=${this._addon.ingress_url!}></iframe>`;
|
||||
|
||||
if (!this.ingressPanel) {
|
||||
return html`<hass-subpage
|
||||
.header=${this._addon.name}
|
||||
.narrow=${this.narrow}
|
||||
>
|
||||
${iframe}
|
||||
</hass-subpage>`;
|
||||
}
|
||||
|
||||
return html`${this.narrow || this.hass.dockedSidebar === "always_hidden"
|
||||
? html`<div class="header">
|
||||
<mwc-icon-button
|
||||
aria-label=${this.hass.localize("ui.sidebar.sidebar_toggle")}
|
||||
@click=${this._toggleMenu}
|
||||
>
|
||||
<ha-svg-icon path=${mdiMenu}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
<div class="main-title">${this._addon.name}</div>
|
||||
</div>
|
||||
${iframe}`
|
||||
: iframe}`;
|
||||
}
|
||||
|
||||
protected updated(changedProps: PropertyValues) {
|
||||
super.firstUpdated(changedProps);
|
||||
super.updated(changedProps);
|
||||
|
||||
if (!changedProps.has("route")) {
|
||||
return;
|
||||
@@ -56,27 +83,56 @@ class HassioIngressView extends LitElement {
|
||||
}
|
||||
|
||||
private async _fetchData(addonSlug: string) {
|
||||
const createSessionPromise = createHassioSession(this.hass).then(
|
||||
() => true,
|
||||
() => false
|
||||
);
|
||||
|
||||
let addon;
|
||||
|
||||
try {
|
||||
const [addon] = await Promise.all([
|
||||
fetchHassioAddonInfo(this.hass, addonSlug).catch(() => {
|
||||
throw new Error("Failed to fetch add-on info");
|
||||
}),
|
||||
createHassioSession(this.hass).catch(() => {
|
||||
throw new Error("Failed to create an ingress session");
|
||||
}),
|
||||
]);
|
||||
|
||||
if (!addon.ingress) {
|
||||
throw new Error("This add-on does not support ingress");
|
||||
}
|
||||
|
||||
this._addon = addon;
|
||||
addon = await fetchHassioAddonInfo(this.hass, addonSlug);
|
||||
} catch (err) {
|
||||
// eslint-disable-next-line
|
||||
console.error(err);
|
||||
alert(err.message || "Unknown error starting ingress.");
|
||||
await showAlertDialog(this, {
|
||||
text: "Unable to fetch add-on info to start Ingress",
|
||||
title: "Supervisor",
|
||||
});
|
||||
history.back();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!addon.ingress_url) {
|
||||
await showAlertDialog(this, {
|
||||
text: "Add-on does not support Ingress",
|
||||
title: addon.name,
|
||||
});
|
||||
history.back();
|
||||
return;
|
||||
}
|
||||
|
||||
if (addon.state !== "started") {
|
||||
await showAlertDialog(this, {
|
||||
text: "Add-on is not running. Please start it first",
|
||||
title: addon.name,
|
||||
});
|
||||
navigate(this, `/hassio/addon/${addon.slug}/info`, true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(await createSessionPromise)) {
|
||||
await showAlertDialog(this, {
|
||||
text: "Unable to create an Ingress session",
|
||||
title: addon.name,
|
||||
});
|
||||
history.back();
|
||||
return;
|
||||
}
|
||||
|
||||
this._addon = addon;
|
||||
}
|
||||
|
||||
private _toggleMenu(): void {
|
||||
fireEvent(this, "hass-toggle-menu");
|
||||
}
|
||||
|
||||
static get styles(): CSSResult {
|
||||
@@ -87,6 +143,41 @@ class HassioIngressView extends LitElement {
|
||||
height: 100%;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.header + iframe {
|
||||
height: calc(100% - 40px);
|
||||
}
|
||||
|
||||
.header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 16px;
|
||||
height: 40px;
|
||||
padding: 0 16px;
|
||||
pointer-events: none;
|
||||
background-color: var(--app-header-background-color);
|
||||
font-weight: 400;
|
||||
color: var(--app-header-text-color, white);
|
||||
border-bottom: var(--app-header-border-bottom, none);
|
||||
box-sizing: border-box;
|
||||
--mdc-icon-size: 20px;
|
||||
}
|
||||
|
||||
.main-title {
|
||||
margin: 0 0 0 24px;
|
||||
line-height: 20px;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
mwc-icon-button {
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
hass-subpage {
|
||||
--app-header-background-color: var(--sidebar-background-color);
|
||||
--app-header-text-color: var(--sidebar-text-color);
|
||||
--app-header-border-bottom: 1px solid var(--divider-color);
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
@@ -17,7 +17,12 @@ import {
|
||||
setSupervisorOption,
|
||||
SupervisorOptions,
|
||||
} from "../../../src/data/hassio/supervisor";
|
||||
import { showConfirmationDialog } from "../../../src/dialogs/generic/show-dialog-box";
|
||||
import "../../../src/components/ha-switch";
|
||||
import {
|
||||
showConfirmationDialog,
|
||||
showAlertDialog,
|
||||
} from "../../../src/dialogs/generic/show-dialog-box";
|
||||
import "../../../src/components/ha-settings-row";
|
||||
import { haStyle } from "../../../src/resources/styles";
|
||||
import { HomeAssistant } from "../../../src/types";
|
||||
import { hassioStyle } from "../resources/hassio-style";
|
||||
@@ -55,6 +60,26 @@ class HassioSupervisorInfo extends LitElement {
|
||||
: ""}
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="options">
|
||||
<ha-settings-row>
|
||||
<span slot="heading">
|
||||
Share Diagnostics
|
||||
</span>
|
||||
<span slot="description">
|
||||
Share crash reports and diagnostic information.
|
||||
<button
|
||||
class="link"
|
||||
@click=${this._diagnosticsInformationDialog}
|
||||
>
|
||||
Learn more
|
||||
</button>
|
||||
</span>
|
||||
<ha-switch
|
||||
.checked=${this.supervisorInfo.diagnostics}
|
||||
@change=${this._toggleDiagnostics}
|
||||
></ha-switch>
|
||||
</ha-settings-row>
|
||||
</div>
|
||||
${this._errors
|
||||
? html` <div class="errors">Error: ${this._errors}</div> `
|
||||
: ""}
|
||||
@@ -111,7 +136,8 @@ class HassioSupervisorInfo extends LitElement {
|
||||
box-sizing: border-box;
|
||||
height: calc(100% - 47px);
|
||||
}
|
||||
.info {
|
||||
.info,
|
||||
.options {
|
||||
width: 100%;
|
||||
}
|
||||
.info td:nth-child(2) {
|
||||
@@ -121,6 +147,12 @@ class HassioSupervisorInfo extends LitElement {
|
||||
color: var(--error-color);
|
||||
margin-top: 16px;
|
||||
}
|
||||
ha-settings-row {
|
||||
padding: 0;
|
||||
}
|
||||
button.link {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
@@ -181,6 +213,40 @@ class HassioSupervisorInfo extends LitElement {
|
||||
this._errors = `Error joining beta channel, ${err.body?.message || err}`;
|
||||
}
|
||||
}
|
||||
|
||||
private async _diagnosticsInformationDialog() {
|
||||
await showAlertDialog(this, {
|
||||
title: "Help Improve Home Assistant",
|
||||
text: html`Would you want to automatically share crash reports and
|
||||
diagnostic information when the supervisor encounters unexpected errors?
|
||||
<br /><br />
|
||||
This will allow us to fix the problems, the information is only
|
||||
accessible to the Home Assistant Core team and will not be shared with
|
||||
others.
|
||||
<br /><br />
|
||||
The data does not include any private/sensetive information and you can
|
||||
disable this in settings at any time you want.`,
|
||||
});
|
||||
}
|
||||
|
||||
private async _toggleDiagnostics() {
|
||||
try {
|
||||
const data: SupervisorOptions = {
|
||||
diagnostics: !this.supervisorInfo?.diagnostics,
|
||||
};
|
||||
await setSupervisorOption(this.hass, data);
|
||||
const eventdata = {
|
||||
success: true,
|
||||
response: undefined,
|
||||
path: "option",
|
||||
};
|
||||
fireEvent(this, "hass-api-called", eventdata);
|
||||
} catch (err) {
|
||||
this._errors = `Error changing supervisor setting, ${
|
||||
err.body?.message || err
|
||||
}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
|
2
setup.py
2
setup.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
||||
|
||||
setup(
|
||||
name="home-assistant-frontend",
|
||||
version="20200805.0",
|
||||
version="20200807.1",
|
||||
description="The Home Assistant frontend",
|
||||
url="https://github.com/home-assistant/home-assistant-polymer",
|
||||
author="The Home Assistant Authors",
|
||||
|
@@ -163,13 +163,6 @@ export class HaDateRangePicker extends LitElement {
|
||||
border-right: 1px solid var(--divider-color);
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 800px) {
|
||||
.date-range-ranges {
|
||||
border-right: none;
|
||||
border-bottom: 1px solid var(--divider-color);
|
||||
}
|
||||
}
|
||||
|
||||
.date-range-footer {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
@@ -179,12 +172,30 @@ export class HaDateRangePicker extends LitElement {
|
||||
|
||||
paper-input {
|
||||
display: inline-block;
|
||||
max-width: 200px;
|
||||
max-width: 250px;
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
paper-input:last-child {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 800px) {
|
||||
.date-range-ranges {
|
||||
border-right: none;
|
||||
border-bottom: 1px solid var(--divider-color);
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 500px) {
|
||||
paper-input {
|
||||
min-width: inherit;
|
||||
}
|
||||
|
||||
ha-svg-icon {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
@@ -37,6 +37,24 @@ export class HaFormString extends LitElement implements HaFormElement {
|
||||
}
|
||||
}
|
||||
|
||||
protected firstUpdated(): void {
|
||||
if (this.schema.name.includes("password")) {
|
||||
const stepInput = document.createElement("input");
|
||||
stepInput.setAttribute("type", "password");
|
||||
stepInput.setAttribute("name", "password");
|
||||
stepInput.setAttribute("autocomplete", "on");
|
||||
stepInput.onkeyup = (ev) => this._externalValueChanged(ev, this);
|
||||
document.documentElement.appendChild(stepInput);
|
||||
} else if (this.schema.name.includes("username")) {
|
||||
const stepInput = document.createElement("input");
|
||||
stepInput.setAttribute("type", "text");
|
||||
stepInput.setAttribute("name", "username");
|
||||
stepInput.setAttribute("autocomplete", "on");
|
||||
stepInput.onkeyup = (ev) => this._externalValueChanged(ev, this);
|
||||
document.documentElement.appendChild(stepInput);
|
||||
}
|
||||
}
|
||||
|
||||
protected render(): TemplateResult {
|
||||
return this.schema.name.includes("password")
|
||||
? html`
|
||||
@@ -81,11 +99,21 @@ export class HaFormString extends LitElement implements HaFormElement {
|
||||
if (this.data === value) {
|
||||
return;
|
||||
}
|
||||
|
||||
fireEvent(this, "value-changed", {
|
||||
value,
|
||||
});
|
||||
}
|
||||
|
||||
private _externalValueChanged(ev: Event, el): void {
|
||||
const value = (ev.target as PaperInputElement).value;
|
||||
if (this.data === value) {
|
||||
return;
|
||||
}
|
||||
|
||||
el.shadowRoot!.querySelector("paper-input").value = value;
|
||||
}
|
||||
|
||||
private get _stringType(): string {
|
||||
if (this.schema.format) {
|
||||
if (["email", "url"].includes(this.schema.format)) {
|
||||
|
@@ -57,6 +57,10 @@ class HaMarkdown extends LitElement {
|
||||
background-color: var(--markdown-code-background-color, none);
|
||||
border-radius: 3px;
|
||||
}
|
||||
ha-markdown-element svg {
|
||||
background-color: var(--markdown-svg-background-color, none);
|
||||
color: var(--markdown-svg-color, none);
|
||||
}
|
||||
ha-markdown-element code {
|
||||
font-size: 85%;
|
||||
padding: 0.2em 0.4em;
|
||||
@@ -70,8 +74,8 @@ class HaMarkdown extends LitElement {
|
||||
line-height: 1.45;
|
||||
}
|
||||
ha-markdown-element h2 {
|
||||
font-size: 1.5em !important;
|
||||
font-weight: bold !important;
|
||||
font-size: 1.5em;
|
||||
font-weight: bold;
|
||||
}
|
||||
`;
|
||||
}
|
||||
|
59
src/components/ha-settings-row.ts
Normal file
59
src/components/ha-settings-row.ts
Normal file
@@ -0,0 +1,59 @@
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
SVGTemplateResult,
|
||||
} from "lit-element";
|
||||
import "@polymer/paper-item/paper-item-body";
|
||||
|
||||
@customElement("ha-settings-row")
|
||||
export class HaSettingsRow extends LitElement {
|
||||
@property({ type: Boolean, reflect: true }) public narrow!: boolean;
|
||||
|
||||
@property({ type: Boolean, attribute: "three-line" })
|
||||
public threeLine = false;
|
||||
|
||||
protected render(): SVGTemplateResult {
|
||||
return html`
|
||||
<style>
|
||||
paper-item-body {
|
||||
padding-right: 16px;
|
||||
}
|
||||
</style>
|
||||
<paper-item-body
|
||||
?two-line=${!this.threeLine}
|
||||
?three-line=${!this.threeLine}
|
||||
>
|
||||
<slot name="heading"></slot>
|
||||
<div secondary><slot name="description"></slot></div>
|
||||
</paper-item-body>
|
||||
<slot></slot>
|
||||
`;
|
||||
}
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
:host {
|
||||
display: flex;
|
||||
padding: 0 16px;
|
||||
align-content: normal;
|
||||
align-self: auto;
|
||||
align-items: center;
|
||||
}
|
||||
:host([narrow]) {
|
||||
align-items: normal;
|
||||
flex-direction: column;
|
||||
border-top: 1px solid var(--divider-color);
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"ha-settings-row": HaSettingsRow;
|
||||
}
|
||||
}
|
@@ -31,6 +31,7 @@ export interface CreateSessionResponse {
|
||||
|
||||
export interface SupervisorOptions {
|
||||
channel?: "beta" | "dev" | "stable";
|
||||
diagnostics?: boolean;
|
||||
addons_repositories?: string[];
|
||||
}
|
||||
|
||||
|
@@ -46,6 +46,14 @@
|
||||
html {
|
||||
background-color: var(--primary-background-color);
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
html {
|
||||
background-color: #111111;
|
||||
}
|
||||
#ha-init-skeleton::before {
|
||||
background-color: #1c1c1c;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
@@ -60,6 +60,7 @@ class HaInitPage extends LitElement {
|
||||
}
|
||||
p {
|
||||
max-width: 350px;
|
||||
color: var(--text-primary-color);
|
||||
}
|
||||
`;
|
||||
}
|
||||
|
@@ -247,6 +247,7 @@ export class DialogEntityEditor extends LitElement {
|
||||
ha-dialog {
|
||||
--dialog-content-position: static;
|
||||
--dialog-content-padding: 0;
|
||||
--dialog-z-index: 6;
|
||||
}
|
||||
|
||||
@media all and (min-width: 451px) and (min-height: 501px) {
|
||||
|
@@ -453,6 +453,9 @@ export class HaIntegrationCard extends LitElement {
|
||||
cursor: pointer;
|
||||
min-height: 35px;
|
||||
}
|
||||
mwc-list-item ha-svg-icon {
|
||||
color: var(--secondary-text-color);
|
||||
}
|
||||
.back-btn {
|
||||
position: absolute;
|
||||
background: rgba(var(--rgb-card-background-color), 0.6);
|
||||
|
@@ -32,6 +32,7 @@ import { hasConfigOrEntityChanged } from "../common/has-changed";
|
||||
import { createEntityNotFoundWarning } from "../components/hui-warning";
|
||||
import { LovelaceCard, LovelaceCardEditor } from "../types";
|
||||
import { LightCardConfig } from "./types";
|
||||
import { mdiDotsVertical } from "@mdi/js";
|
||||
|
||||
@customElement("hui-light-card")
|
||||
export class HuiLightCard extends LitElement implements LovelaceCard {
|
||||
@@ -101,12 +102,14 @@ export class HuiLightCard extends LitElement implements LovelaceCard {
|
||||
|
||||
return html`
|
||||
<ha-card>
|
||||
<ha-icon-button
|
||||
icon="hass:dots-vertical"
|
||||
<mwc-icon-button
|
||||
class="more-info"
|
||||
label="Open more info"
|
||||
@click=${this._handleMoreInfo}
|
||||
tabindex="0"
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-svg-icon .path=${mdiDotsVertical}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
|
||||
<div class="content">
|
||||
<div id="controls">
|
||||
@@ -284,7 +287,7 @@ export class HuiLightCard extends LitElement implements LovelaceCard {
|
||||
right: 0;
|
||||
border-radius: 100%;
|
||||
color: var(--secondary-text-color);
|
||||
z-index: 25;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.content {
|
||||
|
@@ -35,6 +35,7 @@ import { createEntityNotFoundWarning } from "../components/hui-warning";
|
||||
import { LovelaceCard, LovelaceCardEditor } from "../types";
|
||||
import { ThermostatCardConfig } from "./types";
|
||||
import type { HaCard } from "../../../components/ha-card";
|
||||
import { mdiDotsVertical } from "@mdi/js";
|
||||
|
||||
const modeIcons: { [mode in HvacMode]: string } = {
|
||||
auto: "hass:calendar-sync",
|
||||
@@ -216,12 +217,14 @@ export class HuiThermostatCard extends LitElement implements LovelaceCard {
|
||||
[mode]: true,
|
||||
})}
|
||||
>
|
||||
<ha-icon-button
|
||||
icon="hass:dots-vertical"
|
||||
<mwc-icon-button
|
||||
class="more-info"
|
||||
label="Open more info"
|
||||
@click=${this._handleMoreInfo}
|
||||
tabindex="0"
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-svg-icon .path=${mdiDotsVertical}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
|
||||
<div class="content">
|
||||
<div id="controls">
|
||||
@@ -465,7 +468,7 @@ export class HuiThermostatCard extends LitElement implements LovelaceCard {
|
||||
right: 0;
|
||||
border-radius: 100%;
|
||||
color: var(--secondary-text-color);
|
||||
z-index: 25;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.content {
|
||||
|
@@ -80,6 +80,9 @@ export class HuiDialogEditCard extends LitElement implements HassDialog {
|
||||
if (this._cardConfig && !Object.isFrozen(this._cardConfig)) {
|
||||
this._cardConfig = deepFreeze(this._cardConfig);
|
||||
}
|
||||
if (params.cardConfig) {
|
||||
this._dirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
public closeDialog(): boolean {
|
||||
|
@@ -4,13 +4,14 @@ import {
|
||||
LitElement,
|
||||
internalProperty,
|
||||
TemplateResult,
|
||||
CSSResult,
|
||||
css,
|
||||
CSSResultArray,
|
||||
} from "lit-element";
|
||||
import "../../../../components/dialog/ha-paper-dialog";
|
||||
import "../../components/hui-views-list";
|
||||
import type { SelectViewDialogParams } from "./show-select-view-dialog";
|
||||
import { HomeAssistant } from "../../../../types";
|
||||
import { haStyleDialog } from "../../../../resources/styles";
|
||||
import { createCloseHeading } from "../../../../components/ha-dialog";
|
||||
import "../../../../components/ha-paper-dropdown-menu";
|
||||
import "@polymer/paper-item/paper-item";
|
||||
@@ -135,12 +136,15 @@ export class HuiDialogSelectView extends LitElement {
|
||||
this.closeDialog();
|
||||
}
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
ha-paper-dropdown-menu {
|
||||
width: 100%;
|
||||
}
|
||||
`;
|
||||
static get styles(): CSSResultArray {
|
||||
return [
|
||||
haStyleDialog,
|
||||
css`
|
||||
ha-paper-dropdown-menu {
|
||||
width: 100%;
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -342,6 +342,7 @@ export class HuiDialogEditView extends LitElement {
|
||||
css`
|
||||
h2 {
|
||||
display: block;
|
||||
color: var(--primary-text-color);
|
||||
line-height: normal;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
@@ -380,6 +381,7 @@ export class HuiDialogEditView extends LitElement {
|
||||
}
|
||||
paper-tabs {
|
||||
--paper-tabs-selection-bar-color: var(--primary-color);
|
||||
color: var(--primary-text-color);
|
||||
text-transform: uppercase;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
||||
padding: 0 20px;
|
||||
@@ -411,6 +413,12 @@ export class HuiDialogEditView extends LitElement {
|
||||
margin: 12px 16px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
@media all and (min-width: 600px) {
|
||||
ha-dialog {
|
||||
--mdc-dialog-min-width: 600px;
|
||||
}
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
|
@@ -138,6 +138,7 @@ class HUIRoot extends LitElement {
|
||||
<a
|
||||
href="https://www.home-assistant.io/lovelace/"
|
||||
rel="noreferrer"
|
||||
class="menu-link"
|
||||
target="_blank"
|
||||
>
|
||||
<mwc-icon-button
|
||||
@@ -267,6 +268,7 @@ class HUIRoot extends LitElement {
|
||||
<a
|
||||
href="https://www.home-assistant.io/lovelace/"
|
||||
rel="noreferrer"
|
||||
class="menu-link"
|
||||
target="_blank"
|
||||
>
|
||||
<mwc-list-item
|
||||
@@ -762,6 +764,9 @@ class HUIRoot extends LitElement {
|
||||
.hide-tab {
|
||||
display: none;
|
||||
}
|
||||
.menu-link {
|
||||
text-decoration: none;
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
|
@@ -14,7 +14,7 @@ import {
|
||||
getOptimisticFrontendUserDataCollection,
|
||||
} from "../../data/frontend";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import "./ha-settings-row";
|
||||
import "../../components/ha-settings-row";
|
||||
|
||||
@customElement("ha-advanced-mode-row")
|
||||
class AdvancedModeRow extends LitElement {
|
||||
|
@@ -9,7 +9,7 @@ import { fireEvent } from "../../common/dom/fire_event";
|
||||
import "../../components/ha-switch";
|
||||
import type { HaSwitch } from "../../components/ha-switch";
|
||||
import type { HomeAssistant } from "../../types";
|
||||
import "./ha-settings-row";
|
||||
import "../../components/ha-settings-row";
|
||||
|
||||
@customElement("ha-force-narrow-row")
|
||||
class HaForcedNarrowRow extends LitElement {
|
||||
|
@@ -13,7 +13,7 @@ import {
|
||||
import { EventsMixin } from "../../mixins/events-mixin";
|
||||
import LocalizeMixin from "../../mixins/localize-mixin";
|
||||
import "../../styles/polymer-ha-style";
|
||||
import "./ha-settings-row";
|
||||
import "../../components/ha-settings-row";
|
||||
|
||||
/*
|
||||
* @appliesMixin EventsMixin
|
||||
|
@@ -30,9 +30,9 @@ class HaMfaModuleSetupFlow extends LocalizeMixin(EventsMixin(PolymerElement)) {
|
||||
h2 {
|
||||
white-space: normal;
|
||||
}
|
||||
ha-markdown img:first-child:last-child,
|
||||
ha-markdown svg:first-child:last-child {
|
||||
background-color: white;
|
||||
ha-markdown {
|
||||
--markdown-svg-background-color: white;
|
||||
--markdown-svg-color: black;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
@@ -13,7 +13,7 @@ import "../../components/ha-paper-dropdown-menu";
|
||||
import { fetchDashboards, LovelaceDashboard } from "../../data/lovelace";
|
||||
import { setDefaultPanel } from "../../data/panel";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import "./ha-settings-row";
|
||||
import "../../components/ha-settings-row";
|
||||
|
||||
@customElement("ha-pick-dashboard-row")
|
||||
class HaPickDashboardRow extends LitElement {
|
||||
|
@@ -6,7 +6,7 @@ import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
import "../../components/ha-paper-dropdown-menu";
|
||||
import { EventsMixin } from "../../mixins/events-mixin";
|
||||
import LocalizeMixin from "../../mixins/localize-mixin";
|
||||
import "./ha-settings-row";
|
||||
import "../../components/ha-settings-row";
|
||||
|
||||
/*
|
||||
* @appliesMixin LocalizeMixin
|
||||
|
@@ -12,7 +12,7 @@ import {
|
||||
css,
|
||||
} from "lit-element";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import "./ha-settings-row";
|
||||
import "../../components/ha-settings-row";
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import "../../components/ha-formfield";
|
||||
import "../../components/ha-radio";
|
||||
|
@@ -6,7 +6,7 @@ import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
import { isComponentLoaded } from "../../common/config/is_component_loaded";
|
||||
import { pushSupported } from "../../components/ha-push-notifications-toggle";
|
||||
import LocalizeMixin from "../../mixins/localize-mixin";
|
||||
import "./ha-settings-row";
|
||||
import "../../components/ha-settings-row";
|
||||
|
||||
/*
|
||||
* @appliesMixin LocalizeMixin
|
||||
|
@@ -11,7 +11,7 @@ import {
|
||||
showAlertDialog,
|
||||
showConfirmationDialog,
|
||||
} from "../../dialogs/generic/show-dialog-box";
|
||||
import "./ha-settings-row";
|
||||
import "../../components/ha-settings-row";
|
||||
|
||||
/*
|
||||
* @appliesMixin EventsMixin
|
||||
|
@@ -9,7 +9,7 @@ import { fireEvent, HASSDomEvent } from "../../common/dom/fire_event";
|
||||
import "../../components/ha-switch";
|
||||
import type { HaSwitch } from "../../components/ha-switch";
|
||||
import type { HomeAssistant } from "../../types";
|
||||
import "./ha-settings-row";
|
||||
import "../../components/ha-settings-row";
|
||||
|
||||
declare global {
|
||||
// for fire event
|
||||
|
@@ -10,7 +10,7 @@ import "../../components/ha-switch";
|
||||
import type { HaSwitch } from "../../components/ha-switch";
|
||||
import { forwardHaptic } from "../../data/haptics";
|
||||
import type { HomeAssistant } from "../../types";
|
||||
import "./ha-settings-row";
|
||||
import "../../components/ha-settings-row";
|
||||
|
||||
@customElement("ha-set-vibrate-row")
|
||||
class HaSetVibrateRow extends LitElement {
|
||||
|
@@ -1,48 +0,0 @@
|
||||
import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
/* eslint-plugin-disable lit */
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
|
||||
class HaSettingsRow extends PolymerElement {
|
||||
static get template() {
|
||||
return html`
|
||||
<style>
|
||||
:host {
|
||||
display: flex;
|
||||
padding: 0 16px;
|
||||
align-content: normal;
|
||||
align-self: auto;
|
||||
align-items: center;
|
||||
}
|
||||
:host([narrow]) {
|
||||
align-items: normal;
|
||||
flex-direction: column;
|
||||
border-top: 1px solid var(--divider-color);
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
paper-item-body {
|
||||
padding-right: 16px;
|
||||
}
|
||||
</style>
|
||||
<paper-item-body two-line$="[[!threeLine]]" three-line$="[[threeLine]]">
|
||||
<slot name="heading"></slot>
|
||||
<div secondary><slot name="description"></slot></div>
|
||||
</paper-item-body>
|
||||
<slot></slot>
|
||||
`;
|
||||
}
|
||||
|
||||
static get properties() {
|
||||
return {
|
||||
narrow: {
|
||||
type: Boolean,
|
||||
reflectToAttribute: true,
|
||||
},
|
||||
threeLine: {
|
||||
type: Boolean,
|
||||
value: false,
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("ha-settings-row", HaSettingsRow);
|
@@ -65,6 +65,7 @@ export const derivedStyles = {
|
||||
"mdc-radio-unchecked-color": "rgba(var(--rgb-primary-text-color), 0.54)",
|
||||
"mdc-radio-disabled-color": "var(--disabled-text-color)",
|
||||
"mdc-tab-text-label-color-default": "var(--primary-text-color)",
|
||||
"mdc-button-disabled-ink-color": "var(--disabled-text-color)",
|
||||
};
|
||||
|
||||
export const haStyle = css`
|
||||
|
@@ -6,12 +6,15 @@ import {
|
||||
DialogClosedParams,
|
||||
} from "../dialogs/make-dialog-manager";
|
||||
import { Constructor } from "../types";
|
||||
import { HassBaseEl } from "./hass-base-mixin";
|
||||
import { HASSDomEvent } from "../common/dom/fire_event";
|
||||
import { UpdatingElement } from "lit-element";
|
||||
import { ProvideHassElement } from "../mixins/provide-hass-lit-mixin";
|
||||
|
||||
const DEBUG = false;
|
||||
|
||||
export const urlSyncMixin = <T extends Constructor<HassBaseEl>>(
|
||||
export const urlSyncMixin = <
|
||||
T extends Constructor<UpdatingElement & ProvideHassElement>
|
||||
>(
|
||||
superClass: T
|
||||
) =>
|
||||
// Disable this functionality in the demo.
|
||||
@@ -35,11 +38,17 @@ export const urlSyncMixin = <T extends Constructor<HassBaseEl>>(
|
||||
private _dialogClosedListener = (
|
||||
ev: HASSDomEvent<DialogClosedParams>
|
||||
) => {
|
||||
if (DEBUG) {
|
||||
console.log("dialog closed", ev.detail.dialog);
|
||||
}
|
||||
// If not closed by navigating back, and not a new dialog is open, remove the open state from history
|
||||
if (
|
||||
history.state?.open &&
|
||||
history.state?.dialog === ev.detail.dialog
|
||||
) {
|
||||
if (DEBUG) {
|
||||
console.log("remove state", ev.detail.dialog);
|
||||
}
|
||||
this._ignoreNextPopState = true;
|
||||
history.back();
|
||||
}
|
||||
@@ -65,6 +74,9 @@ export const urlSyncMixin = <T extends Constructor<HassBaseEl>>(
|
||||
if (!state.open) {
|
||||
const closed = await closeDialog(state.dialog);
|
||||
if (!closed) {
|
||||
if (DEBUG) {
|
||||
console.log("dialog could not be closed");
|
||||
}
|
||||
// dialog could not be closed, push state again
|
||||
history.pushState(
|
||||
{
|
||||
@@ -78,6 +90,9 @@ export const urlSyncMixin = <T extends Constructor<HassBaseEl>>(
|
||||
return;
|
||||
}
|
||||
if (state.oldState) {
|
||||
if (DEBUG) {
|
||||
console.log("handle old state");
|
||||
}
|
||||
this._handleDialogStateChange(state.oldState);
|
||||
}
|
||||
return;
|
||||
|
@@ -1890,7 +1890,7 @@
|
||||
"confirm_delete_existing_cards_text": "Are you sure you want to delete your ''{name}'' view? The view contains {number} cards that will be deleted. This action cannot be undone."
|
||||
},
|
||||
"menu": {
|
||||
"configure_ui": "Configure UI",
|
||||
"configure_ui": "Edit Dashboard",
|
||||
"help": "Help",
|
||||
"refresh": "Refresh",
|
||||
"reload_resources": "Reload resources",
|
||||
|
@@ -798,7 +798,7 @@
|
||||
"confirmation_text": "Tots els dispositius d'aquesta àrea quedaran sense assignar.",
|
||||
"confirmation_title": "Estàs segur que vols eliminar aquesta àrea?"
|
||||
},
|
||||
"description": "Visió general de totes les àrees de la casa.",
|
||||
"description": "Gestiona les àrees de la casa",
|
||||
"editor": {
|
||||
"area_id": "ID d'àrea",
|
||||
"create": "Crea",
|
||||
@@ -820,7 +820,7 @@
|
||||
},
|
||||
"automation": {
|
||||
"caption": "Automatització",
|
||||
"description": "Crea i edita automatitzacions",
|
||||
"description": "Gestiona les automatitzacions",
|
||||
"editor": {
|
||||
"actions": {
|
||||
"add": "Afegir acció",
|
||||
@@ -833,6 +833,15 @@
|
||||
"name": "Acció",
|
||||
"type_select": "Tipus d'acció",
|
||||
"type": {
|
||||
"choose": {
|
||||
"add_option": "Afegeix opció",
|
||||
"conditions": "Condicions",
|
||||
"default": "Accions per defecte",
|
||||
"label": "Tria",
|
||||
"option": "Opció {number}",
|
||||
"remove_option": "Elimina opció",
|
||||
"sequence": "Accions"
|
||||
},
|
||||
"condition": {
|
||||
"label": "Condició"
|
||||
},
|
||||
@@ -852,6 +861,24 @@
|
||||
"label": "Disparar esdeveniment",
|
||||
"service_data": "Dades de servei"
|
||||
},
|
||||
"repeat": {
|
||||
"label": "Repeteix",
|
||||
"sequence": "Accions",
|
||||
"type_select": "Tipus de repetició",
|
||||
"type": {
|
||||
"count": {
|
||||
"label": "Compta"
|
||||
},
|
||||
"until": {
|
||||
"conditions": "Condicions de \"Fins que\"",
|
||||
"label": "Fins que"
|
||||
},
|
||||
"while": {
|
||||
"conditions": "Condicions de \"Mentre\"",
|
||||
"label": "Mentre"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scene": {
|
||||
"label": "Activa escena"
|
||||
},
|
||||
@@ -1341,7 +1368,7 @@
|
||||
},
|
||||
"entities": {
|
||||
"caption": "Entitats",
|
||||
"description": "Visió general de totes les entitats conegudes.",
|
||||
"description": "Gestiona les entitats conegudes",
|
||||
"picker": {
|
||||
"disable_selected": {
|
||||
"button": "Desactiva seleccionada/es",
|
||||
@@ -1393,7 +1420,7 @@
|
||||
"header": "Configuració de Home Assistant",
|
||||
"helpers": {
|
||||
"caption": "Ajudants",
|
||||
"description": "Possibles elements útils per a construir automatitzacions.",
|
||||
"description": "Gestiona elements útils per a construir automatitzacions",
|
||||
"dialog": {
|
||||
"add_helper": "Afegeix ajudant",
|
||||
"add_platform": "Afegeix {platform}",
|
||||
@@ -1421,7 +1448,7 @@
|
||||
"built_using": "Creat utilitzant",
|
||||
"caption": "Informació",
|
||||
"custom_uis": "Interfícies d'usuari personalitzades:",
|
||||
"description": "Informació de la instal·lació de Home Assistant",
|
||||
"description": "Consulta informació de la teva instal·lació de Home Assistant",
|
||||
"developed_by": "Desenvolupat per un munt de gent fantàstica.",
|
||||
"documentation": "Documentació",
|
||||
"frontend": "frontend-ui",
|
||||
@@ -1486,7 +1513,7 @@
|
||||
},
|
||||
"configure": "Configurar",
|
||||
"configured": "Configurades",
|
||||
"description": "Gestiona i configura les integracions",
|
||||
"description": "Gestiona les integracions",
|
||||
"details": "Detalls de la integració",
|
||||
"discovered": "Descobertes",
|
||||
"home_assistant_website": "lloc web de Home Assistant",
|
||||
@@ -1514,7 +1541,7 @@
|
||||
"rename_input_label": "Nom de l'entrada",
|
||||
"search": "Cerca integracions"
|
||||
},
|
||||
"introduction": "Aquí pots configurar Home Assistant i els seus components. Encara no és possible configurar-ho tot des de la interfície d'usuari, però hi estem treballant.",
|
||||
"introduction": "Aquí pots configurar Home Assistant i els teus components. Encara no és possible configurar-ho tot des de la interfície d'usuari, però hi estem treballant.",
|
||||
"logs": {
|
||||
"caption": "Registres",
|
||||
"clear": "Esborra",
|
||||
@@ -1570,7 +1597,7 @@
|
||||
"open": "Obrir"
|
||||
}
|
||||
},
|
||||
"description": "Configura els teus panells Lovelace",
|
||||
"description": "Gestiona els teus panells Lovelace",
|
||||
"resources": {
|
||||
"cant_edit_yaml": "Estàs utilitzant Lovelace en mode YAML per tant no pots gestionar els recursos des de la interfície d'usuari. Els pots gestionar des del fitxer 'configuration.yaml'.",
|
||||
"caption": "Recursos",
|
||||
@@ -1619,13 +1646,25 @@
|
||||
"title": "MQTT",
|
||||
"topic": "tòpic"
|
||||
},
|
||||
"ozw": {
|
||||
"common": {
|
||||
"node_id": "ID del node",
|
||||
"ozw_instance": "Instància OpenZWave",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
"node_failed": "Ha fallat el node",
|
||||
"stage": "Etapa",
|
||||
"zwave_info": "Informació Z-Wave"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Afegeix persona",
|
||||
"caption": "Persones",
|
||||
"confirm_delete": "Estàs segur que vols eliminar aquesta persona?",
|
||||
"confirm_delete2": "Tots els dispositius vinculats a aquesta persona quedaran sense assignar.",
|
||||
"create_person": "Crea persona",
|
||||
"description": "Gestiona a quines persones fa seguiment Home Assistant.",
|
||||
"description": "Gestiona les persones a qui Home Assistant fa seguiment",
|
||||
"detail": {
|
||||
"create": "Crea",
|
||||
"delete": "Elimina",
|
||||
@@ -1648,7 +1687,7 @@
|
||||
"scene": {
|
||||
"activated": "Escena {name} activada.",
|
||||
"caption": "Escenes",
|
||||
"description": "Crea i edita escenes",
|
||||
"description": "Gestiona les escenes",
|
||||
"editor": {
|
||||
"default_name": "Nova escena",
|
||||
"devices": {
|
||||
@@ -1692,7 +1731,7 @@
|
||||
},
|
||||
"script": {
|
||||
"caption": "Programació (scripts)",
|
||||
"description": "Crea i edita programes (scripts)",
|
||||
"description": "Gestiona els programes (scripts)",
|
||||
"editor": {
|
||||
"alias": "Nom",
|
||||
"default_name": "Nou script",
|
||||
@@ -1879,7 +1918,7 @@
|
||||
"create_group": "Domòtica Zigbee (ZHA) - Creació de grups",
|
||||
"create_group_details": "Introdueix els detalls necessaris per crear un nou grup Zigbee",
|
||||
"creating_group": "Creant grup",
|
||||
"description": "Crea i modifica grups Zigbee",
|
||||
"description": "Gestiona els grups Zigbee",
|
||||
"group_details": "Detalls del grup Zigbee seleccionat.",
|
||||
"group_id": "ID del grup",
|
||||
"group_info": "Informació del grup",
|
||||
@@ -1922,7 +1961,7 @@
|
||||
"configured_in_yaml": "Les zones configurades mitjançant configuration.yaml no es poden editar des de la UI.",
|
||||
"confirm_delete": "Estàs segur que vols eliminar aquesta zona?",
|
||||
"create_zone": "Crea zona",
|
||||
"description": "Gestiona les zones en les quals es fa seguiment de persones.",
|
||||
"description": "Gestiona les zones en les quals vols fer seguiment de persones",
|
||||
"detail": {
|
||||
"create": "Crea",
|
||||
"delete": "Elimina",
|
||||
@@ -2387,6 +2426,9 @@
|
||||
"para_migrate": "Home Assistant pot afegir ID's a totes les targetes i visualitzacions automàticament fent clic al botó 'Migrar la configuració'.",
|
||||
"para_no_id": "Aquest element no té ID. Afegeix un ID per aquest element a 'ui-lovelace.yaml'."
|
||||
},
|
||||
"move_card": {
|
||||
"header": "Trieu una vista per desplaçar la tarjeta a"
|
||||
},
|
||||
"raw_editor": {
|
||||
"confirm_remove_config_text": "Si elimines la configuració de la interfície d'usuari Lovelace es generaran automàticament les visualitzacions de Lovelace amb les teves àrees i dispositius.",
|
||||
"confirm_remove_config_title": "Estàs segur que vols eliminar la configuració de la interfície d'usuari Lovelace? Es generaran automàticament les visualitzacions de Lovelace amb les teves àrees i dispositius.",
|
||||
@@ -2414,6 +2456,10 @@
|
||||
"yaml_control": "Per configurar el panell en mode YAML, crea un fitxer YAML amb el nom que hagis establert a la configuració del panell, o bé el nom per defecte 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Estàs utilitzant el mode YAML per aquest panell, per tant no pots editar-lo des de la interfície d'usuari. Si vols poder editar-lo des de la UI, elimina 'mode: yaml' del fitxer 'configuration.yaml' en l'apartat de configuració de Lovelace."
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Panell",
|
||||
"header": "Trieu una vista"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Afegeix a la UI Lovelace",
|
||||
"create_own": "Escull una targeta diferent",
|
||||
@@ -2429,7 +2475,7 @@
|
||||
},
|
||||
"menu": {
|
||||
"close": "Tanca",
|
||||
"configure_ui": "Configurar la interfície d'usuari",
|
||||
"configure_ui": "Edita panell",
|
||||
"exit_edit_mode": "Surt del mode d'edició d'interfície",
|
||||
"help": "Ajuda",
|
||||
"refresh": "Actualitzar",
|
||||
@@ -2731,10 +2777,18 @@
|
||||
"header": "Tanca la connexió automàticament"
|
||||
},
|
||||
"themes": {
|
||||
"accent_color": "Color d'èmfasi",
|
||||
"dark_mode": {
|
||||
"auto": "Auto",
|
||||
"dark": "Fosc",
|
||||
"light": "Clar"
|
||||
},
|
||||
"dropdown_label": "Tema",
|
||||
"error_no_theme": "No hi ha temes disponibles.",
|
||||
"header": "Tema",
|
||||
"link_promo": "Crea temes personalitzats"
|
||||
"link_promo": "Crea temes personalitzats",
|
||||
"primary_color": "Color primari",
|
||||
"reset": "Restablir"
|
||||
},
|
||||
"vibrate": {
|
||||
"description": "Activa o desactiva la vibració en d'aquest dispositiu.",
|
||||
|
@@ -1638,6 +1638,11 @@
|
||||
"title": "MQTT",
|
||||
"topic": "téma"
|
||||
},
|
||||
"ozw": {
|
||||
"common": {
|
||||
"zwave": "Z-Wave"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Přidat osobu",
|
||||
"caption": "Osoby",
|
||||
@@ -2406,6 +2411,9 @@
|
||||
"para_migrate": "Home Assistant může automaticky přidávat ID ke všem kartám a pohledům stisknutím tlačítka \"Migrovat konfiguraci\".",
|
||||
"para_no_id": "Tento prvek nemá ID. Přidejte k tomuto prvku ID v 'ui-lovelace.yaml'."
|
||||
},
|
||||
"move_card": {
|
||||
"header": "Vyberte pohled, do kterého chcete kartu přesunout"
|
||||
},
|
||||
"raw_editor": {
|
||||
"confirm_remove_config_text": "Pokud odeberete nastavení Lovelace, automaticky vygenerujeme vaše zobrazení Lovelace s vašimi oblastmi a zařízeními.",
|
||||
"confirm_remove_config_title": "Opravdu chcete odstranit nastavení Lovelace? Automaticky vygenerujeme vaše zobrazení Lovelace s vašimi oblastmi a zařízeními.",
|
||||
@@ -2433,6 +2441,10 @@
|
||||
"yaml_control": "Chcete-li převzít kontrolu v režimu YAML, vytvořte soubor YAML s názvem, který jste uvedli ve své konfiguraci pro tento dashboard nebo výchozí 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Používáte režim YAML, což znamená, že nemůžete změnit konfiguraci Lovelace z uživatelského rozhraní. Pokud chcete měnit Lovelace z uživatelského rozhraní, odstraňte 'mode: yaml' z vaší konfigurace Lovelace v 'configuration.yaml.'"
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Dashboard",
|
||||
"header": "Vyberte pohled"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Přidat do Lovelance",
|
||||
"create_own": "Vytvořit vlastní",
|
||||
|
@@ -1646,6 +1646,18 @@
|
||||
"title": "MQTT",
|
||||
"topic": "emne"
|
||||
},
|
||||
"ozw": {
|
||||
"common": {
|
||||
"node_id": "knudepunkts-id",
|
||||
"ozw_instance": "OpenZWave-instans",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
"node_failed": "Problematisk knudepunkt",
|
||||
"stage": "Fase",
|
||||
"zwave_info": "Z-Wave-info"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Tilføj person",
|
||||
"caption": "Personer",
|
||||
@@ -2414,6 +2426,9 @@
|
||||
"para_migrate": "Home Assistant kan tilføje id'er til alle dine kort og visninger automatisk for dig ved at trykke på knappen 'Migrer opsætning'.",
|
||||
"para_no_id": "Dette element har ikke et id. Tilføj venligst et id til dette element i 'ui-lovelace.yaml'."
|
||||
},
|
||||
"move_card": {
|
||||
"header": "Vælg en visning, som kortet skal flyttes til"
|
||||
},
|
||||
"raw_editor": {
|
||||
"confirm_remove_config_text": "Vi genererer automatisk dine Lovelace-brugerfladevisninger med dine områder og enheder, hvis du fjerner din Lovelace-brugerfladekonfiguration.",
|
||||
"confirm_remove_config_title": "Er du sikker på, at du vil fjerne din Lovelace-brugerfladekonfiguration? Vi vil automatisk generere dine Lovelace-brugerfladevisninger med dine områder og enheder.",
|
||||
@@ -2441,6 +2456,10 @@
|
||||
"yaml_control": "For at tage kontrol i YAML-tilstand skal du oprette en YAML-fil med det navn, du har angivet i din konfiguration for dette betjeningspanel, eller standard-'ui-lovelace.yaml'-filen.",
|
||||
"yaml_mode": "Du bruger YAML-tilstand for dette betjeningspanel. Det betyder, at du ikke kan ændre din Lovelace-konfiguration fra brugerfladen. Hvis du vil ændre dette betjeningspanel fra brugerfladen, skal du fjerne 'mode: yaml' fra din Lovelace-konfiguration i 'configuration.yaml.'"
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Betjeningspanel",
|
||||
"header": "Vælg en visning"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Tilføj til Lovelace-brugerflade",
|
||||
"create_own": "Lav dit eget",
|
||||
|
@@ -2475,7 +2475,7 @@
|
||||
},
|
||||
"menu": {
|
||||
"close": "Close",
|
||||
"configure_ui": "Configure UI",
|
||||
"configure_ui": "Edit Dashboard",
|
||||
"exit_edit_mode": "Exit UI edit mode",
|
||||
"help": "Help",
|
||||
"refresh": "Refresh",
|
||||
|
@@ -201,7 +201,7 @@
|
||||
},
|
||||
"climate": {
|
||||
"cool": "Frío",
|
||||
"dry": "Seco",
|
||||
"dry": "Deshumidificador",
|
||||
"fan_only": "Sólo ventilador",
|
||||
"heat": "Calor",
|
||||
"heat_cool": "Calor/Frío",
|
||||
@@ -1646,6 +1646,18 @@
|
||||
"title": "MQTT",
|
||||
"topic": "tema"
|
||||
},
|
||||
"ozw": {
|
||||
"common": {
|
||||
"node_id": "ID del Nodo",
|
||||
"ozw_instance": "Instancia OpenZWave",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
"node_failed": "Error en el Nodo",
|
||||
"stage": "Etapa",
|
||||
"zwave_info": "Información Z-Wave"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Añadir persona",
|
||||
"caption": "Personas",
|
||||
@@ -2414,6 +2426,9 @@
|
||||
"para_migrate": "Home Assistant puede añadir IDs a todas tus tarjetas y vistas automáticamente pulsando el botón 'Migrar configuración'.",
|
||||
"para_no_id": "Este elemento no tiene un ID. Por favor añade uno a este elemento en 'ui-lovelace.yaml'."
|
||||
},
|
||||
"move_card": {
|
||||
"header": "Elige una vista hacia la que mover la tarjeta"
|
||||
},
|
||||
"raw_editor": {
|
||||
"confirm_remove_config_text": "Generaremos automáticamente tus vistas de la IU Lovelace con tus áreas y dispositivos si eliminas tu configuración de Lovelace.",
|
||||
"confirm_remove_config_title": "¿Estás seguro de que deseas eliminar tu configuración de la IU Lovelace? Generaremos automáticamente tus vistas de la IU Lovelace con tus áreas y dispositivos.",
|
||||
@@ -2441,6 +2456,10 @@
|
||||
"yaml_control": "Para tomar el control en modo YAML, crea un archivo YAML con el nombre que especificaste en la configuración para este panel de control, o el valor predeterminado 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Estás utilizando el modo YAML para este panel de control, lo que significa que no puedes cambiar la configuración de Lovelace desde la IU. Si quieres gestionar este panel de control desde la IU, elimina 'mode: yaml' de la configuración de Lovelace en 'configuration.yaml.'"
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Panel de control",
|
||||
"header": "Elige una vista"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Añadir a la IU Lovelace",
|
||||
"create_own": "Elige una tarjeta diferente",
|
||||
@@ -2456,7 +2475,7 @@
|
||||
},
|
||||
"menu": {
|
||||
"close": "Cerrar",
|
||||
"configure_ui": "Configurar la interfaz de usuario",
|
||||
"configure_ui": "Editar panel de control",
|
||||
"exit_edit_mode": "Salir del modo de edición de la interfaz de usuario",
|
||||
"help": "Ayuda",
|
||||
"refresh": "Actualizar",
|
||||
|
@@ -798,7 +798,7 @@
|
||||
"confirmation_text": "Tälle alueelle kuuluvien laitteiden osoitus poistetaan.",
|
||||
"confirmation_title": "Haluatko varmasti poistaa tämän alueen?"
|
||||
},
|
||||
"description": "Yleiskuva kaikista kotisi alueista.",
|
||||
"description": "Hallinnoi kotisi alueita",
|
||||
"editor": {
|
||||
"area_id": "Alueen tunnus",
|
||||
"create": "Luo",
|
||||
@@ -833,6 +833,15 @@
|
||||
"name": "Toiminta",
|
||||
"type_select": "Toiminnon tyyppi",
|
||||
"type": {
|
||||
"choose": {
|
||||
"add_option": "Lisää vaihtoehto",
|
||||
"conditions": "Ehdot",
|
||||
"default": "Oletustoiminnot",
|
||||
"label": "Valitse",
|
||||
"option": "Vaihtoehto {number}",
|
||||
"remove_option": "Poista vaihtoehto",
|
||||
"sequence": "Toiminnot"
|
||||
},
|
||||
"condition": {
|
||||
"label": "Ehto"
|
||||
},
|
||||
@@ -852,6 +861,24 @@
|
||||
"label": "Lähetä tapahtuma",
|
||||
"service_data": "Palvelun data"
|
||||
},
|
||||
"repeat": {
|
||||
"label": "Toista",
|
||||
"sequence": "Toiminnot",
|
||||
"type_select": "Toistotyyppi",
|
||||
"type": {
|
||||
"count": {
|
||||
"label": "Laske"
|
||||
},
|
||||
"until": {
|
||||
"conditions": "Kunnes ehdot",
|
||||
"label": "Kunnes"
|
||||
},
|
||||
"while": {
|
||||
"conditions": "Sillä aikaa, kun ehdot",
|
||||
"label": "Sillä aikaa"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scene": {
|
||||
"label": "Aktivoi tilanne"
|
||||
},
|
||||
@@ -1341,7 +1368,7 @@
|
||||
},
|
||||
"entities": {
|
||||
"caption": "Kohteet",
|
||||
"description": "Yleiskuva kaikista tunnetuista entiteeteistä.",
|
||||
"description": "Hallitse kohteita",
|
||||
"picker": {
|
||||
"disable_selected": {
|
||||
"button": "Poista valitut käytöstä",
|
||||
@@ -1619,6 +1646,18 @@
|
||||
"title": "MQTT",
|
||||
"topic": "aihe"
|
||||
},
|
||||
"ozw": {
|
||||
"common": {
|
||||
"node_id": "Solmun tunnus",
|
||||
"ozw_instance": "OpenZWave-instanssi",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
"node_failed": "Solmu epäonnistui",
|
||||
"stage": "Vaihe",
|
||||
"zwave_info": "Z-Wave-tiedot"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Lisää henkilö",
|
||||
"caption": "Henkilöt",
|
||||
@@ -1711,6 +1750,7 @@
|
||||
"queued": "Jonon pituus"
|
||||
},
|
||||
"modes": {
|
||||
"description": "Moodi hallitsee sitä, mitä tapahtuu, kun skripti käynnistetään, kun se edelleen toimii yhdestä tai useammasta aiemmasta kutsusta. Katso lisätietoja {documentation_link} .",
|
||||
"documentation": "skriptin dokumentaatio",
|
||||
"label": "Tila",
|
||||
"parallel": "Rinnakkain",
|
||||
@@ -2386,6 +2426,9 @@
|
||||
"para_migrate": "Home Assistant voi lisätä ID:t kaikkiin kortteihisi ja näkymiin automaattisesti painamalla 'Tuo vanhat asetukset'-nappia.",
|
||||
"para_no_id": "Elementillä ei ole ID. Lisää ID elementille 'ui-lovelace.yaml'-tiedostossa."
|
||||
},
|
||||
"move_card": {
|
||||
"header": "Valitse näkymä, johon kortti siirretään"
|
||||
},
|
||||
"raw_editor": {
|
||||
"confirm_remove_config_text": "Lovelace käyttöliittymän näkymät luodaan automaattisesti alueistasi ja laitteistasi, jos poistat nykyisen määrityksen.",
|
||||
"confirm_remove_config_title": "Haluatko varmasti poistaa Lovelace-käyttöliittymän asetukset? Lovelace käyttöliittymän asetukset luodaan automaattisesti alueistasi ja laitteistasi.",
|
||||
@@ -2413,6 +2456,10 @@
|
||||
"yaml_control": "Jos haluat hallita YAML-tilaa, luo YAML-tiedosto, jonka nimi on määritetty tämän kojelaudan kokoonpanossa, tai oletusarvoinen 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Käytät YAML-tilaa, mikä tarkoittaa, että et voi muuttaa Lovelace-asetuksia käyttöliittymästä. Jos haluat muuttaa Lovelacea käyttöliittymästä, poista 'mode: yaml' Lovelace-määrityksestäsi tiedostossa 'configuration.yaml'."
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Kojelauta",
|
||||
"header": "Valitse näkymä"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Lisää Lovelace-käyttöliittymään",
|
||||
"create_own": "Valitse toinen kortti",
|
||||
@@ -2730,10 +2777,18 @@
|
||||
"header": "Sulje yhteys automaattisesti"
|
||||
},
|
||||
"themes": {
|
||||
"accent_color": "Korostusväri",
|
||||
"dark_mode": {
|
||||
"auto": "Automaattinen",
|
||||
"dark": "Tumma",
|
||||
"light": "Vaalea"
|
||||
},
|
||||
"dropdown_label": "Teema",
|
||||
"error_no_theme": "Ei teemoja käytettävissä.",
|
||||
"header": "Teema",
|
||||
"link_promo": "Lisätietoja teemoista"
|
||||
"link_promo": "Lisätietoja teemoista",
|
||||
"primary_color": "Ensisijainen väri",
|
||||
"reset": "Nollaa"
|
||||
},
|
||||
"vibrate": {
|
||||
"description": "Ota tämän laitteen värinä käyttöön tai poista se käytöstä, kun ohjaat laitteita.",
|
||||
|
@@ -1646,6 +1646,18 @@
|
||||
"title": "MQTT",
|
||||
"topic": "sujet"
|
||||
},
|
||||
"ozw": {
|
||||
"common": {
|
||||
"node_id": "ID du nœud",
|
||||
"ozw_instance": "Instance Z-Wave",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
"node_failed": "Nœud Défaillant",
|
||||
"stage": "Étape",
|
||||
"zwave_info": "Informations Z-Wave"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Ajouter une personne",
|
||||
"caption": "Personnes",
|
||||
@@ -2414,6 +2426,9 @@
|
||||
"para_migrate": "Home Assistant peut ajouter automatiquement des identifiants à toutes vos cartes et vues en appuyant sur le bouton «Migrer la configuration».",
|
||||
"para_no_id": "Cet élément n'a pas d'identifiant. Veuillez ajouter un identifiant à cet élément dans 'ui-lovelace.yaml'."
|
||||
},
|
||||
"move_card": {
|
||||
"header": "Choisissez une vue vers laquelle déplacer la carte"
|
||||
},
|
||||
"raw_editor": {
|
||||
"confirm_remove_config_text": "Nous générerons automatiquement vos vues Lovelace UI avec vos zones et appareils si vous supprimez votre configuration Lovelace UI.",
|
||||
"confirm_remove_config_title": "Êtes-vous sûr de vouloir supprimer votre configuration Lovelace UI? Nous générerons automatiquement vos vues Lovelace UI avec vos zones et vos appareils.",
|
||||
@@ -2441,6 +2456,10 @@
|
||||
"yaml_control": "Pour prendre le contrôle en mode YAML, créez un fichier YAML avec le nom que vous avez spécifié dans votre configuration pour ce tableau de bord, ou le 'ui-lovelace.yaml' par défaut.",
|
||||
"yaml_mode": "Vous utilisez le mode YAML pour ce tableau de bord, ce qui signifie que vous ne pouvez pas modifier votre configuration Lovelace depuis l'interface utilisateur. Si vous souhaitez gérer votre tableau de bord via l'interface utilisateur, supprimez «mode: yaml» de votre configuration Lovelace dans «configuration.yaml»."
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Tableau de bord",
|
||||
"header": "Choisissez une vue"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Ajouter à Lovelace UI",
|
||||
"create_own": "Choisissez une autre carte",
|
||||
|
@@ -1 +1,228 @@
|
||||
{}
|
||||
{
|
||||
"panel": {
|
||||
"config": "Konfiguraasje",
|
||||
"history": "Skiednis",
|
||||
"mailbox": "Postfak",
|
||||
"map": "Kaart",
|
||||
"shopping_list": "Boadskiplist"
|
||||
},
|
||||
"state_attributes": {
|
||||
"climate": {
|
||||
"fan_mode": {
|
||||
"off": "Út"
|
||||
}
|
||||
}
|
||||
},
|
||||
"state_badge": {
|
||||
"person": {
|
||||
"home": "Thús"
|
||||
}
|
||||
},
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"triggered": "Aktivearre"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"cold": {
|
||||
"on": "Kâld"
|
||||
},
|
||||
"connectivity": {
|
||||
"on": "Ferbûn"
|
||||
},
|
||||
"default": {
|
||||
"on": "Oan"
|
||||
},
|
||||
"door": {
|
||||
"off": "Ticht",
|
||||
"on": "Iepen"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Ticht",
|
||||
"on": "Iepen"
|
||||
},
|
||||
"gas": {
|
||||
"off": "Net detektearre"
|
||||
},
|
||||
"motion": {
|
||||
"on": "Detekteare"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Ticht"
|
||||
},
|
||||
"presence": {
|
||||
"on": "Thús"
|
||||
},
|
||||
"vibration": {
|
||||
"on": "Detekteare"
|
||||
},
|
||||
"window": {
|
||||
"off": "Ticht"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"on": "Oan"
|
||||
},
|
||||
"camera": {
|
||||
"recording": "Opnimme"
|
||||
},
|
||||
"climate": {
|
||||
"cool": "Kuolje",
|
||||
"dry": "Droech",
|
||||
"heat": "Ferwaarmje"
|
||||
},
|
||||
"cover": {
|
||||
"open": "Iepen"
|
||||
},
|
||||
"default": {
|
||||
"off": "Út",
|
||||
"unavailable": "Net beskikber",
|
||||
"unknown": "Ûnbekend"
|
||||
},
|
||||
"device_tracker": {
|
||||
"not_home": "Fuort"
|
||||
},
|
||||
"fan": {
|
||||
"on": "Oan"
|
||||
},
|
||||
"group": {
|
||||
"home": "Thús",
|
||||
"locked": "Beskoattele",
|
||||
"open": "Iepen",
|
||||
"stopped": "Stoppe"
|
||||
},
|
||||
"light": {
|
||||
"off": "Út"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Beskoattele"
|
||||
},
|
||||
"media_player": {
|
||||
"playing": "Ôfspylje"
|
||||
},
|
||||
"script": {
|
||||
"off": "Út"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Út",
|
||||
"on": "Oan"
|
||||
},
|
||||
"switch": {
|
||||
"on": "Oan"
|
||||
},
|
||||
"weather": {
|
||||
"sunny": "Sinnich"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Net berikber",
|
||||
"initializing": "Inisjalisearje",
|
||||
"sleeping": "Sliept"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Net berikber ({query_stage})"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ui": {
|
||||
"common": {
|
||||
"loading": "Oan it laden"
|
||||
},
|
||||
"dialogs": {
|
||||
"zha_device_info": {
|
||||
"zha_device_card": {
|
||||
"device_name_placeholder": "Feroarje apparaatnamme"
|
||||
}
|
||||
}
|
||||
},
|
||||
"duration": {
|
||||
"day": "{count} {count, plural,\none {dei}\nother {dagen}\n}",
|
||||
"second": "{count} {count, plural,\none {sekonde}\nother {sekonden}\n}",
|
||||
"week": "{count} {count, plural,\none {wike}\nother {wiken}\n}"
|
||||
},
|
||||
"panel": {
|
||||
"config": {
|
||||
"automation": {
|
||||
"editor": {
|
||||
"actions": {
|
||||
"type": {
|
||||
"choose": {
|
||||
"add_option": "Opsje tafoegje"
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": {
|
||||
"add": "Trigger tafoegje",
|
||||
"header": "",
|
||||
"type": {
|
||||
"homeassistant": {
|
||||
"label": "",
|
||||
"shutdown": "Ofslúte",
|
||||
"start": "Opstarte"
|
||||
},
|
||||
"mqtt": {
|
||||
"payload": "Payload (opsjoneel)"
|
||||
},
|
||||
"state": {
|
||||
"from": "Fan",
|
||||
"to": "Nei"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"helpers": {
|
||||
"types": {
|
||||
"input_boolean": "Skeakelje",
|
||||
"input_number": "Nûmer"
|
||||
}
|
||||
},
|
||||
"info": {
|
||||
"description": "Ynformaasje oer dyn Home Assistant ynstallaasje"
|
||||
},
|
||||
"lovelace": {
|
||||
"description": "Konfigurearje dyn Lovelace-dashboards",
|
||||
"resources": {
|
||||
"detail": {
|
||||
"warning_header": "Wês foarsichtich!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"script": {
|
||||
"description": "Meitsje en bewurkje scripts"
|
||||
},
|
||||
"zha": {
|
||||
"groups": {
|
||||
"description": "Meitsje en bewurkje Zigbee groepen"
|
||||
}
|
||||
},
|
||||
"zwave": {
|
||||
"node_config": {
|
||||
"config_value": "Konfiguraasje wearde"
|
||||
}
|
||||
}
|
||||
},
|
||||
"lovelace": {
|
||||
"editor": {
|
||||
"select_view": {
|
||||
"dashboard_label": "Dashboard"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"configure_ui": "Konfigurearje UI"
|
||||
}
|
||||
},
|
||||
"mailbox": {
|
||||
"playback_title": "Berjocht ôfspylje"
|
||||
},
|
||||
"profile": {
|
||||
"themes": {
|
||||
"dark_mode": {
|
||||
"dark": "Tsjuster",
|
||||
"light": "ljocht"
|
||||
},
|
||||
"primary_color": "Primêre kleur"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -1646,6 +1646,18 @@
|
||||
"title": "MQTT",
|
||||
"topic": "emne"
|
||||
},
|
||||
"ozw": {
|
||||
"common": {
|
||||
"node_id": "Node-ID",
|
||||
"ozw_instance": "OpenZWave Instance",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
"node_failed": "Noden mislyktes",
|
||||
"stage": "Scene",
|
||||
"zwave_info": "Z-Wave Info"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Legg til person",
|
||||
"caption": "Personer",
|
||||
@@ -2414,6 +2426,9 @@
|
||||
"para_migrate": "Home Assistant kan legge til ID-er på alle kortene og visningene automatisk for deg ved å trykke på 'Migrer konfigurasjon' knappen.",
|
||||
"para_no_id": "Dette elementet har ingen ID. Vennligst legg til en ID på dette elementet i 'ui-lovelace.yaml'."
|
||||
},
|
||||
"move_card": {
|
||||
"header": "Velg en visning du vil flytte kortet til"
|
||||
},
|
||||
"raw_editor": {
|
||||
"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-konfigurasjonen? Vi vil automatisk opprette Lovelace-visningene dine med områdene og enhetene dine.",
|
||||
@@ -2441,6 +2456,10 @@
|
||||
"yaml_control": "Hvis du vil ta kontroll i YAML-modus, oppretter du en YAML-fil med navnet du angav i konfigurasjonen for dette instrumentbordet, eller standard 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Du bruker YAML-modus for dette instrumentbordet, noe som betyr at du ikke kan endre Lovelace-konfigurasjonen fra brukergrensesnittet. Hvis du vil administrere dette instrumentbordet fra brukergrensesnittet, må du fjerne 'modus: yaml' fra Lovelace-konfigurasjonen i 'configuration.yaml'."
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Dashboard",
|
||||
"header": "Velg en visning"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Legg til i Lovelace brukergrensesnitt",
|
||||
"create_own": "Velg et annet kort",
|
||||
|
@@ -833,6 +833,13 @@
|
||||
"name": "Actie",
|
||||
"type_select": "Type actie",
|
||||
"type": {
|
||||
"choose": {
|
||||
"add_option": "Optie toevoegen",
|
||||
"conditions": "Voorwaarden",
|
||||
"label": "Kies",
|
||||
"remove_option": "Verwijder optie",
|
||||
"sequence": "Acties"
|
||||
},
|
||||
"condition": {
|
||||
"label": "Voorwaarde"
|
||||
},
|
||||
@@ -2412,6 +2419,9 @@
|
||||
"yaml_control": "Om de controle over te nemen in de YAML-modus, maak je een YAML-bestand met de naam die je hebt opgegeven in je configuratie voor dit dashboard, of de standaard 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Je gebruikt de YAML-modus, wat betekent dat je jouw Lovelace-configuratie niet vanuit de gebruikersinterface kunt wijzigen. Als je Lovelace vanuit de gebruikersinterface wilt wijzigen, verwijder dan 'mode: yaml' uit de Lovelace-configuratie in 'configuration.yaml'."
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Dashboard"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Voeg toe aan de Lovelace gebruikersinterface",
|
||||
"create_own": "Kies een andere kaart",
|
||||
@@ -2729,10 +2739,15 @@
|
||||
"header": "Verbinding automatisch verbreken"
|
||||
},
|
||||
"themes": {
|
||||
"dark_mode": {
|
||||
"dark": "Donker",
|
||||
"light": "Licht"
|
||||
},
|
||||
"dropdown_label": "Thema",
|
||||
"error_no_theme": "Geen thema's beschikbaar.",
|
||||
"header": "Thema",
|
||||
"link_promo": "Meer informatie over thema's"
|
||||
"link_promo": "Meer informatie over thema's",
|
||||
"primary_color": "Primaire kleur"
|
||||
},
|
||||
"vibrate": {
|
||||
"description": "Schakel trillingen op dit apparaat in of uit wanneer u apparaten bestuurt.",
|
||||
|
@@ -1646,6 +1646,18 @@
|
||||
"title": "MQTT",
|
||||
"topic": "temat"
|
||||
},
|
||||
"ozw": {
|
||||
"common": {
|
||||
"node_id": "Identyfikator węzła",
|
||||
"ozw_instance": "Instancja OpenZWave",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
"node_failed": "Węzeł uszkodzony",
|
||||
"stage": "Etap",
|
||||
"zwave_info": "Informacje Z-Wave"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Dodaj osobę",
|
||||
"caption": "Osoby",
|
||||
@@ -2414,6 +2426,9 @@
|
||||
"para_migrate": "Home Assistant może automatycznie dodać ID do wszystkich twoich kart i widoków, po kliknięciu przycisku \"Migracja konfiguracji\".",
|
||||
"para_no_id": "Ten element nie ma ID. Dodaj ID do tego elementu w \"ui-lovelace.yaml\"."
|
||||
},
|
||||
"move_card": {
|
||||
"header": "Wybierz widok, do którego chcesz przenieść kartę"
|
||||
},
|
||||
"raw_editor": {
|
||||
"confirm_remove_config_text": "Jeśli usuniesz konfigurację interfejsu użytkownika Lovelace, widoki automatycznie będą generowane z obszarów i urządzeń.",
|
||||
"confirm_remove_config_title": "Na pewno chcesz usunąć konfigurację interfejsu użytkownika Lovelace? Widoki będą automatycznie generowane z obszarów i urządzeń.",
|
||||
@@ -2441,6 +2456,10 @@
|
||||
"yaml_control": "Aby zarządzać w trybie YAML, utwórz plik o nazwie podanej w konfiguracji dla tego dashboardu lub domyślny 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Używasz trybu YAML, co oznacza, że nie możesz zmienić konfiguracji Lovelace z poziomu interfejsu użytkownika. Jeśli chcesz zarządzać Lovelace z poziomu interfejsu użytkownika, usuń 'mode: yaml' z konfiguracji Lovelace w pliku 'configuration.yaml'."
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Dashboard",
|
||||
"header": "Wybierz widok"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Dodaj do interfejsu użytkownika Lovelace",
|
||||
"create_own": "Wybierz inną kartę",
|
||||
|
@@ -833,6 +833,15 @@
|
||||
"name": "Ação",
|
||||
"type_select": "Tipo de ação",
|
||||
"type": {
|
||||
"choose": {
|
||||
"add_option": "Adicionar opção",
|
||||
"conditions": "Condições",
|
||||
"default": "Ações por defeito",
|
||||
"label": "Escolha",
|
||||
"option": "Opção {number}",
|
||||
"remove_option": "Remover opção",
|
||||
"sequence": "Ações"
|
||||
},
|
||||
"condition": {
|
||||
"label": "Condição"
|
||||
},
|
||||
@@ -852,6 +861,24 @@
|
||||
"label": "Disparar evento",
|
||||
"service_data": "Informação de Serviço"
|
||||
},
|
||||
"repeat": {
|
||||
"label": "Repetir",
|
||||
"sequence": "Ações",
|
||||
"type_select": "Tipo de repetição",
|
||||
"type": {
|
||||
"count": {
|
||||
"label": "Contagem"
|
||||
},
|
||||
"until": {
|
||||
"conditions": "Até que as condições",
|
||||
"label": "Até"
|
||||
},
|
||||
"while": {
|
||||
"conditions": "Enquanto as condições",
|
||||
"label": "Enquanto"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scene": {
|
||||
"label": "Ativar cena"
|
||||
},
|
||||
@@ -1619,6 +1646,16 @@
|
||||
"title": "MQTT",
|
||||
"topic": "tópico"
|
||||
},
|
||||
"ozw": {
|
||||
"common": {
|
||||
"ozw_instance": "Instância OpenZWave",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
"node_failed": "Falha no nó",
|
||||
"zwave_info": "Informações sobre Z-Wave"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Adicionar Pessoa",
|
||||
"caption": "Pessoas",
|
||||
@@ -2387,6 +2424,9 @@
|
||||
"para_migrate": "Ao clicar no botão 'Migrar configuração', o Home Assistant pode adicionar IDs a todos os seus cartões e vistas automaticamente.",
|
||||
"para_no_id": "Este elemento não possui um ID. Por favor adicione um ID a este elemento em 'ui-lovelace.yaml'."
|
||||
},
|
||||
"move_card": {
|
||||
"header": "Escolha uma vista para mover o cartão para"
|
||||
},
|
||||
"raw_editor": {
|
||||
"confirm_remove_config_text": "Iremos gerar automaticamente as suas vistas do Lovelace UI com as suas áreas e dispositivos se você remover a sua configuração do Lovelace UI.",
|
||||
"confirm_remove_config_title": "Tem a certeza que deseja remover a configuração do interface de utilizador do Lovelace? Iremos gerar automaticamente as suas vistas do IU Lovelace com as suas áreas e dispositivos.",
|
||||
@@ -2414,6 +2454,10 @@
|
||||
"yaml_control": "Para assumir o controle no modo YAML, crie um ficheiro YAML com o nome que especificou na sua configuração para este painel de controle, ou o padrão 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Está a usar o modo YAML para este painel, o que significa que não pode alterar a sua configuração Lovelace a partir da UI. Se quiser alterar este painel a partir da UI, remova 'mode: yaml' da configuração Lovelace em 'configuration.yaml'."
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Painel de instrumentos",
|
||||
"header": "Escolha uma vista"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Adicionar à Lovelace UI",
|
||||
"create_own": "Escolha um cartão diferente",
|
||||
@@ -2731,10 +2775,17 @@
|
||||
"header": "Fechar automaticamente a conexão"
|
||||
},
|
||||
"themes": {
|
||||
"dark_mode": {
|
||||
"auto": "Automático",
|
||||
"dark": "Escuro",
|
||||
"light": "Luz"
|
||||
},
|
||||
"dropdown_label": "Tema",
|
||||
"error_no_theme": "Não há temas disponíveis.",
|
||||
"header": "Tema",
|
||||
"link_promo": "Saiba mais sobre temas"
|
||||
"link_promo": "Saiba mais sobre temas",
|
||||
"primary_color": "Cor primária",
|
||||
"reset": "Redefinir"
|
||||
},
|
||||
"vibrate": {
|
||||
"description": "Ative ou desative a vibração neste dispositivo ao controlar dispositivos.",
|
||||
|
@@ -834,11 +834,12 @@
|
||||
"type_select": "Тип действия",
|
||||
"type": {
|
||||
"choose": {
|
||||
"add_option": "Добавить опцию",
|
||||
"add_option": "Добавить вариант",
|
||||
"conditions": "Условия",
|
||||
"default": "Действия по умолчанию",
|
||||
"option": "Опция {number}",
|
||||
"remove_option": "Удалить опцию",
|
||||
"label": "Выбор",
|
||||
"option": "{number} вариант",
|
||||
"remove_option": "Удалить вариант",
|
||||
"sequence": "Действия"
|
||||
},
|
||||
"condition": {
|
||||
@@ -860,6 +861,24 @@
|
||||
"label": "Создание события",
|
||||
"service_data": "Данные"
|
||||
},
|
||||
"repeat": {
|
||||
"label": "Повтор",
|
||||
"sequence": "Действия",
|
||||
"type_select": "Режим повторений",
|
||||
"type": {
|
||||
"count": {
|
||||
"label": "Счётчик"
|
||||
},
|
||||
"until": {
|
||||
"conditions": "Действия будут выполняться в цикле до тех пор, когда начнут соблюдаться эти условия",
|
||||
"label": "До"
|
||||
},
|
||||
"while": {
|
||||
"conditions": "Действия будут выполняться в цикле, пока соблюдаются эти условия",
|
||||
"label": "Пока"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scene": {
|
||||
"label": "Активировать сцену"
|
||||
},
|
||||
@@ -1627,6 +1646,18 @@
|
||||
"title": "MQTT",
|
||||
"topic": "Топик"
|
||||
},
|
||||
"ozw": {
|
||||
"common": {
|
||||
"node_id": "ID узла",
|
||||
"ozw_instance": "Экземпляр OpenZWave",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
"node_failed": "Ошибка узла",
|
||||
"stage": "Этап",
|
||||
"zwave_info": "Информация о Z-Wave"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Добавить персону",
|
||||
"caption": "Люди",
|
||||
@@ -2395,6 +2426,9 @@
|
||||
"para_migrate": "Home Assistant может автоматически добавить ID для всех карточек и вкладок, если нажать кнопку 'Перенести настройки'.",
|
||||
"para_no_id": "Этот элемент не имеет ID. Добавьте ID для этого элемента в 'ui-lovelace.yaml'."
|
||||
},
|
||||
"move_card": {
|
||||
"header": "На какую вкладку нужно переместить карточку?"
|
||||
},
|
||||
"raw_editor": {
|
||||
"confirm_remove_config_text": "Если Вы очистите конфигурацию этой панели Lovelace, карточки с Вашими устройствами и помещениями будут создаваться автоматически.",
|
||||
"confirm_remove_config_title": "Очистить конфигурацию?",
|
||||
@@ -2422,6 +2456,10 @@
|
||||
"yaml_control": "Чтобы получить контроль в режиме YAML, создайте файл с именем, указанным в настройках этой панели (по умолчанию 'ui-lovelace.yaml').",
|
||||
"yaml_mode": "Эта панель Lovelace используется в режиме YAML. В этом режиме невозможно использовать визуальный редактор интерфейса. Если Вы всё же хотите редактировать конфигурацию этой панели из пользовательского интерфейса, удалите строку 'mode: yaml' из раздела Lovelace в файле configuration.yaml."
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Панель",
|
||||
"header": "Выберите вкладку"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Подтвердить",
|
||||
"create_own": "Изменить",
|
||||
@@ -2437,7 +2475,7 @@
|
||||
},
|
||||
"menu": {
|
||||
"close": "Закрыть",
|
||||
"configure_ui": "Настройка интерфейса",
|
||||
"configure_ui": "Изменить панель",
|
||||
"exit_edit_mode": "Выход из режима редактирования интерфейса",
|
||||
"help": "Справка",
|
||||
"refresh": "Обновить",
|
||||
|
@@ -1646,6 +1646,18 @@
|
||||
"title": "MQTT",
|
||||
"topic": "ämne"
|
||||
},
|
||||
"ozw": {
|
||||
"common": {
|
||||
"node_id": "Nod-ID",
|
||||
"ozw_instance": "OpenZWave-instans",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
"node_failed": "Noden misslyckades",
|
||||
"stage": "Steg",
|
||||
"zwave_info": "Z-Wave info"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Lägg till person",
|
||||
"caption": "Personer",
|
||||
@@ -2414,6 +2426,9 @@
|
||||
"para_migrate": "Home Assistant kan automatiskt lägga till ID:n till alla dina kort och vyer genom att du klickar på \"Migrera konfiguration\".",
|
||||
"para_no_id": "Det här elementet har inget ID. Lägg till ett ID till det här elementet i \"ui-lovelace.yaml\"."
|
||||
},
|
||||
"move_card": {
|
||||
"header": "Välj en vy att flytta kortet till"
|
||||
},
|
||||
"raw_editor": {
|
||||
"confirm_remove_config_text": "Vi kommer automatiskt att generera dina Lovelace UI-vyer med dina områden och enheter om du tar bort din Lovelace UI-konfiguration.",
|
||||
"confirm_remove_config_title": "Är du säker på att du vill ta bort din Lovelace UI konfiguration? Vi kommer automatiskt att generera dina Lovelace UI-vyer med dina områden och enheter.",
|
||||
@@ -2441,6 +2456,10 @@
|
||||
"yaml_control": "Om du vill ta kontroll i YAML-läge skapar du en YAML-fil med det namn du angav i konfigurationen för den här instrumentpanelen eller standard \"ui-lovelace.yaml\".",
|
||||
"yaml_mode": "Du använder YAML-läge, vilket betyder att du inte kan ändra dina Lovelace-inställning från användargränssnittet. Om du vill hantera Lovelace från användargränssnittet, ta bort 'mode: yaml' från din Lovelace-inställning i 'configuration.yaml'"
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Instrumentpanel",
|
||||
"header": "Välj en vy"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Lägg till i Lovelace-gränsnitt",
|
||||
"create_own": "Välj annat kort",
|
||||
|
@@ -96,7 +96,7 @@
|
||||
"armed": "Etkin",
|
||||
"armed_away": "Etkin dışarıda",
|
||||
"armed_custom_bypass": "Özel alarm atlatması",
|
||||
"armed_home": "Etkin evde",
|
||||
"armed_home": "Evdeyim modu kuruldu",
|
||||
"armed_night": "Etkin gece",
|
||||
"arming": "Etkinleşiyor",
|
||||
"disarmed": "Etkisiz",
|
||||
@@ -581,6 +581,7 @@
|
||||
},
|
||||
"dialogs": {
|
||||
"config_entry_system_options": {
|
||||
"enable_new_entities_description": "Devre dışı bırakılırsa, {integration} için yeni keşfedilen varlıklar otomatik olarak Home Assistant'a eklenmez.",
|
||||
"enable_new_entities_label": "Yeni eklenen varlıkları etkinleştir.",
|
||||
"title": "{integration} için Sistem Seçenekleri",
|
||||
"update": "Güncelle"
|
||||
@@ -692,11 +693,14 @@
|
||||
}
|
||||
},
|
||||
"mqtt_device_debug_info": {
|
||||
"deserialize": "MQTT mesajlarını JSON olarak ayrıştırma yap",
|
||||
"entities": "Varlıklar",
|
||||
"no_entities": "Varlık yok",
|
||||
"no_triggers": "Tetikleyici yok",
|
||||
"payload_display": "Yük ekranı",
|
||||
"recent_messages": "{n} , en son alınan mesaj (lar)",
|
||||
"show_as_yaml": "YAML olarak göster",
|
||||
"title": "{device} hata ayıklama bilgisi",
|
||||
"triggers": "Tetikleyiciler"
|
||||
},
|
||||
"options_flow": {
|
||||
@@ -726,6 +730,7 @@
|
||||
"confirmations": {
|
||||
"remove": "Cihazı kaldırmak istediğinize emin misiniz?"
|
||||
},
|
||||
"device_signature": "Zigbee cihaz imzası",
|
||||
"last_seen": "Son görülen",
|
||||
"manuf": "{manufacturer} tarafından",
|
||||
"no_area": "Alan Yok",
|
||||
@@ -733,7 +738,8 @@
|
||||
"quirk": "Orijinal",
|
||||
"services": {
|
||||
"remove": "Bir cihazı Zigbee ağından kaldır.",
|
||||
"updateDeviceName": "Aygıt kayıt defterinde bu aygıt için özel bir ad ayarlayın."
|
||||
"updateDeviceName": "Aygıt kayıt defterinde bu aygıt için özel bir ad ayarlayın.",
|
||||
"zigbee_information": "Cihazın Zigbee bilgilerini görüntüleyin."
|
||||
},
|
||||
"unknown": "Bilinmeyen",
|
||||
"zha_device_card": {
|
||||
@@ -775,7 +781,7 @@
|
||||
},
|
||||
"config": {
|
||||
"advanced_mode": {
|
||||
"hint_enable": "Eksik yapılandırma seçenekleri? Gelişmiş modunu etkinleştir",
|
||||
"hint_enable": "Yapılandırma seçenekleri eksik mi? Gelişmiş modu etkinleştirin",
|
||||
"link_profile_page": "profil sayfanız"
|
||||
},
|
||||
"areas": {
|
||||
@@ -821,6 +827,15 @@
|
||||
"name": "Aksiyon",
|
||||
"type_select": "Aksiyon türü",
|
||||
"type": {
|
||||
"choose": {
|
||||
"add_option": "Seçenek ekle",
|
||||
"conditions": "Koşullar",
|
||||
"default": "Varsayılan eylemler",
|
||||
"label": "Seç",
|
||||
"option": "Seçenek {number}",
|
||||
"remove_option": "Seçeneği kaldır",
|
||||
"sequence": "Aksiyonlar"
|
||||
},
|
||||
"condition": {
|
||||
"label": "Durum"
|
||||
},
|
||||
@@ -840,6 +855,15 @@
|
||||
"label": "Olayı Çalıştır",
|
||||
"service_data": "Hizmet verisi"
|
||||
},
|
||||
"repeat": {
|
||||
"sequence": "Aksiyonlar",
|
||||
"type": {
|
||||
"until": {
|
||||
"conditions": "Koşullara kadar",
|
||||
"label": "Kadar"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scene": {
|
||||
"label": "Sahneyi etkinleştir"
|
||||
},
|
||||
@@ -1220,7 +1244,7 @@
|
||||
"save_button": "Kaydet",
|
||||
"time_zone": "Saat dilimi",
|
||||
"unit_system": "Birim Sistemi",
|
||||
"unit_system_imperial": "ımperial",
|
||||
"unit_system_imperial": "Imperial",
|
||||
"unit_system_metric": "Metrik"
|
||||
},
|
||||
"header": "Yapılandırma ve sunucu kontrolü",
|
||||
@@ -1465,7 +1489,7 @@
|
||||
"note_about_website_reference": "Daha fazlası için",
|
||||
"rename_dialog": "Bu yapılandırma girişinin adını düzenleyin",
|
||||
"rename_input_label": "Varlık adı",
|
||||
"search": "Entegrasyonları ara"
|
||||
"search": "Entegrasyon ara"
|
||||
},
|
||||
"introduction": "Buradan bileşenlerinizi ve Home Assistant'ınızı yapılandırabilirsiniz. Herşeyi kullanıcı arayüzü ile ayarlamak henüz mümkün değil fakat üzerinde çalışıyoruz",
|
||||
"logs": {
|
||||
@@ -1569,6 +1593,18 @@
|
||||
"title": "MQTT",
|
||||
"topic": "konu"
|
||||
},
|
||||
"ozw": {
|
||||
"common": {
|
||||
"node_id": "Düğüm Kimliği",
|
||||
"ozw_instance": "OpenZWave Örneği",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
"node_failed": "Düğüm Başarısız",
|
||||
"stage": "Sahne",
|
||||
"zwave_info": "Z-Wave Bilgisi"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Kişi ekle",
|
||||
"caption": "Kişiler",
|
||||
@@ -1752,6 +1788,7 @@
|
||||
"zha": {
|
||||
"add_device_page": {
|
||||
"discovered_text": "Cihazlar keşfedildikten sonra burada görünecektir.",
|
||||
"discovery_text": "Keşfedilen cihazlar burada görünecektir. Cihaz (lar) ınız için talimatları izleyin ve cihazları eşleştirme moduna getirin.",
|
||||
"header": "Zigbee Ev Otomasyonu - Cihaz Ekle",
|
||||
"no_devices_found": "Hiçbir cihaz bulunamadı, eşleştirme modunda olduklarından emin olun ve keşfetme sırasında cihazı açık tutun.",
|
||||
"pairing_mode": "Cihazlarınızın eşleme modunda olduğundan emin olun. Bunun nasıl yapılacağı konusunda cihazınızın talimatlarını kontrol edin.",
|
||||
@@ -1916,6 +1953,7 @@
|
||||
"set_protection": "Korumayı Ayarla"
|
||||
},
|
||||
"ozw_log": {
|
||||
"introduction": "Günlüğü görüntüleyin. 0 minimum (yükler tüm günlük) ve 1000 maksimum. Yük statik bir günlük gösterir ve kuyruk günlüğün son belirtilen satır sayısı ile otomatik güncelleştirme gösterir.",
|
||||
"last_log_lines": "Son günlük satırı sayısı",
|
||||
"load": "Yük",
|
||||
"tail": "Kuyruk"
|
||||
@@ -2278,6 +2316,9 @@
|
||||
"para_migrate": "'Ayarları aktar' düğmesine bastığınız zaman Home Assistant tüm kartlarınıza ve görünümlerinize otomatik olarak kimlik atayabilir.",
|
||||
"para_no_id": "Bu öğenin bir kimliği yok. Lütfen 'ui-lovelace.yaml' dosyasında bu elemente bir kimlik ekleyin."
|
||||
},
|
||||
"move_card": {
|
||||
"header": "Kartı taşımak için bir görünüm seçin"
|
||||
},
|
||||
"raw_editor": {
|
||||
"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? Lovelace kullanıcı arayüzü görünümlerinizi alanlarınız ve cihazlarınızla otomatik olarak oluşturacağız.",
|
||||
@@ -2303,6 +2344,10 @@
|
||||
"save": "Kontrol altına al",
|
||||
"yaml_mode": "Bu gösterge tablosu için YAML modunu kullanıyorsunuz. Bunun anlamı, Lovelace yapılandırmanızı kullanıcı arayüzünden değiştiremezsiniz. Bu gösterge tablosunu kullanıcı arayüzünden yönetmek istiyorsanız, 'configuration: yaml' içindeki Lovelace yapılandırmanızdan 'mode: yaml' öğesini kaldırın."
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Gösterge Paneli",
|
||||
"header": "Bir görünüm seçin"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Lovelace kullanıcı arayüzüne ekle",
|
||||
"create_own": "Farklı kart seç",
|
||||
@@ -2500,13 +2545,16 @@
|
||||
},
|
||||
"page-onboarding": {
|
||||
"core-config": {
|
||||
"button_detect": "Tespit",
|
||||
"button_detect": "Algıla",
|
||||
"finish": "Sonraki",
|
||||
"intro": "Merhaba {name} , Home Assistant'a hoş geldin. Evini nasıl adlandırmak istersin?",
|
||||
"location_name_default": "Evde"
|
||||
"intro_location": "Nerede yaşadığınızı bilmek isteriz. Bu bilgiler, güneşe dayalı bilgilerin görüntülenmesine ve otomasyonların kurulmasına yardımcı olacaktır. Bu veriler asla ağınızın dışında paylaşılmaz.",
|
||||
"intro_location_detect": "Harici bir hizmete tek seferlik talepte bulunarak bu bilgileri doldurmanıza yardımcı olabiliriz.",
|
||||
"location_name_default": "Evim"
|
||||
},
|
||||
"integration": {
|
||||
"finish": "Bitir",
|
||||
"intro": "Cihazlar ve hizmetler, Home Asistant'ta entegrasyonlar olarak temsil edilir. Bunları şimdi kurabilir veya daha sonra yapılandırma ekranından yapabilirsiniz.",
|
||||
"more_integrations": "Daha fazla"
|
||||
},
|
||||
"user": {
|
||||
@@ -2564,6 +2612,7 @@
|
||||
"create_failed": "Erişim anahtarı oluşturulamadı.",
|
||||
"created_at": "{date} tarihinde oluşturuldu",
|
||||
"delete_failed": "Erişim anahtarı silinemedi.",
|
||||
"description": "Komut dosyalarınızın Home Assistant örneğinizle etkileşime girmesine izin vermek için uzun ömürlü erişim jetonları oluşturun. Her bir jeton, oluşturulduktan sonra 10 yıl süreyle geçerli olacaktır. Aşağıdaki uzun ömürlü erişim jetonları şu anda aktif.",
|
||||
"empty_state": "Henüz uzun ömürlü erişim anahtarınız yok.",
|
||||
"header": "Uzun ömürlü erişim anahtarları",
|
||||
"last_used": "En son {date} tarihinde {location} konumundan kullanıldı",
|
||||
@@ -2583,7 +2632,7 @@
|
||||
"confirm_disable": "{name} adlı öğeyi devre dışı bırakmak istediğinizden emin misiniz?",
|
||||
"disable": "Devre dışı bırak",
|
||||
"enable": "Etkinleştir",
|
||||
"header": "Çoklu-faktör Kimlik Doğrulama Modülleri"
|
||||
"header": "Çok Faktörlü Kimlik Doğrulama Modülleri"
|
||||
},
|
||||
"push_notifications": {
|
||||
"description": "Bu cihaza bildirimler gönder",
|
||||
@@ -2605,14 +2654,22 @@
|
||||
"token_title": "{clientId} için yenileme anahtarı"
|
||||
},
|
||||
"suspend": {
|
||||
"description": "5 dakika boyunca gizlendikten sonra sunucu bağlantısı kapatılsın mı?",
|
||||
"description": "5 dakika boyunca aktif olmayınca sunucu ile bağlantı kapatılsın mı?",
|
||||
"header": "Bağlantıyı otomatik olarak kapat"
|
||||
},
|
||||
"themes": {
|
||||
"accent_color": "Vurgu rengi",
|
||||
"dark_mode": {
|
||||
"auto": "Otomatik",
|
||||
"dark": "Karanlık",
|
||||
"light": "Işık"
|
||||
},
|
||||
"dropdown_label": "Tema",
|
||||
"error_no_theme": "Kullanılabilir tema yok.",
|
||||
"header": "Tema",
|
||||
"link_promo": "Temalar hakkında bilgi edinin"
|
||||
"link_promo": "Temalar hakkında bilgi edinin",
|
||||
"primary_color": "Birincil renk",
|
||||
"reset": "Sıfırla"
|
||||
},
|
||||
"vibrate": {
|
||||
"description": "Cihazları kontrol ederken bu cihazdaki titreşimi etkinleştirin veya devre dışı bırakın.",
|
||||
|
@@ -918,7 +918,7 @@
|
||||
},
|
||||
"mqtt": {
|
||||
"label": "MQTT",
|
||||
"payload": "Phụ tải (tùy chọn)",
|
||||
"payload": "Nội dung (tùy chọn)",
|
||||
"topic": "Chủ đề"
|
||||
},
|
||||
"numeric_state": {
|
||||
|
@@ -1646,6 +1646,18 @@
|
||||
"title": "MQTT",
|
||||
"topic": "主题(Topic)"
|
||||
},
|
||||
"ozw": {
|
||||
"common": {
|
||||
"node_id": "节点 ID",
|
||||
"ozw_instance": "OpenZWave 实例",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
"node_failed": "节点故障",
|
||||
"stage": "阶段",
|
||||
"zwave_info": "Z-Wave 信息"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "添加人员",
|
||||
"caption": "人员",
|
||||
@@ -2414,6 +2426,9 @@
|
||||
"para_migrate": "通过点击“迁移配置”按钮,Home Assistant 可以自动为您的所有卡片和视图添加 ID。",
|
||||
"para_no_id": "此元素没有 ID。请在 'ui-lovelace.yaml' 中为此元素添加 ID。"
|
||||
},
|
||||
"move_card": {
|
||||
"header": "选择要将卡片移动到哪个视图"
|
||||
},
|
||||
"raw_editor": {
|
||||
"confirm_remove_config_text": "如果您删除了 Lovelace 配置,我们将通过您的区域和设备自动生成 Lovelace 视图。",
|
||||
"confirm_remove_config_title": "您确定要删除 Lovelace 配置吗?我们将通过您的区域和设备自动生成 Lovelace 视图。",
|
||||
@@ -2441,6 +2456,10 @@
|
||||
"yaml_control": "要以 YAML 模式下自行编辑,请创建 YAML 文件并命名为在配置中为此仪表盘指定的名称,或使用默认的 'ui-lovelace.yaml'。",
|
||||
"yaml_mode": "此仪表盘正在使用 YAML 模式,因此无法从 UI 更改 Lovelace 配置。若要从 UI 管理此仪表盘,请从 'configuration.yaml' 中的 Lovelace 配置中删除 'mode: yaml'。"
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "仪表盘",
|
||||
"header": "选择视图"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "添加至 Lovelace UI",
|
||||
"create_own": "选择其他卡片",
|
||||
|
@@ -833,6 +833,15 @@
|
||||
"name": "動作",
|
||||
"type_select": "觸發後動作類別",
|
||||
"type": {
|
||||
"choose": {
|
||||
"add_option": "新增選項",
|
||||
"conditions": "觸發條件",
|
||||
"default": "預設觸發動作",
|
||||
"label": "選擇",
|
||||
"option": "選項 {number}",
|
||||
"remove_option": "移除選項",
|
||||
"sequence": "觸發後動作"
|
||||
},
|
||||
"condition": {
|
||||
"label": "判斷式"
|
||||
},
|
||||
@@ -852,6 +861,24 @@
|
||||
"label": "執行事件",
|
||||
"service_data": "資料"
|
||||
},
|
||||
"repeat": {
|
||||
"label": "重複",
|
||||
"sequence": "觸發後動作",
|
||||
"type_select": "重複類型",
|
||||
"type": {
|
||||
"count": {
|
||||
"label": "計次"
|
||||
},
|
||||
"until": {
|
||||
"conditions": "直到條件發生",
|
||||
"label": "直到"
|
||||
},
|
||||
"while": {
|
||||
"conditions": "當條件發生",
|
||||
"label": "當"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scene": {
|
||||
"label": "啟用場景"
|
||||
},
|
||||
@@ -1619,6 +1646,18 @@
|
||||
"title": "MQTT",
|
||||
"topic": "主題"
|
||||
},
|
||||
"ozw": {
|
||||
"common": {
|
||||
"node_id": "節點 ID",
|
||||
"ozw_instance": "OpenZWave 設備",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
"node_failed": "節點失敗",
|
||||
"stage": "階段",
|
||||
"zwave_info": "Z-Wave 資訊"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "新增人員",
|
||||
"caption": "人員",
|
||||
@@ -2387,6 +2426,9 @@
|
||||
"para_migrate": "Home Assistant 能於您點選「遷移設定」按鈕後,自動新增 ID 與視圖至所有面板。",
|
||||
"para_no_id": "該元件未含 ID,請於「ui-lovelace.yaml」中為該元件新增 ID。"
|
||||
},
|
||||
"move_card": {
|
||||
"header": "移動至哪個面板"
|
||||
},
|
||||
"raw_editor": {
|
||||
"confirm_remove_config_text": "假如移除 Lovelace UI 設定的話,將自動以區域與設備產生 Lovelace UI 視圖。",
|
||||
"confirm_remove_config_title": "確定要移除 Lovelace UI 設定?將依據區域與設備自動產生 Lovelace UI 視圖。",
|
||||
@@ -2414,6 +2456,10 @@
|
||||
"yaml_control": "欲使用 YAML 進行控制、新增一個與此主面板相同名稱的 YAML 檔案、或者預設為「ui-lovelace.yaml」。",
|
||||
"yaml_mode": "正使用 YAML 模式、表示您無法藉由 UI 變更 Lovelace 設定。假如您想由 UI 中進行變更、請於「configuration.yaml」檔案中移除 'mode: yaml' 參數。"
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "主面板",
|
||||
"header": "選擇面板"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "新增至 Lovelace UI",
|
||||
"create_own": "選擇其他面板",
|
||||
@@ -2731,10 +2777,18 @@
|
||||
"header": "自動關閉連線"
|
||||
},
|
||||
"themes": {
|
||||
"accent_color": "加重顏色",
|
||||
"dark_mode": {
|
||||
"auto": "自動",
|
||||
"dark": "深色",
|
||||
"light": "淡色"
|
||||
},
|
||||
"dropdown_label": "主題",
|
||||
"error_no_theme": "無主題可使用。",
|
||||
"header": "主題",
|
||||
"link_promo": "關於此主題"
|
||||
"link_promo": "關於此主題",
|
||||
"primary_color": "主色彩",
|
||||
"reset": "重置"
|
||||
},
|
||||
"vibrate": {
|
||||
"description": "當控制裝置時、開啟或關閉此裝置震動。",
|
||||
|
Reference in New Issue
Block a user