mirror of
https://github.com/home-assistant/frontend.git
synced 2025-08-29 11:09:26 +00:00
Compare commits
15 Commits
add-import
...
20200509.0
Author | SHA1 | Date | |
---|---|---|---|
![]() |
d19acf17c2 | ||
![]() |
1a0bf861ee | ||
![]() |
db906ad4d0 | ||
![]() |
75ed0f2f99 | ||
![]() |
29ed1144d5 | ||
![]() |
d10be4ef2d | ||
![]() |
7f66d5b8e9 | ||
![]() |
0c8cd680c2 | ||
![]() |
a7ba1977b4 | ||
![]() |
a960b39235 | ||
![]() |
3febf059ec | ||
![]() |
20203f7bdb | ||
![]() |
a399d76d06 | ||
![]() |
1ca097c5a0 | ||
![]() |
ae6243b7bf |
@@ -1,9 +1,14 @@
|
||||
const del = require("del");
|
||||
const gulp = require("gulp");
|
||||
const fs = require("fs");
|
||||
const mapStream = require("map-stream");
|
||||
|
||||
const inDir = "translations/frontend";
|
||||
const downloadDir = inDir + "/downloads";
|
||||
const inDirFrontend = "translations/frontend";
|
||||
const inDirBackend = "translations/backend";
|
||||
const downloadDir = "translations/downloads";
|
||||
const srcMeta = "src/translations/translationMetadata.json";
|
||||
|
||||
const encoding = "utf8";
|
||||
|
||||
const tasks = [];
|
||||
|
||||
@@ -53,9 +58,25 @@ gulp.task(taskName, function () {
|
||||
});
|
||||
tasks.push(taskName);
|
||||
|
||||
taskName = "check-all-files-exist";
|
||||
gulp.task(taskName, function () {
|
||||
const file = fs.readFileSync(srcMeta, { encoding });
|
||||
const meta = JSON.parse(file);
|
||||
Object.keys(meta).forEach((lang) => {
|
||||
if (!fs.existsSync(`${inDirFrontend}/${lang}.json`)) {
|
||||
fs.writeFileSync(`${inDirFrontend}/${lang}.json`, JSON.stringify({}));
|
||||
}
|
||||
if (!fs.existsSync(`${inDirBackend}/${lang}.json`)) {
|
||||
fs.writeFileSync(`${inDirBackend}/${lang}.json`, JSON.stringify({}));
|
||||
}
|
||||
});
|
||||
return Promise.resolve();
|
||||
});
|
||||
tasks.push(taskName);
|
||||
|
||||
taskName = "move-downloaded-translations";
|
||||
gulp.task(taskName, function () {
|
||||
return gulp.src(`${downloadDir}/*.json`).pipe(gulp.dest(inDir));
|
||||
return gulp.src(`${downloadDir}/*.json`).pipe(gulp.dest(inDirFrontend));
|
||||
});
|
||||
tasks.push(taskName);
|
||||
|
||||
@@ -65,6 +86,7 @@ gulp.task(
|
||||
gulp.series(
|
||||
"check-translations-html",
|
||||
"move-downloaded-translations",
|
||||
"check-all-files-exist",
|
||||
"clean-downloaded-translations"
|
||||
)
|
||||
);
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import "@polymer/paper-card/paper-card";
|
||||
import { mdiArrowUpBoldCircle, mdiPuzzle } from "@mdi/js";
|
||||
import {
|
||||
css,
|
||||
CSSResultArray,
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
import memoizeOne from "memoize-one";
|
||||
import { atLeastVersion } from "../../../src/common/config/version";
|
||||
import { navigate } from "../../../src/common/navigate";
|
||||
import "../../../src/components/ha-card";
|
||||
import {
|
||||
HassioAddonInfo,
|
||||
HassioAddonRepository,
|
||||
@@ -66,7 +67,7 @@ class HassioAddonRepositoryEl extends LitElement {
|
||||
<div class="card-group">
|
||||
${addons.map(
|
||||
(addon) => html`
|
||||
<paper-card
|
||||
<ha-card
|
||||
.addon=${addon}
|
||||
class=${addon.available ? "" : "not_available"}
|
||||
@click=${this._addonTapped}
|
||||
@@ -78,8 +79,8 @@ class HassioAddonRepositoryEl extends LitElement {
|
||||
.description=${addon.description}
|
||||
.available=${addon.available}
|
||||
.icon=${addon.installed && addon.installed !== addon.version
|
||||
? "hassio:arrow-up-bold-circle"
|
||||
: "hassio:puzzle"}
|
||||
? mdiArrowUpBoldCircle
|
||||
: mdiPuzzle}
|
||||
.iconTitle=${addon.installed
|
||||
? addon.installed !== addon.version
|
||||
? "New version available"
|
||||
@@ -111,7 +112,7 @@ class HassioAddonRepositoryEl extends LitElement {
|
||||
: ""}
|
||||
></hassio-card-content>
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`
|
||||
)}
|
||||
</div>
|
||||
@@ -127,7 +128,7 @@ class HassioAddonRepositoryEl extends LitElement {
|
||||
return [
|
||||
hassioStyle,
|
||||
css`
|
||||
paper-card {
|
||||
ha-card {
|
||||
cursor: pointer;
|
||||
}
|
||||
.not_available {
|
||||
|
@@ -1,3 +1,6 @@
|
||||
import "@material/mwc-icon-button/mwc-icon-button";
|
||||
import "@material/mwc-list/mwc-list-item";
|
||||
import { mdiDotsVertical } from "@mdi/js";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -6,22 +9,21 @@ import {
|
||||
PropertyValues,
|
||||
} from "lit-element";
|
||||
import { html, TemplateResult } from "lit-html";
|
||||
import "../../../src/common/search/search-input";
|
||||
import "../../../src/components/ha-button-menu";
|
||||
import "../../../src/components/ha-svg-icon";
|
||||
import {
|
||||
fetchHassioAddonsInfo,
|
||||
HassioAddonInfo,
|
||||
HassioAddonRepository,
|
||||
reloadHassioAddons,
|
||||
} from "../../../src/data/hassio/addon";
|
||||
import "../../../src/components/ha-icon-button";
|
||||
import "../../../src/layouts/loading-screen";
|
||||
import "../../../src/layouts/hass-tabs-subpage";
|
||||
import "../../../src/layouts/loading-screen";
|
||||
import { HomeAssistant, Route } from "../../../src/types";
|
||||
import "../../../src/common/search/search-input";
|
||||
import "./hassio-addon-repository";
|
||||
|
||||
import { supervisorTabs } from "../hassio-panel";
|
||||
|
||||
import { showRepositoriesDialog } from "../dialogs/repositories/show-dialog-repositories";
|
||||
import { supervisorTabs } from "../hassio-panel";
|
||||
import "./hassio-addon-repository";
|
||||
|
||||
const sortRepos = (a: HassioAddonRepository, b: HassioAddonRepository) => {
|
||||
if (a.slug === "local") {
|
||||
@@ -94,27 +96,17 @@ class HassioAddonStore extends LitElement {
|
||||
.tabs=${supervisorTabs}
|
||||
>
|
||||
<span slot="header">Add-on store</span>
|
||||
<paper-menu-button
|
||||
close-on-activate
|
||||
no-animations
|
||||
horizontal-align="right"
|
||||
horizontal-offset="-5"
|
||||
slot="toolbar-icon"
|
||||
>
|
||||
<ha-icon-button
|
||||
icon="hassio:dots-vertical"
|
||||
slot="dropdown-trigger"
|
||||
alt="menu"
|
||||
></ha-icon-button>
|
||||
<paper-listbox slot="dropdown-content" role="listbox">
|
||||
<paper-item @tap=${this._manageRepositories}>
|
||||
Repositories
|
||||
</paper-item>
|
||||
<paper-item @tap=${this.refreshData}>
|
||||
Reload
|
||||
</paper-item>
|
||||
</paper-listbox>
|
||||
</paper-menu-button>
|
||||
<ha-button-menu corner="BOTTOM_START" slot="toolbar-icon">
|
||||
<mwc-icon-button slot="trigger" alt="menu">
|
||||
<ha-svg-icon path=${mdiDotsVertical}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
<mwc-list-item @tap=${this._manageRepositories}>
|
||||
Repositories
|
||||
</mwc-list-item>
|
||||
<mwc-list-item @tap=${this.refreshData}>
|
||||
Reload
|
||||
</mwc-list-item>
|
||||
</ha-button-menu>
|
||||
${repos.length === 0
|
||||
? html`<loading-screen></loading-screen>`
|
||||
: html`
|
||||
|
@@ -1,5 +1,4 @@
|
||||
import "@material/mwc-button";
|
||||
import "@polymer/paper-card/paper-card";
|
||||
import "@polymer/paper-dropdown-menu/paper-dropdown-menu";
|
||||
import "@polymer/paper-item/paper-item";
|
||||
import "@polymer/paper-listbox/paper-listbox";
|
||||
@@ -14,6 +13,7 @@ import {
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import "web-animations-js/web-animations-next-lite.min";
|
||||
import "../../../../src/components/ha-card";
|
||||
import {
|
||||
HassioAddonDetails,
|
||||
HassioAddonSetOptionParams,
|
||||
@@ -23,9 +23,9 @@ import {
|
||||
fetchHassioHardwareAudio,
|
||||
HassioHardwareAudioDevice,
|
||||
} from "../../../../src/data/hassio/hardware";
|
||||
import { suggestAddonRestart } from "../../dialogs/suggestAddonRestart";
|
||||
import { haStyle } from "../../../../src/resources/styles";
|
||||
import { HomeAssistant } from "../../../../src/types";
|
||||
import { suggestAddonRestart } from "../../dialogs/suggestAddonRestart";
|
||||
import { hassioStyle } from "../../resources/hassio-style";
|
||||
|
||||
@customElement("hassio-addon-audio")
|
||||
@@ -46,7 +46,7 @@ class HassioAddonAudio extends LitElement {
|
||||
|
||||
protected render(): TemplateResult {
|
||||
return html`
|
||||
<paper-card heading="Audio">
|
||||
<ha-card header="Audio">
|
||||
<div class="card-content">
|
||||
${this._error ? html` <div class="errors">${this._error}</div> ` : ""}
|
||||
|
||||
@@ -92,7 +92,7 @@ class HassioAddonAudio extends LitElement {
|
||||
<div class="card-actions">
|
||||
<mwc-button @click=${this._saveSettings}>Save</mwc-button>
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -102,7 +102,7 @@ class HassioAddonAudio extends LitElement {
|
||||
hassioStyle,
|
||||
css`
|
||||
:host,
|
||||
paper-card,
|
||||
ha-card,
|
||||
paper-dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
|
@@ -8,12 +8,10 @@ import {
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
|
||||
import { HomeAssistant } from "../../../../src/types";
|
||||
import { HassioAddonDetails } from "../../../../src/data/hassio/addon";
|
||||
import { hassioStyle } from "../../resources/hassio-style";
|
||||
import { haStyle } from "../../../../src/resources/styles";
|
||||
|
||||
import { HomeAssistant } from "../../../../src/types";
|
||||
import { hassioStyle } from "../../resources/hassio-style";
|
||||
import "./hassio-addon-audio";
|
||||
import "./hassio-addon-config";
|
||||
import "./hassio-addon-network";
|
||||
|
@@ -1,6 +1,5 @@
|
||||
import "@material/mwc-button";
|
||||
import "@polymer/iron-autogrow-textarea/iron-autogrow-textarea";
|
||||
import "@polymer/paper-card/paper-card";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -13,6 +12,7 @@ import {
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { fireEvent } from "../../../../src/common/dom/fire_event";
|
||||
import "../../../../src/components/ha-card";
|
||||
import "../../../../src/components/ha-yaml-editor";
|
||||
import type { HaYamlEditor } from "../../../../src/components/ha-yaml-editor";
|
||||
import {
|
||||
@@ -23,9 +23,8 @@ import {
|
||||
import { showConfirmationDialog } from "../../../../src/dialogs/generic/show-dialog-box";
|
||||
import { haStyle } from "../../../../src/resources/styles";
|
||||
import type { HomeAssistant } from "../../../../src/types";
|
||||
import { hassioStyle } from "../../resources/hassio-style";
|
||||
|
||||
import { suggestAddonRestart } from "../../dialogs/suggestAddonRestart";
|
||||
import { hassioStyle } from "../../resources/hassio-style";
|
||||
|
||||
@customElement("hassio-addon-config")
|
||||
class HassioAddonConfig extends LitElement {
|
||||
@@ -46,7 +45,7 @@ class HassioAddonConfig extends LitElement {
|
||||
|
||||
return html`
|
||||
<h1>${this.addon.name}</h1>
|
||||
<paper-card heading="Configuration">
|
||||
<ha-card header="Configuration">
|
||||
<div class="card-content">
|
||||
<ha-yaml-editor
|
||||
@value-changed=${this._configChanged}
|
||||
@@ -65,7 +64,7 @@ class HassioAddonConfig extends LitElement {
|
||||
Save
|
||||
</mwc-button>
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -77,7 +76,7 @@ class HassioAddonConfig extends LitElement {
|
||||
:host {
|
||||
display: block;
|
||||
}
|
||||
paper-card {
|
||||
ha-card {
|
||||
display: block;
|
||||
}
|
||||
.card-actions {
|
||||
|
@@ -1,4 +1,3 @@
|
||||
import "@polymer/paper-card/paper-card";
|
||||
import { PaperInputElement } from "@polymer/paper-input/paper-input";
|
||||
import {
|
||||
css,
|
||||
@@ -11,15 +10,15 @@ import {
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { fireEvent } from "../../../../src/common/dom/fire_event";
|
||||
import "../../../../src/components/ha-card";
|
||||
import {
|
||||
HassioAddonDetails,
|
||||
HassioAddonSetOptionParams,
|
||||
setHassioAddonOption,
|
||||
} from "../../../../src/data/hassio/addon";
|
||||
import { suggestAddonRestart } from "../../dialogs/suggestAddonRestart";
|
||||
|
||||
import { haStyle } from "../../../../src/resources/styles";
|
||||
import { HomeAssistant } from "../../../../src/types";
|
||||
import { suggestAddonRestart } from "../../dialogs/suggestAddonRestart";
|
||||
import { hassioStyle } from "../../resources/hassio-style";
|
||||
|
||||
interface NetworkItem {
|
||||
@@ -53,7 +52,7 @@ class HassioAddonNetwork extends LitElement {
|
||||
}
|
||||
|
||||
return html`
|
||||
<paper-card heading="Network">
|
||||
<ha-card header="Network">
|
||||
<div class="card-content">
|
||||
${this._error ? html` <div class="errors">${this._error}</div> ` : ""}
|
||||
|
||||
@@ -90,7 +89,7 @@ class HassioAddonNetwork extends LitElement {
|
||||
</mwc-button>
|
||||
<mwc-button @click=${this._saveTapped}>Save</mwc-button>
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -102,7 +101,7 @@ class HassioAddonNetwork extends LitElement {
|
||||
:host {
|
||||
display: block;
|
||||
}
|
||||
paper-card {
|
||||
ha-card {
|
||||
display: block;
|
||||
}
|
||||
.errors {
|
||||
|
@@ -1,5 +1,4 @@
|
||||
import "@polymer/paper-spinner/paper-spinner-lite";
|
||||
import "@polymer/paper-card/paper-card";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -9,16 +8,15 @@ import {
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
|
||||
import { HomeAssistant } from "../../../../src/types";
|
||||
import {
|
||||
HassioAddonDetails,
|
||||
fetchHassioAddonDocumentation,
|
||||
} from "../../../../src/data/hassio/addon";
|
||||
import "../../../../src/components/ha-markdown";
|
||||
import {
|
||||
fetchHassioAddonDocumentation,
|
||||
HassioAddonDetails,
|
||||
} from "../../../../src/data/hassio/addon";
|
||||
import "../../../../src/layouts/loading-screen";
|
||||
import { hassioStyle } from "../../resources/hassio-style";
|
||||
import { haStyle } from "../../../../src/resources/styles";
|
||||
import { HomeAssistant } from "../../../../src/types";
|
||||
import { hassioStyle } from "../../resources/hassio-style";
|
||||
|
||||
@customElement("hassio-addon-documentation-tab")
|
||||
class HassioAddonDocumentationDashboard extends LitElement {
|
||||
@@ -41,14 +39,14 @@ class HassioAddonDocumentationDashboard extends LitElement {
|
||||
}
|
||||
return html`
|
||||
<div class="content">
|
||||
<paper-card>
|
||||
<ha-card>
|
||||
${this._error ? html` <div class="errors">${this._error}</div> ` : ""}
|
||||
<div class="card-content">
|
||||
${this._content
|
||||
? html`<ha-markdown .content=${this._content}></ha-markdown>`
|
||||
: html`<loading-screen></loading-screen>`}
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
@@ -58,7 +56,7 @@ class HassioAddonDocumentationDashboard extends LitElement {
|
||||
haStyle,
|
||||
hassioStyle,
|
||||
css`
|
||||
paper-card {
|
||||
ha-card {
|
||||
display: block;
|
||||
}
|
||||
.content {
|
||||
|
@@ -1,4 +1,9 @@
|
||||
import "../../../src/components/ha-icon-button";
|
||||
import {
|
||||
mdiCogs,
|
||||
mdiFileDocument,
|
||||
mdiInformationVariant,
|
||||
mdiMathLog,
|
||||
} from "@mdi/js";
|
||||
import "@polymer/paper-spinner/paper-spinner-lite";
|
||||
import {
|
||||
css,
|
||||
@@ -14,18 +19,17 @@ import {
|
||||
fetchHassioAddonInfo,
|
||||
HassioAddonDetails,
|
||||
} from "../../../src/data/hassio/addon";
|
||||
import "../../../src/layouts/hass-tabs-subpage";
|
||||
import type { PageNavigation } from "../../../src/layouts/hass-tabs-subpage";
|
||||
import { haStyle } from "../../../src/resources/styles";
|
||||
import { HomeAssistant, Route } from "../../../src/types";
|
||||
import { hassioStyle } from "../resources/hassio-style";
|
||||
import "./config/hassio-addon-audio";
|
||||
import "./config/hassio-addon-config";
|
||||
import "./config/hassio-addon-network";
|
||||
import "./hassio-addon-router";
|
||||
import "./info/hassio-addon-info";
|
||||
import "./log/hassio-addon-logs";
|
||||
import "./config/hassio-addon-network";
|
||||
import type { PageNavigation } from "../../../src/layouts/hass-tabs-subpage";
|
||||
import "../../../src/layouts/hass-tabs-subpage";
|
||||
|
||||
import "./hassio-addon-router";
|
||||
|
||||
@customElement("hassio-addon-dashboard")
|
||||
class HassioAddonDashboard extends LitElement {
|
||||
@@ -59,7 +63,7 @@ class HassioAddonDashboard extends LitElement {
|
||||
{
|
||||
name: "Info",
|
||||
path: `/hassio/addon/${this.addon.slug}/info`,
|
||||
icon: "hassio:information-variant",
|
||||
iconPath: mdiInformationVariant,
|
||||
},
|
||||
];
|
||||
|
||||
@@ -67,7 +71,7 @@ class HassioAddonDashboard extends LitElement {
|
||||
addonTabs.push({
|
||||
name: "Documentation",
|
||||
path: `/hassio/addon/${this.addon.slug}/documentation`,
|
||||
icon: "hassio:file-document",
|
||||
iconPath: mdiFileDocument,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -76,12 +80,12 @@ class HassioAddonDashboard extends LitElement {
|
||||
{
|
||||
name: "Configuration",
|
||||
path: `/hassio/addon/${this.addon.slug}/config`,
|
||||
icon: "hassio:cogs",
|
||||
iconPath: mdiCogs,
|
||||
},
|
||||
{
|
||||
name: "Log",
|
||||
path: `/hassio/addon/${this.addon.slug}/logs`,
|
||||
icon: "hassio:math-log",
|
||||
iconPath: mdiMathLog,
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -115,7 +119,6 @@ class HassioAddonDashboard extends LitElement {
|
||||
css`
|
||||
:host {
|
||||
color: var(--primary-text-color);
|
||||
--paper-card-header-color: var(--primary-text-color);
|
||||
}
|
||||
.content {
|
||||
padding: 24px 0 32px;
|
||||
|
@@ -1,15 +1,15 @@
|
||||
import { customElement, property } from "lit-element";
|
||||
import { HassioAddonDetails } from "../../../src/data/hassio/addon";
|
||||
import {
|
||||
HassRouterPage,
|
||||
RouterOptions,
|
||||
} from "../../../src/layouts/hass-router-page";
|
||||
import { customElement, property } from "lit-element";
|
||||
import { HomeAssistant } from "../../../src/types";
|
||||
import "./config/hassio-addon-config-tab";
|
||||
import "./documentation/hassio-addon-documentation-tab";
|
||||
// Don't codesplit the others, because it breaks the UI when pushed to a Pi
|
||||
import "./info/hassio-addon-info-tab";
|
||||
import "./config/hassio-addon-config-tab";
|
||||
import "./log/hassio-addon-log-tab";
|
||||
import "./documentation/hassio-addon-documentation-tab";
|
||||
import { HassioAddonDetails } from "../../../src/data/hassio/addon";
|
||||
|
||||
@customElement("hassio-addon-router")
|
||||
class HassioAddonRouter extends HassRouterPage {
|
||||
|
@@ -8,12 +8,10 @@ import {
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
|
||||
import { HomeAssistant } from "../../../../src/types";
|
||||
import { HassioAddonDetails } from "../../../../src/data/hassio/addon";
|
||||
import { hassioStyle } from "../../resources/hassio-style";
|
||||
import { haStyle } from "../../../../src/resources/styles";
|
||||
|
||||
import { HomeAssistant } from "../../../../src/types";
|
||||
import { hassioStyle } from "../../resources/hassio-style";
|
||||
import "./hassio-addon-info";
|
||||
|
||||
@customElement("hassio-addon-info-tab")
|
||||
|
@@ -1,5 +1,20 @@
|
||||
import "@material/mwc-button";
|
||||
import "@polymer/paper-card/paper-card";
|
||||
import {
|
||||
mdiArrowUpBoldCircle,
|
||||
mdiCheckCircle,
|
||||
mdiChip,
|
||||
mdiCircle,
|
||||
mdiCursorDefaultClickOutline,
|
||||
mdiDocker,
|
||||
mdiExclamationThick,
|
||||
mdiFlask,
|
||||
mdiHomeAssistant,
|
||||
mdiInformation,
|
||||
mdiKey,
|
||||
mdiNetwork,
|
||||
mdiPound,
|
||||
mdiShield,
|
||||
} from "@mdi/js";
|
||||
import "@polymer/paper-tooltip/paper-tooltip";
|
||||
import {
|
||||
css,
|
||||
@@ -16,10 +31,11 @@ import { fireEvent } from "../../../../src/common/dom/fire_event";
|
||||
import { navigate } from "../../../../src/common/navigate";
|
||||
import "../../../../src/components/buttons/ha-call-api-button";
|
||||
import "../../../../src/components/buttons/ha-progress-button";
|
||||
import "../../../../src/components/ha-card";
|
||||
import "../../../../src/components/ha-label-badge";
|
||||
import "../../../../src/components/ha-markdown";
|
||||
import "../../../../src/components/ha-svg-icon";
|
||||
import "../../../../src/components/ha-switch";
|
||||
import "../../../../src/components/ha-icon";
|
||||
import {
|
||||
fetchHassioAddonChangelog,
|
||||
HassioAddonDetails,
|
||||
@@ -30,23 +46,23 @@ import {
|
||||
setHassioAddonSecurity,
|
||||
uninstallHassioAddon,
|
||||
} from "../../../../src/data/hassio/addon";
|
||||
import { showConfirmationDialog } from "../../../../src/dialogs/generic/show-dialog-box";
|
||||
import { haStyle } from "../../../../src/resources/styles";
|
||||
import { HomeAssistant } from "../../../../src/types";
|
||||
import "../../components/hassio-card-content";
|
||||
import { showHassioMarkdownDialog } from "../../dialogs/markdown/show-dialog-hassio-markdown";
|
||||
import { hassioStyle } from "../../resources/hassio-style";
|
||||
import { showConfirmationDialog } from "../../../../src/dialogs/generic/show-dialog-box";
|
||||
|
||||
const STAGE_ICON = {
|
||||
stable: "mdi:check-circle",
|
||||
experimental: "mdi:flask",
|
||||
deprecated: "mdi:exclamation-thick",
|
||||
stable: mdiCheckCircle,
|
||||
experimental: mdiFlask,
|
||||
deprecated: mdiExclamationThick,
|
||||
};
|
||||
|
||||
const PERMIS_DESC = {
|
||||
stage: {
|
||||
title: "Add-on Stage",
|
||||
description: `Add-ons can have one of three stages:\n\n<ha-icon icon='${STAGE_ICON.stable}'></ha-icon>**Stable**: These are add-ons ready to be used in production.\n<ha-icon icon='${STAGE_ICON.experimental}'></ha-icon>**Experimental**: These may contain bugs, and may be unfinished.\n<ha-icon icon='${STAGE_ICON.deprecated}'></ha-icon>**Deprecated**: These add-ons will no longer receive any updates.`,
|
||||
description: `Add-ons can have one of three stages:\n\n<ha-svg-icon path='${STAGE_ICON.stable}'></ha-svg-icon> **Stable**: These are add-ons ready to be used in production.\n\n<ha-svg-icon path='${STAGE_ICON.experimental}'></ha-svg-icon> **Experimental**: These may contain bugs, and may be unfinished.\n\n<ha-svg-icon path='${STAGE_ICON.deprecated}'></ha-svg-icon> **Deprecated**: These add-ons will no longer receive any updates.`,
|
||||
},
|
||||
rating: {
|
||||
title: "Add-on Security Rating",
|
||||
@@ -116,7 +132,7 @@ class HassioAddonInfo extends LitElement {
|
||||
return html`
|
||||
${this._computeUpdateAvailable
|
||||
? html`
|
||||
<paper-card heading="Update available! 🎉">
|
||||
<ha-card header="Update available! 🎉">
|
||||
<div class="card-content">
|
||||
<hassio-card-content
|
||||
.hass=${this.hass}
|
||||
@@ -124,7 +140,7 @@ class HassioAddonInfo extends LitElement {
|
||||
.version_latest} is available"
|
||||
.description="You are currently running version ${this.addon
|
||||
.version}"
|
||||
icon="hassio:arrow-up-bold-circle"
|
||||
icon=${mdiArrowUpBoldCircle}
|
||||
iconClass="update"
|
||||
></hassio-card-content>
|
||||
${!this.addon.available
|
||||
@@ -151,12 +167,13 @@ class HassioAddonInfo extends LitElement {
|
||||
`
|
||||
: ""}
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`
|
||||
: ""}
|
||||
${!this.addon.protected
|
||||
? html`
|
||||
<paper-card heading="Warning: Protection mode is disabled!" class="warning">
|
||||
<ha-card class="warning">
|
||||
<div class="card-header">Warning: Protection mode is disabled!</div>
|
||||
<div class="card-content">
|
||||
Protection mode on this add-on is disabled! This gives the add-on full access to the entire system, which adds security risks, and could damage your system when used incorrectly. Only disable the protection mode if you know, need AND trust the source of this add-on.
|
||||
</div>
|
||||
@@ -164,11 +181,11 @@ class HassioAddonInfo extends LitElement {
|
||||
<mwc-button @click=${this._protectionToggled}>Enable Protection mode</mwc-button>
|
||||
</div>
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`
|
||||
: ""}
|
||||
|
||||
<paper-card>
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
<div class="addon-header">
|
||||
${!this.narrow ? this.addon.name : ""}
|
||||
@@ -177,18 +194,18 @@ class HassioAddonInfo extends LitElement {
|
||||
? html`
|
||||
${this._computeIsRunning
|
||||
? html`
|
||||
<ha-icon
|
||||
<ha-svg-icon
|
||||
title="Add-on is running"
|
||||
class="running"
|
||||
icon="hassio:circle"
|
||||
></ha-icon>
|
||||
path=${mdiCircle}
|
||||
></ha-svg-icon>
|
||||
`
|
||||
: html`
|
||||
<ha-icon
|
||||
<ha-svg-icon
|
||||
title="Add-on is stopped"
|
||||
class="stopped"
|
||||
icon="hassio:circle"
|
||||
></ha-icon>
|
||||
path=${mdiCircle}
|
||||
></ha-svg-icon>
|
||||
`}
|
||||
`
|
||||
: html` ${this.addon.version_latest} `}
|
||||
@@ -232,10 +249,11 @@ class HassioAddonInfo extends LitElement {
|
||||
})}
|
||||
@click=${this._showMoreInfo}
|
||||
id="stage"
|
||||
.icon=${STAGE_ICON[this.addon.stage]}
|
||||
label="stage"
|
||||
description=""
|
||||
></ha-label-badge>
|
||||
>
|
||||
<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)),
|
||||
@@ -253,10 +271,11 @@ class HassioAddonInfo extends LitElement {
|
||||
<ha-label-badge
|
||||
@click=${this._showMoreInfo}
|
||||
id="host_network"
|
||||
icon="hassio:network"
|
||||
label="host"
|
||||
description=""
|
||||
></ha-label-badge>
|
||||
>
|
||||
<ha-svg-icon path=${mdiNetwork}></ha-svg-icon>
|
||||
</ha-label-badge>
|
||||
`
|
||||
: ""}
|
||||
${this.addon.full_access
|
||||
@@ -264,10 +283,11 @@ class HassioAddonInfo extends LitElement {
|
||||
<ha-label-badge
|
||||
@click=${this._showMoreInfo}
|
||||
id="full_access"
|
||||
icon="hassio:chip"
|
||||
label="hardware"
|
||||
description=""
|
||||
></ha-label-badge>
|
||||
>
|
||||
<ha-svg-icon path=${mdiChip}></ha-svg-icon>
|
||||
</ha-label-badge>
|
||||
`
|
||||
: ""}
|
||||
${this.addon.homeassistant_api
|
||||
@@ -275,10 +295,11 @@ class HassioAddonInfo extends LitElement {
|
||||
<ha-label-badge
|
||||
@click=${this._showMoreInfo}
|
||||
id="homeassistant_api"
|
||||
icon="hassio:home-assistant"
|
||||
label="hass"
|
||||
description=""
|
||||
></ha-label-badge>
|
||||
>
|
||||
<ha-svg-icon path=${mdiHomeAssistant}></ha-svg-icon>
|
||||
</ha-label-badge>
|
||||
`
|
||||
: ""}
|
||||
${this._computeHassioApi
|
||||
@@ -286,10 +307,11 @@ class HassioAddonInfo extends LitElement {
|
||||
<ha-label-badge
|
||||
@click=${this._showMoreInfo}
|
||||
id="hassio_api"
|
||||
icon="hassio:home-assistant"
|
||||
label="hassio"
|
||||
.description=${this.addon.hassio_role}
|
||||
></ha-label-badge>
|
||||
>
|
||||
<ha-svg-icon path=${mdiHomeAssistant}></ha-svg-icon>
|
||||
</ha-label-badge>
|
||||
`
|
||||
: ""}
|
||||
${this.addon.docker_api
|
||||
@@ -297,10 +319,11 @@ class HassioAddonInfo extends LitElement {
|
||||
<ha-label-badge
|
||||
@click=${this._showMoreInfo}
|
||||
id="docker_api"
|
||||
icon="hassio:docker"
|
||||
label="docker"
|
||||
description=""
|
||||
></ha-label-badge>
|
||||
>
|
||||
<ha-svg-icon path=${mdiDocker}></ha-svg-icon>
|
||||
</ha-label-badge>
|
||||
`
|
||||
: ""}
|
||||
${this.addon.host_pid
|
||||
@@ -308,10 +331,11 @@ class HassioAddonInfo extends LitElement {
|
||||
<ha-label-badge
|
||||
@click=${this._showMoreInfo}
|
||||
id="host_pid"
|
||||
icon="hassio:pound"
|
||||
label="host pid"
|
||||
description=""
|
||||
></ha-label-badge>
|
||||
>
|
||||
<ha-svg-icon path=${mdiPound}></ha-svg-icon>
|
||||
</ha-label-badge>
|
||||
`
|
||||
: ""}
|
||||
${this.addon.apparmor
|
||||
@@ -320,10 +344,11 @@ class HassioAddonInfo extends LitElement {
|
||||
@click=${this._showMoreInfo}
|
||||
class=${this._computeApparmorClassName}
|
||||
id="apparmor"
|
||||
icon="hassio:shield"
|
||||
label="apparmor"
|
||||
description=""
|
||||
></ha-label-badge>
|
||||
>
|
||||
<ha-svg-icon path=${mdiShield}></ha-svg-icon>
|
||||
</ha-label-badge>
|
||||
`
|
||||
: ""}
|
||||
${this.addon.auth_api
|
||||
@@ -331,10 +356,11 @@ class HassioAddonInfo extends LitElement {
|
||||
<ha-label-badge
|
||||
@click=${this._showMoreInfo}
|
||||
id="auth_api"
|
||||
icon="hassio:key"
|
||||
label="auth"
|
||||
description=""
|
||||
></ha-label-badge>
|
||||
>
|
||||
<ha-svg-icon path=${mdiKey}></ha-svg-icon>
|
||||
</ha-label-badge>
|
||||
`
|
||||
: ""}
|
||||
${this.addon.ingress
|
||||
@@ -342,10 +368,13 @@ class HassioAddonInfo extends LitElement {
|
||||
<ha-label-badge
|
||||
@click=${this._showMoreInfo}
|
||||
id="ingress"
|
||||
icon="hassio:cursor-default-click-outline"
|
||||
label="ingress"
|
||||
description=""
|
||||
></ha-label-badge>
|
||||
>
|
||||
<ha-svg-icon
|
||||
path=${mdiCursorDefaultClickOutline}
|
||||
></ha-svg-icon>
|
||||
</ha-label-badge>
|
||||
`
|
||||
: ""}
|
||||
</div>
|
||||
@@ -399,7 +428,7 @@ class HassioAddonInfo extends LitElement {
|
||||
<div>
|
||||
Protection mode
|
||||
<span>
|
||||
<ha-icon icon="hassio:information"></ha-icon>
|
||||
<ha-svg-icon path=${mdiInformation}></ha-svg-icon>
|
||||
<paper-tooltip>
|
||||
Grant the add-on elevated system access.
|
||||
</paper-tooltip>
|
||||
@@ -502,17 +531,17 @@ class HassioAddonInfo extends LitElement {
|
||||
</ha-progress-button>
|
||||
`}
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
|
||||
${this.addon.long_description
|
||||
? html`
|
||||
<paper-card>
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
<ha-markdown
|
||||
.content=${this.addon.long_description}
|
||||
></ha-markdown>
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`
|
||||
: ""}
|
||||
`;
|
||||
@@ -526,16 +555,21 @@ class HassioAddonInfo extends LitElement {
|
||||
:host {
|
||||
display: block;
|
||||
}
|
||||
paper-card {
|
||||
ha-card {
|
||||
display: block;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
paper-card.warning {
|
||||
ha-card.warning {
|
||||
background-color: var(--google-red-500);
|
||||
color: white;
|
||||
--paper-card-header-color: white;
|
||||
}
|
||||
paper-card.warning mwc-button {
|
||||
ha-card.warning .card-header {
|
||||
color: white;
|
||||
}
|
||||
ha-card.warning .card-content {
|
||||
color: white;
|
||||
}
|
||||
ha-card.warning mwc-button {
|
||||
--mdc-theme-primary: white !important;
|
||||
}
|
||||
.warning {
|
||||
@@ -548,7 +582,7 @@ class HassioAddonInfo extends LitElement {
|
||||
.addon-header {
|
||||
padding-left: 8px;
|
||||
font-size: 24px;
|
||||
color: var(--paper-card-header-color, --primary-text-color);
|
||||
color: var(--ha-card-header-color, --primary-text-color);
|
||||
}
|
||||
.addon-version {
|
||||
float: right;
|
||||
@@ -575,7 +609,7 @@ class HassioAddonInfo extends LitElement {
|
||||
width: 180px;
|
||||
display: inline-block;
|
||||
}
|
||||
.state ha-icon {
|
||||
.state ha-svg-icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
color: var(--secondary-text-color);
|
||||
@@ -583,10 +617,10 @@ class HassioAddonInfo extends LitElement {
|
||||
ha-switch {
|
||||
display: flex;
|
||||
}
|
||||
ha-icon.running {
|
||||
ha-svg-icon.running {
|
||||
color: var(--paper-green-400);
|
||||
}
|
||||
ha-icon.stopped {
|
||||
ha-svg-icon.stopped {
|
||||
color: var(--google-red-300);
|
||||
}
|
||||
ha-call-api-button {
|
||||
@@ -664,7 +698,7 @@ class HassioAddonInfo extends LitElement {
|
||||
}
|
||||
|
||||
private _showMoreInfo(ev): void {
|
||||
const id = ev.target.getAttribute("id");
|
||||
const id = ev.currentTarget.id;
|
||||
showHassioMarkdownDialog(this, {
|
||||
title: PERMIS_DESC[id].title,
|
||||
content: PERMIS_DESC[id].description,
|
||||
|
@@ -1,5 +1,4 @@
|
||||
import "@polymer/paper-spinner/paper-spinner-lite";
|
||||
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -9,12 +8,10 @@ import {
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
|
||||
import { HomeAssistant } from "../../../../src/types";
|
||||
import { HassioAddonDetails } from "../../../../src/data/hassio/addon";
|
||||
import { hassioStyle } from "../../resources/hassio-style";
|
||||
import { haStyle } from "../../../../src/resources/styles";
|
||||
|
||||
import { HomeAssistant } from "../../../../src/types";
|
||||
import { hassioStyle } from "../../resources/hassio-style";
|
||||
import "./hassio-addon-logs";
|
||||
|
||||
@customElement("hassio-addon-log-tab")
|
||||
|
@@ -1,5 +1,4 @@
|
||||
import "@material/mwc-button";
|
||||
import "@polymer/paper-card/paper-card";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -9,6 +8,7 @@ import {
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import "../../../../src/components/ha-card";
|
||||
import {
|
||||
fetchHassioAddonLogs,
|
||||
HassioAddonDetails,
|
||||
@@ -36,7 +36,7 @@ class HassioAddonLogs extends LitElement {
|
||||
protected render(): TemplateResult {
|
||||
return html`
|
||||
<h1>${this.addon.name}</h1>
|
||||
<paper-card>
|
||||
<ha-card>
|
||||
${this._error ? html` <div class="errors">${this._error}</div> ` : ""}
|
||||
<div class="card-content">
|
||||
${this._content
|
||||
@@ -48,7 +48,7 @@ class HassioAddonLogs extends LitElement {
|
||||
<div class="card-actions">
|
||||
<mwc-button @click=${this._refresh}>Refresh</mwc-button>
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ class HassioAddonLogs extends LitElement {
|
||||
hassioStyle,
|
||||
css`
|
||||
:host,
|
||||
paper-card {
|
||||
ha-card {
|
||||
display: block;
|
||||
}
|
||||
.errors {
|
||||
|
@@ -1,3 +1,4 @@
|
||||
import { mdiHelpCircle } from "@mdi/js";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -8,7 +9,7 @@ import {
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import "../../../src/components/ha-relative-time";
|
||||
import "../../../src/components/ha-icon";
|
||||
import "../../../src/components/ha-svg-icon";
|
||||
import { HomeAssistant } from "../../../src/types";
|
||||
|
||||
@customElement("hassio-card-content")
|
||||
@@ -31,7 +32,7 @@ class HassioCardContent extends LitElement {
|
||||
|
||||
@property() public iconClass?: string;
|
||||
|
||||
@property() public icon = "hass:help-circle";
|
||||
@property() public icon = mdiHelpCircle;
|
||||
|
||||
@property() public iconImage?: string;
|
||||
|
||||
@@ -48,11 +49,11 @@ class HassioCardContent extends LitElement {
|
||||
</div>
|
||||
`
|
||||
: html`
|
||||
<ha-icon
|
||||
<ha-svg-icon
|
||||
class=${this.iconClass}
|
||||
.icon=${this.icon}
|
||||
.path=${this.icon}
|
||||
.title=${this.iconTitle}
|
||||
></ha-icon>
|
||||
></ha-svg-icon>
|
||||
`}
|
||||
<div>
|
||||
<div class="title">
|
||||
@@ -78,25 +79,25 @@ class HassioCardContent extends LitElement {
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
ha-icon {
|
||||
ha-svg-icon {
|
||||
margin-right: 24px;
|
||||
margin-left: 8px;
|
||||
margin-top: 12px;
|
||||
float: left;
|
||||
color: var(--secondary-text-color);
|
||||
}
|
||||
ha-icon.update {
|
||||
ha-svg-icon.update {
|
||||
color: var(--paper-orange-400);
|
||||
}
|
||||
ha-icon.running,
|
||||
ha-icon.installed {
|
||||
ha-svg-icon.running,
|
||||
ha-svg-icon.installed {
|
||||
color: var(--paper-green-400);
|
||||
}
|
||||
ha-icon.hassupdate,
|
||||
ha-icon.snapshot {
|
||||
ha-svg-icon.hassupdate,
|
||||
ha-svg-icon.snapshot {
|
||||
color: var(--paper-item-icon-color);
|
||||
}
|
||||
ha-icon.not_available {
|
||||
ha-svg-icon.not_available {
|
||||
color: var(--google-red-500);
|
||||
}
|
||||
.title {
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import "@polymer/paper-card/paper-card";
|
||||
import { mdiArrowUpBoldCircle, mdiPuzzle } from "@mdi/js";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
} from "lit-element";
|
||||
import { atLeastVersion } from "../../../src/common/config/version";
|
||||
import { navigate } from "../../../src/common/navigate";
|
||||
import "../../../src/components/ha-card";
|
||||
import { HassioAddonInfo } from "../../../src/data/hassio/addon";
|
||||
import { haStyle } from "../../../src/resources/styles";
|
||||
import { HomeAssistant } from "../../../src/types";
|
||||
@@ -29,19 +30,19 @@ class HassioAddons extends LitElement {
|
||||
<div class="card-group">
|
||||
${!this.addons
|
||||
? html`
|
||||
<paper-card>
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
You don't have any add-ons installed yet. Head over to
|
||||
<a href="#" @click=${this._openStore}>the add-on store</a>
|
||||
to get started!
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`
|
||||
: this.addons
|
||||
.sort((a, b) => (a.name > b.name ? 1 : -1))
|
||||
.map(
|
||||
(addon) => html`
|
||||
<paper-card .addon=${addon} @click=${this._addonTapped}>
|
||||
<ha-card .addon=${addon} @click=${this._addonTapped}>
|
||||
<div class="card-content">
|
||||
<hassio-card-content
|
||||
.hass=${this.hass}
|
||||
@@ -51,8 +52,8 @@ class HassioAddons extends LitElement {
|
||||
.showTopbar=${addon.installed !== addon.version}
|
||||
topbarClass="update"
|
||||
.icon=${addon.installed !== addon.version
|
||||
? "hassio:arrow-up-bold-circle"
|
||||
: "hassio:puzzle"}
|
||||
? mdiArrowUpBoldCircle
|
||||
: mdiPuzzle}
|
||||
.iconTitle=${addon.state !== "started"
|
||||
? "Add-on is stopped"
|
||||
: addon.installed !== addon.version
|
||||
@@ -75,7 +76,7 @@ class HassioAddons extends LitElement {
|
||||
: undefined}
|
||||
></hassio-card-content>
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`
|
||||
)}
|
||||
</div>
|
||||
@@ -88,7 +89,7 @@ class HassioAddons extends LitElement {
|
||||
haStyle,
|
||||
hassioStyle,
|
||||
css`
|
||||
paper-card {
|
||||
ha-card {
|
||||
cursor: pointer;
|
||||
}
|
||||
`,
|
||||
|
@@ -12,14 +12,13 @@ import {
|
||||
HassioHomeAssistantInfo,
|
||||
HassioSupervisorInfo,
|
||||
} from "../../../src/data/hassio/supervisor";
|
||||
import "../../../src/layouts/hass-tabs-subpage";
|
||||
import { haStyle } from "../../../src/resources/styles";
|
||||
import { HomeAssistant, Route } from "../../../src/types";
|
||||
import "../../../src/layouts/hass-tabs-subpage";
|
||||
import { supervisorTabs } from "../hassio-panel";
|
||||
import "./hassio-addons";
|
||||
import "./hassio-update";
|
||||
|
||||
import { supervisorTabs } from "../hassio-panel";
|
||||
|
||||
@customElement("hassio-dashboard")
|
||||
class HassioDashboard extends LitElement {
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import "@material/mwc-button";
|
||||
import "@polymer/paper-card/paper-card";
|
||||
import { mdiHomeAssistant } from "@mdi/js";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -10,15 +10,15 @@ import {
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import "../../../src/components/buttons/ha-call-api-button";
|
||||
import "../../../src/components/ha-card";
|
||||
import "../../../src/components/ha-svg-icon";
|
||||
import { HassioHassOSInfo } from "../../../src/data/hassio/host";
|
||||
import {
|
||||
HassioHomeAssistantInfo,
|
||||
HassioSupervisorInfo,
|
||||
} from "../../../src/data/hassio/supervisor";
|
||||
import { haStyle } from "../../../src/resources/styles";
|
||||
import "../../../src/components/ha-icon";
|
||||
import { HomeAssistant } from "../../../src/types";
|
||||
import "../components/hassio-card-content";
|
||||
import { hassioStyle } from "../resources/hassio-style";
|
||||
|
||||
@customElement("hassio-update")
|
||||
@@ -72,7 +72,7 @@ export class HassioUpdate extends LitElement {
|
||||
`https://${
|
||||
this.hassInfo.version_latest.includes("b") ? "rc" : "www"
|
||||
}.home-assistant.io/latest-release-notes/`,
|
||||
"hassio:home-assistant"
|
||||
mdiHomeAssistant
|
||||
)}
|
||||
${this._renderUpdateCard(
|
||||
"Supervisor",
|
||||
@@ -107,12 +107,12 @@ export class HassioUpdate extends LitElement {
|
||||
return html``;
|
||||
}
|
||||
return html`
|
||||
<paper-card>
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
${icon
|
||||
? html`
|
||||
<div class="icon">
|
||||
<ha-icon .icon=${icon}></ha-icon>
|
||||
<ha-svg-icon .path=${icon}></ha-svg-icon>
|
||||
</div>
|
||||
`
|
||||
: ""}
|
||||
@@ -133,7 +133,7 @@ export class HassioUpdate extends LitElement {
|
||||
Update
|
||||
</ha-call-api-button>
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`;
|
||||
}
|
||||
|
||||
|
@@ -1,7 +1,3 @@
|
||||
import "@polymer/app-layout/app-toolbar/app-toolbar";
|
||||
import { PaperDialogElement } from "@polymer/paper-dialog";
|
||||
import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable";
|
||||
import "../../../../src/components/ha-icon-button";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -9,46 +5,50 @@ import {
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
query,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import "../../../../src/components/dialog/ha-paper-dialog";
|
||||
import { createCloseHeading } from "../../../../src/components/ha-dialog";
|
||||
import "../../../../src/components/ha-markdown";
|
||||
import { haStyleDialog } from "../../../../src/resources/styles";
|
||||
import { HomeAssistant } from "../../../../src/types";
|
||||
import { hassioStyle } from "../../resources/hassio-style";
|
||||
import { HassioMarkdownDialogParams } from "./show-dialog-hassio-markdown";
|
||||
|
||||
@customElement("dialog-hassio-markdown")
|
||||
class HassioMarkdownDialog extends LitElement {
|
||||
@property() public hass!: HomeAssistant;
|
||||
|
||||
@property() public title!: string;
|
||||
|
||||
@property() public content!: string;
|
||||
|
||||
@query("#dialog") private _dialog!: PaperDialogElement;
|
||||
@property() private _opened = false;
|
||||
|
||||
public showDialog(params: HassioMarkdownDialogParams) {
|
||||
this.title = params.title;
|
||||
this.content = params.content;
|
||||
this._dialog.open();
|
||||
this._opened = true;
|
||||
}
|
||||
|
||||
protected render(): TemplateResult {
|
||||
if (!this._opened) {
|
||||
return html``;
|
||||
}
|
||||
return html`
|
||||
<ha-paper-dialog id="dialog" with-backdrop="">
|
||||
<app-toolbar>
|
||||
<ha-icon-button
|
||||
icon="hassio:close"
|
||||
dialog-dismiss=""
|
||||
></ha-icon-button>
|
||||
<div main-title="">${this.title}</div>
|
||||
</app-toolbar>
|
||||
<paper-dialog-scrollable>
|
||||
<ha-markdown .content=${this.content || ""}></ha-markdown>
|
||||
</paper-dialog-scrollable>
|
||||
</ha-paper-dialog>
|
||||
<ha-dialog
|
||||
open
|
||||
@closing=${this._closeDialog}
|
||||
.heading=${createCloseHeading(this.hass, this.title)}
|
||||
>
|
||||
<ha-markdown .content=${this.content || ""}></ha-markdown>
|
||||
</ha-dialog>
|
||||
`;
|
||||
}
|
||||
|
||||
private _closeDialog(): void {
|
||||
this._opened = false;
|
||||
}
|
||||
|
||||
static get styles(): CSSResult[] {
|
||||
return [
|
||||
haStyleDialog,
|
||||
|
@@ -1,9 +1,11 @@
|
||||
import "@material/mwc-button/mwc-button";
|
||||
import "@material/mwc-icon-button/mwc-icon-button";
|
||||
import { mdiDelete } from "@mdi/js";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import "@polymer/paper-spinner/paper-spinner";
|
||||
import type { PaperInputElement } from "@polymer/paper-input/paper-input";
|
||||
import "@polymer/paper-item/paper-item";
|
||||
import "@polymer/paper-item/paper-item-body";
|
||||
import "@polymer/paper-spinner/paper-spinner";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -16,16 +18,14 @@ import {
|
||||
} from "lit-element";
|
||||
import memoizeOne from "memoize-one";
|
||||
import "../../../../src/components/ha-dialog";
|
||||
import "../../../../src/components/ha-icon-button";
|
||||
|
||||
import "../../../../src/components/ha-svg-icon";
|
||||
import {
|
||||
fetchHassioAddonsInfo,
|
||||
HassioAddonRepository,
|
||||
} from "../../../../src/data/hassio/addon";
|
||||
import { setSupervisorOption } from "../../../../src/data/hassio/supervisor";
|
||||
import { haStyle, haStyleDialog } from "../../../../src/resources/styles";
|
||||
import type { HomeAssistant } from "../../../../src/types";
|
||||
import {
|
||||
HassioAddonRepository,
|
||||
fetchHassioAddonsInfo,
|
||||
} from "../../../../src/data/hassio/addon";
|
||||
|
||||
import { setSupervisorOption } from "../../../../src/data/hassio/supervisor";
|
||||
import { HassioRepositoryDialogParams } from "./show-dialog-repositories";
|
||||
|
||||
@customElement("dialog-hassio-repositories")
|
||||
@@ -84,12 +84,13 @@ class HassioRepositoriesDialog extends LitElement {
|
||||
<div secondary>${repo.maintainer}</div>
|
||||
<div secondary>${repo.url}</div>
|
||||
</paper-item-body>
|
||||
<ha-icon-button
|
||||
<mwc-icon-button
|
||||
.slug=${repo.slug}
|
||||
title="Remove"
|
||||
@click=${this._removeRepository}
|
||||
icon="hassio:delete"
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-svg-icon path=${mdiDelete}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
</paper-item>
|
||||
`;
|
||||
})
|
||||
@@ -194,7 +195,7 @@ class HassioRepositoriesDialog extends LitElement {
|
||||
}
|
||||
|
||||
private async _removeRepository(ev: Event) {
|
||||
const slug = (ev.target as any).slug;
|
||||
const slug = (ev.currentTarget as any).slug;
|
||||
const repositories = this._filteredRepositories(this._repos);
|
||||
const repository = repositories.find((repo) => {
|
||||
return repo.slug === slug;
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import { fireEvent } from "../../../../src/common/dom/fire_event";
|
||||
import "./dialog-hassio-repositories";
|
||||
import { HassioAddonRepository } from "../../../../src/data/hassio/addon";
|
||||
import "./dialog-hassio-repositories";
|
||||
|
||||
export interface HassioRepositoryDialogParams {
|
||||
repos: HassioAddonRepository[];
|
||||
|
@@ -1,10 +1,6 @@
|
||||
import "@material/mwc-button";
|
||||
import "@polymer/app-layout/app-toolbar/app-toolbar";
|
||||
import { mdiDelete, mdiDownload, mdiHistory } from "@mdi/js";
|
||||
import { PaperCheckboxElement } from "@polymer/paper-checkbox/paper-checkbox";
|
||||
import { PaperDialogElement } from "@polymer/paper-dialog";
|
||||
import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable";
|
||||
import "../../../../src/components/ha-icon-button";
|
||||
import "../../../../src/components/ha-icon";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import {
|
||||
css,
|
||||
@@ -13,10 +9,10 @@ import {
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
query,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import "../../../../src/components/dialog/ha-paper-dialog";
|
||||
import { createCloseHeading } from "../../../../src/components/ha-dialog";
|
||||
import "../../../../src/components/ha-svg-icon";
|
||||
import { getSignedPath } from "../../../../src/data/auth";
|
||||
import {
|
||||
fetchHassioSnapshotInfo,
|
||||
@@ -76,7 +72,7 @@ class HassioSnapshotDialog extends LitElement {
|
||||
|
||||
@property() private _error?: string;
|
||||
|
||||
@property() private snapshot?: HassioSnapshotDetail;
|
||||
@property() private _snapshot?: HassioSnapshotDetail;
|
||||
|
||||
@property() private _folders!: FolderItem[];
|
||||
|
||||
@@ -88,49 +84,35 @@ class HassioSnapshotDialog extends LitElement {
|
||||
|
||||
@property() private _restoreHass: boolean | null | undefined = true;
|
||||
|
||||
@query("#dialog") private _dialog!: PaperDialogElement;
|
||||
|
||||
public async showDialog(params: HassioSnapshotDialogParams) {
|
||||
this.snapshot = await fetchHassioSnapshotInfo(this.hass, params.slug);
|
||||
this._snapshot = await fetchHassioSnapshotInfo(this.hass, params.slug);
|
||||
this._folders = _computeFolders(
|
||||
this.snapshot.folders
|
||||
this._snapshot.folders
|
||||
).sort((a: FolderItem, b: FolderItem) => (a.name > b.name ? 1 : -1));
|
||||
this._addons = _computeAddons(
|
||||
this.snapshot.addons
|
||||
this._snapshot.addons
|
||||
).sort((a: AddonItem, b: AddonItem) => (a.name > b.name ? 1 : -1));
|
||||
|
||||
this._dialogParams = params;
|
||||
|
||||
try {
|
||||
this._dialog.open();
|
||||
} catch {
|
||||
await this.showDialog(params);
|
||||
}
|
||||
}
|
||||
|
||||
protected render(): TemplateResult {
|
||||
if (!this.snapshot) {
|
||||
if (!this._dialogParams || !this._snapshot) {
|
||||
return html``;
|
||||
}
|
||||
return html`
|
||||
<ha-paper-dialog
|
||||
id="dialog"
|
||||
with-backdrop=""
|
||||
.on-iron-overlay-closed=${this._dialogClosed}
|
||||
<ha-dialog
|
||||
open
|
||||
stacked
|
||||
@closing=${this._closeDialog}
|
||||
.heading=${createCloseHeading(this.hass, this._computeName)}
|
||||
>
|
||||
<app-toolbar>
|
||||
<ha-icon-button
|
||||
icon="hassio:close"
|
||||
dialog-dismiss=""
|
||||
></ha-icon-button>
|
||||
<div main-title="">${this._computeName}</div>
|
||||
</app-toolbar>
|
||||
<div class="details">
|
||||
${this.snapshot.type === "full"
|
||||
${this._snapshot.type === "full"
|
||||
? "Full snapshot"
|
||||
: "Partial snapshot"}
|
||||
(${this._computeSize})<br />
|
||||
${this._formatDatetime(this.snapshot.date)}
|
||||
${this._formatDatetime(this._snapshot.date)}
|
||||
</div>
|
||||
<div>Home Assistant:</div>
|
||||
<paper-checkbox
|
||||
@@ -139,7 +121,7 @@ class HassioSnapshotDialog extends LitElement {
|
||||
this._restoreHass = (ev.target as PaperCheckboxElement).checked;
|
||||
}}"
|
||||
>
|
||||
Home Assistant ${this.snapshot.homeassistant}
|
||||
Home Assistant ${this._snapshot.homeassistant}
|
||||
</paper-checkbox>
|
||||
${this._folders.length
|
||||
? html`
|
||||
@@ -183,7 +165,7 @@ class HassioSnapshotDialog extends LitElement {
|
||||
</paper-dialog-scrollable>
|
||||
`
|
||||
: ""}
|
||||
${this.snapshot.protected
|
||||
${this._snapshot.protected
|
||||
? html`
|
||||
<paper-input
|
||||
autofocus=""
|
||||
@@ -197,37 +179,35 @@ class HassioSnapshotDialog extends LitElement {
|
||||
${this._error ? html` <p class="error">Error: ${this._error}</p> ` : ""}
|
||||
|
||||
<div>Actions:</div>
|
||||
<ul class="buttons">
|
||||
<li>
|
||||
<mwc-button @click=${this._downloadClicked}>
|
||||
<ha-icon icon="hassio:download" class="icon"></ha-icon>
|
||||
Download Snapshot
|
||||
</mwc-button>
|
||||
</li>
|
||||
<li>
|
||||
<mwc-button @click=${this._partialRestoreClicked}>
|
||||
<ha-icon icon="hassio:history" class="icon"> </ha-icon>
|
||||
Restore Selected
|
||||
</mwc-button>
|
||||
</li>
|
||||
${this.snapshot.type === "full"
|
||||
? html`
|
||||
<li>
|
||||
<mwc-button @click=${this._fullRestoreClicked}>
|
||||
<ha-icon icon="hassio:history" class="icon"> </ha-icon>
|
||||
Wipe & restore
|
||||
</mwc-button>
|
||||
</li>
|
||||
`
|
||||
: ""}
|
||||
<li>
|
||||
<mwc-button @click=${this._deleteClicked}>
|
||||
<ha-icon icon="hassio:delete" class="icon warning"> </ha-icon>
|
||||
<span class="warning">Delete Snapshot</span>
|
||||
</mwc-button>
|
||||
</li>
|
||||
</ul>
|
||||
</ha-paper-dialog>
|
||||
|
||||
<mwc-button @click=${this._downloadClicked} slot="primaryAction">
|
||||
<ha-svg-icon path=${mdiDownload} class="icon"></ha-svg-icon>
|
||||
Download Snapshot
|
||||
</mwc-button>
|
||||
|
||||
<mwc-button
|
||||
@click=${this._partialRestoreClicked}
|
||||
slot="secondaryAction"
|
||||
>
|
||||
<ha-svg-icon path=${mdiHistory} class="icon"></ha-svg-icon>
|
||||
Restore Selected
|
||||
</mwc-button>
|
||||
${this._snapshot.type === "full"
|
||||
? html`
|
||||
<mwc-button
|
||||
@click=${this._fullRestoreClicked}
|
||||
slot="secondaryAction"
|
||||
>
|
||||
<ha-svg-icon path=${mdiHistory} class="icon"></ha-svg-icon>
|
||||
Wipe & restore
|
||||
</mwc-button>
|
||||
`
|
||||
: ""}
|
||||
<mwc-button @click=${this._deleteClicked} slot="secondaryAction">
|
||||
<ha-svg-icon path=${mdiDelete} class="icon warning"></ha-svg-icon>
|
||||
<span class="warning">Delete Snapshot</span>
|
||||
</mwc-button>
|
||||
</ha-dialog>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -235,37 +215,10 @@ class HassioSnapshotDialog extends LitElement {
|
||||
return [
|
||||
haStyleDialog,
|
||||
css`
|
||||
ha-paper-dialog {
|
||||
min-width: 350px;
|
||||
font-size: 14px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
app-toolbar {
|
||||
margin: 0;
|
||||
padding: 0 16px;
|
||||
color: var(--primary-text-color);
|
||||
background-color: var(--secondary-background-color);
|
||||
}
|
||||
app-toolbar [main-title] {
|
||||
margin-left: 16px;
|
||||
}
|
||||
ha-paper-dialog-scrollable {
|
||||
margin: 0;
|
||||
}
|
||||
paper-checkbox {
|
||||
display: block;
|
||||
margin: 4px;
|
||||
}
|
||||
@media all and (max-width: 450px), all and (max-height: 500px) {
|
||||
ha-paper-dialog {
|
||||
max-height: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
app-toolbar {
|
||||
color: var(--text-primary-color);
|
||||
background-color: var(--primary-color);
|
||||
}
|
||||
}
|
||||
.details {
|
||||
color: var(--secondary-text-color);
|
||||
}
|
||||
@@ -336,7 +289,7 @@ class HassioSnapshotDialog extends LitElement {
|
||||
folders,
|
||||
};
|
||||
|
||||
if (this.snapshot!.protected) {
|
||||
if (this._snapshot!.protected) {
|
||||
data.password = this._snapshotPassword;
|
||||
}
|
||||
|
||||
@@ -344,13 +297,13 @@ class HassioSnapshotDialog extends LitElement {
|
||||
.callApi(
|
||||
"POST",
|
||||
|
||||
`hassio/snapshots/${this.snapshot!.slug}/restore/partial`,
|
||||
`hassio/snapshots/${this._snapshot!.slug}/restore/partial`,
|
||||
data
|
||||
)
|
||||
.then(
|
||||
() => {
|
||||
alert("Snapshot restored!");
|
||||
this._dialog.close();
|
||||
this._closeDialog();
|
||||
},
|
||||
(error) => {
|
||||
this._error = error.body.message;
|
||||
@@ -363,20 +316,20 @@ class HassioSnapshotDialog extends LitElement {
|
||||
return;
|
||||
}
|
||||
|
||||
const data = this.snapshot!.protected
|
||||
const data = this._snapshot!.protected
|
||||
? { password: this._snapshotPassword }
|
||||
: undefined;
|
||||
|
||||
this.hass
|
||||
.callApi(
|
||||
"POST",
|
||||
`hassio/snapshots/${this.snapshot!.slug}/restore/full`,
|
||||
`hassio/snapshots/${this._snapshot!.slug}/restore/full`,
|
||||
data
|
||||
)
|
||||
.then(
|
||||
() => {
|
||||
alert("Snapshot restored!");
|
||||
this._dialog.close();
|
||||
this._closeDialog();
|
||||
},
|
||||
(error) => {
|
||||
this._error = error.body.message;
|
||||
@@ -391,11 +344,11 @@ class HassioSnapshotDialog extends LitElement {
|
||||
|
||||
this.hass
|
||||
|
||||
.callApi("POST", `hassio/snapshots/${this.snapshot!.slug}/remove`)
|
||||
.callApi("POST", `hassio/snapshots/${this._snapshot!.slug}/remove`)
|
||||
.then(
|
||||
() => {
|
||||
this._dialog.close();
|
||||
this._dialogParams!.onDelete();
|
||||
this._closeDialog();
|
||||
},
|
||||
(error) => {
|
||||
this._error = error.body.message;
|
||||
@@ -408,7 +361,7 @@ class HassioSnapshotDialog extends LitElement {
|
||||
try {
|
||||
signedPath = await getSignedPath(
|
||||
this.hass,
|
||||
`/api/hassio/snapshots/${this.snapshot!.slug}/download`
|
||||
`/api/hassio/snapshots/${this._snapshot!.slug}/download`
|
||||
);
|
||||
} catch (err) {
|
||||
alert(`Error: ${err.message}`);
|
||||
@@ -419,19 +372,19 @@ class HassioSnapshotDialog extends LitElement {
|
||||
const a = document.createElement("a");
|
||||
a.href = signedPath.path;
|
||||
a.download = `Hass_io_${name}.tar`;
|
||||
this._dialog.appendChild(a);
|
||||
this.shadowRoot!.appendChild(a);
|
||||
a.click();
|
||||
this._dialog.removeChild(a);
|
||||
this.shadowRoot!.removeChild(a);
|
||||
}
|
||||
|
||||
private get _computeName() {
|
||||
return this.snapshot
|
||||
? this.snapshot.name || this.snapshot.slug
|
||||
return this._snapshot
|
||||
? this._snapshot.name || this._snapshot.slug
|
||||
: "Unnamed snapshot";
|
||||
}
|
||||
|
||||
private get _computeSize() {
|
||||
return Math.ceil(this.snapshot!.size * 10) / 10 + " MB";
|
||||
return Math.ceil(this._snapshot!.size * 10) / 10 + " MB";
|
||||
}
|
||||
|
||||
private _formatDatetime(datetime) {
|
||||
@@ -445,9 +398,9 @@ class HassioSnapshotDialog extends LitElement {
|
||||
});
|
||||
}
|
||||
|
||||
private _dialogClosed() {
|
||||
private _closeDialog() {
|
||||
this._dialogParams = undefined;
|
||||
this.snapshot = undefined;
|
||||
this._snapshot = undefined;
|
||||
this._snapshotPassword = "";
|
||||
this._folders = [];
|
||||
this._addons = [];
|
||||
|
@@ -3,11 +3,11 @@ import {
|
||||
HassioAddonDetails,
|
||||
restartHassioAddon,
|
||||
} from "../../../src/data/hassio/addon";
|
||||
import { HomeAssistant } from "../../../src/types";
|
||||
import {
|
||||
showConfirmationDialog,
|
||||
showAlertDialog,
|
||||
showConfirmationDialog,
|
||||
} from "../../../src/dialogs/generic/show-dialog-box";
|
||||
import { HomeAssistant } from "../../../src/types";
|
||||
|
||||
export const suggestAddonRestart = async (
|
||||
element: LitElement,
|
||||
|
@@ -1,4 +1,3 @@
|
||||
import "../../src/components/ha-icon-button";
|
||||
import { PolymerElement } from "@polymer/polymer";
|
||||
import { customElement, property, PropertyValues } from "lit-element";
|
||||
import { applyThemesOnElement } from "../../src/common/dom/apply_themes_on_element";
|
||||
@@ -34,12 +33,6 @@ import { HomeAssistant } from "../../src/types";
|
||||
// Don't codesplit it, that way the dashboard always loads fast.
|
||||
import "./hassio-panel";
|
||||
|
||||
// The register callback of the IronA11yKeysBehavior inside ha-icon-button
|
||||
// is not called, causing _keyBindings to be uninitiliazed for ha-icon-button,
|
||||
// causing an exception when added to DOM. When transpiled to ES5, this will
|
||||
// break the build.
|
||||
customElements.get("ha-icon-button").prototype._keyBindings = {};
|
||||
|
||||
@customElement("hassio-main")
|
||||
class HassioMain extends ProvideHassLitMixin(HassRouterPage) {
|
||||
@property() public hass!: HomeAssistant;
|
||||
|
@@ -1,3 +1,4 @@
|
||||
import { mdiBackupRestore, mdiCogs, mdiStore, mdiViewDashboard } from "@mdi/js";
|
||||
import {
|
||||
customElement,
|
||||
html,
|
||||
@@ -5,37 +6,36 @@ import {
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
|
||||
import { HassioHassOSInfo, HassioHostInfo } from "../../src/data/hassio/host";
|
||||
import {
|
||||
HassioHomeAssistantInfo,
|
||||
HassioSupervisorInfo,
|
||||
} from "../../src/data/hassio/supervisor";
|
||||
import type { PageNavigation } from "../../src/layouts/hass-tabs-subpage";
|
||||
import "../../src/resources/ha-style";
|
||||
import { HomeAssistant, Route } from "../../src/types";
|
||||
import "./hassio-panel-router";
|
||||
import type { PageNavigation } from "../../src/layouts/hass-tabs-subpage";
|
||||
|
||||
export const supervisorTabs: PageNavigation[] = [
|
||||
{
|
||||
name: "Dashboard",
|
||||
path: `/hassio/dashboard`,
|
||||
icon: "hassio:view-dashboard",
|
||||
iconPath: mdiViewDashboard,
|
||||
},
|
||||
{
|
||||
name: "Add-on store",
|
||||
path: `/hassio/store`,
|
||||
icon: "hassio:store",
|
||||
iconPath: mdiStore,
|
||||
},
|
||||
{
|
||||
name: "Snapshots",
|
||||
path: `/hassio/snapshots`,
|
||||
icon: "hassio:backup-restore",
|
||||
iconPath: mdiBackupRestore,
|
||||
},
|
||||
{
|
||||
name: "System",
|
||||
path: `/hassio/system`,
|
||||
icon: "hassio:cogs",
|
||||
iconPath: mdiCogs,
|
||||
},
|
||||
];
|
||||
|
||||
|
@@ -86,9 +86,6 @@ class HassioIngressView extends LitElement {
|
||||
height: 100%;
|
||||
border: 0;
|
||||
}
|
||||
ha-icon-button {
|
||||
color: var(--text-primary-color);
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
import "@material/mwc-button";
|
||||
import "@polymer/paper-card/paper-card";
|
||||
import "@material/mwc-icon-button";
|
||||
import { mdiPackageVariant, mdiPackageVariantClosed, mdiReload } from "@mdi/js";
|
||||
import "@polymer/paper-checkbox/paper-checkbox";
|
||||
import type { PaperCheckboxElement } from "@polymer/paper-checkbox/paper-checkbox";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
@@ -18,6 +19,8 @@ import {
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { fireEvent } from "../../../src/common/dom/fire_event";
|
||||
import "../../../src/components/ha-card";
|
||||
import "../../../src/components/ha-svg-icon";
|
||||
import {
|
||||
createHassioFullSnapshot,
|
||||
createHassioPartialSnapshot,
|
||||
@@ -28,15 +31,14 @@ import {
|
||||
reloadHassioSnapshots,
|
||||
} from "../../../src/data/hassio/snapshot";
|
||||
import { HassioSupervisorInfo } from "../../../src/data/hassio/supervisor";
|
||||
import "../../../src/layouts/hass-tabs-subpage";
|
||||
import { PolymerChangedEvent } from "../../../src/polymer-types";
|
||||
import { haStyle } from "../../../src/resources/styles";
|
||||
import { HomeAssistant, Route } from "../../../src/types";
|
||||
import "../../../src/layouts/hass-tabs-subpage";
|
||||
import "../components/hassio-card-content";
|
||||
import { showHassioSnapshotDialog } from "../dialogs/snapshot/show-dialog-hassio-snapshot";
|
||||
import { hassioStyle } from "../resources/hassio-style";
|
||||
|
||||
import { supervisorTabs } from "../hassio-panel";
|
||||
import { hassioStyle } from "../resources/hassio-style";
|
||||
|
||||
interface CheckboxItem {
|
||||
slug: string;
|
||||
@@ -98,12 +100,13 @@ class HassioSnapshots extends LitElement {
|
||||
>
|
||||
<span slot="header">Snapshots</span>
|
||||
|
||||
<ha-icon-button
|
||||
icon="hassio:reload"
|
||||
<mwc-icon-button
|
||||
slot="toolbar-icon"
|
||||
aria-label="Reload snapshots"
|
||||
@click=${this.refreshData}
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-svg-icon path=${mdiReload}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
|
||||
<div class="content">
|
||||
<h1>
|
||||
@@ -114,7 +117,7 @@ class HassioSnapshots extends LitElement {
|
||||
Home Assistant instance.
|
||||
</p>
|
||||
<div class="card-group">
|
||||
<paper-card>
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
<paper-input
|
||||
autofocus
|
||||
@@ -195,7 +198,7 @@ class HassioSnapshots extends LitElement {
|
||||
Create
|
||||
</mwc-button>
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
</div>
|
||||
|
||||
<h1>Available snapshots</h1>
|
||||
@@ -204,15 +207,15 @@ class HassioSnapshots extends LitElement {
|
||||
? undefined
|
||||
: this._snapshots.length === 0
|
||||
? html`
|
||||
<paper-card>
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
You don't have any snapshots yet.
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`
|
||||
: this._snapshots.map(
|
||||
(snapshot) => html`
|
||||
<paper-card
|
||||
<ha-card
|
||||
class="pointer"
|
||||
.snapshot=${snapshot}
|
||||
@click=${this._snapshotClicked}
|
||||
@@ -224,12 +227,12 @@ class HassioSnapshots extends LitElement {
|
||||
.description=${this._computeDetails(snapshot)}
|
||||
.datetime=${snapshot.date}
|
||||
.icon=${snapshot.type === "full"
|
||||
? "hassio:package-variant-closed"
|
||||
: "hassio:package-variant"}
|
||||
? mdiPackageVariantClosed
|
||||
: mdiPackageVariant}
|
||||
.icon-class="snapshot"
|
||||
></hassio-card-content>
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`
|
||||
)}
|
||||
</div>
|
||||
|
@@ -1,5 +1,4 @@
|
||||
import "@material/mwc-button";
|
||||
import "@polymer/paper-card/paper-card";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -12,23 +11,23 @@ import {
|
||||
import "../../../src/components/buttons/ha-call-api-button";
|
||||
import { fetchHassioHardwareInfo } from "../../../src/data/hassio/hardware";
|
||||
import {
|
||||
changeHostOptions,
|
||||
fetchHassioHostInfo,
|
||||
HassioHassOSInfo,
|
||||
HassioHostInfo as HassioHostInfoType,
|
||||
rebootHost,
|
||||
shutdownHost,
|
||||
updateOS,
|
||||
changeHostOptions,
|
||||
} from "../../../src/data/hassio/host";
|
||||
import {
|
||||
showAlertDialog,
|
||||
showConfirmationDialog,
|
||||
showPromptDialog,
|
||||
} from "../../../src/dialogs/generic/show-dialog-box";
|
||||
import { haStyle } from "../../../src/resources/styles";
|
||||
import { HomeAssistant } from "../../../src/types";
|
||||
import { showHassioMarkdownDialog } from "../dialogs/markdown/show-dialog-hassio-markdown";
|
||||
import { hassioStyle } from "../resources/hassio-style";
|
||||
import {
|
||||
showConfirmationDialog,
|
||||
showAlertDialog,
|
||||
showPromptDialog,
|
||||
} from "../../../src/dialogs/generic/show-dialog-box";
|
||||
|
||||
@customElement("hassio-host-info")
|
||||
class HassioHostInfo extends LitElement {
|
||||
@@ -42,7 +41,7 @@ class HassioHostInfo extends LitElement {
|
||||
|
||||
public render(): TemplateResult | void {
|
||||
return html`
|
||||
<paper-card>
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
<h2>Host system</h2>
|
||||
<table class="info">
|
||||
@@ -113,7 +112,7 @@ class HassioHostInfo extends LitElement {
|
||||
? html` <mwc-button @click=${this._updateOS}>Update</mwc-button> `
|
||||
: ""}
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -122,7 +121,7 @@ class HassioHostInfo extends LitElement {
|
||||
haStyle,
|
||||
hassioStyle,
|
||||
css`
|
||||
paper-card {
|
||||
ha-card {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
@@ -1,5 +1,4 @@
|
||||
import "@material/mwc-button";
|
||||
import "@polymer/paper-card/paper-card";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -11,15 +10,16 @@ import {
|
||||
} from "lit-element";
|
||||
import { fireEvent } from "../../../src/common/dom/fire_event";
|
||||
import "../../../src/components/buttons/ha-call-api-button";
|
||||
import "../../../src/components/ha-card";
|
||||
import {
|
||||
HassioSupervisorInfo as HassioSupervisorInfoType,
|
||||
setSupervisorOption,
|
||||
SupervisorOptions,
|
||||
} from "../../../src/data/hassio/supervisor";
|
||||
import { showConfirmationDialog } from "../../../src/dialogs/generic/show-dialog-box";
|
||||
import { haStyle } from "../../../src/resources/styles";
|
||||
import { HomeAssistant } from "../../../src/types";
|
||||
import { hassioStyle } from "../resources/hassio-style";
|
||||
import { showConfirmationDialog } from "../../../src/dialogs/generic/show-dialog-box";
|
||||
|
||||
@customElement("hassio-supervisor-info")
|
||||
class HassioSupervisorInfo extends LitElement {
|
||||
@@ -31,7 +31,7 @@ class HassioSupervisorInfo extends LitElement {
|
||||
|
||||
public render(): TemplateResult | void {
|
||||
return html`
|
||||
<paper-card>
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
<h2>Supervisor</h2>
|
||||
<table class="info">
|
||||
@@ -92,7 +92,7 @@ class HassioSupervisorInfo extends LitElement {
|
||||
`
|
||||
: ""}
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@ class HassioSupervisorInfo extends LitElement {
|
||||
haStyle,
|
||||
hassioStyle,
|
||||
css`
|
||||
paper-card {
|
||||
ha-card {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
@@ -2,7 +2,6 @@ import "@material/mwc-button";
|
||||
import "@polymer/paper-dropdown-menu/paper-dropdown-menu";
|
||||
import "@polymer/paper-item/paper-item";
|
||||
import "@polymer/paper-listbox/paper-listbox";
|
||||
import "@polymer/paper-card/paper-card";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -12,14 +11,13 @@ import {
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import "../../../src/components/ha-card";
|
||||
import { fetchHassioLogs } from "../../../src/data/hassio/supervisor";
|
||||
import "../../../src/layouts/loading-screen";
|
||||
import { haStyle } from "../../../src/resources/styles";
|
||||
import { HomeAssistant } from "../../../src/types";
|
||||
|
||||
import { fetchHassioLogs } from "../../../src/data/hassio/supervisor";
|
||||
|
||||
import "../components/hassio-ansi-to-html";
|
||||
import { hassioStyle } from "../resources/hassio-style";
|
||||
import "../../../src/layouts/loading-screen";
|
||||
|
||||
interface LogProvider {
|
||||
key: string;
|
||||
@@ -70,7 +68,7 @@ class HassioSupervisorLog extends LitElement {
|
||||
|
||||
public render(): TemplateResult | void {
|
||||
return html`
|
||||
<paper-card>
|
||||
<ha-card>
|
||||
${this._error ? html` <div class="errors">${this._error}</div> ` : ""}
|
||||
${this.hass.userData?.showAdvanced
|
||||
? html`
|
||||
@@ -105,7 +103,7 @@ class HassioSupervisorLog extends LitElement {
|
||||
<div class="card-actions">
|
||||
<mwc-button @click=${this._refresh}>Refresh</mwc-button>
|
||||
</div>
|
||||
</paper-card>
|
||||
</ha-card>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -114,7 +112,7 @@ class HassioSupervisorLog extends LitElement {
|
||||
haStyle,
|
||||
hassioStyle,
|
||||
css`
|
||||
paper-card {
|
||||
ha-card {
|
||||
width: 100%;
|
||||
}
|
||||
pre {
|
||||
|
@@ -13,16 +13,15 @@ import {
|
||||
HassioHostInfo,
|
||||
} from "../../../src/data/hassio/host";
|
||||
import { HassioSupervisorInfo } from "../../../src/data/hassio/supervisor";
|
||||
import { haStyle } from "../../../src/resources/styles";
|
||||
import "../../../src/layouts/hass-tabs-subpage";
|
||||
import { haStyle } from "../../../src/resources/styles";
|
||||
import { HomeAssistant, Route } from "../../../src/types";
|
||||
import { supervisorTabs } from "../hassio-panel";
|
||||
import { hassioStyle } from "../resources/hassio-style";
|
||||
import "./hassio-host-info";
|
||||
import "./hassio-supervisor-info";
|
||||
import "./hassio-supervisor-log";
|
||||
|
||||
import { supervisorTabs } from "../hassio-panel";
|
||||
|
||||
@customElement("hassio-system")
|
||||
class HassioSystem extends LitElement {
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
|
61
package.json
61
package.json
@@ -24,19 +24,19 @@
|
||||
"author": "Paulus Schoutsen <Paulus@PaulusSchoutsen.nl> (http://paulusschoutsen.nl)",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@fullcalendar/core": "5.0.0-beta.2",
|
||||
"@fullcalendar/daygrid": "5.0.0-beta.2",
|
||||
"@material/chips": "^6.0.0-canary.35a32aaea.0",
|
||||
"@material/mwc-button": "0.14.1",
|
||||
"@material/mwc-checkbox": "0.14.1",
|
||||
"@material/mwc-dialog": "0.14.1",
|
||||
"@material/mwc-fab": "0.14.1",
|
||||
"@material/mwc-formfield": "0.14.1",
|
||||
"@material/mwc-icon-button": "0.14.1",
|
||||
"@material/mwc-list": "0.14.1",
|
||||
"@material/mwc-menu": "0.14.1",
|
||||
"@material/mwc-ripple": "0.14.1",
|
||||
"@material/mwc-switch": "0.14.1",
|
||||
"@fullcalendar/core": "^5.0.0-beta.2",
|
||||
"@fullcalendar/daygrid": "^5.0.0-beta.2",
|
||||
"@material/chips": "7.0.0-canary.d92d8c93e.0",
|
||||
"@material/mwc-button": "^0.15.0",
|
||||
"@material/mwc-checkbox": "^0.15.0",
|
||||
"@material/mwc-dialog": "^0.15.0",
|
||||
"@material/mwc-fab": "^0.15.0",
|
||||
"@material/mwc-formfield": "^0.15.0",
|
||||
"@material/mwc-icon-button": "^0.15.0",
|
||||
"@material/mwc-list": "^0.15.0",
|
||||
"@material/mwc-menu": "^0.15.0",
|
||||
"@material/mwc-ripple": "^0.15.0",
|
||||
"@material/mwc-switch": "^0.15.0",
|
||||
"@mdi/js": "4.9.95",
|
||||
"@mdi/svg": "4.9.95",
|
||||
"@polymer/app-layout": "^3.0.2",
|
||||
@@ -93,14 +93,14 @@
|
||||
"fuse.js": "^3.4.4",
|
||||
"google-timezones-json": "^1.0.2",
|
||||
"hls.js": "^0.12.4",
|
||||
"home-assistant-js-websocket": "5.0.0",
|
||||
"home-assistant-js-websocket": "^5.1.2",
|
||||
"idb-keyval": "^3.2.0",
|
||||
"intl-messageformat": "^8.3.9",
|
||||
"js-yaml": "^3.13.1",
|
||||
"leaflet": "^1.4.0",
|
||||
"leaflet-draw": "^1.0.4",
|
||||
"lit-element": "^2.2.1",
|
||||
"lit-html": "^1.1.0",
|
||||
"lit-element": "^2.3.1",
|
||||
"lit-html": "^1.2.1",
|
||||
"lit-virtualizer": "^0.4.2",
|
||||
"marked": "^0.6.1",
|
||||
"mdn-polyfills": "^5.16.0",
|
||||
@@ -196,20 +196,21 @@
|
||||
"resolutions": {
|
||||
"@webcomponents/webcomponentsjs": "^2.2.10",
|
||||
"@polymer/polymer": "3.1.0",
|
||||
"lit-html": "^1.1.2",
|
||||
"@material/animation": "6.0.0",
|
||||
"@material/base": "6.0.0",
|
||||
"@material/checkbox": "6.0.0",
|
||||
"@material/density": "6.0.0",
|
||||
"@material/dom": "6.0.0",
|
||||
"@material/elevation": "6.0.0",
|
||||
"@material/feature-targeting": "6.0.0",
|
||||
"@material/ripple": "6.0.0",
|
||||
"@material/rtl": "6.0.0",
|
||||
"@material/shape": "6.0.0",
|
||||
"@material/theme": "6.0.0",
|
||||
"@material/touch-target": "6.0.0",
|
||||
"@material/typography": "6.0.0"
|
||||
"lit-html": "1.2.1",
|
||||
"lit-element": "2.3.1",
|
||||
"@material/animation": "7.0.0-canary.d92d8c93e.0",
|
||||
"@material/base": "7.0.0-canary.d92d8c93e.0",
|
||||
"@material/checkbox": "7.0.0-canary.d92d8c93e.0",
|
||||
"@material/density": "7.0.0-canary.d92d8c93e.0",
|
||||
"@material/dom": "7.0.0-canary.d92d8c93e.0",
|
||||
"@material/elevation": "7.0.0-canary.d92d8c93e.0",
|
||||
"@material/feature-targeting": "7.0.0-canary.d92d8c93e.0",
|
||||
"@material/ripple": "7.0.0-canary.d92d8c93e.0",
|
||||
"@material/rtl": "7.0.0-canary.d92d8c93e.0",
|
||||
"@material/shape": "7.0.0-canary.d92d8c93e.0",
|
||||
"@material/theme": "7.0.0-canary.d92d8c93e.0",
|
||||
"@material/touch-target": "7.0.0-canary.d92d8c93e.0",
|
||||
"@material/typography": "7.0.0-canary.d92d8c93e.0"
|
||||
},
|
||||
"main": "src/home-assistant.js",
|
||||
"husky": {
|
||||
|
2
setup.py
2
setup.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
||||
|
||||
setup(
|
||||
name="home-assistant-frontend",
|
||||
version="20200505.0",
|
||||
version="20200509.0",
|
||||
description="The Home Assistant frontend",
|
||||
url="https://github.com/home-assistant/home-assistant-polymer",
|
||||
author="The Home Assistant Authors",
|
||||
|
@@ -1,4 +1,3 @@
|
||||
import "../../components/ha-icon-button";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import {
|
||||
css,
|
||||
@@ -9,8 +8,10 @@ import {
|
||||
} from "lit-element";
|
||||
import { html, TemplateResult } from "lit-html";
|
||||
import { classMap } from "lit-html/directives/class-map";
|
||||
import "../../components/ha-icon";
|
||||
import "../../components/ha-svg-icon";
|
||||
import { fireEvent } from "../dom/fire_event";
|
||||
import { mdiMagnify, mdiClose } from "@mdi/js";
|
||||
import "@material/mwc-icon-button/mwc-icon-button";
|
||||
|
||||
@customElement("search-input")
|
||||
class SearchInput extends LitElement {
|
||||
@@ -47,17 +48,22 @@ class SearchInput extends LitElement {
|
||||
@value-changed=${this._filterInputChanged}
|
||||
.noLabelFloat=${this.noLabelFloat}
|
||||
>
|
||||
<ha-icon icon="hass:magnify" slot="prefix" class="prefix"></ha-icon>
|
||||
<ha-svg-icon
|
||||
path=${mdiMagnify}
|
||||
slot="prefix"
|
||||
class="prefix"
|
||||
></ha-svg-icon>
|
||||
${this.filter &&
|
||||
html`
|
||||
<ha-icon-button
|
||||
<mwc-icon-button
|
||||
slot="suffix"
|
||||
class="suffix"
|
||||
@click=${this._clearSearch}
|
||||
icon="hass:close"
|
||||
alt="Clear"
|
||||
title="Clear"
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-svg-icon path=${mdiClose}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
`}
|
||||
</paper-input>
|
||||
`;
|
||||
@@ -77,11 +83,14 @@ class SearchInput extends LitElement {
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
ha-icon,
|
||||
ha-icon-button {
|
||||
ha-svg-icon,
|
||||
mwc-icon-button {
|
||||
color: var(--primary-text-color);
|
||||
}
|
||||
ha-icon {
|
||||
mwc-icon-button {
|
||||
--mdc-icon-button-size: 24px;
|
||||
}
|
||||
ha-svg-icon.prefix {
|
||||
margin: 8px;
|
||||
}
|
||||
`;
|
||||
|
@@ -6,18 +6,19 @@ import {
|
||||
CSSResult,
|
||||
css,
|
||||
query,
|
||||
property,
|
||||
} from "lit-element";
|
||||
import "@material/mwc-button";
|
||||
import "@material/mwc-menu";
|
||||
import "@material/mwc-list/mwc-list-item";
|
||||
import type { Menu } from "@material/mwc-menu";
|
||||
|
||||
import { haStyle } from "../resources/styles";
|
||||
import type { Menu, Corner } from "@material/mwc-menu";
|
||||
|
||||
import "./ha-icon-button";
|
||||
|
||||
@customElement("ha-button-menu")
|
||||
export class HaButtonMenu extends LitElement {
|
||||
@property() public corner: Corner = "TOP_START";
|
||||
|
||||
@query("mwc-menu") private _menu?: Menu;
|
||||
|
||||
protected render(): TemplateResult {
|
||||
@@ -25,7 +26,7 @@ export class HaButtonMenu extends LitElement {
|
||||
<div @click=${this._handleClick}>
|
||||
<slot name="trigger"></slot>
|
||||
</div>
|
||||
<mwc-menu>
|
||||
<mwc-menu .corner=${this.corner}>
|
||||
<slot></slot>
|
||||
</mwc-menu>
|
||||
`;
|
||||
@@ -36,15 +37,13 @@ export class HaButtonMenu extends LitElement {
|
||||
this._menu!.show();
|
||||
}
|
||||
|
||||
static get styles(): CSSResult[] {
|
||||
return [
|
||||
haStyle,
|
||||
css`
|
||||
:host {
|
||||
position: relative;
|
||||
}
|
||||
`,
|
||||
];
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
:host {
|
||||
display: block;
|
||||
position: relative;
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -4,17 +4,19 @@ import { style } from "@material/mwc-dialog/mwc-dialog-css";
|
||||
import "./ha-icon-button";
|
||||
import { css, CSSResult, customElement, html } from "lit-element";
|
||||
import type { Constructor, HomeAssistant } from "../types";
|
||||
import { mdiClose } from "@mdi/js";
|
||||
|
||||
const MwcDialog = customElements.get("mwc-dialog") as Constructor<Dialog>;
|
||||
|
||||
export const createCloseHeading = (hass: HomeAssistant, title: string) => html`
|
||||
${title}
|
||||
<ha-icon-button
|
||||
<mwc-icon-button
|
||||
aria-label=${hass.localize("ui.dialogs.generic.close")}
|
||||
icon="hass:close"
|
||||
dialogAction="close"
|
||||
class="close_button"
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-svg-icon path=${mdiClose}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
`;
|
||||
|
||||
@customElement("ha-dialog")
|
||||
|
@@ -1,41 +0,0 @@
|
||||
import "@material/mwc-fab";
|
||||
import type { Fab } from "@material/mwc-fab";
|
||||
import { ripple } from "@material/mwc-ripple/ripple-directive";
|
||||
import { customElement, html, TemplateResult } from "lit-element";
|
||||
import { classMap } from "lit-html/directives/class-map";
|
||||
import type { Constructor } from "../types";
|
||||
import "./ha-icon";
|
||||
|
||||
const MwcFab = customElements.get("mwc-fab") as Constructor<Fab>;
|
||||
|
||||
@customElement("ha-fab")
|
||||
export class HaFab extends MwcFab {
|
||||
// We override the render method because we don't have an icon font and mwc-fab doesn't support our svg-icon sets.
|
||||
// Based on version mwc-fab 0.8
|
||||
protected render(): TemplateResult {
|
||||
const classes = {
|
||||
"mdc-fab--mini": this.mini,
|
||||
"mdc-fab--exited": this.exited,
|
||||
"mdc-fab--extended": this.extended,
|
||||
};
|
||||
const showLabel = this.label !== "" && this.extended;
|
||||
return html`
|
||||
<button
|
||||
.ripple="${ripple()}"
|
||||
class="mdc-fab ${classMap(classes)}"
|
||||
?disabled="${this.disabled}"
|
||||
aria-label="${this.label || this.icon}"
|
||||
>
|
||||
${showLabel && this.showIconAtEnd ? this.label : ""}
|
||||
${this.icon ? html` <ha-icon .icon=${this.icon}></ha-icon> ` : ""}
|
||||
${showLabel && !this.showIconAtEnd ? this.label : ""}
|
||||
</button>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"ha-fab": HaFab;
|
||||
}
|
||||
}
|
@@ -1,17 +1,30 @@
|
||||
import { HaIconButton } from "./ha-icon-button";
|
||||
import { LitElement, property, TemplateResult, html } from "lit-element";
|
||||
import { mdiArrowLeft, mdiArrowRight } from "@mdi/js";
|
||||
import "@material/mwc-icon-button/mwc-icon-button";
|
||||
import "./ha-svg-icon";
|
||||
|
||||
export class HaIconButtonArrowPrev extends LitElement {
|
||||
@property({ type: Boolean }) public disabled = false;
|
||||
|
||||
@property() private _icon = mdiArrowLeft;
|
||||
|
||||
export class HaIconButtonArrowPrev extends HaIconButton {
|
||||
public connectedCallback() {
|
||||
super.connectedCallback();
|
||||
|
||||
// wait to check for direction since otherwise direction is wrong even though top level is RTL
|
||||
setTimeout(() => {
|
||||
this.icon =
|
||||
this._icon =
|
||||
window.getComputedStyle(this).direction === "ltr"
|
||||
? "hass:arrow-left"
|
||||
: "hass:arrow-right";
|
||||
? mdiArrowLeft
|
||||
: mdiArrowRight;
|
||||
}, 100);
|
||||
}
|
||||
|
||||
protected render(): TemplateResult {
|
||||
return html`<mwc-icon-button .disabled=${this.disabled}>
|
||||
<ha-svg-icon .path=${this._icon}></ha-svg-icon>
|
||||
</mwc-icon-button> `;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
|
@@ -1,5 +1,4 @@
|
||||
import "@polymer/iron-icon/iron-icon";
|
||||
import { get, set, clear, Store } from "idb-keyval";
|
||||
import {
|
||||
customElement,
|
||||
LitElement,
|
||||
@@ -11,84 +10,23 @@ import {
|
||||
CSSResult,
|
||||
} from "lit-element";
|
||||
import "./ha-svg-icon";
|
||||
import { customIconsets, CustomIcon } from "../data/custom_iconsets";
|
||||
import {
|
||||
Chunks,
|
||||
MDI_PREFIXES,
|
||||
getIcon,
|
||||
findIconChunk,
|
||||
Icons,
|
||||
checkCacheVersion,
|
||||
writeCache,
|
||||
} from "../data/iconsets";
|
||||
import { debounce } from "../common/util/debounce";
|
||||
import { iconMetadata } from "../resources/icon-metadata";
|
||||
import { IconMeta } from "../types";
|
||||
|
||||
interface Icons {
|
||||
[key: string]: string;
|
||||
}
|
||||
|
||||
interface Chunks {
|
||||
[key: string]: Promise<Icons>;
|
||||
}
|
||||
|
||||
const iconStore = new Store("hass-icon-db", "mdi-icon-store");
|
||||
|
||||
get("_version", iconStore).then((version) => {
|
||||
if (!version) {
|
||||
set("_version", iconMetadata.version, iconStore);
|
||||
} else if (version !== iconMetadata.version) {
|
||||
clear(iconStore).then(() =>
|
||||
set("_version", iconMetadata.version, iconStore)
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
const chunks: Chunks = {};
|
||||
const MDI_PREFIXES = ["mdi", "hass", "hassio", "hademo"];
|
||||
|
||||
let toRead: Array<[string, (string) => void]> = [];
|
||||
checkCacheVersion();
|
||||
|
||||
// Queue up as many icon fetches in 1 transaction
|
||||
const getIcon = (iconName: string) =>
|
||||
new Promise<string>((resolve) => {
|
||||
toRead.push([iconName, resolve]);
|
||||
|
||||
if (toRead.length > 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
const results: Array<[(string) => void, IDBRequest]> = [];
|
||||
|
||||
iconStore
|
||||
._withIDBStore("readonly", (store) => {
|
||||
for (const [iconName_, resolve_] of toRead) {
|
||||
results.push([resolve_, store.get(iconName_)]);
|
||||
}
|
||||
toRead = [];
|
||||
})
|
||||
.then(() => {
|
||||
for (const [resolve_, request] of results) {
|
||||
resolve_(request.result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
const findIconChunk = (icon): string => {
|
||||
let lastChunk: IconMeta;
|
||||
for (const chunk of iconMetadata.parts) {
|
||||
if (chunk.start !== undefined && icon < chunk.start) {
|
||||
break;
|
||||
}
|
||||
lastChunk = chunk;
|
||||
}
|
||||
return lastChunk!.file;
|
||||
};
|
||||
|
||||
const debouncedWriteCache = debounce(async () => {
|
||||
const keys = Object.keys(chunks);
|
||||
const iconsSets: Icons[] = await Promise.all(Object.values(chunks));
|
||||
// We do a batch opening the store just once, for (considerable) performance
|
||||
iconStore._withIDBStore("readwrite", (store) => {
|
||||
iconsSets.forEach((icons, idx) => {
|
||||
Object.entries(icons).forEach(([name, path]) => {
|
||||
store.put(path, name);
|
||||
});
|
||||
delete chunks[keys[idx]];
|
||||
});
|
||||
});
|
||||
}, 2000);
|
||||
const debouncedWriteCache = debounce(() => writeCache(chunks), 2000);
|
||||
|
||||
@customElement("ha-icon")
|
||||
export class HaIcon extends LitElement {
|
||||
@@ -96,11 +34,14 @@ export class HaIcon extends LitElement {
|
||||
|
||||
@property() private _path?: string;
|
||||
|
||||
@property() private _noMdi = false;
|
||||
@property() private _viewBox?;
|
||||
|
||||
@property() private _legacy = false;
|
||||
|
||||
protected updated(changedProps: PropertyValues) {
|
||||
if (changedProps.has("icon")) {
|
||||
this._path = undefined;
|
||||
this._viewBox = undefined;
|
||||
this._loadIcon();
|
||||
}
|
||||
}
|
||||
@@ -109,25 +50,39 @@ export class HaIcon extends LitElement {
|
||||
if (!this.icon) {
|
||||
return html``;
|
||||
}
|
||||
if (this._noMdi) {
|
||||
if (this._legacy) {
|
||||
return html`<iron-icon .icon=${this.icon}></iron-icon>`;
|
||||
}
|
||||
return html`<ha-svg-icon .path=${this._path}></ha-svg-icon>`;
|
||||
return html`<ha-svg-icon
|
||||
.path=${this._path}
|
||||
.viewBox=${this._viewBox}
|
||||
></ha-svg-icon>`;
|
||||
}
|
||||
|
||||
private async _loadIcon() {
|
||||
if (!this.icon) {
|
||||
return;
|
||||
}
|
||||
const icon = this.icon.split(":", 2);
|
||||
if (!MDI_PREFIXES.includes(icon[0])) {
|
||||
this._noMdi = true;
|
||||
const [iconPrefix, iconName] = this.icon.split(":", 2);
|
||||
|
||||
if (!iconPrefix || !iconName) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._noMdi = false;
|
||||
if (!MDI_PREFIXES.includes(iconPrefix)) {
|
||||
if (iconPrefix in customIconsets) {
|
||||
const customIconset = customIconsets[iconPrefix];
|
||||
if (customIconset) {
|
||||
this._setCustomPath(customIconset(iconName));
|
||||
}
|
||||
return;
|
||||
}
|
||||
this._legacy = true;
|
||||
return;
|
||||
}
|
||||
|
||||
this._legacy = false;
|
||||
|
||||
const iconName = icon[1];
|
||||
const cachedPath: string = await getIcon(iconName);
|
||||
if (cachedPath) {
|
||||
this._path = cachedPath;
|
||||
@@ -147,6 +102,12 @@ export class HaIcon extends LitElement {
|
||||
debouncedWriteCache();
|
||||
}
|
||||
|
||||
private async _setCustomPath(promise: Promise<CustomIcon>) {
|
||||
const icon = await promise;
|
||||
this._path = icon.path;
|
||||
this._viewBox = icon.viewBox;
|
||||
}
|
||||
|
||||
private async _setPath(promise: Promise<Icons>, iconName: string) {
|
||||
const iconPack = await promise;
|
||||
this._path = iconPack[iconName];
|
||||
|
@@ -31,12 +31,14 @@ class HaLabelBadge extends LitElement {
|
||||
big: Boolean(this.value && this.value.length > 4),
|
||||
})}"
|
||||
>
|
||||
${this.icon && !this.value && !this.image
|
||||
? html` <ha-icon .icon="${this.icon}"></ha-icon> `
|
||||
: ""}
|
||||
${this.value && !this.image
|
||||
? html` <span>${this.value}</span> `
|
||||
: ""}
|
||||
<slot>
|
||||
${this.icon && !this.value && !this.image
|
||||
? html` <ha-icon .icon=${this.icon}></ha-icon> `
|
||||
: ""}
|
||||
${this.value && !this.image
|
||||
? html` <span>${this.value}</span> `
|
||||
: ""}
|
||||
</slot>
|
||||
</div>
|
||||
${this.label
|
||||
? html`
|
||||
|
@@ -13,6 +13,7 @@ import { computeDomain } from "../common/entity/compute_domain";
|
||||
import { subscribeNotifications } from "../data/persistent_notification";
|
||||
import { HomeAssistant } from "../types";
|
||||
import "./ha-icon-button";
|
||||
import { mdiMenu } from "@mdi/js";
|
||||
|
||||
@customElement("ha-menu-button")
|
||||
class HaMenuButton extends LitElement {
|
||||
@@ -55,11 +56,12 @@ class HaMenuButton extends LitElement {
|
||||
(entityId) => computeDomain(entityId) === "configurator"
|
||||
));
|
||||
return html`
|
||||
<ha-icon-button
|
||||
<mwc-icon-button
|
||||
aria-label=${this.hass.localize("ui.sidebar.sidebar_toggle")}
|
||||
icon="hass:menu"
|
||||
@click=${this._toggleMenu}
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-svg-icon path=${mdiMenu}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
${hasNotifications ? html` <div class="dot"></div> ` : ""}
|
||||
`;
|
||||
}
|
||||
@@ -133,8 +135,8 @@ class HaMenuButton extends LitElement {
|
||||
background-color: var(--accent-color);
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
top: 5px;
|
||||
right: 2px;
|
||||
top: 9px;
|
||||
right: 7px;
|
||||
border-radius: 50%;
|
||||
border: 2px solid var(--app-header-background-color);
|
||||
}
|
||||
|
@@ -12,10 +12,12 @@ import {
|
||||
export class HaSvgIcon extends LitElement {
|
||||
@property() public path?: string;
|
||||
|
||||
@property() public viewBox?: string;
|
||||
|
||||
protected render(): SVGTemplateResult {
|
||||
return svg`
|
||||
<svg
|
||||
viewBox="0 0 24 24"
|
||||
viewBox=${this.viewBox || "0 0 24 24"}
|
||||
preserveAspectRatio="xMidYMid meet"
|
||||
focusable="false">
|
||||
<g>
|
||||
|
148
src/components/ha-tab.ts
Normal file
148
src/components/ha-tab.ts
Normal file
@@ -0,0 +1,148 @@
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
LitElement,
|
||||
property,
|
||||
TemplateResult,
|
||||
html,
|
||||
queryAsync,
|
||||
internalProperty,
|
||||
eventOptions,
|
||||
} from "lit-element";
|
||||
import "@material/mwc-ripple/mwc-ripple";
|
||||
import type { Ripple } from "@material/mwc-ripple";
|
||||
import { RippleHandlers } from "@material/mwc-ripple/ripple-handlers";
|
||||
import "./ha-icon";
|
||||
import "./ha-svg-icon";
|
||||
import { ifDefined } from "lit-html/directives/if-defined";
|
||||
import { fireEvent } from "../common/dom/fire_event";
|
||||
|
||||
declare global {
|
||||
// for fire event
|
||||
interface HASSDomEvents {
|
||||
activated: undefined;
|
||||
}
|
||||
}
|
||||
|
||||
@customElement("ha-tab")
|
||||
export class HaTab extends LitElement {
|
||||
@property({ type: Boolean, reflect: true }) public active = false;
|
||||
|
||||
@property({ type: Boolean, reflect: true }) public narrow = false;
|
||||
|
||||
@property() public name?: string;
|
||||
|
||||
@queryAsync("mwc-ripple") private _ripple!: Promise<Ripple | null>;
|
||||
|
||||
@internalProperty() private _shouldRenderRipple = false;
|
||||
|
||||
protected render(): TemplateResult {
|
||||
return html`
|
||||
<div
|
||||
tabindex="0"
|
||||
role="tab"
|
||||
aria-selected=${this.active}
|
||||
aria-label=${ifDefined(this.name)}
|
||||
@focus=${this.handleRippleFocus}
|
||||
@blur=${this.handleRippleBlur}
|
||||
@mousedown=${this.handleRippleActivate}
|
||||
@mouseup=${this.handleRippleDeactivate}
|
||||
@mouseenter=${this.handleRippleMouseEnter}
|
||||
@mouseleave=${this.handleRippleMouseLeave}
|
||||
@touchstart=${this.handleRippleActivate}
|
||||
@touchend=${this.handleRippleDeactivate}
|
||||
@touchcancel=${this.handleRippleDeactivate}
|
||||
@keydown=${this._handleKeyDown}
|
||||
@click=${this._handleClick}
|
||||
>
|
||||
${this.narrow ? html`<slot name="icon"></slot>` : ""}
|
||||
${!this.narrow || this.active
|
||||
? html` <span class="name">${this.name}</span> `
|
||||
: ""}
|
||||
${this._shouldRenderRipple ? html`<mwc-ripple></mwc-ripple>` : ""}
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
private _rippleHandlers: RippleHandlers = new RippleHandlers(() => {
|
||||
this._shouldRenderRipple = true;
|
||||
return this._ripple;
|
||||
});
|
||||
|
||||
private _handleKeyDown(ev: KeyboardEvent): void {
|
||||
if (ev.keyCode === 13) {
|
||||
fireEvent(this, "activated");
|
||||
}
|
||||
}
|
||||
|
||||
private _handleClick(): void {
|
||||
fireEvent(this, "activated");
|
||||
}
|
||||
|
||||
@eventOptions({ passive: true })
|
||||
private handleRippleActivate(evt?: Event) {
|
||||
this._rippleHandlers.startPress(evt);
|
||||
}
|
||||
|
||||
private handleRippleDeactivate() {
|
||||
this._rippleHandlers.endPress();
|
||||
}
|
||||
|
||||
private handleRippleMouseEnter() {
|
||||
this._rippleHandlers.startHover();
|
||||
}
|
||||
|
||||
private handleRippleMouseLeave() {
|
||||
this._rippleHandlers.endHover();
|
||||
}
|
||||
|
||||
private handleRippleFocus() {
|
||||
this._rippleHandlers.startFocus();
|
||||
}
|
||||
|
||||
private handleRippleBlur() {
|
||||
this._rippleHandlers.endFocus();
|
||||
}
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
div {
|
||||
padding: 0 32px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 64px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
outline: none;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.name {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
:host([active]) {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
|
||||
:host(:not([narrow])[active]) div {
|
||||
border-bottom: 2px solid var(--primary-color);
|
||||
}
|
||||
|
||||
:host([narrow]) {
|
||||
padding: 0 16px;
|
||||
width: 20%;
|
||||
min-width: 0;
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"ha-tab": HaTab;
|
||||
}
|
||||
}
|
@@ -8,6 +8,8 @@ export interface ConfigUpdateValues {
|
||||
elevation: number;
|
||||
unit_system: "metric" | "imperial";
|
||||
time_zone: string;
|
||||
external_url?: string | null;
|
||||
internal_url?: string | null;
|
||||
}
|
||||
|
||||
export const saveCoreConfig = (
|
||||
|
16
src/data/custom_iconsets.ts
Normal file
16
src/data/custom_iconsets.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
export interface CustomIcon {
|
||||
path: string;
|
||||
viewBox?: string;
|
||||
}
|
||||
|
||||
export interface CustomIconsetsWindow {
|
||||
customIconsets?: { [key: string]: (name: string) => Promise<CustomIcon> };
|
||||
}
|
||||
|
||||
const customIconsetsWindow = window as CustomIconsetsWindow;
|
||||
|
||||
if (!("customIconsets" in customIconsetsWindow)) {
|
||||
customIconsetsWindow.customIconsets = {};
|
||||
}
|
||||
|
||||
export const customIconsets = customIconsetsWindow.customIconsets!;
|
79
src/data/iconsets.ts
Normal file
79
src/data/iconsets.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
import { iconMetadata } from "../resources/icon-metadata";
|
||||
import { IconMeta } from "../types";
|
||||
import { get, set, clear, Store } from "idb-keyval";
|
||||
|
||||
export interface Icons {
|
||||
[key: string]: string;
|
||||
}
|
||||
|
||||
export interface Chunks {
|
||||
[key: string]: Promise<Icons>;
|
||||
}
|
||||
|
||||
export const iconStore = new Store("hass-icon-db", "mdi-icon-store");
|
||||
|
||||
export const MDI_PREFIXES = ["mdi", "hass", "hassio", "hademo"];
|
||||
|
||||
let toRead: Array<[string, (string) => void]> = [];
|
||||
|
||||
// Queue up as many icon fetches in 1 transaction
|
||||
export const getIcon = (iconName: string) =>
|
||||
new Promise<string>((resolve) => {
|
||||
toRead.push([iconName, resolve]);
|
||||
|
||||
if (toRead.length > 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
const results: Array<[(string) => void, IDBRequest]> = [];
|
||||
|
||||
iconStore
|
||||
._withIDBStore("readonly", (store) => {
|
||||
for (const [iconName_, resolve_] of toRead) {
|
||||
results.push([resolve_, store.get(iconName_)]);
|
||||
}
|
||||
toRead = [];
|
||||
})
|
||||
.then(() => {
|
||||
for (const [resolve_, request] of results) {
|
||||
resolve_(request.result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
export const findIconChunk = (icon): string => {
|
||||
let lastChunk: IconMeta;
|
||||
for (const chunk of iconMetadata.parts) {
|
||||
if (chunk.start !== undefined && icon < chunk.start) {
|
||||
break;
|
||||
}
|
||||
lastChunk = chunk;
|
||||
}
|
||||
return lastChunk!.file;
|
||||
};
|
||||
|
||||
export const writeCache = async (chunks: Chunks) => {
|
||||
const keys = Object.keys(chunks);
|
||||
const iconsSets: Icons[] = await Promise.all(Object.values(chunks));
|
||||
// We do a batch opening the store just once, for (considerable) performance
|
||||
iconStore._withIDBStore("readwrite", (store) => {
|
||||
iconsSets.forEach((icons, idx) => {
|
||||
Object.entries(icons).forEach(([name, path]) => {
|
||||
store.put(path, name);
|
||||
});
|
||||
delete chunks[keys[idx]];
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
export const checkCacheVersion = () => {
|
||||
get("_version", iconStore).then((version) => {
|
||||
if (!version) {
|
||||
set("_version", iconMetadata.version, iconStore);
|
||||
} else if (version !== iconMetadata.version) {
|
||||
clear(iconStore).then(() =>
|
||||
set("_version", iconMetadata.version, iconStore)
|
||||
);
|
||||
}
|
||||
});
|
||||
};
|
@@ -7,6 +7,7 @@ export interface IntegrationManifest {
|
||||
name: string;
|
||||
config_flow: boolean;
|
||||
documentation: string;
|
||||
issue_tracker?: string;
|
||||
dependencies?: string[];
|
||||
after_dependencies?: string[];
|
||||
codeowners?: string[];
|
||||
|
@@ -339,7 +339,6 @@ class DataEntryFlowDialog extends LitElement {
|
||||
ha-icon-button {
|
||||
display: inline-block;
|
||||
padding: 8px;
|
||||
margin: 16px 16px 0 0;
|
||||
float: right;
|
||||
}
|
||||
`,
|
||||
|
@@ -10,6 +10,7 @@ import LocalizeMixin from "../../../mixins/localize-mixin";
|
||||
import CoverEntity from "../../../util/cover-model";
|
||||
|
||||
const FEATURE_CLASS_NAMES = {
|
||||
4: "has-set_position",
|
||||
128: "has-set_tilt_position",
|
||||
};
|
||||
class MoreInfoCover extends LocalizeMixin(PolymerElement) {
|
||||
@@ -23,6 +24,7 @@ class MoreInfoCover extends LocalizeMixin(PolymerElement) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.has-set_position .current_position,
|
||||
.has-current_position .current_position,
|
||||
.has-set_tilt_position .tilt,
|
||||
.has-current_tilt_position .tilt {
|
||||
|
@@ -456,15 +456,15 @@ export class HaVoiceCommandDialog extends LitElement {
|
||||
}
|
||||
|
||||
.bouncer {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
.double-bounce1,
|
||||
.double-bounce2 {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 50%;
|
||||
background-color: var(--primary-color);
|
||||
opacity: 0.2;
|
||||
|
@@ -18,4 +18,6 @@ export const demoConfig: HassConfig = {
|
||||
whitelist_external_dirs: [],
|
||||
config_source: "storage",
|
||||
safe_mode: false,
|
||||
internal_url: "http://homeassistant.local:8123",
|
||||
external_url: null,
|
||||
};
|
||||
|
@@ -16,7 +16,9 @@ import { navigate } from "../common/navigate";
|
||||
import "../components/ha-menu-button";
|
||||
import "../components/ha-icon-button-arrow-prev";
|
||||
import { HomeAssistant, Route } from "../types";
|
||||
import "../components/ha-svg-icon";
|
||||
import "../components/ha-icon";
|
||||
import "../components/ha-tab";
|
||||
|
||||
export interface PageNavigation {
|
||||
path: string;
|
||||
@@ -26,6 +28,7 @@ export interface PageNavigation {
|
||||
core?: boolean;
|
||||
advancedOnly?: boolean;
|
||||
icon?: string;
|
||||
iconPath?: string;
|
||||
info?: any;
|
||||
}
|
||||
|
||||
@@ -33,12 +36,12 @@ export interface PageNavigation {
|
||||
class HassTabsSubpage extends LitElement {
|
||||
@property() public hass!: HomeAssistant;
|
||||
|
||||
@property({ type: Boolean }) public hassio = false;
|
||||
|
||||
@property({ type: String, attribute: "back-path" }) public backPath?: string;
|
||||
|
||||
@property() public backCallback?: () => void;
|
||||
|
||||
@property({ type: Boolean }) public hassio = false;
|
||||
|
||||
@property({ type: Boolean, attribute: "main-page" }) public mainPage = false;
|
||||
|
||||
@property() public route!: Route;
|
||||
@@ -69,27 +72,23 @@ class HassTabsSubpage extends LitElement {
|
||||
return shownTabs.map(
|
||||
(page) =>
|
||||
html`
|
||||
<div
|
||||
class="tab ${classMap({
|
||||
active: page === activeTab,
|
||||
})}"
|
||||
@click=${this._tabTapped}
|
||||
<ha-tab
|
||||
.hass=${this.hass}
|
||||
@activated=${this._tabTapped}
|
||||
.path=${page.path}
|
||||
.active=${page === activeTab}
|
||||
.narrow=${this.narrow}
|
||||
.name=${page.translationKey
|
||||
? this.hass.localize(page.translationKey)
|
||||
: page.name}
|
||||
>
|
||||
${this.narrow
|
||||
? html` <ha-icon .icon=${page.icon}></ha-icon> `
|
||||
: ""}
|
||||
${!this.narrow || page === activeTab
|
||||
? html`
|
||||
<span class="name"
|
||||
>${page.translationKey
|
||||
? this.hass.localize(page.translationKey)
|
||||
: page.name}</span
|
||||
>
|
||||
`
|
||||
: ""}
|
||||
<mwc-ripple></mwc-ripple>
|
||||
</div>
|
||||
${page.iconPath
|
||||
? html`<ha-svg-icon
|
||||
slot="icon"
|
||||
.path=${page.iconPath}
|
||||
></ha-svg-icon>`
|
||||
: html`<ha-icon slot="icon" .icon=${page.icon}></ha-icon>`}
|
||||
</ha-tab>
|
||||
`
|
||||
);
|
||||
}
|
||||
@@ -119,8 +118,8 @@ class HassTabsSubpage extends LitElement {
|
||||
${this.mainPage
|
||||
? html`
|
||||
<ha-menu-button
|
||||
.hass=${this.hass}
|
||||
.hassio=${this.hassio}
|
||||
.hass=${this.hass}
|
||||
.narrow=${this.narrow}
|
||||
></ha-menu-button>
|
||||
`
|
||||
@@ -150,7 +149,7 @@ class HassTabsSubpage extends LitElement {
|
||||
`;
|
||||
}
|
||||
|
||||
private _tabTapped(ev: MouseEvent): void {
|
||||
private _tabTapped(ev: Event): void {
|
||||
navigate(this, (ev.currentTarget as any).path, true);
|
||||
}
|
||||
|
||||
@@ -174,6 +173,10 @@ class HassTabsSubpage extends LitElement {
|
||||
background-color: var(--primary-background-color);
|
||||
}
|
||||
|
||||
ha-menu-button {
|
||||
margin-right: 24px;
|
||||
}
|
||||
|
||||
.toolbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -211,35 +214,6 @@ class HassTabsSubpage extends LitElement {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.tab {
|
||||
padding: 0 32px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 64px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.name {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.tab.active {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
|
||||
#tabbar:not(.bottom-bar) .tab.active {
|
||||
border-bottom: 2px solid var(--primary-color);
|
||||
}
|
||||
|
||||
.bottom-bar .tab {
|
||||
padding: 0 16px;
|
||||
width: 20%;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
:host(:not([narrow])) #toolbar-icon {
|
||||
min-width: 40px;
|
||||
}
|
||||
|
@@ -16,7 +16,7 @@ import {
|
||||
DataTableColumnContainer,
|
||||
RowClickedEvent,
|
||||
} from "../../../components/data-table/ha-data-table";
|
||||
import "../../../components/ha-fab";
|
||||
import "@material/mwc-fab";
|
||||
import {
|
||||
AreaRegistryEntry,
|
||||
createAreaRegistryEntry,
|
||||
@@ -26,6 +26,8 @@ import {
|
||||
devicesInArea,
|
||||
} from "../../../data/device_registry";
|
||||
import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box";
|
||||
import "../../../components/ha-icon-button";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import "../../../layouts/hass-loading-screen";
|
||||
import "../../../layouts/hass-tabs-subpage-data-table";
|
||||
import { HomeAssistant, Route } from "../../../types";
|
||||
@@ -35,6 +37,7 @@ import {
|
||||
loadAreaRegistryDetailDialog,
|
||||
showAreaRegistryDetailDialog,
|
||||
} from "./show-dialog-area-registry-detail";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
|
||||
@customElement("ha-config-areas-dashboard")
|
||||
export class HaConfigAreasDashboard extends LitElement {
|
||||
@@ -120,15 +123,16 @@ export class HaConfigAreasDashboard extends LitElement {
|
||||
@click=${this._showHelp}
|
||||
></ha-icon-button>
|
||||
</hass-tabs-subpage-data-table>
|
||||
<ha-fab
|
||||
<mwc-fab
|
||||
?is-wide=${this.isWide}
|
||||
?narrow=${this.narrow}
|
||||
icon="hass:plus"
|
||||
title="${this.hass.localize(
|
||||
"ui.panel.config.areas.picker.create_area"
|
||||
)}"
|
||||
@click=${this._createArea}
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiPlus}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -177,25 +181,25 @@ export class HaConfigAreasDashboard extends LitElement {
|
||||
--app-header-background-color: var(--sidebar-background-color);
|
||||
--app-header-text-color: var(--sidebar-text-color);
|
||||
}
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: fixed;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
z-index: 1;
|
||||
}
|
||||
ha-fab[is-wide] {
|
||||
mwc-fab[is-wide] {
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
}
|
||||
ha-fab[narrow] {
|
||||
mwc-fab[narrow] {
|
||||
bottom: 84px;
|
||||
}
|
||||
ha-fab.rtl {
|
||||
mwc-fab.rtl {
|
||||
right: auto;
|
||||
left: 16px;
|
||||
}
|
||||
|
||||
ha-fab[is-wide].rtl {
|
||||
mwc-fab[is-wide].rtl {
|
||||
bottom: 24px;
|
||||
right: auto;
|
||||
left: 24px;
|
||||
|
@@ -14,7 +14,8 @@ import { classMap } from "lit-html/directives/class-map";
|
||||
import { navigate } from "../../../common/navigate";
|
||||
import { computeRTL } from "../../../common/util/compute_rtl";
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/ha-fab";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import "@material/mwc-fab";
|
||||
import {
|
||||
AutomationConfig,
|
||||
AutomationEntity,
|
||||
@@ -40,6 +41,7 @@ import { HaDeviceAction } from "./action/types/ha-automation-action-device_id";
|
||||
import "./condition/ha-automation-condition";
|
||||
import "./trigger/ha-automation-trigger";
|
||||
import { HaDeviceTrigger } from "./trigger/types/ha-automation-trigger-device";
|
||||
import { mdiContentSave } from "@mdi/js";
|
||||
|
||||
export class HaAutomationEditor extends LitElement {
|
||||
@property() public hass!: HomeAssistant;
|
||||
@@ -244,11 +246,10 @@ export class HaAutomationEditor extends LitElement {
|
||||
</div>
|
||||
`
|
||||
: ""}
|
||||
<ha-fab
|
||||
<mwc-fab
|
||||
?is-wide="${this.isWide}"
|
||||
?narrow="${this.narrow}"
|
||||
?dirty="${this._dirty}"
|
||||
icon="hass:content-save"
|
||||
.title="${this.hass.localize(
|
||||
"ui.panel.config.automation.editor.save"
|
||||
)}"
|
||||
@@ -256,7 +257,9 @@ export class HaAutomationEditor extends LitElement {
|
||||
class="${classMap({
|
||||
rtl: computeRTL(this.hass),
|
||||
})}"
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiContentSave}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
</hass-tabs-subpage>
|
||||
`;
|
||||
}
|
||||
@@ -452,7 +455,7 @@ export class HaAutomationEditor extends LitElement {
|
||||
ha-entity-toggle {
|
||||
margin-right: 8px;
|
||||
}
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: fixed;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
@@ -461,24 +464,24 @@ export class HaAutomationEditor extends LitElement {
|
||||
transition: margin-bottom 0.3s;
|
||||
}
|
||||
|
||||
ha-fab[is-wide] {
|
||||
mwc-fab[is-wide] {
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
}
|
||||
ha-fab[narrow] {
|
||||
mwc-fab[narrow] {
|
||||
bottom: 84px;
|
||||
margin-bottom: -140px;
|
||||
}
|
||||
ha-fab[dirty] {
|
||||
mwc-fab[dirty] {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
ha-fab.rtl {
|
||||
mwc-fab.rtl {
|
||||
right: auto;
|
||||
left: 16px;
|
||||
}
|
||||
|
||||
ha-fab[is-wide].rtl {
|
||||
mwc-fab[is-wide].rtl {
|
||||
bottom: 24px;
|
||||
right: auto;
|
||||
left: 24px;
|
||||
|
@@ -18,7 +18,7 @@ import { computeStateName } from "../../../common/entity/compute_state_name";
|
||||
import { computeRTL } from "../../../common/util/compute_rtl";
|
||||
import { DataTableColumnContainer } from "../../../components/data-table/ha-data-table";
|
||||
import "../../../components/entity/ha-entity-toggle";
|
||||
import "../../../components/ha-fab";
|
||||
import "@material/mwc-fab";
|
||||
import {
|
||||
AutomationConfig,
|
||||
AutomationEntity,
|
||||
@@ -30,6 +30,8 @@ import { haStyle } from "../../../resources/styles";
|
||||
import { HomeAssistant, Route } from "../../../types";
|
||||
import { configSections } from "../ha-panel-config";
|
||||
import { showThingtalkDialog } from "./show-dialog-thingtalk";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
|
||||
@customElement("ha-automation-picker")
|
||||
class HaAutomationPicker extends LitElement {
|
||||
@@ -168,17 +170,18 @@ class HaAutomationPicker extends LitElement {
|
||||
hasFab
|
||||
>
|
||||
</hass-tabs-subpage-data-table>
|
||||
<ha-fab
|
||||
<mwc-fab
|
||||
slot="fab"
|
||||
?is-wide=${this.isWide}
|
||||
?narrow=${this.narrow}
|
||||
icon="hass:plus"
|
||||
title=${this.hass.localize(
|
||||
"ui.panel.config.automation.picker.add_automation"
|
||||
)}
|
||||
?rtl=${computeRTL(this.hass)}
|
||||
@click=${this._createNew}
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiPlus}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -208,7 +211,7 @@ class HaAutomationPicker extends LitElement {
|
||||
return [
|
||||
haStyle,
|
||||
css`
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: fixed;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
@@ -216,19 +219,19 @@ class HaAutomationPicker extends LitElement {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
ha-fab[is-wide] {
|
||||
mwc-fab[is-wide] {
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
}
|
||||
ha-fab[narrow] {
|
||||
mwc-fab[narrow] {
|
||||
bottom: 84px;
|
||||
}
|
||||
ha-fab[rtl] {
|
||||
mwc-fab[rtl] {
|
||||
right: auto;
|
||||
left: 16px;
|
||||
}
|
||||
|
||||
ha-fab[rtl][is-wide] {
|
||||
mwc-fab[rtl][is-wide] {
|
||||
bottom: 24px;
|
||||
right: auto;
|
||||
left: 24px;
|
||||
|
@@ -11,6 +11,7 @@ import "../../../resources/ha-style";
|
||||
import "../ha-config-section";
|
||||
import "./ha-config-core-form";
|
||||
import "./ha-config-name-form";
|
||||
import "./ha-config-url-form";
|
||||
|
||||
/*
|
||||
* @appliesMixin LocalizeMixin
|
||||
@@ -59,6 +60,7 @@ class HaConfigSectionCore extends LocalizeMixin(PolymerElement) {
|
||||
|
||||
<ha-config-name-form hass="[[hass]]"></ha-config-name-form>
|
||||
<ha-config-core-form hass="[[hass]]"></ha-config-core-form>
|
||||
<ha-config-url-form hass="[[hass]]"></ha-config-url-form>
|
||||
</ha-config-section>
|
||||
`;
|
||||
}
|
||||
|
168
src/panels/config/core/ha-config-url-form.ts
Normal file
168
src/panels/config/core/ha-config-url-form.ts
Normal file
@@ -0,0 +1,168 @@
|
||||
import "@material/mwc-button/mwc-button";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import type { PaperInputElement } from "@polymer/paper-input/paper-input";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import "../../../components/ha-card";
|
||||
import { saveCoreConfig } from "../../../data/core";
|
||||
import type { PolymerChangedEvent } from "../../../polymer-types";
|
||||
import type { HomeAssistant } from "../../../types";
|
||||
|
||||
@customElement("ha-config-url-form")
|
||||
class ConfigUrlForm extends LitElement {
|
||||
@property() public hass!: HomeAssistant;
|
||||
|
||||
@property() private _error?: string;
|
||||
|
||||
@property() private _working = false;
|
||||
|
||||
@property() private _external_url?: string;
|
||||
|
||||
@property() private _internal_url?: string;
|
||||
|
||||
protected render(): TemplateResult {
|
||||
const canEdit = ["storage", "default"].includes(
|
||||
this.hass.config.config_source
|
||||
);
|
||||
const disabled = this._working || !canEdit;
|
||||
|
||||
if (!this.hass.userData?.showAdvanced) {
|
||||
return html``;
|
||||
}
|
||||
|
||||
return html`
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
${!canEdit
|
||||
? html`
|
||||
<p>
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.core.section.core.core_config.edit_requires_storage"
|
||||
)}
|
||||
</p>
|
||||
`
|
||||
: ""}
|
||||
${this._error ? html`<div class="error">${this._error}</div>` : ""}
|
||||
<div class="row">
|
||||
<div class="flex">
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.core.section.core.core_config.external_url"
|
||||
)}
|
||||
</div>
|
||||
|
||||
<paper-input
|
||||
class="flex"
|
||||
.label=${this.hass.localize(
|
||||
"ui.panel.config.core.section.core.core_config.external_url"
|
||||
)}
|
||||
name="external_url"
|
||||
type="url"
|
||||
.disabled=${disabled}
|
||||
.value=${this._externalUrlValue}
|
||||
@value-changed=${this._handleChange}
|
||||
>
|
||||
</paper-input>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="flex">
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.core.section.core.core_config.internal_url"
|
||||
)}
|
||||
</div>
|
||||
<paper-input
|
||||
class="flex"
|
||||
.label=${this.hass.localize(
|
||||
"ui.panel.config.core.section.core.core_config.internal_url"
|
||||
)}
|
||||
name="internal_url"
|
||||
type="url"
|
||||
.disabled=${disabled}
|
||||
.value=${this._internalUrlValue}
|
||||
@value-changed=${this._handleChange}
|
||||
>
|
||||
</paper-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-actions">
|
||||
<mwc-button @click=${this._save} .disabled=${disabled}>
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.core.section.core.core_config.save_button"
|
||||
)}
|
||||
</mwc-button>
|
||||
</div>
|
||||
</ha-card>
|
||||
`;
|
||||
}
|
||||
|
||||
private get _internalUrlValue() {
|
||||
return this._internal_url !== undefined
|
||||
? this._internal_url
|
||||
: this.hass.config.internal_url;
|
||||
}
|
||||
|
||||
private get _externalUrlValue() {
|
||||
return this._external_url !== undefined
|
||||
? this._external_url
|
||||
: this.hass.config.external_url;
|
||||
}
|
||||
|
||||
private _handleChange(ev: PolymerChangedEvent<string>) {
|
||||
const target = ev.currentTarget as PaperInputElement;
|
||||
this[`_${target.name}`] = target.value;
|
||||
}
|
||||
|
||||
private async _save() {
|
||||
this._working = true;
|
||||
this._error = undefined;
|
||||
try {
|
||||
await saveCoreConfig(this.hass, {
|
||||
external_url: this._external_url || null,
|
||||
internal_url: this._internal_url || null,
|
||||
});
|
||||
} catch (err) {
|
||||
this._error = err.message || err;
|
||||
} finally {
|
||||
this._working = false;
|
||||
}
|
||||
}
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
.row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin: 0 -8px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.secondary {
|
||||
color: var(--secondary-text-color);
|
||||
}
|
||||
|
||||
.flex {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.row > * {
|
||||
margin: 0 8px;
|
||||
}
|
||||
.error {
|
||||
color: var(--error-color);
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"ha-config-url-form": ConfigUrlForm;
|
||||
}
|
||||
}
|
@@ -22,7 +22,7 @@ import {
|
||||
DataTableColumnContainer,
|
||||
RowClickedEvent,
|
||||
} from "../../../components/data-table/ha-data-table";
|
||||
import "../../../components/ha-fab";
|
||||
import "@material/mwc-fab";
|
||||
import "../../../components/ha-icon";
|
||||
import "../../../layouts/hass-loading-screen";
|
||||
import "../../../layouts/hass-tabs-subpage-data-table";
|
||||
@@ -31,6 +31,8 @@ import { showEntityEditorDialog } from "../entities/show-dialog-entity-editor";
|
||||
import { configSections } from "../ha-panel-config";
|
||||
import { HELPER_DOMAINS } from "./const";
|
||||
import { showHelperDetailDialog } from "./show-dialog-helper-detail";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
|
||||
@customElement("ha-config-helpers")
|
||||
export class HaConfigHelpers extends LitElement {
|
||||
@@ -154,15 +156,16 @@ export class HaConfigHelpers extends LitElement {
|
||||
hasFab
|
||||
>
|
||||
</hass-tabs-subpage-data-table>
|
||||
<ha-fab
|
||||
<mwc-fab
|
||||
?is-wide=${this.isWide}
|
||||
?narrow=${this.narrow}
|
||||
icon="hass:plus"
|
||||
title="${this.hass.localize(
|
||||
"ui.panel.config.helpers.picker.add_helper"
|
||||
)}"
|
||||
@click=${this._createHelpler}
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiPlus}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -209,17 +212,17 @@ export class HaConfigHelpers extends LitElement {
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: fixed;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
z-index: 1;
|
||||
}
|
||||
ha-fab[is-wide] {
|
||||
mwc-fab[is-wide] {
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
}
|
||||
ha-fab[narrow] {
|
||||
mwc-fab[narrow] {
|
||||
bottom: 84px;
|
||||
}
|
||||
`;
|
||||
|
@@ -20,7 +20,7 @@ import {
|
||||
} from "../../../common/util/render-status";
|
||||
import "../../../components/entity/ha-state-icon";
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/ha-fab";
|
||||
import "@material/mwc-fab";
|
||||
import {
|
||||
ConfigEntry,
|
||||
deleteConfigEntry,
|
||||
@@ -58,6 +58,8 @@ import type {
|
||||
HaIntegrationCard,
|
||||
} from "./ha-integration-card";
|
||||
import { HASSDomEvent } from "../../../common/dom/fire_event";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
|
||||
interface DataEntryFlowProgressExtended extends DataEntryFlowProgress {
|
||||
localized_title?: string;
|
||||
@@ -452,15 +454,16 @@ class HaConfigIntegrations extends SubscribeMixin(LitElement) {
|
||||
`
|
||||
: ""}
|
||||
</div>
|
||||
<ha-fab
|
||||
icon="hass:plus"
|
||||
<mwc-fab
|
||||
aria-label=${this.hass.localize("ui.panel.config.integrations.new")}
|
||||
title=${this.hass.localize("ui.panel.config.integrations.new")}
|
||||
@click=${this._createFlow}
|
||||
?is-wide=${this.isWide}
|
||||
?narrow=${this.narrow}
|
||||
?rtl=${computeRTL(this.hass!)}
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiPlus}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
</hass-tabs-subpage>
|
||||
`;
|
||||
}
|
||||
@@ -680,24 +683,24 @@ class HaConfigIntegrations extends SubscribeMixin(LitElement) {
|
||||
h2 {
|
||||
margin-top: 0;
|
||||
}
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: fixed;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
z-index: 1;
|
||||
}
|
||||
ha-fab[is-wide] {
|
||||
mwc-fab[is-wide] {
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
}
|
||||
ha-fab[narrow] {
|
||||
mwc-fab[narrow] {
|
||||
bottom: 84px;
|
||||
}
|
||||
ha-fab[rtl] {
|
||||
mwc-fab[rtl] {
|
||||
right: auto;
|
||||
left: 16px;
|
||||
}
|
||||
ha-fab[is-wide].rtl {
|
||||
mwc-fab[is-wide].rtl {
|
||||
bottom: 24px;
|
||||
left: 24px;
|
||||
right: auto;
|
||||
|
@@ -148,7 +148,9 @@ export class HaIntegrationCard extends LitElement {
|
||||
>
|
||||
`
|
||||
: ""}
|
||||
${devices.length && entities.length ? "and" : ""}
|
||||
${devices.length && entities.length
|
||||
? this.hass.localize("ui.common.and")
|
||||
: ""}
|
||||
${entities.length
|
||||
? html`
|
||||
<a
|
||||
|
@@ -1,3 +1,4 @@
|
||||
import "@material/mwc-fab";
|
||||
import "@polymer/paper-tooltip/paper-tooltip";
|
||||
import {
|
||||
css,
|
||||
@@ -16,7 +17,6 @@ import {
|
||||
DataTableColumnContainer,
|
||||
RowClickedEvent,
|
||||
} from "../../../../components/data-table/ha-data-table";
|
||||
import "../../../../components/ha-fab";
|
||||
import "../../../../components/ha-icon";
|
||||
import "../../../../components/ha-icon-button";
|
||||
import {
|
||||
@@ -34,6 +34,8 @@ import "../../../../layouts/hass-tabs-subpage-data-table";
|
||||
import { HomeAssistant, Route } from "../../../../types";
|
||||
import { lovelaceTabs } from "../ha-config-lovelace";
|
||||
import { showDashboardDetailDialog } from "./show-dialog-lovelace-dashboard-detail";
|
||||
import "../../../../components/ha-svg-icon";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
|
||||
@customElement("ha-config-lovelace-dashboards")
|
||||
export class HaConfigLovelaceDashboards extends LitElement {
|
||||
@@ -222,15 +224,16 @@ export class HaConfigLovelaceDashboards extends LitElement {
|
||||
hasFab
|
||||
>
|
||||
</hass-tabs-subpage-data-table>
|
||||
<ha-fab
|
||||
<mwc-fab
|
||||
?is-wide=${this.isWide}
|
||||
?narrow=${this.narrow}
|
||||
icon="hass:plus"
|
||||
title="${this.hass.localize(
|
||||
"ui.panel.config.lovelace.dashboards.picker.add_dashboard"
|
||||
)}"
|
||||
@click=${this._addDashboard}
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiPlus}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -308,17 +311,17 @@ export class HaConfigLovelaceDashboards extends LitElement {
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: fixed;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
z-index: 1;
|
||||
}
|
||||
ha-fab[is-wide] {
|
||||
mwc-fab[is-wide] {
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
}
|
||||
ha-fab[narrow] {
|
||||
mwc-fab[narrow] {
|
||||
bottom: 84px;
|
||||
}
|
||||
`;
|
||||
|
@@ -3,6 +3,7 @@ import "@polymer/paper-dropdown-menu/paper-dropdown-menu";
|
||||
import "@polymer/paper-item/paper-icon-item";
|
||||
import "@polymer/paper-listbox/paper-listbox";
|
||||
import "@polymer/paper-tooltip/paper-tooltip";
|
||||
import "@material/mwc-fab";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -19,7 +20,6 @@ import {
|
||||
DataTableColumnContainer,
|
||||
RowClickedEvent,
|
||||
} from "../../../../components/data-table/ha-data-table";
|
||||
import "../../../../components/ha-fab";
|
||||
import "../../../../components/ha-icon";
|
||||
import {
|
||||
createResource,
|
||||
@@ -38,6 +38,8 @@ import { HomeAssistant, Route } from "../../../../types";
|
||||
import { loadLovelaceResources } from "../../../lovelace/common/load-resources";
|
||||
import { lovelaceTabs } from "../ha-config-lovelace";
|
||||
import { showResourceDetailDialog } from "./show-dialog-lovelace-resource-detail";
|
||||
import "../../../../components/ha-svg-icon";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
|
||||
@customElement("ha-config-lovelace-resources")
|
||||
export class HaConfigLovelaceRescources extends LitElement {
|
||||
@@ -102,15 +104,16 @@ export class HaConfigLovelaceRescources extends LitElement {
|
||||
hasFab
|
||||
>
|
||||
</hass-tabs-subpage-data-table>
|
||||
<ha-fab
|
||||
<mwc-fab
|
||||
?is-wide=${this.isWide}
|
||||
?narrow=${this.narrow}
|
||||
icon="hass:plus"
|
||||
title=${this.hass.localize(
|
||||
"ui.panel.config.lovelace.resources.picker.add_resource"
|
||||
)}
|
||||
@click=${this._addResource}
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiPlus}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -199,17 +202,17 @@ export class HaConfigLovelaceRescources extends LitElement {
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: fixed;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
z-index: 1;
|
||||
}
|
||||
ha-fab[is-wide] {
|
||||
mwc-fab[is-wide] {
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
}
|
||||
ha-fab[narrow] {
|
||||
mwc-fab[narrow] {
|
||||
bottom: 84px;
|
||||
}
|
||||
`;
|
||||
|
@@ -10,7 +10,7 @@ import {
|
||||
} from "lit-element";
|
||||
import { compare } from "../../../common/string/compare";
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/ha-fab";
|
||||
import "@material/mwc-fab";
|
||||
import {
|
||||
createPerson,
|
||||
deletePerson,
|
||||
@@ -29,6 +29,8 @@ import {
|
||||
loadPersonDetailDialog,
|
||||
showPersonDetailDialog,
|
||||
} from "./show-dialog-person-detail";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
|
||||
class HaConfigPerson extends LitElement {
|
||||
@property() public hass?: HomeAssistant;
|
||||
@@ -121,13 +123,14 @@ class HaConfigPerson extends LitElement {
|
||||
</ha-config-section>
|
||||
</hass-tabs-subpage>
|
||||
|
||||
<ha-fab
|
||||
<mwc-fab
|
||||
?is-wide=${this.isWide}
|
||||
?narrow=${this.narrow}
|
||||
icon="hass:plus"
|
||||
title="${hass.localize("ui.panel.config.person.add_person")}"
|
||||
@click=${this._createPerson}
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiPlus}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -237,16 +240,16 @@ class HaConfigPerson extends LitElement {
|
||||
ha-card.storage paper-item {
|
||||
cursor: pointer;
|
||||
}
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: fixed;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
z-index: 1;
|
||||
}
|
||||
ha-fab[narrow] {
|
||||
mwc-fab[narrow] {
|
||||
bottom: 84px;
|
||||
}
|
||||
ha-fab[is-wide] {
|
||||
mwc-fab[is-wide] {
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
}
|
||||
|
@@ -15,7 +15,7 @@ import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { computeStateName } from "../../../common/entity/compute_state_name";
|
||||
import { computeRTL } from "../../../common/util/compute_rtl";
|
||||
import { DataTableColumnContainer } from "../../../components/data-table/ha-data-table";
|
||||
import "../../../components/ha-fab";
|
||||
import "@material/mwc-fab";
|
||||
import { forwardHaptic } from "../../../data/haptics";
|
||||
import { activateScene, SceneEntity } from "../../../data/scene";
|
||||
import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box";
|
||||
@@ -24,6 +24,8 @@ import { haStyle } from "../../../resources/styles";
|
||||
import { HomeAssistant, Route } from "../../../types";
|
||||
import { showToast } from "../../../util/toast";
|
||||
import { configSections } from "../ha-panel-config";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
|
||||
@customElement("ha-scene-dashboard")
|
||||
class HaSceneDashboard extends LitElement {
|
||||
@@ -144,13 +146,14 @@ class HaSceneDashboard extends LitElement {
|
||||
></ha-icon-button>
|
||||
</hass-tabs-subpage-data-table>
|
||||
<a href="/config/scene/edit/new">
|
||||
<ha-fab
|
||||
<mwc-fab
|
||||
?is-wide=${this.isWide}
|
||||
?narrow=${this.narrow}
|
||||
icon="hass:plus"
|
||||
title=${this.hass.localize("ui.panel.config.scene.picker.add_scene")}
|
||||
?rtl=${computeRTL(this.hass)}
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiPlus}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
</a>
|
||||
`;
|
||||
}
|
||||
@@ -197,26 +200,26 @@ class HaSceneDashboard extends LitElement {
|
||||
return [
|
||||
haStyle,
|
||||
css`
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: fixed;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
ha-fab[is-wide] {
|
||||
mwc-fab[is-wide] {
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
}
|
||||
ha-fab[narrow] {
|
||||
mwc-fab[narrow] {
|
||||
bottom: 84px;
|
||||
}
|
||||
ha-fab[rtl] {
|
||||
mwc-fab[rtl] {
|
||||
right: auto;
|
||||
left: 16px;
|
||||
}
|
||||
|
||||
ha-fab[rtl][is-wide] {
|
||||
mwc-fab[rtl][is-wide] {
|
||||
bottom: 24px;
|
||||
right: auto;
|
||||
left: 24px;
|
||||
|
@@ -23,7 +23,7 @@ import { computeRTL } from "../../../common/util/compute_rtl";
|
||||
import "../../../components/device/ha-device-picker";
|
||||
import "../../../components/entity/ha-entities-picker";
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/ha-fab";
|
||||
import "@material/mwc-fab";
|
||||
import {
|
||||
computeDeviceName,
|
||||
DeviceRegistryEntry,
|
||||
@@ -54,6 +54,8 @@ import { haStyle } from "../../../resources/styles";
|
||||
import { HomeAssistant, Route } from "../../../types";
|
||||
import "../ha-config-section";
|
||||
import { configSections } from "../ha-panel-config";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import { mdiContentSave } from "@mdi/js";
|
||||
|
||||
interface DeviceEntities {
|
||||
id: string;
|
||||
@@ -372,17 +374,18 @@ export class HaSceneEditor extends SubscribeMixin(LitElement) {
|
||||
`
|
||||
: ""}
|
||||
</div>
|
||||
<ha-fab
|
||||
<mwc-fab
|
||||
?is-wide=${this.isWide}
|
||||
?narrow=${this.narrow}
|
||||
?dirty=${this._dirty}
|
||||
icon="hass:content-save"
|
||||
.title=${this.hass.localize("ui.panel.config.scene.editor.save")}
|
||||
@click=${this._saveScene}
|
||||
class=${classMap({
|
||||
rtl: computeRTL(this.hass),
|
||||
})}
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiContentSave}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
</hass-tabs-subpage>
|
||||
`;
|
||||
}
|
||||
@@ -728,7 +731,7 @@ export class HaSceneEditor extends SubscribeMixin(LitElement) {
|
||||
span[slot="introduction"] a {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: fixed;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
@@ -737,24 +740,24 @@ export class HaSceneEditor extends SubscribeMixin(LitElement) {
|
||||
transition: margin-bottom 0.3s;
|
||||
}
|
||||
|
||||
ha-fab[is-wide] {
|
||||
mwc-fab[is-wide] {
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
}
|
||||
ha-fab[narrow] {
|
||||
mwc-fab[narrow] {
|
||||
bottom: 84px;
|
||||
margin-bottom: -140px;
|
||||
}
|
||||
ha-fab[dirty] {
|
||||
mwc-fab[dirty] {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
ha-fab.rtl {
|
||||
mwc-fab.rtl {
|
||||
right: auto;
|
||||
left: 16px;
|
||||
}
|
||||
|
||||
ha-fab[is-wide].rtl {
|
||||
mwc-fab[is-wide].rtl {
|
||||
bottom: 24px;
|
||||
right: auto;
|
||||
left: 24px;
|
||||
|
@@ -15,7 +15,7 @@ import { computeObjectId } from "../../../common/entity/compute_object_id";
|
||||
import { navigate } from "../../../common/navigate";
|
||||
import { computeRTL } from "../../../common/util/compute_rtl";
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/ha-fab";
|
||||
import "@material/mwc-fab";
|
||||
import {
|
||||
Action,
|
||||
deleteScript,
|
||||
@@ -30,6 +30,8 @@ import "../automation/action/ha-automation-action";
|
||||
import { HaDeviceAction } from "../automation/action/types/ha-automation-action-device_id";
|
||||
import "../ha-config-section";
|
||||
import { configSections } from "../ha-panel-config";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import { mdiContentSave } from "@mdi/js";
|
||||
|
||||
export class HaScriptEditor extends LitElement {
|
||||
@property() public hass!: HomeAssistant;
|
||||
@@ -139,17 +141,18 @@ export class HaScriptEditor extends LitElement {
|
||||
: ""}
|
||||
</div>
|
||||
</div>
|
||||
<ha-fab
|
||||
<mwc-fab
|
||||
?is-wide=${this.isWide}
|
||||
?narrow=${this.narrow}
|
||||
?dirty=${this._dirty}
|
||||
icon="hass:content-save"
|
||||
.title="${this.hass.localize("ui.common.save")}"
|
||||
@click=${this._saveScript}
|
||||
class="${classMap({
|
||||
rtl: computeRTL(this.hass),
|
||||
})}"
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiContentSave}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
</hass-tabs-subpage>
|
||||
`;
|
||||
}
|
||||
@@ -300,7 +303,7 @@ export class HaScriptEditor extends LitElement {
|
||||
span[slot="introduction"] a {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: fixed;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
@@ -309,24 +312,24 @@ export class HaScriptEditor extends LitElement {
|
||||
transition: margin-bottom 0.3s;
|
||||
}
|
||||
|
||||
ha-fab[is-wide] {
|
||||
mwc-fab[is-wide] {
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
}
|
||||
ha-fab[narrow] {
|
||||
mwc-fab[narrow] {
|
||||
bottom: 84px;
|
||||
margin-bottom: -140px;
|
||||
}
|
||||
ha-fab[dirty] {
|
||||
mwc-fab[dirty] {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
ha-fab.rtl {
|
||||
mwc-fab.rtl {
|
||||
right: auto;
|
||||
left: 16px;
|
||||
}
|
||||
|
||||
ha-fab[is-wide].rtl {
|
||||
mwc-fab[is-wide].rtl {
|
||||
bottom: 24px;
|
||||
right: auto;
|
||||
left: 24px;
|
||||
|
@@ -15,7 +15,7 @@ import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { computeStateName } from "../../../common/entity/compute_state_name";
|
||||
import { computeRTL } from "../../../common/util/compute_rtl";
|
||||
import { DataTableColumnContainer } from "../../../components/data-table/ha-data-table";
|
||||
import "../../../components/ha-fab";
|
||||
import "@material/mwc-fab";
|
||||
import { triggerScript } from "../../../data/script";
|
||||
import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box";
|
||||
import "../../../layouts/hass-tabs-subpage-data-table";
|
||||
@@ -23,6 +23,8 @@ import { haStyle } from "../../../resources/styles";
|
||||
import { HomeAssistant, Route } from "../../../types";
|
||||
import { showToast } from "../../../util/toast";
|
||||
import { configSections } from "../ha-panel-config";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
|
||||
@customElement("ha-script-picker")
|
||||
class HaScriptPicker extends LitElement {
|
||||
@@ -139,15 +141,16 @@ class HaScriptPicker extends LitElement {
|
||||
></ha-icon-button>
|
||||
</hass-tabs-subpage-data-table>
|
||||
<a href="/config/script/edit/new">
|
||||
<ha-fab
|
||||
<mwc-fab
|
||||
?is-wide=${this.isWide}
|
||||
?narrow=${this.narrow}
|
||||
icon="hass:plus"
|
||||
title="${this.hass.localize(
|
||||
"ui.panel.config.script.picker.add_script"
|
||||
)}"
|
||||
?rtl=${computeRTL(this.hass)}
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiPlus}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
</a>
|
||||
`;
|
||||
}
|
||||
@@ -193,26 +196,26 @@ class HaScriptPicker extends LitElement {
|
||||
return [
|
||||
haStyle,
|
||||
css`
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: fixed;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
ha-fab[is-wide] {
|
||||
mwc-fab[is-wide] {
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
}
|
||||
ha-fab[narrow] {
|
||||
mwc-fab[narrow] {
|
||||
bottom: 84px;
|
||||
}
|
||||
ha-fab[rtl] {
|
||||
mwc-fab[rtl] {
|
||||
right: auto;
|
||||
left: 16px;
|
||||
}
|
||||
|
||||
ha-fab[rtl][is-wide] {
|
||||
mwc-fab[rtl][is-wide] {
|
||||
bottom: 24px;
|
||||
right: auto;
|
||||
left: 24px;
|
||||
|
@@ -13,7 +13,7 @@ import {
|
||||
DataTableColumnContainer,
|
||||
RowClickedEvent,
|
||||
} from "../../../components/data-table/ha-data-table";
|
||||
import "../../../components/ha-fab";
|
||||
import "@material/mwc-fab";
|
||||
import { deleteUser, fetchUsers, updateUser, User } from "../../../data/user";
|
||||
import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box";
|
||||
import "../../../layouts/hass-tabs-subpage-data-table";
|
||||
@@ -21,6 +21,8 @@ import { HomeAssistant, Route } from "../../../types";
|
||||
import { configSections } from "../ha-panel-config";
|
||||
import { showAddUserDialog } from "./show-dialog-add-user";
|
||||
import { showUserDetailDialog } from "./show-dialog-user-detail";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
|
||||
@customElement("ha-config-users")
|
||||
export class HaConfigUsers extends LitElement {
|
||||
@@ -97,14 +99,15 @@ export class HaConfigUsers extends LitElement {
|
||||
hasFab
|
||||
>
|
||||
</hass-tabs-subpage-data-table>
|
||||
<ha-fab
|
||||
<mwc-fab
|
||||
?is-wide=${this.isWide}
|
||||
?narrow=${this.narrow}
|
||||
icon="hass:plus"
|
||||
.title=${this.hass.localize("ui.panel.config.users.picker.add_user")}
|
||||
@click=${this._addUser}
|
||||
?rtl=${computeRTL(this.hass)}
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiPlus}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -166,24 +169,24 @@ export class HaConfigUsers extends LitElement {
|
||||
|
||||
static get styles() {
|
||||
return css`
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: fixed;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
z-index: 1;
|
||||
}
|
||||
ha-fab[is-wide] {
|
||||
mwc-fab[is-wide] {
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
}
|
||||
ha-fab[rtl] {
|
||||
mwc-fab[rtl] {
|
||||
right: auto;
|
||||
left: 16px;
|
||||
}
|
||||
ha-fab[narrow] {
|
||||
mwc-fab[narrow] {
|
||||
bottom: 84px;
|
||||
}
|
||||
ha-fab[rtl][is-wide] {
|
||||
mwc-fab[rtl][is-wide] {
|
||||
bottom: 24px;
|
||||
right: auto;
|
||||
left: 24px;
|
||||
|
@@ -20,7 +20,7 @@ import { computeStateDomain } from "../../../common/entity/compute_state_domain"
|
||||
import { navigate } from "../../../common/navigate";
|
||||
import { compare } from "../../../common/string/compare";
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/ha-fab";
|
||||
import "@material/mwc-fab";
|
||||
import "../../../components/map/ha-locations-editor";
|
||||
import type {
|
||||
HaLocationsEditor,
|
||||
@@ -47,6 +47,8 @@ import type { HomeAssistant, Route } from "../../../types";
|
||||
import "../ha-config-section";
|
||||
import { configSections } from "../ha-panel-config";
|
||||
import { showZoneDetailDialog } from "./show-dialog-zone-detail";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
|
||||
@customElement("ha-config-zone")
|
||||
export class HaConfigZone extends SubscribeMixin(LitElement) {
|
||||
@@ -244,13 +246,14 @@ export class HaConfigZone extends SubscribeMixin(LitElement) {
|
||||
: ""}
|
||||
</hass-tabs-subpage>
|
||||
|
||||
<ha-fab
|
||||
<mwc-fab
|
||||
?is-wide=${this.isWide}
|
||||
?narrow=${this.narrow}
|
||||
icon="hass:plus"
|
||||
title="${hass.localize("ui.panel.config.zone.add_zone")}"
|
||||
@click=${this._createZone}
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiPlus}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -526,17 +529,17 @@ export class HaConfigZone extends SubscribeMixin(LitElement) {
|
||||
ha-card paper-item {
|
||||
cursor: pointer;
|
||||
}
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: fixed;
|
||||
bottom: 16px;
|
||||
right: 16px;
|
||||
z-index: 1;
|
||||
}
|
||||
ha-fab[is-wide] {
|
||||
mwc-fab[is-wide] {
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
}
|
||||
ha-fab[narrow] {
|
||||
mwc-fab[narrow] {
|
||||
bottom: 84px;
|
||||
}
|
||||
`;
|
||||
|
@@ -1,13 +1,18 @@
|
||||
import "@material/mwc-ripple";
|
||||
import type { Ripple } from "@material/mwc-ripple";
|
||||
import { RippleHandlers } from "@material/mwc-ripple/ripple-handlers";
|
||||
import { HassEntity } from "home-assistant-js-websocket";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
eventOptions,
|
||||
html,
|
||||
internalProperty,
|
||||
LitElement,
|
||||
property,
|
||||
PropertyValues,
|
||||
queryAsync,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { ifDefined } from "lit-html/directives/if-defined";
|
||||
@@ -69,6 +74,10 @@ export class HuiButtonCard extends LitElement implements LovelaceCard {
|
||||
|
||||
@property() private _config?: ButtonCardConfig;
|
||||
|
||||
@queryAsync("mwc-ripple") private _ripple!: Promise<Ripple | null>;
|
||||
|
||||
@internalProperty() private _shouldRenderRipple = false;
|
||||
|
||||
public getCardSize(): number {
|
||||
return 2;
|
||||
}
|
||||
@@ -149,6 +158,13 @@ export class HuiButtonCard extends LitElement implements LovelaceCard {
|
||||
return html`
|
||||
<ha-card
|
||||
@action=${this._handleAction}
|
||||
@focus="${this.handleRippleFocus}"
|
||||
@blur="${this.handleRippleBlur}"
|
||||
@mousedown="${this.handleRippleActivate}"
|
||||
@mouseup="${this.handleRippleDeactivate}"
|
||||
@touchstart="${this.handleRippleActivate}"
|
||||
@touchend="${this.handleRippleDeactivate}"
|
||||
@touchcancel="${this.handleRippleDeactivate}"
|
||||
.actionHandler=${actionHandler({
|
||||
hasHold: hasAction(this._config!.hold_action),
|
||||
hasDoubleClick: hasAction(this._config!.double_tap_action),
|
||||
@@ -189,7 +205,7 @@ export class HuiButtonCard extends LitElement implements LovelaceCard {
|
||||
</span>
|
||||
`
|
||||
: ""}
|
||||
<mwc-ripple></mwc-ripple>
|
||||
${this._shouldRenderRipple ? html`<mwc-ripple></mwc-ripple>` : ""}
|
||||
</ha-card>
|
||||
`;
|
||||
}
|
||||
@@ -214,6 +230,28 @@ export class HuiButtonCard extends LitElement implements LovelaceCard {
|
||||
}
|
||||
}
|
||||
|
||||
private _rippleHandlers: RippleHandlers = new RippleHandlers(() => {
|
||||
this._shouldRenderRipple = true;
|
||||
return this._ripple;
|
||||
});
|
||||
|
||||
@eventOptions({ passive: true })
|
||||
private handleRippleActivate(evt?: Event) {
|
||||
this._rippleHandlers.startPress(evt);
|
||||
}
|
||||
|
||||
private handleRippleDeactivate() {
|
||||
this._rippleHandlers.endPress();
|
||||
}
|
||||
|
||||
private handleRippleFocus() {
|
||||
this._rippleHandlers.startFocus();
|
||||
}
|
||||
|
||||
private handleRippleBlur() {
|
||||
this._rippleHandlers.endFocus();
|
||||
}
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
ha-card {
|
||||
@@ -227,11 +265,11 @@ export class HuiButtonCard extends LitElement implements LovelaceCard {
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
ha-card:focus {
|
||||
outline: none;
|
||||
background: var(--divider-color);
|
||||
}
|
||||
|
||||
ha-icon {
|
||||
|
@@ -170,12 +170,12 @@ class ActionHandler extends HTMLElement implements ActionHandler {
|
||||
display: null,
|
||||
});
|
||||
this.ripple.disabled = false;
|
||||
this.ripple.activate();
|
||||
this.ripple.startPress();
|
||||
this.ripple.unbounded = true;
|
||||
}
|
||||
|
||||
private stopAnimation() {
|
||||
this.ripple.deactivate();
|
||||
this.ripple.endPress();
|
||||
this.ripple.disabled = true;
|
||||
this.style.display = "none";
|
||||
}
|
||||
|
@@ -1,4 +1,3 @@
|
||||
import "@material/mwc-ripple";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -78,7 +77,6 @@ export class HuiButtonsBase extends LitElement {
|
||||
? entityConf.name || computeStateName(stateObj)
|
||||
: ""}
|
||||
</span>
|
||||
<mwc-ripple unbounded></mwc-ripple>
|
||||
</div>
|
||||
`;
|
||||
})}
|
||||
@@ -108,6 +106,7 @@ export class HuiButtonsBase extends LitElement {
|
||||
cursor: pointer;
|
||||
align-items: center;
|
||||
display: inline-flex;
|
||||
outline: none;
|
||||
}
|
||||
`;
|
||||
}
|
||||
|
@@ -1,3 +1,4 @@
|
||||
import "@material/mwc-fab";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -20,7 +21,6 @@ import type {
|
||||
SelectionChangedEvent,
|
||||
} from "../../../../components/data-table/ha-data-table";
|
||||
import "../../../../components/entity/state-badge";
|
||||
import "../../../../components/ha-fab";
|
||||
import "../../../../components/ha-icon";
|
||||
import "../../../../components/ha-relative-time";
|
||||
import type { LovelaceConfig } from "../../../../data/lovelace";
|
||||
@@ -28,6 +28,8 @@ import type { HomeAssistant } from "../../../../types";
|
||||
import { computeUnusedEntities } from "../../common/compute-unused-entities";
|
||||
import type { Lovelace } from "../../types";
|
||||
import { addEntitiesToLovelaceView } from "../add-entities-to-view";
|
||||
import "../../../../components/ha-svg-icon";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
|
||||
@customElement("hui-unused-entities")
|
||||
export class HuiUnusedEntities extends LitElement {
|
||||
@@ -173,16 +175,17 @@ export class HuiUnusedEntities extends LitElement {
|
||||
|
||||
${this._selectedEntities.length
|
||||
? html`
|
||||
<ha-fab
|
||||
<mwc-fab
|
||||
class="${classMap({
|
||||
rtl: computeRTL(this.hass),
|
||||
})}"
|
||||
icon="hass:plus"
|
||||
.label=${this.hass.localize(
|
||||
"ui.panel.lovelace.editor.edit_card.add"
|
||||
)}
|
||||
@click=${this._addToLovelaceView}
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiPlus}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
`
|
||||
: ""}
|
||||
`;
|
||||
@@ -238,13 +241,13 @@ export class HuiUnusedEntities extends LitElement {
|
||||
flex-grow: 1;
|
||||
margin-top: -20px;
|
||||
}
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: absolute;
|
||||
right: 16px;
|
||||
bottom: 16px;
|
||||
z-index: 1;
|
||||
}
|
||||
ha-fab.rtl {
|
||||
mwc-fab.rtl {
|
||||
left: 16px;
|
||||
right: auto;
|
||||
}
|
||||
|
@@ -1,3 +1,3 @@
|
||||
// hui-view dependencies for when in edit mode.
|
||||
import "../../../components/ha-fab";
|
||||
import "@material/mwc-fab";
|
||||
import "../components/hui-card-options";
|
||||
|
@@ -23,6 +23,8 @@ import { createBadgeElement } from "../create-element/create-badge-element";
|
||||
import { createCardElement } from "../create-element/create-card-element";
|
||||
import { showEditCardDialog } from "../editor/card-editor/show-edit-card-dialog";
|
||||
import { Lovelace, LovelaceBadge, LovelaceCard } from "../types";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
|
||||
let editCodeLoaded = false;
|
||||
|
||||
@@ -95,8 +97,7 @@ export class HUIView extends LitElement {
|
||||
<div id="columns"></div>
|
||||
${this.lovelace!.editMode
|
||||
? html`
|
||||
<ha-fab
|
||||
icon="hass:plus"
|
||||
<mwc-fab
|
||||
title="${this.hass!.localize(
|
||||
"ui.panel.lovelace.editor.edit_card.add"
|
||||
)}"
|
||||
@@ -104,7 +105,9 @@ export class HUIView extends LitElement {
|
||||
class="${classMap({
|
||||
rtl: computeRTL(this.hass!),
|
||||
})}"
|
||||
></ha-fab>
|
||||
>
|
||||
<ha-svg-icon slot="icon" path=${mdiPlus}></ha-svg-icon>
|
||||
</mwc-fab>
|
||||
`
|
||||
: ""}
|
||||
`;
|
||||
@@ -151,7 +154,7 @@ export class HUIView extends LitElement {
|
||||
margin: 4px 4px 8px;
|
||||
}
|
||||
|
||||
ha-fab {
|
||||
mwc-fab {
|
||||
position: sticky;
|
||||
float: right;
|
||||
bottom: 16px;
|
||||
@@ -159,7 +162,7 @@ export class HUIView extends LitElement {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
ha-fab.rtl {
|
||||
mwc-fab.rtl {
|
||||
float: left;
|
||||
right: auto;
|
||||
left: 16px;
|
||||
|
@@ -21,6 +21,7 @@ export const renderMarkdown = (
|
||||
whiteListNormal = {
|
||||
...filterXSS.whiteList,
|
||||
"ha-icon": ["icon"],
|
||||
"ha-svg-icon": ["path"],
|
||||
};
|
||||
}
|
||||
|
||||
|
@@ -231,6 +231,7 @@
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
"and": "and",
|
||||
"previous": "Previous",
|
||||
"loading": "Loading",
|
||||
"refresh": "Refresh",
|
||||
@@ -590,7 +591,9 @@
|
||||
"unit_system_metric": "Metric",
|
||||
"imperial_example": "Fahrenheit, pounds",
|
||||
"metric_example": "Celsius, kilograms",
|
||||
"save_button": "Save"
|
||||
"save_button": "Save",
|
||||
"external_url": "External URL",
|
||||
"internal_url": "Internal URL"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
1
translations/backend/en-GB.json
Normal file
1
translations/backend/en-GB.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
1
translations/backend/fy.json
Normal file
1
translations/backend/fy.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
1
translations/backend/gl.json
Normal file
1
translations/backend/gl.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
@@ -199,6 +199,8 @@
|
||||
"stopped": "Gestop"
|
||||
},
|
||||
"default": {
|
||||
"off": "Af",
|
||||
"on": "Aan",
|
||||
"unavailable": "Nie beskikbaar nie",
|
||||
"unknown": "Onbekend"
|
||||
},
|
||||
@@ -1010,8 +1012,10 @@
|
||||
}
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Stel 'n nuwe integrasie op",
|
||||
"caption": "Integrasies",
|
||||
"config_entry": {
|
||||
"delete": "Verwyder",
|
||||
"delete_confirm": "Is u seker u wil hierdie integrasie skrap?",
|
||||
"device_unavailable": "toestel nie beskikbaar nie",
|
||||
"entity_unavailable": "entiteit nie beskikbaar nie",
|
||||
@@ -1021,7 +1025,10 @@
|
||||
"no_area": "Geen Gebied",
|
||||
"no_device": "Entiteite sonder toestelle",
|
||||
"no_devices": "Hierdie integrasie het geen toestelle nie.",
|
||||
"restart_confirm": "Herbegin Home Assistant om hierdie integrasie te voltooi"
|
||||
"options": "Opsies",
|
||||
"rename": "Hernoem",
|
||||
"restart_confirm": "Herbegin Home Assistant om hierdie integrasie te voltooi",
|
||||
"system_options": "Stelselopsies"
|
||||
},
|
||||
"config_flow": {
|
||||
"aborted": "Gestaak",
|
||||
@@ -1055,7 +1062,12 @@
|
||||
},
|
||||
"integration_not_found": "Integrasie nie gevind nie.",
|
||||
"new": "Stel 'n nuwe integrasie op",
|
||||
"none": "Nog niks is opgestel nie"
|
||||
"no_integrations": "Lyk asof jy nog nie enige integations gekonfigureer het nie. Klik op die knoppie hieronder om jou eerste integrasie te voeg!",
|
||||
"none": "Nog niks is opgestel nie",
|
||||
"none_found": "Geen integrasies gevind nie",
|
||||
"none_found_detail": "Verstel jou soekkriteria.",
|
||||
"rename_dialog": "Redigeer die naam van hierdie config-inskrywing",
|
||||
"rename_input_label": "Inskrywingsnaam"
|
||||
},
|
||||
"introduction": "Hier is dit moontlik om u komponente en Home Assistant op te stel. Tans kan alles in verband met die gebruikerskoppelvlak nog nie hier opgestel word nie, maar ons werk daaraan.",
|
||||
"lovelace": {
|
||||
@@ -1515,7 +1527,8 @@
|
||||
},
|
||||
"warning": {
|
||||
"entity_non_numeric": "Entiteit is nie-numeriese: {entity}",
|
||||
"entity_not_found": "Entiteit nie beskikbaar nie: {entity}"
|
||||
"entity_not_found": "Entiteit nie beskikbaar nie: {entity}",
|
||||
"entity_unavailable": "{entity} is nie tans beskikbaar nie."
|
||||
}
|
||||
},
|
||||
"mailbox": {
|
||||
|
@@ -178,6 +178,8 @@
|
||||
"stopped": "موقف"
|
||||
},
|
||||
"default": {
|
||||
"off": "مطفئ",
|
||||
"on": "مشغل",
|
||||
"unavailable": "غير متوفر",
|
||||
"unknown": "غير معروف"
|
||||
},
|
||||
@@ -267,9 +269,19 @@
|
||||
"returning": "العودة"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "صافي، ليلا",
|
||||
"cloudy": "Bewolkt",
|
||||
"fog": "Mist",
|
||||
"sunny": "مشمس"
|
||||
"lightning": "برق",
|
||||
"lightning-rainy": "برق ، ممطر",
|
||||
"partlycloudy": "غائم جزئيا",
|
||||
"pouring": "أمطار غزيرة",
|
||||
"rainy": "ماطر",
|
||||
"snowy": "ثلوج",
|
||||
"snowy-rainy": "ثلوج، ماطر",
|
||||
"sunny": "مشمس",
|
||||
"windy": "عاصف",
|
||||
"windy-variant": "عاصف"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
@@ -292,7 +304,16 @@
|
||||
},
|
||||
"card": {
|
||||
"alarm_control_panel": {
|
||||
"arm_custom_bypass": "تجاوز مخصص"
|
||||
"arm_away": "تفعيل خارج المنزل",
|
||||
"arm_custom_bypass": "تجاوز مخصص",
|
||||
"arm_home": "تفعيل في المنزل",
|
||||
"clear_code": "مسح",
|
||||
"code": "الرمز",
|
||||
"disarm": "تعطيل"
|
||||
},
|
||||
"automation": {
|
||||
"last_triggered": "آخر تشغيل",
|
||||
"trigger": "تشغيل"
|
||||
},
|
||||
"camera": {
|
||||
"not_available": "الصورة غير متاحة"
|
||||
@@ -326,6 +347,12 @@
|
||||
"persistent_notification": {
|
||||
"dismiss": "رفض"
|
||||
},
|
||||
"scene": {
|
||||
"activate": "تفعيل"
|
||||
},
|
||||
"script": {
|
||||
"execute": "نفذ"
|
||||
},
|
||||
"vacuum": {
|
||||
"actions": {
|
||||
"resume_cleaning": "استئناف التنظيف",
|
||||
@@ -344,8 +371,14 @@
|
||||
},
|
||||
"weather": {
|
||||
"attributes": {
|
||||
"precipitation": "ترسب"
|
||||
"air_pressure": "الضغط الجوي",
|
||||
"humidity": "الرطوبة",
|
||||
"precipitation": "ترسب",
|
||||
"temperature": "الحرارة",
|
||||
"visibility": "الرؤية",
|
||||
"wind_speed": "سرعة الرياح"
|
||||
},
|
||||
"forecast": "التوقعات",
|
||||
"high": "عالي",
|
||||
"low": "منخفض"
|
||||
}
|
||||
@@ -354,6 +387,9 @@
|
||||
"cancel": "إلغاء",
|
||||
"delete": "حذف",
|
||||
"loading": "جار التحميل",
|
||||
"next": "التالى",
|
||||
"previous": "السابق",
|
||||
"refresh": "تحديث",
|
||||
"successfully_deleted": "تم الحذف بنجاح",
|
||||
"undo": "تراجع"
|
||||
},
|
||||
@@ -363,6 +399,10 @@
|
||||
"entity": "الجهاز"
|
||||
}
|
||||
},
|
||||
"history_charts": {
|
||||
"loading_history": "جارٍ تحميل سجل الحالات ...",
|
||||
"no_history_found": "لم يتم العثور على سجل الحالات."
|
||||
},
|
||||
"relative_time": {
|
||||
"never": "Nooit"
|
||||
},
|
||||
@@ -415,7 +455,19 @@
|
||||
"password": "كلمه السر",
|
||||
"remember": "تذكر"
|
||||
},
|
||||
"notification_drawer": {
|
||||
"click_to_configure": "انقر هنا لتعديل {entity}",
|
||||
"empty": "لا إشعارات",
|
||||
"title": "إشعارات"
|
||||
},
|
||||
"notification_toast": {
|
||||
"connection_lost": "انقطع الاتصال. جارٍ إعادة الاتصال ..."
|
||||
},
|
||||
"panel": {
|
||||
"calendar": {
|
||||
"my_calendars": "تقاويمي",
|
||||
"today": "اليوم"
|
||||
},
|
||||
"config": {
|
||||
"areas": {
|
||||
"data_table": {
|
||||
@@ -476,6 +528,9 @@
|
||||
"learn_more": "معرفة المزيد عن الشروط",
|
||||
"type_select": "نوع الشرط",
|
||||
"type": {
|
||||
"not": {
|
||||
"label": "ليس"
|
||||
},
|
||||
"numeric_state": {
|
||||
"above": "فوق",
|
||||
"below": "تحت",
|
||||
@@ -682,6 +737,7 @@
|
||||
"new": "إعداد تكامل جديد",
|
||||
"no_integrations": "يبدوأن ليس هناك أي integations بعد. انقر على الزر أدناه لإضافة واحدة!",
|
||||
"none": "لم يتم الإعداد بعد",
|
||||
"none_found_detail": "اضبط معايير البحث.",
|
||||
"rename_dialog": "تعديل الاسم",
|
||||
"rename_input_label": "الاسم"
|
||||
},
|
||||
@@ -924,6 +980,7 @@
|
||||
},
|
||||
"save_config": {
|
||||
"cancel": "لا يهم",
|
||||
"close": "إغلاق",
|
||||
"empty_config": "ابدأ بلوحة معلومات فارغة"
|
||||
},
|
||||
"view": {
|
||||
@@ -957,6 +1014,7 @@
|
||||
"playback_title": "تشغيل الرسالة"
|
||||
},
|
||||
"page-authorize": {
|
||||
"abort_intro": "إلغاء الدخول",
|
||||
"form": {
|
||||
"providers": {
|
||||
"command_line": {
|
||||
@@ -969,13 +1027,17 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"working": "الرجاء الانتظار"
|
||||
},
|
||||
"initializing": "جار التهيئة"
|
||||
},
|
||||
"page-onboarding": {
|
||||
"user": {
|
||||
"data": {
|
||||
"password_confirm": "تأكيد كلمة السر"
|
||||
"password": "كلمه السر",
|
||||
"password_confirm": "تأكيد كلمة السر",
|
||||
"username": "المستخدم"
|
||||
},
|
||||
"error": {
|
||||
"password_not_match": "كلمة السر غير مطابقة",
|
||||
|
@@ -206,6 +206,8 @@
|
||||
"stopped": "Спряна"
|
||||
},
|
||||
"default": {
|
||||
"off": "Изключен",
|
||||
"on": "Включен",
|
||||
"unavailable": "Недостъпен",
|
||||
"unknown": "Неизвестно"
|
||||
},
|
||||
@@ -425,6 +427,7 @@
|
||||
"attributes": {
|
||||
"air_pressure": "Въздушно налягане",
|
||||
"humidity": "Влажност",
|
||||
"precipitation": "Валежи",
|
||||
"temperature": "Температура",
|
||||
"visibility": "Видимост",
|
||||
"wind_speed": "Скорост на вятъра"
|
||||
@@ -452,8 +455,10 @@
|
||||
},
|
||||
"common": {
|
||||
"cancel": "Отмени",
|
||||
"delete": "Изтриване",
|
||||
"loading": "Зареждане",
|
||||
"save": "Запазване",
|
||||
"successfully_deleted": "Успешно изтриване",
|
||||
"successfully_saved": "Успешно запазено"
|
||||
},
|
||||
"components": {
|
||||
@@ -491,6 +496,24 @@
|
||||
"enable_new_entities_label": "Активирай новодобавените устройства.",
|
||||
"title": "Системни опции за {integration}"
|
||||
},
|
||||
"entity_registry": {
|
||||
"editor": {
|
||||
"delete": "Изтриване",
|
||||
"update": "Актуализация"
|
||||
},
|
||||
"no_unique_id": "Този обект няма уникален идентификатор, затова неговите настройки не могат да бъдат управлявани от потребителския интерфейс."
|
||||
},
|
||||
"helper_settings": {
|
||||
"input_number": {
|
||||
"step": "Размер на стъпката"
|
||||
},
|
||||
"input_text": {
|
||||
"max": "Максимална дължина",
|
||||
"min": "Минимална дължина"
|
||||
},
|
||||
"platform_not_loaded": "{platform} интеграцията не е заредена. Моля, добавете я във вашата конфигурация като добавите 'default_config:' или '{platform}:'.",
|
||||
"yaml_not_editable": "Настройките на този обект не могат да бъдат редактирани. Могат да се конфигурират само обектите, създадени от потребителския интерфейс."
|
||||
},
|
||||
"more_info_control": {
|
||||
"script": {
|
||||
"last_action": "Последно задействане"
|
||||
@@ -504,6 +527,12 @@
|
||||
"title": "Инструкции за актуализиране"
|
||||
}
|
||||
},
|
||||
"mqtt_device_debug_info": {
|
||||
"entities": "Обекти",
|
||||
"no_entities": "Няма обекти",
|
||||
"recent_messages": "{n} последно получено(и) съобщение(я)",
|
||||
"show_as_yaml": "Покажи като YAML"
|
||||
},
|
||||
"options_flow": {
|
||||
"form": {
|
||||
"header": "Опции"
|
||||
@@ -517,6 +546,9 @@
|
||||
"label_voice": "Въведете и натиснете „Enter“ или докоснете микрофона, за да говорите"
|
||||
},
|
||||
"zha_device_info": {
|
||||
"buttons": {
|
||||
"zigbee_information": "Zigbee информация"
|
||||
},
|
||||
"manuf": "от {manufacturer}",
|
||||
"no_area": "Без област",
|
||||
"services": {
|
||||
@@ -556,6 +588,13 @@
|
||||
"config": {
|
||||
"areas": {
|
||||
"caption": "Регистър на областите",
|
||||
"data_table": {
|
||||
"area": "Област",
|
||||
"devices": "Устройства"
|
||||
},
|
||||
"delete": {
|
||||
"confirmation_title": "Сигурни ли сте, че искате да изтриете тази област?"
|
||||
},
|
||||
"description": "Преглед на всички области във Вашия дом.",
|
||||
"editor": {
|
||||
"create": "СЪЗДАВАНЕ",
|
||||
@@ -564,10 +603,12 @@
|
||||
"update": "АКТУАЛИЗАЦИЯ"
|
||||
},
|
||||
"picker": {
|
||||
"create_area": "Създайте област",
|
||||
"header": "Регистър на областите",
|
||||
"integrations_page": "Интеграции",
|
||||
"introduction": "Областите се използват за организиране на местоположението на устройствата. Тази информация ще се използва в Home Assistant, за да ви помогне при организирането на Вашия интерфейс, права за достъп и интеграции с други системи.",
|
||||
"introduction2": "За да поставите устройства в дадена област, използвайте връзката по-долу, за да отидете на страницата за интеграции, след което кликнете върху конфигурирана интеграция, за да видите картите на устройството."
|
||||
"introduction2": "За да поставите устройства в дадена област, използвайте връзката по-долу, за да отидете на страницата за интеграции, след което кликнете върху конфигурирана интеграция, за да видите картите на устройството.",
|
||||
"no_areas": "Изглежда, че все още нямате области!"
|
||||
}
|
||||
},
|
||||
"automation": {
|
||||
@@ -756,6 +797,9 @@
|
||||
"picker": {
|
||||
"add_automation": "Добавяне на автоматизация",
|
||||
"header": "Редактор на автоматизации",
|
||||
"headers": {
|
||||
"name": "Име"
|
||||
},
|
||||
"introduction": "Редакторът на автоматизации позволява да създавате и редактирате автоматизации. Моля, последвайте препратката по-долу за да прочетете инструкциите за да се уверите, че Home Assistant е правилно конфигуриран.",
|
||||
"learn_more": "Научете повече за автоматизациите",
|
||||
"no_automations": "Не можахме да намерим никакви автоматизации подлежащи на редакция",
|
||||
@@ -763,6 +807,14 @@
|
||||
}
|
||||
},
|
||||
"cloud": {
|
||||
"account": {
|
||||
"alexa": {
|
||||
"config_documentation": "Документация за конфигурацията"
|
||||
},
|
||||
"google": {
|
||||
"config_documentation": "Документация за конфигурацията"
|
||||
}
|
||||
},
|
||||
"caption": "Home Assistant Cloud",
|
||||
"description_features": "Контролирайте дома си, и когато не сте вкъщи, активирайте интегрирациите с Alexa и Google Assistant.",
|
||||
"description_login": "Влезли сте като {email}",
|
||||
@@ -803,7 +855,13 @@
|
||||
},
|
||||
"devices": {
|
||||
"caption": "Устройства",
|
||||
"description": "Управление на свързани устройства"
|
||||
"confirm_delete": "Сигурни ли сте, че искате да изтриете устройството?",
|
||||
"delete": "Изтриване",
|
||||
"description": "Управление на свързани устройства",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Добавете към Lovelace"
|
||||
},
|
||||
"no_devices": "Няма устройства"
|
||||
},
|
||||
"entities": {
|
||||
"caption": "Регистър на обектите",
|
||||
@@ -814,10 +872,16 @@
|
||||
"introduction2": "Използвайте регистъра на обектите, за да промените името, идентификатора на обекта или да премахнете записа от Home Assistant. Моля имайте на предвид, че премахването на записа от регистъра на обектите няма да премахне обекта. За да направите това, следвайте препратката по-долу и я премахнете от страницата за интеграции."
|
||||
}
|
||||
},
|
||||
"filtering": {
|
||||
"clear": "Изчистване",
|
||||
"filtering_by": "Филтриране по"
|
||||
},
|
||||
"header": "Конфигуриране на Home Assistant",
|
||||
"integrations": {
|
||||
"add_integration": "Добавяне на интеграция",
|
||||
"caption": "Интеграции",
|
||||
"config_entry": {
|
||||
"delete": "Изтриване",
|
||||
"delete_confirm": "Сигурни ли сте, че искате да изтриете интеграцията?",
|
||||
"device_unavailable": "недостъпно устройство",
|
||||
"entity_unavailable": "недостъпен",
|
||||
@@ -827,7 +891,10 @@
|
||||
"no_area": "Без област",
|
||||
"no_device": "Обекти без устройства",
|
||||
"no_devices": "Тази интеграция няма устройства.",
|
||||
"restart_confirm": "Рестартирайте Home Assistant за да завършите премахването на интеграцията"
|
||||
"options": "Настройки",
|
||||
"rename": "Преименуване",
|
||||
"restart_confirm": "Рестартирайте Home Assistant за да завършите премахването на интеграцията",
|
||||
"system_options": "Системни настройки"
|
||||
},
|
||||
"config_flow": {
|
||||
"external_step": {
|
||||
@@ -839,10 +906,33 @@
|
||||
"configured": "Конфигуриран",
|
||||
"description": "Управление и настройка на интеграции",
|
||||
"discovered": "Открити",
|
||||
"integration": "интеграция",
|
||||
"new": "Настройте нова интеграция",
|
||||
"none": "Нищо не е конфигурирано към момента"
|
||||
"no_integrations": "Изглежда, че все още нямате конфигурирани интеграции. Кликнете върху бутона по-долу, за да добавите първата си интеграция!",
|
||||
"none": "Нищо не е конфигурирано към момента",
|
||||
"none_found": "Не са намерени интеграции",
|
||||
"none_found_detail": "Коригирайте критериите си за търсене.",
|
||||
"rename_dialog": "Редактирайте името на този запис в конфигурацията"
|
||||
},
|
||||
"introduction": "Тук е възможно да конфигурирате Вашите компоненти и Home Assistant. Не всичко е възможно да се конфигурира от Интерфейса, но работим по върпоса.",
|
||||
"lovelace": {
|
||||
"dashboards": {
|
||||
"cant_edit_default": "Стандартното Lovelace табло не може да се редактира от потребителския интерфейс. Можете да го скриете, като зададете друго табло по подразбиране.",
|
||||
"cant_edit_yaml": "Табла, дефинирани в YAML, не могат да бъдат редактирани от потребителския интерфейс. Променете ги в configuration.yaml.",
|
||||
"default_dashboard": "Това е таблото по подразбиране",
|
||||
"detail": {
|
||||
"icon": "Икона",
|
||||
"title": "Заглавие",
|
||||
"url_error_msg": "URL адресът трябва да съдържа '-' и не може да съдържа интервали или специални символи, с изключение на '_' и '-'"
|
||||
},
|
||||
"picker": {
|
||||
"open": "Отворен"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"cant_edit_yaml": "Използвате Lovelace в YAML режим, следователно не можете да управлявате ресурсите си чрез потребителския интерфейс. Управлявайте ги в configuration.yaml."
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"caption": "Хора",
|
||||
"description": "Управлявайте хората, които следите от Home Assistant.",
|
||||
@@ -853,9 +943,22 @@
|
||||
"name": "Име"
|
||||
}
|
||||
},
|
||||
"scene": {
|
||||
"picker": {
|
||||
"headers": {
|
||||
"name": "Име"
|
||||
}
|
||||
}
|
||||
},
|
||||
"script": {
|
||||
"caption": "Скриптове",
|
||||
"description": "Създаване и редактиране на скриптове"
|
||||
"description": "Създаване и редактиране на скриптове",
|
||||
"picker": {
|
||||
"headers": {
|
||||
"name": "Име"
|
||||
},
|
||||
"show_info": "Показване на информация за скрипта"
|
||||
}
|
||||
},
|
||||
"server_control": {
|
||||
"caption": "Управление на сървъра",
|
||||
@@ -865,7 +968,7 @@
|
||||
"automation": "Презареждане на автоматизациите",
|
||||
"core": "Презареждане на местоположението и персонализациите",
|
||||
"group": "Презареждане на гурпите",
|
||||
"heading": "Презареждане на конфигурацията",
|
||||
"heading": "Презареждане на YAML конфигурацията",
|
||||
"introduction": "Някои части от Home Assistant могат да се презаредят без да е необходимо рестартиране. Натискането на Презареди ще отхвърли настоящата конфигурация и ще зареди новата конфигурация.",
|
||||
"scene": "Презареди сцените",
|
||||
"script": "Презареждане на скриптовете"
|
||||
@@ -899,10 +1002,19 @@
|
||||
"description": "Управление на потребителите",
|
||||
"editor": {
|
||||
"activate_user": "Активиране на потребител",
|
||||
"admin": "Администратор",
|
||||
"caption": "Преглед на потребителя",
|
||||
"change_password": "Смяна на парола",
|
||||
"deactivate_user": "Деактивиране на потребителя",
|
||||
"delete_user": "Изтриване на потребител"
|
||||
"delete_user": "Изтриване на потребител",
|
||||
"name": "Име",
|
||||
"system_generated_users_not_editable": "Неуспешно обновяване на системно генерираните потребители"
|
||||
},
|
||||
"picker": {
|
||||
"headers": {
|
||||
"group": "Група",
|
||||
"name": "Име"
|
||||
}
|
||||
}
|
||||
},
|
||||
"zha": {
|
||||
@@ -912,7 +1024,13 @@
|
||||
"spinner": "Търсене на ZHA Zigbee устройства..."
|
||||
},
|
||||
"caption": "ZHA",
|
||||
"description": "Управление на Zigbee мрежата за домашна автоматизация"
|
||||
"description": "Управление на Zigbee мрежата за домашна автоматизация",
|
||||
"node_management": {
|
||||
"hint_wakeup": "Някои устройства като сензорите Xiaomi имат бутон за събуждане, който можете да натискате на интервали от ~ 5 секунди, които поддържат устройствата будни, докато взаимодействате с тях."
|
||||
}
|
||||
},
|
||||
"zone": {
|
||||
"edit_home_zone": "Радиусът на зоната \"Дом\" все още не може да бъде редактиран. Плъзнете маркера на картата, за да преместите въпросната зона."
|
||||
},
|
||||
"zwave": {
|
||||
"caption": "Z-Wave",
|
||||
@@ -1026,6 +1144,9 @@
|
||||
"entities": {
|
||||
"toggle": "Превключване на обекти."
|
||||
},
|
||||
"iframe": {
|
||||
"name": "Уеб страница"
|
||||
},
|
||||
"vertical-stack": {
|
||||
"name": "Вертикална колона"
|
||||
},
|
||||
@@ -1033,6 +1154,9 @@
|
||||
"name": "Прогноза за времето"
|
||||
}
|
||||
},
|
||||
"cardpicker": {
|
||||
"no_description": "Няма налично описание."
|
||||
},
|
||||
"edit_card": {
|
||||
"add": "Добавяне на карта",
|
||||
"delete": "Изтриване на карта",
|
||||
@@ -1051,7 +1175,10 @@
|
||||
"add": "Добавяне на изглед",
|
||||
"delete": "Изтриване на изгледа",
|
||||
"edit": "Редактиране на изгледа",
|
||||
"header": "Конфигурация на изглед"
|
||||
"header": "Конфигурация на изглед",
|
||||
"visibility": {
|
||||
"select_users": "Изберете кои потребители да виждат този изглед в навигацията"
|
||||
}
|
||||
},
|
||||
"header": "Редактиране на потребителския интерфейс",
|
||||
"menu": {
|
||||
@@ -1065,6 +1192,7 @@
|
||||
"para_no_id": "Този елемент няма идентификатор. Моля, добавете идентификатор към този елемент в \"ui-lovelace.yaml\"."
|
||||
},
|
||||
"raw_editor": {
|
||||
"error_remove": "Конфигурацията не може да бъде премахната: {error}",
|
||||
"header": "Редактиране на конфигурацията",
|
||||
"save": "Запазване",
|
||||
"saved": "Запазено",
|
||||
@@ -1075,7 +1203,13 @@
|
||||
"header": "Поемете контрол над потребителския интерфейс на Lovelace",
|
||||
"para": "По подразбиране Home Assistant поддържа потребителския интерфейс, като го актуализира, когато нови обекти или компоненти на Lovelace станат достъпни. Ако поемете контрол, ние вече няма да правим автоматично промени вместо вас.",
|
||||
"para_sure": "Наистина ли искате да поемете управлението на потребителския интерфейс?",
|
||||
"save": "Поемете контрола"
|
||||
"save": "Поемете контрола",
|
||||
"yaml_mode": "Използвате YAML режим за това табло, което означава, че не можете да промените вашата Lovelace конфигурация от потребителския интерфейс. Ако искате да управлявате това табло от потребителския интерфейс, премахнете „mode: yaml“ от вашата Lovelace конфигурация в „configuration.yaml.“."
|
||||
},
|
||||
"view": {
|
||||
"panel_mode": {
|
||||
"warning_multiple_cards": "Този изглед съдържа повече от една карта, но изгледът на панел може да показва само 1 карта."
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
@@ -1084,9 +1218,14 @@
|
||||
"refresh": "Обновяване"
|
||||
},
|
||||
"reload_lovelace": "Презареждане на Lovelace",
|
||||
"views": {
|
||||
"confirm_delete": "Изтриване на изгледа?"
|
||||
},
|
||||
"warning": {
|
||||
"attribute_not_found": "Атрибут {attribute} не е наличен в: {entity}",
|
||||
"entity_non_numeric": "Обектът не е числов: {entity}",
|
||||
"entity_not_found": "Обектът е недостъпен: {entity}"
|
||||
"entity_not_found": "Обектът е недостъпен: {entity}",
|
||||
"entity_unavailable": "{entity} в момента не е наличен"
|
||||
}
|
||||
},
|
||||
"mailbox": {
|
||||
@@ -1267,6 +1406,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"advanced_mode": {
|
||||
"description": "Отключва разширени функции.",
|
||||
"title": "Разширен режим"
|
||||
},
|
||||
"change_password": {
|
||||
@@ -1278,6 +1418,10 @@
|
||||
"submit": "Промяна"
|
||||
},
|
||||
"current_user": "В момента сте влезли като {fullName}.",
|
||||
"dashboard": {
|
||||
"dropdown_label": "Табло",
|
||||
"header": "Табло"
|
||||
},
|
||||
"force_narrow": {
|
||||
"description": "Това ще скрие страничната лента по подразбиране, подобно на изгледа в мобилната версия.",
|
||||
"header": "Винаги скривай страничната лента"
|
||||
|
@@ -206,6 +206,8 @@
|
||||
"stopped": "Aturat"
|
||||
},
|
||||
"default": {
|
||||
"off": "Off",
|
||||
"on": "On",
|
||||
"unavailable": "No disponible",
|
||||
"unknown": "Desconegut"
|
||||
},
|
||||
@@ -471,11 +473,15 @@
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
"and": "i",
|
||||
"cancel": "Cancel·la",
|
||||
"close": "Tanca",
|
||||
"delete": "Elimina",
|
||||
"loading": "Carregant",
|
||||
"next": "Següent",
|
||||
"no": "No",
|
||||
"previous": "Anterior",
|
||||
"refresh": "Actualitza",
|
||||
"save": "Desa",
|
||||
"successfully_deleted": "S'ha eliminat correctament",
|
||||
"successfully_saved": "S'ha desat correctament",
|
||||
@@ -542,7 +548,7 @@
|
||||
},
|
||||
"dialogs": {
|
||||
"config_entry_system_options": {
|
||||
"enable_new_entities_description": "Si està desactivat, les entitats recentment descobertes per a {integration} no s’afegiran automàticament a Home Assistant.",
|
||||
"enable_new_entities_description": "Si està desactivat, les entitats descobertes recentment per a {integration} no s'afegiran automàticament a Home Assistant.",
|
||||
"enable_new_entities_label": "Activa entitats afegides recentment.",
|
||||
"title": "Opcions del sistema per a {integration}",
|
||||
"update": "Actualitza"
|
||||
@@ -557,8 +563,8 @@
|
||||
"confirm_delete": "Estàs segur que vols eliminar aquesta entrada?",
|
||||
"delete": "Elimina",
|
||||
"enabled_cause": "Desactivada per {cause}.",
|
||||
"enabled_description": "Les entitats desactivades no s’afegiran a Home Assistant.",
|
||||
"enabled_label": "Activa l’entitat",
|
||||
"enabled_description": "Les entitats desactivades no s'afegiran a Home Assistant.",
|
||||
"enabled_label": "Activa l'entitat",
|
||||
"entity_id": "ID de l'entitat",
|
||||
"icon": "Sustitució d'icona",
|
||||
"icon_error": "Els icones han de tenir el format 'prefix:nom_icona', per exemple: 'mdi:home'",
|
||||
@@ -643,7 +649,7 @@
|
||||
},
|
||||
"vacuum": {
|
||||
"clean_spot": "Zona neta",
|
||||
"commands": "Comandes de l’aspirador:",
|
||||
"commands": "Comandes de l'aspirador:",
|
||||
"fan_speed": "Velocitat del ventilador",
|
||||
"locate": "Localitza",
|
||||
"pause": "Pausa",
|
||||
@@ -735,6 +741,10 @@
|
||||
"triggered": "{name} disparat/ada"
|
||||
},
|
||||
"panel": {
|
||||
"calendar": {
|
||||
"my_calendars": "Calendaris",
|
||||
"today": "Avui"
|
||||
},
|
||||
"config": {
|
||||
"advanced_mode": {
|
||||
"hint_enable": "Falten opcions de configuració? Activa el mode avançat",
|
||||
@@ -837,6 +847,9 @@
|
||||
},
|
||||
"label": "Dispositiu"
|
||||
},
|
||||
"not": {
|
||||
"label": "No"
|
||||
},
|
||||
"numeric_state": {
|
||||
"above": "Per sobre de",
|
||||
"below": "Per sota de",
|
||||
@@ -886,7 +899,7 @@
|
||||
"enable_disable": "Activa/desactiva automatització",
|
||||
"introduction": "Utilitza les automatitzacions per donar més vida a la teva casa",
|
||||
"load_error_not_editable": "Només es poden editar les automatitzacions de l'arxiu automations.yaml.",
|
||||
"load_error_unknown": "Error en carregar l’automatització ({err_no}).",
|
||||
"load_error_unknown": "Error en carregar l'automatització ({err_no}).",
|
||||
"save": "Desa",
|
||||
"triggers": {
|
||||
"add": "Afegeix disparador",
|
||||
@@ -1005,9 +1018,9 @@
|
||||
"disable": "desactiva",
|
||||
"enable": "activa",
|
||||
"enable_ha_skill": "Activa l'auxiliar de Home Assistant per Alexa",
|
||||
"enable_state_reporting": "Activa els informes d’estat",
|
||||
"enable_state_reporting": "Activa els informes d'estat",
|
||||
"info": "Amb la integració d'Alexa per Home Assistant Cloud podràs controlar tots els dispositius de Home Assistant a través dels dispositius compatibles amb Alexa.",
|
||||
"info_state_reporting": "Si actives els informes d'estat, Home Assistant enviarà a Amazon tots els canvis d’estat de les entitats exposades. Això et permetrà veure els últims estats a l’aplicació Alexa i utilitzar-los per crear rutines.",
|
||||
"info_state_reporting": "Si actives els informes d'estat, Home Assistant enviarà a Amazon tots els canvis d'estat de les entitats exposades. Això et permetrà veure els últims estats a l'aplicació Alexa i utilitzar-los per crear rutines.",
|
||||
"manage_entities": "Gestió d'entitats",
|
||||
"state_reporting_error": "No s'ha pogut {enable_disable} l'informe d'estat.",
|
||||
"sync_entities": "Sincronitza les entitats",
|
||||
@@ -1021,12 +1034,12 @@
|
||||
"config_documentation": "Documentació de configuració",
|
||||
"devices_pin": "PIN dels dispositius de seguretat",
|
||||
"enable_ha_skill": "Activa l'auxiliar de Home Assistant per Google Assistant",
|
||||
"enable_state_reporting": "Activa els informes d’estat",
|
||||
"enable_state_reporting": "Activa els informes d'estat",
|
||||
"enter_pin_error": "No s'ha pogut desar el pin:",
|
||||
"enter_pin_hint": "Introdueix un PIN per utilitzar dispositius de seguretat",
|
||||
"enter_pin_info": "Introdueix un codi PIN per interactuar amb dispositius de seguretat. Aquests dispositius són portes, garatges o panys, per exemple. Se't demanarà que introdueixis (o diguis) aquest PIN quan interactuïs amb aquests dispositius mitjançant Google Assistant.",
|
||||
"info": "Amb la integració de Google Assistant per Home Assistant Cloud podràs controlar tots els dispositius de Home Assistant a través dels dispositius compatibles amb Google Assistant.",
|
||||
"info_state_reporting": "Si actives els informes d'estat, Home Assistant enviarà a Google tots els canvis d’estat de les entitats exposades. Això et permetrà veure els últims estats a l’aplicació de Google.",
|
||||
"info_state_reporting": "Si actives els informes d'estat, Home Assistant enviarà a Google tots els canvis d'estat de les entitats exposades. Això et permetrà veure els últims estats a l'aplicació de Google.",
|
||||
"manage_entities": "Gestió d'entitats",
|
||||
"security_devices": "Dispositius de seguretat",
|
||||
"sync_entities": "Sincronitza les entitats amb Google",
|
||||
@@ -1034,14 +1047,14 @@
|
||||
"title": "Google Assistant"
|
||||
},
|
||||
"integrations": "Integracions",
|
||||
"integrations_introduction": "Les integracions per Home Assistant Cloud et permeten connectar-vos a d'altres serveis al núvol sense haver d’exposar la teva instància de Home Assistant públicament a Internet.",
|
||||
"integrations_introduction": "Les integracions per Home Assistant Cloud et permeten connectar-vos a d'altres serveis al núvol sense haver d'exposar la teva instància de Home Assistant públicament a Internet.",
|
||||
"integrations_introduction2": "Consulta el lloc web per ",
|
||||
"integrations_link_all_features": "totes les funcions disponibles",
|
||||
"manage_account": "Gestió del compte",
|
||||
"nabu_casa_account": "Compte Nabu Casa",
|
||||
"not_connected": "No connectat",
|
||||
"remote": {
|
||||
"access_is_being_prepared": "S’està preparant l’accés remot. T’avisarem quan estigui a punt.",
|
||||
"access_is_being_prepared": "S'està preparant l'accés remot. T'avisarem quan estigui a punt.",
|
||||
"certificate_info": "Informació del certificat",
|
||||
"info": "Home Assistant Cloud t'ofereix una connexió remota i segura amb la teva instància mentre siguis fora de casa",
|
||||
"instance_is_available": "La teva instància està disponible a",
|
||||
@@ -1083,7 +1096,7 @@
|
||||
"will_be_auto_renewed": "Es renovarà automàticament"
|
||||
},
|
||||
"dialog_cloudhook": {
|
||||
"available_at": "El webhook està disponible a l’URL següent:",
|
||||
"available_at": "El webhook està disponible a l'URL següent:",
|
||||
"close": "Tanca",
|
||||
"confirm_disable": "Estàs segur que vols desactivar aquest webhook?",
|
||||
"copied_to_clipboard": "Copiat al porta-retalls",
|
||||
@@ -1112,8 +1125,8 @@
|
||||
"title": "Google Assistant"
|
||||
},
|
||||
"login": {
|
||||
"alert_email_confirm_necessary": "Has de confirmar el teu correu electrònic abans d’iniciar sessió.",
|
||||
"alert_password_change_required": "Has de canviar la teva contrasenya abans d’iniciar sessió.",
|
||||
"alert_email_confirm_necessary": "Has de confirmar el teu correu electrònic abans d'iniciar sessió.",
|
||||
"alert_password_change_required": "Has de canviar la teva contrasenya abans d'iniciar sessió.",
|
||||
"dismiss": "Desestimar",
|
||||
"email": "Correu electrònic",
|
||||
"email_error_msg": "Correu electrònic invàlid",
|
||||
@@ -1121,7 +1134,7 @@
|
||||
"introduction": "Home Assistant Cloud t'ofereix una connexió remota i segura amb la teva instància mentre siguis fora de casa. També et permet connectar-te amb els serveis disponibles al núvol: Amazon Alexa i Google Assistant.",
|
||||
"introduction2": "Aquest servei està gestionat pel nostre soci ",
|
||||
"introduction2a": ", una empresa fundada pels creadors de Home Assistant i Hass.io.",
|
||||
"introduction3": "Home Assistant Cloud és un servei de subscripció amb una prova gratuïta d’un mes. No és necessària la informació de pagament.",
|
||||
"introduction3": "Home Assistant Cloud és un servei de subscripció amb una prova gratuïta d'un mes. No és necessària la informació de pagament.",
|
||||
"learn_more_link": "Més informació sobre Home Assistant Cloud",
|
||||
"password": "Contrasenya",
|
||||
"password_error_msg": "La contrasenya han de tenir un mínim de 8 caràcters",
|
||||
@@ -1140,7 +1153,7 @@
|
||||
"feature_remote_control": "Control de Home Assistant fora de casa",
|
||||
"feature_webhook_apps": "Fàcil integració amb aplicacions basades an webhook com OwnTracks",
|
||||
"headline": "Inicia la prova gratuïta",
|
||||
"information": "Crea un compte per iniciar la prova gratuïta d’un mes amb Home Assistant Cloud. No és necessària la informació de pagament.",
|
||||
"information": "Crea un compte per iniciar la prova gratuïta d'un mes amb Home Assistant Cloud. No és necessària la informació de pagament.",
|
||||
"information2": "La prova et donarà accés a tots els avantatges de Home Assistant Cloud, inclosos:",
|
||||
"information3": "Aquest servei està gestionat pel nostre soci ",
|
||||
"information3a": ", una empresa fundada pels creadors de Home Assistant i Hass.io.",
|
||||
@@ -1168,7 +1181,9 @@
|
||||
"edit_requires_storage": "L'editor està desactivat ja que la configuració es troba a configuration.yaml.",
|
||||
"elevation": "Altitud",
|
||||
"elevation_meters": "metres",
|
||||
"external_url": "URL extern",
|
||||
"imperial_example": "Fahrenheit, lliures",
|
||||
"internal_url": "URL intern",
|
||||
"latitude": "Latitud",
|
||||
"location_name": "Nom de la instal·lació de Home Assistant",
|
||||
"longitude": "Longitud",
|
||||
@@ -1192,7 +1207,7 @@
|
||||
"attributes_set": "Els següents atributs d'entitat s'estableixen programàticament.",
|
||||
"caption": "Personalització",
|
||||
"description": "Personalitza les entitats",
|
||||
"different_include": "Possiblement a través d’un domini o una altra inclusió diferent.",
|
||||
"different_include": "Possiblement a través d'un domini o una altra inclusió diferent.",
|
||||
"pick_attribute": "Selecciona un atribut per substituir-lo",
|
||||
"picker": {
|
||||
"header": "Personalització",
|
||||
@@ -1201,7 +1216,7 @@
|
||||
"warning": {
|
||||
"include_link": "inclou customize.yaml",
|
||||
"include_sentence": "Sembla que la teva configuració a configuration.yaml no",
|
||||
"not_applied": "Els canvis realitzats aquí es desen, però no s’aplicaran fins que es torni a carregar la configuració, tret que la inclusió estigui present."
|
||||
"not_applied": "Els canvis realitzats aquí es desen, però no s'aplicaran fins que es torni a carregar la configuració, tret que la inclusió estigui present."
|
||||
}
|
||||
},
|
||||
"devices": {
|
||||
@@ -1223,7 +1238,7 @@
|
||||
"cant_edit": "Només pots editar els elements creats a la interfície d'usuari (UI).",
|
||||
"caption": "Dispositius",
|
||||
"confirm_delete": "Estàs segur que vols eliminar aquest dispositiu?",
|
||||
"confirm_rename_entity_ids": "Vols, també, canviar el nom dels ID's d’entitat de les entitats?",
|
||||
"confirm_rename_entity_ids": "Vols, també, canviar el nom dels ID's d'entitat de les entitats?",
|
||||
"data_table": {
|
||||
"area": "Àrea",
|
||||
"battery": "Bateria",
|
||||
@@ -1235,6 +1250,7 @@
|
||||
},
|
||||
"delete": "Elimina",
|
||||
"description": "Gestiona els dispositius connectats",
|
||||
"device_info": "Informació del dispositiu",
|
||||
"device_not_found": "Dispositiu no trobat.",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Afegeix a Lovelace",
|
||||
@@ -1265,7 +1281,7 @@
|
||||
"picker": {
|
||||
"disable_selected": {
|
||||
"button": "Desactiva seleccionada/es",
|
||||
"confirm_text": "Les entitats desactivades no s’afegiran a Home Assistant.",
|
||||
"confirm_text": "Les entitats desactivades no s'afegiran a Home Assistant.",
|
||||
"confirm_title": "Vols desactivar {number} entitat/s?"
|
||||
},
|
||||
"enable_selected": {
|
||||
@@ -1328,7 +1344,7 @@
|
||||
}
|
||||
},
|
||||
"types": {
|
||||
"input_boolean": "Commuta",
|
||||
"input_boolean": "Interruptor",
|
||||
"input_datetime": "Data i/o hora",
|
||||
"input_number": "Número",
|
||||
"input_select": "Desplegable",
|
||||
@@ -1377,13 +1393,13 @@
|
||||
},
|
||||
"configure": "Configurar",
|
||||
"configured": "Configurades",
|
||||
"description": "Gestiona i configura la integració",
|
||||
"description": "Gestionar i configurar integracións",
|
||||
"details": "Detalls de la integració",
|
||||
"discovered": "Descobertes",
|
||||
"home_assistant_website": "lloc web de Home Assistant",
|
||||
"ignore": {
|
||||
"confirm_delete_ignore": "Això farà que quan la integració es descobreixi torni a aparèixer a les integracions descobertes. Pot ser que tardi una estona o es necessiti reiniciar.",
|
||||
"confirm_delete_ignore_title": "Vols deixar d’ignorar {name}?",
|
||||
"confirm_delete_ignore_title": "Vols deixar d'ignorar {name}?",
|
||||
"confirm_ignore": "Estàs segur que no vols per a configurar aquesta integració? Pots desfer-ho fent clic a 'Mostra les integracions ignorades' al menú de la part superior dreta.",
|
||||
"confirm_ignore_title": "Ignorar descobriment de {name}?",
|
||||
"hide_ignored": "Amaga les integracions ignorades",
|
||||
@@ -1397,10 +1413,12 @@
|
||||
"new": "Configura una nova integració",
|
||||
"no_integrations": "Sembla que encara no tens cap integració configurada. Prem al botó de sota per afegir la teva primera integració!",
|
||||
"none": "Encara no hi ha res configurat",
|
||||
"none_found": "No s'han trobat integracions",
|
||||
"none_found_detail": "Ajusta els paràmetres de cerca.",
|
||||
"note_about_integrations": "Encara no es poden configurar totes les integracions a través de la UI.",
|
||||
"note_about_website_reference": "N'hi ha més disponibles al ",
|
||||
"rename_dialog": "Edita el nom de l'entrada de configuració",
|
||||
"rename_input_label": "Nom de l’entrada"
|
||||
"rename_input_label": "Nom de l'entrada"
|
||||
},
|
||||
"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.",
|
||||
"lovelace": {
|
||||
@@ -1470,10 +1488,10 @@
|
||||
},
|
||||
"no_resources": "Sense recursos"
|
||||
},
|
||||
"refresh_body": "Has d’actualitzar la pàgina per completar l’eliminació. Vols actualitzar-la ara?",
|
||||
"refresh_body": "Has d'actualitzar la pàgina per completar l'eliminació. Vols actualitzar-la ara?",
|
||||
"refresh_header": "Vols actualitzar?",
|
||||
"types": {
|
||||
"css": "Fitxer d’estils",
|
||||
"css": "Fitxer d'estils",
|
||||
"html": "HTML (obsolet)",
|
||||
"js": "Fitxer JavaScript (obsolet)",
|
||||
"module": "Mòdul JavaScript"
|
||||
@@ -1528,7 +1546,7 @@
|
||||
},
|
||||
"introduction": "Utilitza les escenes per donar més vida a la teva llar.",
|
||||
"load_error_not_editable": "Només es poden editar les escenes de l'arxiu scenes.yaml.",
|
||||
"load_error_unknown": "Error en carregar l’escena ({err_no}).",
|
||||
"load_error_unknown": "Error en carregar l'escena ({err_no}).",
|
||||
"name": "Nom",
|
||||
"save": "Desa",
|
||||
"unsaved_confirm": "Hi han canvis no desats. Segur que vols sortir?"
|
||||
@@ -1538,7 +1556,7 @@
|
||||
"delete_confirm": "Estàs segur que vols eliminar aquesta escena?",
|
||||
"delete_scene": "Elimina l'escena",
|
||||
"edit_scene": "Edita escena",
|
||||
"header": "Editor d’escenes",
|
||||
"header": "Editor d'escenes",
|
||||
"headers": {
|
||||
"name": "Nom"
|
||||
},
|
||||
@@ -1559,11 +1577,11 @@
|
||||
"delete_confirm": "Estàs segur que vols eliminar aquest script?",
|
||||
"delete_script": "Elimina l'script",
|
||||
"header": "Script: {name}",
|
||||
"introduction": "Utilitza els scripts per executar seqüències d’accions.",
|
||||
"introduction": "Utilitza els scripts per executar seqüències d'accions.",
|
||||
"link_available_actions": "Més informació sobre les accions disponibles.",
|
||||
"load_error_not_editable": "Només es poden editar els scripts dins de l'arxiu scripts.yaml.",
|
||||
"sequence": "Seqüència",
|
||||
"sequence_sentence": "Seqüència d’accions de l'script."
|
||||
"sequence_sentence": "Seqüència d'accions de l'script."
|
||||
},
|
||||
"picker": {
|
||||
"add_script": "Afegeix script",
|
||||
@@ -1650,7 +1668,7 @@
|
||||
},
|
||||
"zha": {
|
||||
"add_device_page": {
|
||||
"discovery_text": "Els dispositius descoberts apareixeran aquí. Segueix les instruccions del teu dispositiu/s i posa el dispositiu/s en mode d’emparellament.",
|
||||
"discovery_text": "Els dispositius descoberts apareixeran aquí. Segueix les instruccions del/s teu/s dispositiu/s i posa el dispositiu/s en mode d'emparellament.",
|
||||
"header": "Domòtica amb Zigbee - Afegir dispositius",
|
||||
"search_again": "Torna a cercar",
|
||||
"spinner": "S'estan cercant dispositius ZHA Zigbee..."
|
||||
@@ -1665,7 +1683,7 @@
|
||||
"get_zigbee_attribute": "Obtenir l'atribut Zigbee",
|
||||
"header": "Atributs clúster",
|
||||
"help_attribute_dropdown": "Selecciona un atribut per visualitzar-ne o definiu-ne el valor.",
|
||||
"help_get_zigbee_attribute": "Obté el valor de l’atribut seleccionat.",
|
||||
"help_get_zigbee_attribute": "Obté el valor de l'atribut seleccionat.",
|
||||
"help_set_zigbee_attribute": "Estableix el valor d'atribut pel clúster especificat a l'entitat especificada.",
|
||||
"introduction": "Consulta i edita els atributs del clúster.",
|
||||
"set_zigbee_attribute": "Estableix l'atribut Zigbee"
|
||||
@@ -1763,7 +1781,7 @@
|
||||
"name": "Nom",
|
||||
"new_zone": "Zona nova",
|
||||
"passive": "Passiva",
|
||||
"passive_note": "Les zones passives estan amagades i no s’utilitzen com a ubicacions per a dispositius rastrejables. Però són utils per a la creació d'automatitzacions.",
|
||||
"passive_note": "Les zones passives estan amagades i no s'utilitzen com a ubicacions per a dispositius rastrejables. Però són utils per a la creació d'automatitzacions.",
|
||||
"radius": "Radi",
|
||||
"required_error_msg": "Aquest camp és obligatori",
|
||||
"update": "Actualitza"
|
||||
@@ -1772,7 +1790,7 @@
|
||||
"edit_home_zone_narrow": "El radi de la zona principal (casa) encara no es pot editar des del \"frontend\". Sí que pots canviar-ne la ubicació des de la configuració general.",
|
||||
"go_to_core_config": "Anar a la configuració general?",
|
||||
"home_zone_core_config": "La ubicació de la zona principal (casa) és pot canviar des de la pàgina de configuració general. El radi d'aquesta zona encara no es pot editar des d'aquí. Vols anar a la configuració general?",
|
||||
"introduction": "Les zones et permeten definir certes regions del planeta. Quan una persona es trobi dins d’una zona, l’estat prendrà el nom d'aquesta zona. També es poden utilitzar com a disparadors o condicions durant la creació d'automatitzacions.",
|
||||
"introduction": "Les zones et permeten definir certes regions del planeta. Quan una persona es trobi dins d'una zona, l'estat prendrà el nom d'aquesta zona. També es poden utilitzar com a disparadors o condicions durant la creació d'automatitzacions.",
|
||||
"no_zones_created_yet": "Sembla que encara no has creat cap zona."
|
||||
},
|
||||
"zwave": {
|
||||
@@ -1805,12 +1823,12 @@
|
||||
"header": "Opcions de configuració del node",
|
||||
"seconds": "segons",
|
||||
"set_config_parameter": "Defineix el paràmetre de configuració",
|
||||
"set_wakeup": "Estableix l’interval en despertar",
|
||||
"set_wakeup": "Estableix l'interval en despertar",
|
||||
"true": "Cert"
|
||||
},
|
||||
"ozw_log": {
|
||||
"header": "Registre d'OZW",
|
||||
"introduction": "Consulta el registre. 0 és el mínim (carrega el registre complet) i 1000 és el màxim. La càrrega mostrarà un registre estàtic i la cua s’actualitzarà automàticament amb l’últim número de línies especificat."
|
||||
"introduction": "Consulta el registre. 0 és el mínim (carrega el registre complet) i 1000 és el màxim. La càrrega mostrarà un registre estàtic i la cua s'actualitzarà automàticament amb l'últim número de línies especificat."
|
||||
},
|
||||
"services": {
|
||||
"add_node": "Afegeix node",
|
||||
@@ -1851,7 +1869,7 @@
|
||||
"listening_to": "Escoltant a",
|
||||
"notification_event_fired": "L'esdeveniment {type} s'ha cridat correctament",
|
||||
"start_listening": "Comença a escoltar",
|
||||
"stop_listening": "Deixa d’escoltar",
|
||||
"stop_listening": "Deixa d'escoltar",
|
||||
"subscribe_to": "Esdeveniment al qual subscriure's",
|
||||
"title": "Esdeveniments",
|
||||
"type": "Tipus d'esdeveniment"
|
||||
@@ -1890,7 +1908,7 @@
|
||||
"payload": "Dades/missatge (plantilla permesa)",
|
||||
"publish": "Publica",
|
||||
"start_listening": "Comença a escoltar",
|
||||
"stop_listening": "Deixa d’escoltar",
|
||||
"stop_listening": "Deixa d'escoltar",
|
||||
"subscribe_to": "Tòpic al qual subscriure's",
|
||||
"title": "MQTT",
|
||||
"topic": "tòpic"
|
||||
@@ -1903,14 +1921,14 @@
|
||||
"column_parameter": "Paràmetre",
|
||||
"data": "Dades del servei (en YAML, opcionals)",
|
||||
"description": "L'eina Serveis et permet fer crides a qualsevol servei disponible a Home Assistant.",
|
||||
"fill_example_data": "Omple amb dades d’exemple",
|
||||
"fill_example_data": "Omple amb dades d'exemple",
|
||||
"no_description": "No hi ha cap descripció disponible",
|
||||
"no_parameters": "Aquest servei no té paràmetres.",
|
||||
"select_service": "Selecciona un servei per veure'n la descripció",
|
||||
"title": "Serveis"
|
||||
},
|
||||
"states": {
|
||||
"alert_entity_field": "L’entitat és un camp obligatori",
|
||||
"alert_entity_field": "L'entitat és un camp obligatori",
|
||||
"attributes": "Atributs",
|
||||
"current_entities": "Entitats actuals",
|
||||
"description1": "Defineix la representació d'un dispositiu a Home Assistant.",
|
||||
@@ -1941,7 +1959,7 @@
|
||||
"showing_entries": "Mostrant entrades de"
|
||||
},
|
||||
"logbook": {
|
||||
"entries_not_found": "No s’han trobat entrades al registre.",
|
||||
"entries_not_found": "No s'han trobat entrades al registre.",
|
||||
"period": "Període",
|
||||
"showing_entries": "Mostrant entrades de"
|
||||
},
|
||||
@@ -1971,7 +1989,7 @@
|
||||
"url": "Obre un finestra a {url_path}"
|
||||
},
|
||||
"safe-mode": {
|
||||
"description": "Home Assistant ha tingut algun problema en carregar la configuració i ara s'està executant en mode segur. Mira el registre d’errors per veure què ha anat malament.",
|
||||
"description": "Home Assistant ha tingut algun problema en carregar la configuració i ara s'està executant en mode segur. Mira el registre d'errors per veure què ha anat malament.",
|
||||
"header": "Mode segur activat"
|
||||
},
|
||||
"shopping-list": {
|
||||
@@ -2239,14 +2257,14 @@
|
||||
"menu": {
|
||||
"close": "Tanca",
|
||||
"configure_ui": "Configurar la interfície d'usuari",
|
||||
"exit_edit_mode": "Surt del mode d’edició d'interfície",
|
||||
"exit_edit_mode": "Surt del mode d'edició d'interfície",
|
||||
"help": "Ajuda",
|
||||
"refresh": "Actualitzar",
|
||||
"reload_resources": "Actualitza recursos"
|
||||
},
|
||||
"reload_lovelace": "Recarrega Lovelace",
|
||||
"reload_resources": {
|
||||
"refresh_body": "Has d’actualitzar la pàgina per completar la càrrega. Vols actualitzar-la ara?",
|
||||
"refresh_body": "Has d'actualitzar la pàgina per completar la càrrega. Vols actualitzar-la ara?",
|
||||
"refresh_header": "Vols actualitzar?"
|
||||
},
|
||||
"unused_entities": {
|
||||
@@ -2377,7 +2395,7 @@
|
||||
"cards": {
|
||||
"demo": {
|
||||
"demo_by": "per {name}",
|
||||
"introduction": "Benvingut a casa! Has arribat a la demo de Home Assistant on es mostren algunes de les millors interfícies d’usuari creades per la comunitat.",
|
||||
"introduction": "Benvingut a casa! Has arribat a la demo de Home Assistant on es mostren algunes de les millors interfícies d'usuari creades per la comunitat.",
|
||||
"learn_more": "Més informació sobre Home Assistant",
|
||||
"next_demo": "Següent mostra"
|
||||
}
|
||||
@@ -2482,18 +2500,18 @@
|
||||
"logout_text": "Estàs segur que vols tancar la sessió?",
|
||||
"logout_title": "Tancar sessió?",
|
||||
"long_lived_access_tokens": {
|
||||
"confirm_delete": "Estàs segur que vols eliminar el testimoni d'autenticació d'accés per {name}?",
|
||||
"create": "Crea un testimoni d'autenticació",
|
||||
"create_failed": "No s'ha pogut crear el testimoni d'autenticació d'accés.",
|
||||
"confirm_delete": "Estàs segur que vols eliminar el token d'autenticació d'accés per {name}?",
|
||||
"create": "Crea un token d'autenticació",
|
||||
"create_failed": "No s'ha pogut crear el token d'autenticació d'accés.",
|
||||
"created_at": "Creat el {date}",
|
||||
"delete_failed": "No s'ha pogut eliminar el testimoni d'autenticació d'accés.",
|
||||
"description": "Crea testimonis d'autenticació d'accés de llarga durada per permetre als teus programes (scripts) interactuar amb la instància de Home Assistant. Cada testimoni d'autenticació serà vàlid durant deu anys després de la seva creació. Els següents testimonis d'autenticació d'accés de llarga durada estan actius actualment.",
|
||||
"empty_state": "Encara no tens testimonis d'autenticaciós d'accés de llarga durada.",
|
||||
"header": "Testimonis d'autenticació d'accés de llarga durada",
|
||||
"delete_failed": "No s'ha pogut eliminar el token d'autenticació d'accés.",
|
||||
"description": "Crea tokens d'autenticació d'accés de llarga durada per permetre als teus programes (scripts) interactuar amb la instància de Home Assistant. Cada token d'autenticació serà vàlid durant deu anys després de la seva creació. Els següents tokens d'autenticació d'accés de llarga durada estan actius actualment.",
|
||||
"empty_state": "Encara no tens tokens d'autenticaciós d'accés de llarga durada.",
|
||||
"header": "Tokens d'autenticació d'accés de llarga durada",
|
||||
"last_used": "Darrer ús el {date} des de {location}",
|
||||
"learn_auth_requests": "Aprèn a fer sol·licituds autenticades.",
|
||||
"not_used": "Mai no s'ha utilitzat",
|
||||
"prompt_copy_token": "Copia't el testimoni d'autenticació (token) d'accés. No es tornarà a mostrar més endavant.",
|
||||
"prompt_copy_token": "Copia't el token d'autenticació d'accés. No es tornarà a mostrar més endavant.",
|
||||
"prompt_name": "Nom?"
|
||||
},
|
||||
"mfa_setup": {
|
||||
@@ -2518,15 +2536,15 @@
|
||||
"push_notifications": "Notificacions push"
|
||||
},
|
||||
"refresh_tokens": {
|
||||
"confirm_delete": "Estàs segur que vols eliminar el testimoni d'actualització per a {name}?",
|
||||
"confirm_delete": "Estàs segur que vols eliminar el token d'actualització per a {name}?",
|
||||
"created_at": "Creat el {date}",
|
||||
"current_token_tooltip": "No s'ha pogut eliminar el testimoni d'autenticació d'actualització.",
|
||||
"delete_failed": "No s'ha pogut eliminar el testimoni d'autenticació d'actualització.",
|
||||
"description": "Cada testimoni d'autenticació d'actualització representa un inici de sessió diferent. Els testimonis d'autenticació d'actualització s'eliminaran automàticament quan tanquis la sessió. A sota hi ha una llista de testimonis d'autenticació d'actualització que estan actius actualment al teu compte.",
|
||||
"header": "Refresca els testimonis d'autenticació",
|
||||
"current_token_tooltip": "No s'ha pogut eliminar el token d'autenticació d'actualització.",
|
||||
"delete_failed": "No s'ha pogut eliminar el token d'autenticació d'actualització.",
|
||||
"description": "Cada token d'autenticació d'actualització representa un inici de sessió diferent. Els tokens d'autenticació d'actualització s'eliminaran automàticament quan tanquis la sessió. A sota hi ha una llista de tokens d'autenticació d'actualització que estan actius actualment al teu compte.",
|
||||
"header": "Refresca els tokens d'autenticació",
|
||||
"last_used": "Darrer ús el {date} des de {location}",
|
||||
"not_used": "Mai no s'ha utilitzat",
|
||||
"token_title": "Testimoni d'actualització de {clientId}"
|
||||
"token_title": "Token d'actualització de {clientId}"
|
||||
},
|
||||
"themes": {
|
||||
"dropdown_label": "Tema",
|
||||
@@ -2535,7 +2553,7 @@
|
||||
"link_promo": "Crea temes personalitzats"
|
||||
},
|
||||
"vibrate": {
|
||||
"description": "Activa o desactiva la vibració en d’aquest dispositiu.",
|
||||
"description": "Activa o desactiva la vibració en d'aquest dispositiu.",
|
||||
"header": "Vibra"
|
||||
}
|
||||
},
|
||||
@@ -2546,7 +2564,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"external_app_configuration": "Configuració de l’aplicació",
|
||||
"external_app_configuration": "Configuració de l'aplicació",
|
||||
"sidebar_toggle": "Commutació de la barra lateral"
|
||||
}
|
||||
}
|
||||
|
@@ -137,7 +137,7 @@
|
||||
"on": "Vlhko"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Bez pohybu",
|
||||
"off": "Žádný pohyb",
|
||||
"on": "Zaznamenán pohyb"
|
||||
},
|
||||
"occupancy": {
|
||||
@@ -206,6 +206,8 @@
|
||||
"stopped": "Zastaveno"
|
||||
},
|
||||
"default": {
|
||||
"off": "Vypnuto",
|
||||
"on": "Zapnuto",
|
||||
"unavailable": "Není k dispozici",
|
||||
"unknown": "Nezjištěno"
|
||||
},
|
||||
@@ -288,7 +290,7 @@
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "Čistí",
|
||||
"docked": "V stanici",
|
||||
"docked": "Ve stanici",
|
||||
"error": "Chyba",
|
||||
"idle": "Nečinný",
|
||||
"off": "Off",
|
||||
@@ -442,6 +444,7 @@
|
||||
"attributes": {
|
||||
"air_pressure": "Tlak vzduchu",
|
||||
"humidity": "Vlhkost vzduchu",
|
||||
"precipitation": "Srážky",
|
||||
"temperature": "Teplota",
|
||||
"visibility": "Viditelnost",
|
||||
"wind_speed": "Rychlost větru"
|
||||
@@ -476,6 +479,7 @@
|
||||
"save": "Uložit",
|
||||
"successfully_deleted": "Úspěšně smazáno",
|
||||
"successfully_saved": "Úspěšně uloženo",
|
||||
"undo": "Zpět",
|
||||
"yes": "Ano"
|
||||
},
|
||||
"components": {
|
||||
@@ -650,6 +654,17 @@
|
||||
"stop": "Stop"
|
||||
}
|
||||
},
|
||||
"mqtt_device_debug_info": {
|
||||
"deserialize": "Pokus o parsování MQTT zpráv jako JSON",
|
||||
"entities": "Entity",
|
||||
"no_entities": "Žádné entity",
|
||||
"no_triggers": "Žádné spouštěče",
|
||||
"payload_display": "Zobrazení MQTT zprávy",
|
||||
"recent_messages": "{n} naposledy přijaté zprávy",
|
||||
"show_as_yaml": "Zobrazit jako YAML",
|
||||
"title": "Ladicí informace {device}",
|
||||
"triggers": "Spouštěče"
|
||||
},
|
||||
"options_flow": {
|
||||
"form": {
|
||||
"header": "Nastavení"
|
||||
@@ -670,11 +685,13 @@
|
||||
"buttons": {
|
||||
"add": "Přidat zařízení",
|
||||
"reconfigure": "Překonfigurovat zařízení",
|
||||
"remove": "Odebrat zařízení"
|
||||
"remove": "Odebrat zařízení",
|
||||
"zigbee_information": "Informace o Zigbee"
|
||||
},
|
||||
"confirmations": {
|
||||
"remove": "Opravdu chcete zařízení odebrat?"
|
||||
},
|
||||
"device_signature": "Podpis zařízení Zigbee",
|
||||
"last_seen": "Naposledy viděn",
|
||||
"manuf": "od {manufacturer}",
|
||||
"no_area": "Žádná oblast",
|
||||
@@ -683,7 +700,8 @@
|
||||
"services": {
|
||||
"reconfigure": "Překonfigurovat zařízení ZHA (opravit zařízení). Použijte, pokud se zařízením máte problémy. Je-li dotyčné zařízení napájené bateriemi, ujistěte se prosím, že je při používání této služby spuštěné a přijímá příkazy.",
|
||||
"remove": "Odebrat zařízení ze sítě Zigbee.",
|
||||
"updateDeviceName": "Nastavte vlastní název tohoto zařízení v registru zařízení."
|
||||
"updateDeviceName": "Nastavte vlastní název tohoto zařízení v registru zařízení.",
|
||||
"zigbee_information": "Zobrazit Zigbee informace zařízení."
|
||||
},
|
||||
"unknown": "Neznámý",
|
||||
"zha_device_card": {
|
||||
@@ -724,6 +742,10 @@
|
||||
},
|
||||
"areas": {
|
||||
"caption": "Registr oblastí",
|
||||
"data_table": {
|
||||
"area": "Oblast",
|
||||
"devices": "Zařízení"
|
||||
},
|
||||
"delete": {
|
||||
"confirmation_text": "Všechna zařízení v této oblasti budou nastavena jako nepřiřazena.",
|
||||
"confirmation_title": "Opravdu chcete tuto oblast smazat?"
|
||||
@@ -731,14 +753,17 @@
|
||||
"description": "Přehled všech oblastí ve vaší domácnosti.",
|
||||
"editor": {
|
||||
"create": "VYTVOŘIT",
|
||||
"default_name": "Nová oblast",
|
||||
"delete": "Odstranit",
|
||||
"update": "UPRAVIT"
|
||||
},
|
||||
"picker": {
|
||||
"create_area": "Vytvořit oblast",
|
||||
"header": "Registr oblastí",
|
||||
"integrations_page": "Stránka integrací",
|
||||
"introduction": "Oblasti se používají k uspořádání zařízení podle místa kde jsou. Tato informace bude použita k organizaci rozhraní, k nastavení oprávnění a v integraci s ostatnímy systémy.",
|
||||
"introduction2": "Pro přídání zařízení do oblasti přejděte na stránku integrací pomocí odkazu níže tam klikněte na nakonfigurovanou integraci abyste se dostali na kartu zažízení."
|
||||
"introduction2": "Pro přídání zařízení do oblasti přejděte na stránku integrací pomocí odkazu níže tam klikněte na nakonfigurovanou integraci abyste se dostali na kartu zažízení.",
|
||||
"no_areas": "Vypadá to, že ještě nemáte žádné oblasti!"
|
||||
}
|
||||
},
|
||||
"automation": {
|
||||
@@ -962,6 +987,9 @@
|
||||
"delete_confirm": "Opravdu chcete odstranit tuto automatizaci?",
|
||||
"edit_automation": "Upravit automatizaci",
|
||||
"header": "Editor automatizací",
|
||||
"headers": {
|
||||
"name": "Název"
|
||||
},
|
||||
"introduction": "Editor automatizací umožňuje vytvářet a upravovat automatizace. Přečtěte si prosím [pokyny] (https://home-assistant.io/docs/automation/editor/), abyste se ujistili, že jste aplikaci Home Assistant nakonfigurovali správně.",
|
||||
"learn_more": "Další informace o automatizacích",
|
||||
"no_automations": "Nemohli jsme najít žádné upravitelné automatizace",
|
||||
@@ -1214,6 +1242,7 @@
|
||||
"none": "Toto zařízení nemá žádné entity"
|
||||
},
|
||||
"name": "Jméno",
|
||||
"no_devices": "Žádná zařízení",
|
||||
"scene": {
|
||||
"create": "Vytvořit scénu se zařízením",
|
||||
"no_scenes": "Žádné scény",
|
||||
@@ -1276,6 +1305,10 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"filtering": {
|
||||
"clear": "Vymazat",
|
||||
"filtering_by": "Filtrování podle"
|
||||
},
|
||||
"header": "Konfigurace Home Assistant",
|
||||
"helpers": {
|
||||
"caption": "Pomocníci",
|
||||
@@ -1303,9 +1336,11 @@
|
||||
}
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Přidat integraci",
|
||||
"caption": "Integrace",
|
||||
"config_entry": {
|
||||
"area": "V {area}",
|
||||
"delete": "Smazat",
|
||||
"delete_button": "Smazat {integration}",
|
||||
"delete_confirm": "Opravdu chcete odstranit tuto integraci?",
|
||||
"device_unavailable": "zařízení není k dispozici",
|
||||
@@ -1316,8 +1351,11 @@
|
||||
"no_area": "Žádná oblast",
|
||||
"no_device": "Entity bez zařízení",
|
||||
"no_devices": "Tato integrace nemá žádná zařízení.",
|
||||
"options": "Možnosti",
|
||||
"rename": "Přejmenovat",
|
||||
"restart_confirm": "Restartujte Home Assistant pro odstranění této integrace",
|
||||
"settings_button": "Upravit nastavení pro {integration}",
|
||||
"system_options": "Systémové možnosti pro {integration}",
|
||||
"system_options_button": "Systémové možnosti pro {integration}"
|
||||
},
|
||||
"config_flow": {
|
||||
@@ -1352,11 +1390,17 @@
|
||||
"show_ignored": "Zobrazit ignorované integrace",
|
||||
"stop_ignore": "Přestat ignorovat"
|
||||
},
|
||||
"integration": "integrace",
|
||||
"integration_not_found": "Integrace nebyla nalezena.",
|
||||
"new": "Nastavte novou integraci",
|
||||
"no_integrations": "Vypadá to, že ještě nemáte nakonfigurovány žádné integrace. Kliknutím na tlačítko níže přidáte svou první integraci!",
|
||||
"none": "Zatím nic nezkonfigurováno",
|
||||
"none_found": "Žádné integrace nenalezeny.",
|
||||
"none_found_detail": "Upravte kritéria vyhledávání.",
|
||||
"note_about_integrations": "Ne všechny integrace lze prozatím konfigurovat prostřednictvím uživatelského rozhraní.",
|
||||
"note_about_website_reference": "Další jsou k dispozici na "
|
||||
"note_about_website_reference": "Další jsou k dispozici na ",
|
||||
"rename_dialog": "Upravit název této položky nastavení",
|
||||
"rename_input_label": "Název položky"
|
||||
},
|
||||
"introduction": "Zde je možné konfigurovat vaše komponenty a Home Assistant.\nZ uživatelského rozhraní sice zatím není možné konfigurovat vše, ale pracujeme na tom.",
|
||||
"lovelace": {
|
||||
@@ -1495,6 +1539,9 @@
|
||||
"delete_scene": "Smazat scénu",
|
||||
"edit_scene": "Upravit scénu",
|
||||
"header": "Editor scén",
|
||||
"headers": {
|
||||
"name": "Název"
|
||||
},
|
||||
"introduction": "Editor scén vám umožňuje vytvářet a upravovat scény. Postupujte podle níže uvedeného odkazu a přečtěte si pokyny, abyste se ujistili, že jste Home Assistant nakonfigurovali správně.",
|
||||
"learn_more": "Další informace o scénách",
|
||||
"no_scenes": "Nemohli jsme najít žádné upravitelné scény",
|
||||
@@ -1522,9 +1569,13 @@
|
||||
"add_script": "Přidat skript",
|
||||
"edit_script": "Upravit skript",
|
||||
"header": "Editor skriptů",
|
||||
"headers": {
|
||||
"name": "Název"
|
||||
},
|
||||
"introduction": "Editor skriptů umožňuje vytvářet a upravovat skripty. Postupujte podle níže uvedeného odkazu a přečtěte si pokyny, abyste se ujistili, že jste Home Assistant nakonfigurovali správně.",
|
||||
"learn_more": "Další informace o skriptech",
|
||||
"no_scripts": "Nemohli jsme najít žádné editovatelné skripty",
|
||||
"show_info": "Zobrazit informace o skriptu",
|
||||
"trigger_script": "Spustit skript"
|
||||
}
|
||||
},
|
||||
@@ -1573,6 +1624,7 @@
|
||||
"editor": {
|
||||
"activate_user": "Aktivovat uživatele",
|
||||
"active": "Aktivní",
|
||||
"admin": "Administrátor",
|
||||
"caption": "Zobrazit uživatele",
|
||||
"change_password": "Změnit heslo",
|
||||
"confirm_user_deletion": "Opravdu chcete smazat {name} ?",
|
||||
@@ -1580,10 +1632,20 @@
|
||||
"delete_user": "Odstranit uživatele",
|
||||
"group": "Skupina",
|
||||
"id": "ID",
|
||||
"name": "Jméno",
|
||||
"owner": "Vlastník",
|
||||
"system_generated": "Generovaný systémem",
|
||||
"system_generated_users_not_editable": "Nelze aktualizovat uživatele generované systémem.",
|
||||
"system_generated_users_not_removable": "Nelze odebrat uživatele generované systémem.",
|
||||
"unnamed_user": "Nepojmenovaný uživatel"
|
||||
"unnamed_user": "Nepojmenovaný uživatel",
|
||||
"update_user": "Aktualizovat"
|
||||
},
|
||||
"picker": {
|
||||
"headers": {
|
||||
"group": "Skupina",
|
||||
"name": "Název",
|
||||
"system": "Systémový"
|
||||
}
|
||||
}
|
||||
},
|
||||
"zha": {
|
||||
@@ -1706,7 +1768,7 @@
|
||||
"required_error_msg": "Toto pole je povinné",
|
||||
"update": "Aktualizovat"
|
||||
},
|
||||
"edit_home_zone": "Umístění vašeho domova lze změnit v konfiguraci.",
|
||||
"edit_home_zone": "Poloměr domovské zóny zatím nelze upravit z frontendu. Z frontendu se dá změnit jen poloha domovské zóny.",
|
||||
"edit_home_zone_narrow": "Poloměr domovské zóny zatím nelze upravit z frontendu. Umístění lze změnit z obecné konfigurace.",
|
||||
"go_to_core_config": "Přejít na obecnou konfiguraci?",
|
||||
"home_zone_core_config": "Umístění vaší domovské zóny lze upravit na stránce obecné konfigurace. Poloměr domovské zóny zatím nelze upravit z frontendu. Chcete přejít na obecnou konfiguraci?",
|
||||
@@ -1958,6 +2020,10 @@
|
||||
"description": "Karta Filtr entit umožňuje definovat seznam entit, které chcete sledovat pouze v určitém stavu.",
|
||||
"name": "Filtr entit"
|
||||
},
|
||||
"entity": {
|
||||
"description": "Karta Entity vám poskytuje rychlý přehled o stavu vaší entity.",
|
||||
"name": "Entita"
|
||||
},
|
||||
"gauge": {
|
||||
"description": "Karta Ručičkový ukazatel je základní karta pro vizuální zobrazení hodnoty senzoru.",
|
||||
"name": "Ručičkový ukazatel",
|
||||
@@ -1970,8 +2036,10 @@
|
||||
},
|
||||
"generic": {
|
||||
"aspect_ratio": "Poměr stran",
|
||||
"attribute": "Atribut",
|
||||
"camera_image": "Entita kamery",
|
||||
"camera_view": "Zobrazení kamery",
|
||||
"double_tap_action": "Akce při dvojitém poklepání",
|
||||
"entities": "Entity",
|
||||
"entity": "Entita",
|
||||
"hold_action": "Akce při podržení",
|
||||
@@ -2022,6 +2090,7 @@
|
||||
"default_zoom": "Výchozí zvětšení",
|
||||
"description": "Karta Mapa umožňuje zobrazit entity na mapě.",
|
||||
"geo_location_sources": "Zdroje geolokace",
|
||||
"hours_to_show": "Hodin k zobrazení",
|
||||
"name": "Mapa",
|
||||
"source": "Zdroj"
|
||||
},
|
||||
@@ -2078,6 +2147,10 @@
|
||||
"name": "Předpověď počasí"
|
||||
}
|
||||
},
|
||||
"cardpicker": {
|
||||
"custom_card": "Vlastní",
|
||||
"no_description": "Žádný popis není k dispozici."
|
||||
},
|
||||
"edit_card": {
|
||||
"add": "Přidat kartu",
|
||||
"delete": "Odstranit",
|
||||
@@ -2127,7 +2200,7 @@
|
||||
"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.",
|
||||
"confirm_unsaved_changes": "Máte neuložené změny. Opravdu chcete odejít?",
|
||||
"confirm_unsaved_comments": "Vaše konfigurace obsahuje komentáře, které se neuloží. Chceš pokračovat?",
|
||||
"confirm_unsaved_comments": "Vaše konfigurace obsahuje komentáře, které se neuloží. Chcete pokračovat?",
|
||||
"error_invalid_config": "Vaše konfigurace není platná: {error}",
|
||||
"error_parse_yaml": "Chyba při parsování YAML: {error}",
|
||||
"error_remove": "Nelze odstranit nastavení: {error}",
|
||||
@@ -2141,6 +2214,7 @@
|
||||
"save_config": {
|
||||
"cancel": "Zahodit změnu",
|
||||
"close": "Zavřít",
|
||||
"empty_config": "Začít s prázdným dashboardem",
|
||||
"header": "Převzít kontrolu nad vaší Lovelace UI",
|
||||
"para": "Ve výchozím nastavení bude Home Assistant spravovat vaše uživatelské rozhraní – aktualizovat jej při přidání nové entity nebo Lovelace komponenty. Pokud převezmete kontrolu, nebudeme již provádět změny automaticky za vás.",
|
||||
"para_sure": "Opravdu chcete převzít kontrolu nad uživalským rohraním ?",
|
||||
@@ -2193,7 +2267,8 @@
|
||||
"warning": {
|
||||
"attribute_not_found": "Atribut {attribute} není k dispozici v: {entity}",
|
||||
"entity_non_numeric": "Entita není číselná: {entity}",
|
||||
"entity_not_found": "Entita není k dispozici: {entity}"
|
||||
"entity_not_found": "Entita není k dispozici: {entity}",
|
||||
"entity_unavailable": "Entita {entity} není aktuálně k dispozici."
|
||||
}
|
||||
},
|
||||
"mailbox": {
|
||||
@@ -2388,6 +2463,11 @@
|
||||
"submit": "Odeslat"
|
||||
},
|
||||
"current_user": "Nyní jste přihlášeni jako {fullName}.",
|
||||
"dashboard": {
|
||||
"description": "Vyberte výchozí dashboard pro toto zařízení.",
|
||||
"dropdown_label": "Dashboard",
|
||||
"header": "Dashboard"
|
||||
},
|
||||
"force_narrow": {
|
||||
"description": "Tato volba skryje postranním panelu jako výchozí nastavení, podobně jako na mobilním zažízení.",
|
||||
"header": "Vždy skrýt postranní panel"
|
||||
|
@@ -206,6 +206,8 @@
|
||||
"stopped": "Stoppet"
|
||||
},
|
||||
"default": {
|
||||
"off": "Fra",
|
||||
"on": "Til",
|
||||
"unavailable": "Utilgængelig",
|
||||
"unknown": "Ukendt"
|
||||
},
|
||||
@@ -475,7 +477,10 @@
|
||||
"close": "Luk",
|
||||
"delete": "Slet",
|
||||
"loading": "Indlæser",
|
||||
"next": "Næste",
|
||||
"no": "Nej",
|
||||
"previous": "Forrige",
|
||||
"refresh": "Opdater",
|
||||
"save": "Gem",
|
||||
"successfully_deleted": "Slettet",
|
||||
"successfully_saved": "Gemt",
|
||||
@@ -735,6 +740,10 @@
|
||||
"triggered": "Udløste {name}"
|
||||
},
|
||||
"panel": {
|
||||
"calendar": {
|
||||
"my_calendars": "Mine kalendere",
|
||||
"today": "I dag"
|
||||
},
|
||||
"config": {
|
||||
"advanced_mode": {
|
||||
"hint_enable": "Mangler der konfigurationsindstillinger? Aktivér avanceret tilstand",
|
||||
@@ -837,6 +846,9 @@
|
||||
},
|
||||
"label": "Enhed"
|
||||
},
|
||||
"not": {
|
||||
"label": "Ikke"
|
||||
},
|
||||
"numeric_state": {
|
||||
"above": "Over",
|
||||
"below": "Under",
|
||||
@@ -1235,6 +1247,7 @@
|
||||
},
|
||||
"delete": "Slet",
|
||||
"description": "Administrer tilsluttede enheder",
|
||||
"device_info": "Enhedsoplysninger",
|
||||
"device_not_found": "Enhed blev ikke fundet.",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Tilføj til Lovelace",
|
||||
@@ -1344,6 +1357,8 @@
|
||||
"delete_button": "Slet {integration}",
|
||||
"delete_confirm": "Er du sikker på, at du vil fjerne denne integration?",
|
||||
"device_unavailable": "entitet utilgængelig",
|
||||
"devices": "{count} {count, plural,\n one {enhed}\n other {enheder}\n}",
|
||||
"entities": "{count} {count, plural,\n one {entitet}\n other {entiteter}\n}",
|
||||
"entity_unavailable": "entitet utilgængelig",
|
||||
"firmware": "Firmware: {version}",
|
||||
"hub": "Forbundet via",
|
||||
@@ -1395,6 +1410,8 @@
|
||||
"new": "Opret en ny integration",
|
||||
"no_integrations": "Det ser ud til, at du ikke har konfigureret nogen integrationer endnu. Klik på knappen nedenfor for at tilføje din første integration!",
|
||||
"none": "Intet konfigureret endnu",
|
||||
"none_found": "Ingen integrationer fundet",
|
||||
"none_found_detail": "Juster dine søgekriterier.",
|
||||
"note_about_integrations": "Ikke alle integrationer kan konfigureres via brugerfladen endnu.",
|
||||
"note_about_website_reference": "Flere er tilgængelige på ",
|
||||
"rename_dialog": "Rediger navnet på denne konfigurationspost",
|
||||
@@ -2214,12 +2231,12 @@
|
||||
"close": "Luk",
|
||||
"empty_config": "Start med et tomt betjeningspanel",
|
||||
"header": "Tag kontrol over din 'Lovelace'-brugerflade",
|
||||
"para": "Som standard vil Home Assistant vedligeholde din brugerflade ved at opdatere den, når nye entiteter eller Lovelace-brugerfladekomponenter bliver tilgængelige. Hvis du overtager kontrollen, vil vi ikke længere foretage ændringer automatisk for dig.",
|
||||
"para": "Dette betjeningspanel vedligeholdes i øjeblikket af Home Assistant. Det opdateres automatisk, når nye entiteter eller Lovelace-brugerfladekomponenter bliver tilgængelige. Hvis du overtager kontrollen, opdateres dette betjeningspanel ikke længere automatisk. Du kan altid oprette et nyt betjeningspanel at lege med i konfigurationen.",
|
||||
"para_sure": "Er du sikker på du ønsker at tage kontrol over din brugerflade?",
|
||||
"save": "Tag kontrol",
|
||||
"yaml_config": "For at hjælpe dig med at starte, er her den aktuelle konfiguration af dette betjeningspanel:",
|
||||
"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. Det betyder, at du ikke kan ændre din Lovelace-konfiguration fra brugerfladen. Hvis du vil ændre Lovelace fra brugerfladen, skal du fjerne 'mode: yaml' fra din Lovelace-konfiguration i 'configuration.yaml.'"
|
||||
"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.'"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Tilføj til Lovelace-brugerflade",
|
||||
|
@@ -206,6 +206,8 @@
|
||||
"stopped": "Angehalten"
|
||||
},
|
||||
"default": {
|
||||
"off": "Aus",
|
||||
"on": "An",
|
||||
"unavailable": "Nicht verfügbar",
|
||||
"unknown": "Unbekannt"
|
||||
},
|
||||
@@ -475,7 +477,10 @@
|
||||
"close": "Schließen",
|
||||
"delete": "Löschen",
|
||||
"loading": "Laden",
|
||||
"next": "Weiter",
|
||||
"no": "Nein",
|
||||
"previous": "Vorher",
|
||||
"refresh": "Aktualisieren",
|
||||
"save": "Speichern",
|
||||
"successfully_deleted": "Erfolgreich gelöscht",
|
||||
"successfully_saved": "Erfolgreich gespeichert",
|
||||
@@ -655,9 +660,11 @@
|
||||
}
|
||||
},
|
||||
"mqtt_device_debug_info": {
|
||||
"deserialize": "Versuchen MQTT-Nachrichten als JSON zu parsen",
|
||||
"entities": "Entitäten",
|
||||
"no_entities": "Keine Entitäten",
|
||||
"no_triggers": "Keine Auslöser",
|
||||
"payload_display": "Payload anzeigen",
|
||||
"recent_messages": "{n} zuletzt empfangene Nachricht(en)",
|
||||
"show_as_yaml": "Als YAML anzeigen",
|
||||
"title": "{device} Debug-Informationen",
|
||||
@@ -699,7 +706,7 @@
|
||||
"reconfigure": "Konfigurieren Sie das ZHA-Gerät neu (Gerät heilen). Verwenden Sie diese Option, wenn Sie Probleme mit dem Gerät haben. Wenn es sich bei dem fraglichen Gerät um ein batteriebetriebenes Gerät handelt, vergewissern Sie sich, dass es wach ist und Befehle akzeptiert, wenn Sie diesen Dienst nutzen.",
|
||||
"remove": "Ein Gerät aus dem ZigBee-Netzwerk entfernen.",
|
||||
"updateDeviceName": "Lege einen benutzerdefinierten Namen für dieses Gerät in der Geräteregistrierung fest.",
|
||||
"zigbee_information": "Zeigen Sie die ZigBee-Informationen für das Gerät an."
|
||||
"zigbee_information": "Zeige die ZigBee-Informationen für das Gerät an."
|
||||
},
|
||||
"unknown": "Unbekannt",
|
||||
"zha_device_card": {
|
||||
@@ -733,6 +740,10 @@
|
||||
"triggered": "{name} ausgelöst"
|
||||
},
|
||||
"panel": {
|
||||
"calendar": {
|
||||
"my_calendars": "Meine Kalender",
|
||||
"today": "Heute"
|
||||
},
|
||||
"config": {
|
||||
"advanced_mode": {
|
||||
"hint_enable": "Fehlende Konfigurationsoptionen? Aktiviere den erweiterten Modus.",
|
||||
@@ -835,6 +846,9 @@
|
||||
},
|
||||
"label": "Gerät"
|
||||
},
|
||||
"not": {
|
||||
"label": "Nicht"
|
||||
},
|
||||
"numeric_state": {
|
||||
"above": "Über",
|
||||
"below": "Unter",
|
||||
@@ -1233,6 +1247,7 @@
|
||||
},
|
||||
"delete": "Löschen",
|
||||
"description": "Verwalte verbundene Geräte",
|
||||
"device_info": "Geräteinformationen",
|
||||
"device_not_found": "Gerät nicht gefunden.",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Zu Lovelace hinzufügen",
|
||||
@@ -1343,7 +1358,7 @@
|
||||
"delete_confirm": "Möchtest du diese Integration wirklich löschen?",
|
||||
"device_unavailable": "Gerät nicht verfügbar",
|
||||
"devices": "{count} {count, plural,\n one {Gerät}\n other {Geräte}\n}",
|
||||
"entities": "{count} {count, plural,\none {Einheit}\nother {Einheiten}\n}",
|
||||
"entities": "{count} {count, plural,\none {Entität}\nother {Entitäten}\n}",
|
||||
"entity_unavailable": "Entität nicht verfügbar",
|
||||
"firmware": "Firmware: {version}",
|
||||
"hub": "Verbunden über",
|
||||
@@ -1393,11 +1408,13 @@
|
||||
"integration": "Integration",
|
||||
"integration_not_found": "Integration nicht gefunden.",
|
||||
"new": "Richte eine neue Integration ein",
|
||||
"no_integrations": "Sie haben anscheinend noch keine Integrationen konfiguriert. Klicken Sie auf die Schaltfläche unten, um Ihre erste Integration hinzuzufügen!",
|
||||
"no_integrations": "Du hast anscheinend noch keine Integrationen konfiguriert. Klicke auf die Schaltfläche unten, um Deine erste Integration hinzuzufügen!",
|
||||
"none": "Noch nichts konfiguriert",
|
||||
"none_found": "Keine Integrationen gefunden",
|
||||
"none_found_detail": "Passe Deine Suchkriterien an.",
|
||||
"note_about_integrations": "Nicht alle Integrationen können über die Benutzeroberfläche konfiguriert werden.",
|
||||
"note_about_website_reference": "Weitere Informationen finden Sie auf der ",
|
||||
"rename_dialog": "Bearbeiten Sie den Namen dieses Konfigurationseintrags",
|
||||
"note_about_website_reference": "Weitere Informationen findest Du auf der ",
|
||||
"rename_dialog": "Bearbeite den Namen dieses Konfigurationseintrags",
|
||||
"rename_input_label": "Eintragsname"
|
||||
},
|
||||
"introduction": "Hier ist es möglich, deine Komponenten und Home Assistant zu konfigurieren. Noch ist nicht alles über die GUI einstellbar, aber wir arbeiten daran.",
|
||||
@@ -1468,7 +1485,7 @@
|
||||
},
|
||||
"no_resources": "keine Ressourcen"
|
||||
},
|
||||
"refresh_body": "Die Seite muss aktualisiert werden, um das Entfernen abzuschließen. Möchtest du sie jetzt aktualisieren?",
|
||||
"refresh_body": "Die Seite muss aktualisiert werden, um das Entfernen abzuschließen. Möchtest Du sie jetzt aktualisieren?",
|
||||
"refresh_header": "Möchtest du aktualisieren?",
|
||||
"types": {
|
||||
"css": "Stylesheet",
|
||||
@@ -1761,7 +1778,7 @@
|
||||
"name": "Name",
|
||||
"new_zone": "Neue Zone",
|
||||
"passive": "Passiv",
|
||||
"passive_note": "Passive Zonen sind im Frontend versteckt und werden nicht als Ort für Device Tracker verwendet. Dies ist nützlich, wenn du sie nur für Automatisierungen verwenden möchtest.",
|
||||
"passive_note": "Passive Zonen sind im Frontend versteckt und werden nicht als Ort für Device Tracker verwendet. Dies ist nützlich, wenn Du sie nur für Automatisierungen verwenden möchtest.",
|
||||
"radius": "Radius",
|
||||
"required_error_msg": "Dieses Feld ist erforderlich",
|
||||
"update": "Aktualisieren"
|
||||
@@ -1771,7 +1788,7 @@
|
||||
"go_to_core_config": "Zur allgemeinen Konfiguration gehen?",
|
||||
"home_zone_core_config": "Der Standort deiner Homezone kann auf der allgemeinen Konfigurationsseite bearbeitet werden. Der Radius der Homezone kann vom Frontend aus noch nicht bearbeitet werden. Möchtest du zur allgemeinen Konfiguration gehen?",
|
||||
"introduction": "Mit Zonen kannst du bestimmte Regionen auf der Erde angeben. Befindet sich eine Person in einer Zone, übernimmt der Zustand den Namen aus der Zone. Zonen können auch als Auslöser oder Bedingung in Automatisierungs-Setups verwendet werden.",
|
||||
"no_zones_created_yet": "Es sieht so aus, als hättest du noch keine Zonen erstellt."
|
||||
"no_zones_created_yet": "Es sieht so aus, als hättest Du noch keine Zonen erstellt."
|
||||
},
|
||||
"zwave": {
|
||||
"caption": "Z-Wave",
|
||||
@@ -1969,7 +1986,7 @@
|
||||
"url": "Fenster zu {url_path} öffnen"
|
||||
},
|
||||
"safe-mode": {
|
||||
"description": "Home Assistant hatte beim Laden Ihrer Konfiguration Probleme und wird jetzt im abgesicherten Modus ausgeführt. Sieh dir das Fehlerprotokoll an, um zu erkennen, was schiefgelaufen ist.",
|
||||
"description": "Home Assistant hatte beim Laden Ihrer Konfiguration Probleme und wird jetzt im abgesicherten Modus ausgeführt. Sieh Dir das Fehlerprotokoll an, um zu erkennen, was schiefgelaufen ist.",
|
||||
"header": "Abgesicherter Modus aktiviert"
|
||||
},
|
||||
"shopping-list": {
|
||||
@@ -2019,7 +2036,7 @@
|
||||
"name": "Entität Filter"
|
||||
},
|
||||
"entity": {
|
||||
"description": "Mit der Entitätskarte erhalten Sie einen schnellen Überblick über den Status Ihrer Entität.",
|
||||
"description": "Mit der Entitätskarte erhältst Du einen schnellen Überblick über den Status Ihrer Entität.",
|
||||
"name": "Entität"
|
||||
},
|
||||
"gauge": {
|
||||
@@ -2212,14 +2229,14 @@
|
||||
"save_config": {
|
||||
"cancel": "Abbrechen",
|
||||
"close": "Schließen",
|
||||
"empty_config": "Beginnen Sie mit einem leeren Dashboard",
|
||||
"empty_config": "Beginne mit einem leeren Dashboard",
|
||||
"header": "Lovelace Userinterface selbst verwalten",
|
||||
"para": "Dieses Dashboard wird derzeit von Home Assistant verwaltet. Es wird automatisch aktualisiert, wenn neue Entitäten oder Lovelace-UI-Komponenten verfügbar werden. Wenn Sie die Kontrolle übernehmen, wird dieses Dashboard nicht mehr automatisch aktualisiert. Sie können jederzeit ein neues Dashboard in der Konfiguration erstellen, mit dem Sie herumspielen können.",
|
||||
"para_sure": "Bist du dir sicher, dass du die Benutzeroberfläche selbst verwalten möchtest?",
|
||||
"save": "Kontrolle übernehmen",
|
||||
"yaml_config": "Um dir den Einstieg zu erleichtern, findest du hier die aktuelle Konfiguration dieses Dashboards:",
|
||||
"yaml_control": "Um die Kontrolle im YAML-Modus zu übernehmen, erstellen Sie eine YAML-Datei mit dem Namen, den Sie in Ihrer Konfiguration für dieses Dashboard angegeben haben, oder mit der Standardeinstellung 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Sie verwenden den YAML-Modus für dieses Dashboard. Dies bedeutet, dass Sie Ihre Lovelace-Konfiguration nicht über die Benutzeroberfläche ändern können. Wenn Sie dieses Dashboard über die Benutzeroberfläche verwalten möchten, entfernen Sie \"mode: yaml\" aus Ihrer Lovelace-Konfiguration in \"configuration.yaml\"."
|
||||
"yaml_control": "Um die Kontrolle im YAML-Modus zu übernehmen, erstelle eine YAML-Datei mit dem Namen, den Du in Deiner Konfiguration für dieses Dashboard angegeben hast, oder mit der Standardeinstellung 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Du verwendest den YAML-Modus für dieses Dashboard. Dies bedeutet, dass Du Deine Lovelace-Konfiguration nicht über die Benutzeroberfläche ändern kannst. Wenn Du dieses Dashboard über die Benutzeroberfläche verwalten möchtest, entferne \"mode: yaml\" aus Deiner Lovelace-Konfiguration in \"configuration.yaml\"."
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Zu Lovelace hinzufügen",
|
||||
@@ -2462,7 +2479,7 @@
|
||||
},
|
||||
"current_user": "Sie sind derzeit als {fullName} angemeldet.",
|
||||
"dashboard": {
|
||||
"description": "Wählen Sie ein Standard-Dashboard für dieses Gerät.",
|
||||
"description": "Wähle ein Standard-Dashboard für dieses Gerät.",
|
||||
"dropdown_label": "Dashboard",
|
||||
"header": "Dashboard"
|
||||
},
|
||||
|
1
translations/frontend/en-GB.json
Normal file
1
translations/frontend/en-GB.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
@@ -206,6 +206,8 @@
|
||||
"stopped": "Stopped"
|
||||
},
|
||||
"default": {
|
||||
"off": "Off",
|
||||
"on": "On",
|
||||
"unavailable": "Unavailable",
|
||||
"unknown": "Unknown"
|
||||
},
|
||||
@@ -471,11 +473,15 @@
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
"and": "and",
|
||||
"cancel": "Cancel",
|
||||
"close": "Close",
|
||||
"delete": "Delete",
|
||||
"loading": "Loading",
|
||||
"next": "Next",
|
||||
"no": "No",
|
||||
"previous": "Previous",
|
||||
"refresh": "Refresh",
|
||||
"save": "Save",
|
||||
"successfully_deleted": "Successfully deleted",
|
||||
"successfully_saved": "Successfully saved",
|
||||
@@ -735,6 +741,10 @@
|
||||
"triggered": "Triggered {name}"
|
||||
},
|
||||
"panel": {
|
||||
"calendar": {
|
||||
"my_calendars": "My Calendars",
|
||||
"today": "Today"
|
||||
},
|
||||
"config": {
|
||||
"advanced_mode": {
|
||||
"hint_enable": "Missing config options? Enable advanced mode on",
|
||||
@@ -837,6 +847,9 @@
|
||||
},
|
||||
"label": "Device"
|
||||
},
|
||||
"not": {
|
||||
"label": "Not"
|
||||
},
|
||||
"numeric_state": {
|
||||
"above": "Above",
|
||||
"below": "Below",
|
||||
@@ -1168,7 +1181,9 @@
|
||||
"edit_requires_storage": "Editor disabled because config stored in configuration.yaml.",
|
||||
"elevation": "Elevation",
|
||||
"elevation_meters": "meters",
|
||||
"external_url": "External URL",
|
||||
"imperial_example": "Fahrenheit, pounds",
|
||||
"internal_url": "Internal URL",
|
||||
"latitude": "Latitude",
|
||||
"location_name": "Name of your Home Assistant installation",
|
||||
"longitude": "Longitude",
|
||||
@@ -1235,6 +1250,7 @@
|
||||
},
|
||||
"delete": "Delete",
|
||||
"description": "Manage connected devices",
|
||||
"device_info": "Device info",
|
||||
"device_not_found": "Device not found.",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Add to Lovelace",
|
||||
@@ -1397,6 +1413,8 @@
|
||||
"new": "Set up a new integration",
|
||||
"no_integrations": "Seems like you don't have any integations configured yet. Click on the button below to add your first integration!",
|
||||
"none": "Nothing configured yet",
|
||||
"none_found": "No integrations found",
|
||||
"none_found_detail": "Adjust your search criteria.",
|
||||
"note_about_integrations": "Not all integrations can be configured via the UI yet.",
|
||||
"note_about_website_reference": "More are available on the ",
|
||||
"rename_dialog": "Edit the name of this config entry",
|
||||
|
@@ -52,11 +52,11 @@
|
||||
},
|
||||
"state_badge": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Activado",
|
||||
"armed_away": "Activado",
|
||||
"armed_custom_bypass": "Activado",
|
||||
"armed": "Armado",
|
||||
"armed_away": "Armado",
|
||||
"armed_custom_bypass": "Armado",
|
||||
"armed_home": "Activada",
|
||||
"armed_night": "Activado",
|
||||
"armed_night": "Armado",
|
||||
"arming": "Activando",
|
||||
"disarmed": "Desactivado",
|
||||
"disarming": "Desarmar",
|
||||
@@ -206,6 +206,8 @@
|
||||
"stopped": "Detenido"
|
||||
},
|
||||
"default": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido",
|
||||
"unavailable": "No disponible",
|
||||
"unknown": "Desconocido"
|
||||
},
|
||||
@@ -475,7 +477,10 @@
|
||||
"close": "Cerrar",
|
||||
"delete": "Eliminar",
|
||||
"loading": "Cargando",
|
||||
"next": "Siguiente",
|
||||
"no": "No",
|
||||
"previous": "Anterior",
|
||||
"refresh": "Actualizar",
|
||||
"save": "Guardar",
|
||||
"successfully_deleted": "Eliminado exitosamente",
|
||||
"successfully_saved": "Guardado correctamente",
|
||||
@@ -654,6 +659,17 @@
|
||||
"stop": "Detener"
|
||||
}
|
||||
},
|
||||
"mqtt_device_debug_info": {
|
||||
"deserialize": "Intentar analizar mensajes MQTT como JSON",
|
||||
"entities": "Entidades",
|
||||
"no_entities": "No hay entidades",
|
||||
"no_triggers": "Sin disparadores",
|
||||
"payload_display": "Pantalla de carga útil",
|
||||
"recent_messages": "{n} mensajes recibidos más recientemente",
|
||||
"show_as_yaml": "Mostrar como YAML",
|
||||
"title": "{device} información de depuración",
|
||||
"triggers": "Disparadores"
|
||||
},
|
||||
"options_flow": {
|
||||
"form": {
|
||||
"header": "Opciones"
|
||||
@@ -724,6 +740,10 @@
|
||||
"triggered": "{name} activado"
|
||||
},
|
||||
"panel": {
|
||||
"calendar": {
|
||||
"my_calendars": "Mis calendarios",
|
||||
"today": "Hoy"
|
||||
},
|
||||
"config": {
|
||||
"advanced_mode": {
|
||||
"hint_enable": "¿Faltan opciones de configuración? Habilitar el modo avanzado en",
|
||||
@@ -826,6 +846,9 @@
|
||||
},
|
||||
"label": "Dispositivo"
|
||||
},
|
||||
"not": {
|
||||
"label": "No"
|
||||
},
|
||||
"numeric_state": {
|
||||
"above": "Por encima de",
|
||||
"below": "Por debajo de",
|
||||
@@ -1294,6 +1317,10 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"filtering": {
|
||||
"clear": "Limpiar",
|
||||
"filtering_by": "Filtrar por"
|
||||
},
|
||||
"header": "Configurar Home Assistant",
|
||||
"helpers": {
|
||||
"caption": "Auxiliares",
|
||||
@@ -1321,12 +1348,16 @@
|
||||
}
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Agregar integración",
|
||||
"caption": "Integraciones",
|
||||
"config_entry": {
|
||||
"area": "En {area}",
|
||||
"delete": "Eliminar",
|
||||
"delete_button": "Eliminar {integration}",
|
||||
"delete_confirm": "¿Estás seguro de que quieres eliminar esta integración?",
|
||||
"device_unavailable": "dispositivo no disponible",
|
||||
"devices": "{count} {count, plural,\n one {dispositivo}\n other {dispositivos}\n}",
|
||||
"entities": "{count} {count, plural,\n one {entidad}\n other {entidades}\n}",
|
||||
"entity_unavailable": "entidad no disponible",
|
||||
"firmware": "Firmware: {version}",
|
||||
"hub": "Conectado a través de",
|
||||
@@ -1334,8 +1365,11 @@
|
||||
"no_area": "Ninguna área",
|
||||
"no_device": "Entidades sin dispositivos",
|
||||
"no_devices": "Esta integración no tiene dispositivos.",
|
||||
"options": "Opciones",
|
||||
"rename": "Renombrar",
|
||||
"restart_confirm": "Reinicie Home Assistant para terminar de eliminar esta integración.",
|
||||
"settings_button": "Editar configuración para {integration}",
|
||||
"system_options": "Opciones de Sistema",
|
||||
"system_options_button": "Opciones del sistema para {integration}"
|
||||
},
|
||||
"config_flow": {
|
||||
@@ -1370,11 +1404,17 @@
|
||||
"show_ignored": "Mostrar integraciones ignoradas",
|
||||
"stop_ignore": "Dejar de ignorar"
|
||||
},
|
||||
"integration": "Integración",
|
||||
"integration_not_found": "Integración no encontrada.",
|
||||
"new": "Configurar una nueva integración.",
|
||||
"no_integrations": "Al parecer no tienes ninguna integración configurada todavía. Haga click en el botón de abajo para agregar su primera integración",
|
||||
"none": "No hay nada configurado",
|
||||
"none_found": "No se encontraron integraciones",
|
||||
"none_found_detail": "Ajuste sus criterios de búsqueda",
|
||||
"note_about_integrations": "No todas las integraciones se pueden configurar a través de la interfaz de usuario.",
|
||||
"note_about_website_reference": "Hay más disponibles en "
|
||||
"note_about_website_reference": "Hay más disponibles en ",
|
||||
"rename_dialog": "Editar el nombre de esta entrada de configuración",
|
||||
"rename_input_label": "Ingresar Nombre"
|
||||
},
|
||||
"introduction": "Aquí es posible configurar sus componentes y Home Assistant. Todavía no es posible configurar todo desde la interfaz de usuario, pero estamos trabajando en ello.",
|
||||
"lovelace": {
|
||||
@@ -2195,7 +2235,7 @@
|
||||
"save": "Tomar el control",
|
||||
"yaml_config": "Para ayudarlo a comenzar, aquí está la configuración actual de este tablero:",
|
||||
"yaml_control": "Para tomar el control en modo YAML, cree un archivo YAML con el nombre que especificó en su configuración para este tablero, o el valor predeterminado 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Está utilizando el modo YAML, lo que significa que no puede cambiar su configuración de Lovelace desde la interfaz de usuario. Si desea cambiar Lovelace desde la interfaz de usuario, elimine 'mode: yaml' de su configuración de Lovelace en 'configuration.yaml'."
|
||||
"yaml_mode": "Está utilizando el modo YAML para este panel, lo que significa que no puede cambiar su configuración de Lovelace desde la interfaz de usuario. Si desea administrar este panel de control desde la interfaz de usuario, elimine 'mode: yaml' de su configuración de Lovelace en 'configuration.yaml.'."
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Agregar a Lovelace UI",
|
||||
@@ -2241,7 +2281,8 @@
|
||||
"warning": {
|
||||
"attribute_not_found": "El atributo {attribute} no está disponible en: {entity}",
|
||||
"entity_non_numeric": "Entidad no es numérica: {entity}",
|
||||
"entity_not_found": "Entidad no disponible: {entity}"
|
||||
"entity_not_found": "Entidad no disponible: {entity}",
|
||||
"entity_unavailable": "{entidad} no se encuentra disponible"
|
||||
}
|
||||
},
|
||||
"mailbox": {
|
||||
|
@@ -206,6 +206,8 @@
|
||||
"stopped": "Detenido"
|
||||
},
|
||||
"default": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido",
|
||||
"unavailable": "No disponible",
|
||||
"unknown": "Desconocido"
|
||||
},
|
||||
@@ -475,7 +477,10 @@
|
||||
"close": "Cerrar",
|
||||
"delete": "Eliminar",
|
||||
"loading": "Cargando",
|
||||
"next": "Siguiente",
|
||||
"no": "No",
|
||||
"previous": "Anterior",
|
||||
"refresh": "Actualizar",
|
||||
"save": "Guardar",
|
||||
"successfully_deleted": "Eliminado correctamente",
|
||||
"successfully_saved": "Guardado correctamente",
|
||||
@@ -735,6 +740,10 @@
|
||||
"triggered": "Activado {name}"
|
||||
},
|
||||
"panel": {
|
||||
"calendar": {
|
||||
"my_calendars": "Mis Calendarios",
|
||||
"today": "Hoy"
|
||||
},
|
||||
"config": {
|
||||
"advanced_mode": {
|
||||
"hint_enable": "¿Faltan opciones de configuración? Activa el modo avanzado",
|
||||
@@ -837,6 +846,9 @@
|
||||
},
|
||||
"label": "Dispositivo"
|
||||
},
|
||||
"not": {
|
||||
"label": "Negar"
|
||||
},
|
||||
"numeric_state": {
|
||||
"above": "Por encima de",
|
||||
"below": "Por debajo de",
|
||||
@@ -1235,6 +1247,7 @@
|
||||
},
|
||||
"delete": "Eliminar",
|
||||
"description": "Administrar dispositivos conectados",
|
||||
"device_info": "Información del dispositivo",
|
||||
"device_not_found": "Dispositivo no encontrado.",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Añadir a Lovelace",
|
||||
@@ -1397,8 +1410,10 @@
|
||||
"new": "Configurar una nueva integración.",
|
||||
"no_integrations": "Parece que todavía no tienes ninguna integración configurada. ¡Pulsa en el botón de abajo para añadir tu primera integración!",
|
||||
"none": "Todavía no hay nada configurado",
|
||||
"none_found": "No se han encontrado integraciones",
|
||||
"none_found_detail": "Ajusta tus criterios de búsqueda.",
|
||||
"note_about_integrations": "Todavía no se pueden configurar todas las integraciones a través de la interfaz de usuario.",
|
||||
"note_about_website_reference": "Más están disponibles en el",
|
||||
"note_about_website_reference": "Hay más disponibles en el ",
|
||||
"rename_dialog": "Edita el nombre de esta entrada de configuración",
|
||||
"rename_input_label": "Nombre de la entrada"
|
||||
},
|
||||
@@ -2216,12 +2231,12 @@
|
||||
"close": "Cerrar",
|
||||
"empty_config": "Empezar con un panel de control vacío",
|
||||
"header": "Tomar el control de la interfaz de usuario Lovelace",
|
||||
"para": "Por defecto Home Assistant se encargará de tu interfaz de usuario, actualizándola cuando haya nuevas entidades o componentes Lovelace disponibles. Si asumes el control, ya no haremos más cambios automáticamente por ti.",
|
||||
"para": "Este panel de control está siendo mantenido actualmente por Home Assistant. Se actualiza automáticamente cada vez que nuevas entidades o componentes de la IU Lovelace están disponibles. Si asumes el control, este panel de control ya no se actualizará automáticamente. Siempre podrás crear un nuevo panel de control en la configuración con el que jugar.",
|
||||
"para_sure": "¿Estás seguro de que quieres tomar el control de tu interfaz de usuario?",
|
||||
"save": "Tomar el control",
|
||||
"yaml_config": "Para ayudarte a empezar aquí está la configuración actual de este panel:",
|
||||
"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, lo que significa que no puedes cambiar la configuración de Lovelace desde la IU. Si deseas cambiar Lovelace desde la IU, elimina 'mode: yaml' de la configuración de Lovelace en 'configuration.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.'"
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Añadir a la IU Lovelace",
|
||||
|
@@ -21,6 +21,13 @@
|
||||
"auto": "خودکار",
|
||||
"off": "خاموش",
|
||||
"on": "روشن"
|
||||
},
|
||||
"hvac_action": {
|
||||
"cooling": "Racire",
|
||||
"drying": "Uscare",
|
||||
"fan": "Ventilator",
|
||||
"heating": "Incalzire",
|
||||
"off": "Oprit"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -165,6 +172,7 @@
|
||||
"dry": "خشک",
|
||||
"fan_only": "فقط پنکه",
|
||||
"heat": "حرارت",
|
||||
"heat_cool": "Incalzire/Racire",
|
||||
"off": "خاموش"
|
||||
},
|
||||
"configurator": {
|
||||
@@ -179,6 +187,8 @@
|
||||
"stopped": "متوقف"
|
||||
},
|
||||
"default": {
|
||||
"off": "Oprit",
|
||||
"on": "Pornit",
|
||||
"unavailable": "غیرقابل دسترس",
|
||||
"unknown": "نامشخص"
|
||||
},
|
||||
@@ -267,6 +277,7 @@
|
||||
},
|
||||
"weather": {
|
||||
"cloudy": "ابری",
|
||||
"exceptional": "Exceptional",
|
||||
"fog": "مه",
|
||||
"hail": "تگرگ",
|
||||
"lightning": "رعد و برق",
|
||||
@@ -316,6 +327,8 @@
|
||||
"away_mode": "حالت بیرون",
|
||||
"currently": "در حال حاضر",
|
||||
"fan_mode": "حالت فن",
|
||||
"high": "inalt",
|
||||
"low": "jos",
|
||||
"on_off": "روشن/خاموش",
|
||||
"operation": "عملیات",
|
||||
"swing_mode": "حالت چرخش",
|
||||
@@ -355,6 +368,14 @@
|
||||
"script": {
|
||||
"execute": "اجرا کردن"
|
||||
},
|
||||
"timer": {
|
||||
"actions": {
|
||||
"cancel": "anuleaza",
|
||||
"finish": "termina",
|
||||
"pause": "pauza",
|
||||
"start": "incepe"
|
||||
}
|
||||
},
|
||||
"water_heater": {
|
||||
"away_mode": "حالت بیرون",
|
||||
"currently": "در حال حاضر",
|
||||
@@ -389,10 +410,23 @@
|
||||
},
|
||||
"common": {
|
||||
"cancel": "لغو",
|
||||
"close": "Inchide",
|
||||
"delete": "Elimina",
|
||||
"loading": "در حال بارگذاری",
|
||||
"save": "ذخیره"
|
||||
"save": "ذخیره",
|
||||
"successfully_deleted": "Eliminat cu succes",
|
||||
"successfully_saved": "Salvat cu succes"
|
||||
},
|
||||
"components": {
|
||||
"area-picker": {
|
||||
"add_dialog": {
|
||||
"add": "Adauga",
|
||||
"failed_create_area": "Nu s-a reusit creerea zonei",
|
||||
"name": "Nume",
|
||||
"text": "Introdu numele noii zone",
|
||||
"title": "Adauga zona noua"
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"entity-picker": {
|
||||
"entity": "نهاد"
|
||||
@@ -402,6 +436,11 @@
|
||||
"loading_history": "بارگیری وضعیت تاریخچه",
|
||||
"no_history_found": "هیچ دولتی سابقه یافت."
|
||||
},
|
||||
"related-items": {
|
||||
"area": "Zona",
|
||||
"device": "Dispozitiv",
|
||||
"integration": "Integrare"
|
||||
},
|
||||
"relative_time": {
|
||||
"duration": {
|
||||
"day": "{count} {تعداد, جمع,\nیکی {روز}\nدیگر {روز}\n}",
|
||||
@@ -416,15 +455,44 @@
|
||||
}
|
||||
},
|
||||
"dialogs": {
|
||||
"domain_toggler": {
|
||||
"title": "Comuta domeniile"
|
||||
},
|
||||
"generic": {
|
||||
"close": "inchide"
|
||||
},
|
||||
"helper_settings": {
|
||||
"input_datetime": {
|
||||
"date": "تاریخ",
|
||||
"datetime": "تاریخ و زمان",
|
||||
"mode": "چه چیزی را می خواهید وارد کنید",
|
||||
"time": "زمان"
|
||||
},
|
||||
"input_number": {
|
||||
"max": "Valoare maxima",
|
||||
"min": "Valoare minima",
|
||||
"mode": "Mod de vizualizare",
|
||||
"unit_of_measurement": "Unitate de masura"
|
||||
},
|
||||
"input_select": {
|
||||
"add": "Adauga",
|
||||
"add_option": "Adauga optiune",
|
||||
"no_options": "Nu exista inca optiuni",
|
||||
"options": "Optiuni"
|
||||
},
|
||||
"input_text": {
|
||||
"mode": "Mod de vizualizare",
|
||||
"password": "Parola",
|
||||
"text": "Text"
|
||||
}
|
||||
},
|
||||
"more_info_control": {
|
||||
"restored": {
|
||||
"confirm_remove_text": "Esti sigur ca vrei sa elimini aceasta entitate?",
|
||||
"confirm_remove_title": "Eliminati entitatea?",
|
||||
"not_provided": "Aceasta entitate este momentan indisponibila fiind un orfan al unei entitati sau unui dispozitiv eliminat, schimbat sau disfunctional",
|
||||
"remove_action": "Eliminati entitatea"
|
||||
},
|
||||
"script": {
|
||||
"last_action": "آخرین اقدام"
|
||||
},
|
||||
@@ -435,6 +503,45 @@
|
||||
},
|
||||
"updater": {
|
||||
"title": "دستورالعمل به روز رسانی"
|
||||
},
|
||||
"vacuum": {
|
||||
"commands": "Comenzi aspirator:",
|
||||
"fan_speed": "Viteza ventilator",
|
||||
"locate": "Localizare",
|
||||
"pause": "Pauza",
|
||||
"return_home": "Intoarcere acasa",
|
||||
"start": "Start",
|
||||
"start_pause": "Start/Pauza",
|
||||
"status": "Status",
|
||||
"stop": "Stop"
|
||||
}
|
||||
},
|
||||
"mqtt_device_debug_info": {
|
||||
"deserialize": "Incearca sa analizezi mesajele MQTT ca si JSON",
|
||||
"entities": "Entitati",
|
||||
"no_entities": "Nicio entitate",
|
||||
"no_triggers": "Niciun mecanism de declansare",
|
||||
"payload_display": "Afiseaza incarcatura",
|
||||
"recent_messages": "\n{n} mesaje cele mai recente",
|
||||
"show_as_yaml": "Arata in format YAML",
|
||||
"title": "{dispozitiv} informatii depanare",
|
||||
"triggers": "Mecanism de declansare"
|
||||
},
|
||||
"zha_device_info": {
|
||||
"buttons": {
|
||||
"zigbee_information": "Informatii Zigbee"
|
||||
},
|
||||
"device_signature": "Semnatura dispozitiv Zigbee",
|
||||
"manuf": "de catre {fabricant}",
|
||||
"no_area": "Nicio Zona ",
|
||||
"services": {
|
||||
"remove": "Elimina un dispozitiv din reteaua Zigbee",
|
||||
"zigbee_information": "Vizualizeaza informatiile Zigbee pentru acest dispozitiv "
|
||||
},
|
||||
"zha_device_card": {
|
||||
"area_picker_label": "Zona",
|
||||
"device_name_placeholder": "Prenume utilizator",
|
||||
"update_name_button": "Actualizeaza nume"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -462,6 +569,10 @@
|
||||
"config": {
|
||||
"areas": {
|
||||
"caption": "ثبت نام منطقه",
|
||||
"data_table": {
|
||||
"area": "Zona",
|
||||
"devices": "Dispozitive"
|
||||
},
|
||||
"delete": {
|
||||
"confirmation_text": "هیچیک از درستگاه های این ناحیه اختصاص داده نشده اند",
|
||||
"confirmation_title": "آیا مطمئنید که می خواهید این ناحیه را حذف کنید ؟"
|
||||
@@ -500,11 +611,20 @@
|
||||
"delay": "تاخیر",
|
||||
"label": "تاخیر"
|
||||
},
|
||||
"device_id": {
|
||||
"extra_fields": {
|
||||
"code": "Cod"
|
||||
},
|
||||
"label": "Dispozitiv"
|
||||
},
|
||||
"event": {
|
||||
"event": "اتفاق",
|
||||
"label": "رویداد آتش",
|
||||
"service_data": "اطلاعات خدمات"
|
||||
},
|
||||
"scene": {
|
||||
"label": "Activeaza scena"
|
||||
},
|
||||
"service": {
|
||||
"label": "خدمات تماس",
|
||||
"service_data": "داده های خدمات"
|
||||
@@ -527,12 +647,26 @@
|
||||
"learn_more": "درباره شرایط بیشتر بدانید",
|
||||
"type_select": "نوع وضعیت",
|
||||
"type": {
|
||||
"and": {
|
||||
"label": "Si"
|
||||
},
|
||||
"device": {
|
||||
"extra_fields": {
|
||||
"above": "Deasupra",
|
||||
"below": "Dedesubt",
|
||||
"for": "Durata"
|
||||
},
|
||||
"label": "Dispozitiv"
|
||||
},
|
||||
"numeric_state": {
|
||||
"above": "بالاتر",
|
||||
"below": "پایین تر",
|
||||
"label": "Numeric state",
|
||||
"value_template": "قالب مقدار (اختیاری)"
|
||||
},
|
||||
"or": {
|
||||
"label": "Sau"
|
||||
},
|
||||
"state": {
|
||||
"label": "حالت",
|
||||
"state": "حالت"
|
||||
@@ -564,6 +698,10 @@
|
||||
"unsupported_condition": "شرایط غیرقابل پشتیبانی: {condition}"
|
||||
},
|
||||
"default_name": "اضافه کردن اتوماسیون",
|
||||
"description": {
|
||||
"label": "Descriere",
|
||||
"placeholder": "Descriere optionala"
|
||||
},
|
||||
"introduction": "از اتوماسیون استفاده کنید برای زنده کردن خانه",
|
||||
"load_error_not_editable": "فقط اتوماسیون در automations.yaml قابل ویرایش هستند.",
|
||||
"load_error_unknown": "خطا در بارگذاری اتوماسیون ({err_no}).",
|
||||
@@ -628,18 +766,90 @@
|
||||
},
|
||||
"picker": {
|
||||
"add_automation": "اضافه کردن اتوماسیون",
|
||||
"delete_automation": "Elimina automatizare",
|
||||
"delete_confirm": "Esti sigur ca vrei sa elimini aceasta automatizare?",
|
||||
"edit_automation": "Editeaza automatizare",
|
||||
"header": "ویرایشگر اتوماسیون",
|
||||
"headers": {
|
||||
"name": "Nume"
|
||||
},
|
||||
"introduction": "ویرایشگر اتوماسیون اجازه می دهد تا شما را به ایجاد و ویرایش اتوماسیون بپردازید . لطفا پیوند زیر را بخوانید تا دستورالعمل ها را بخواند تا مطمئن شوید که صفحه اصلی دستیار را به درستی پیکربندی کرده اید.",
|
||||
"learn_more": "درباره اتوماسیون بیشتر بدانید",
|
||||
"no_automations": "هیچ اتوماسیون قابل ویرایشی پیدا نشد",
|
||||
"pick_automation": "انتخاب اتوماسیون برای ویرایش"
|
||||
"only_editable": "Doar automatizarile definite in automations.yaml sunt editabile",
|
||||
"pick_automation": "انتخاب اتوماسیون برای ویرایش",
|
||||
"show_info_automation": "Afiseaza informatii despre automatizare"
|
||||
}
|
||||
},
|
||||
"cloud": {
|
||||
"account": {
|
||||
"integrations": "Integrari",
|
||||
"integrations_introduction2": "Verifica website-ul pentru",
|
||||
"integrations_link_all_features": "toate caracteristicile disponibile",
|
||||
"manage_account": "Administrare Cont",
|
||||
"nabu_casa_account": "Cont Nabu Casa",
|
||||
"webhooks": {
|
||||
"loading": "Se incarca..."
|
||||
}
|
||||
},
|
||||
"alexa": {
|
||||
"title": "Alexa"
|
||||
},
|
||||
"caption": "home assistant ابر",
|
||||
"description_features": "کنترل کردن از خانه، ادغام با Alexa و Google Assistant.",
|
||||
"description_login": "وارد شده به عنوان {email}",
|
||||
"description_not_login": "وارد نشده اید"
|
||||
"description_not_login": "وارد نشده اید",
|
||||
"dialog_certificate": {
|
||||
"certificate_expiration_date": "Data expirare certificat",
|
||||
"certificate_information": "Informatii certificat",
|
||||
"will_be_auto_renewed": "Va fi reinnoit in mod automat"
|
||||
},
|
||||
"dialog_cloudhook": {
|
||||
"close": "Inchide",
|
||||
"confirm_disable": "Esti sigur ca vrei sa dezactivezi acest webhook?",
|
||||
"copied_to_clipboard": "Copiat in clipboard",
|
||||
"info_disable_webhook": "Daca nu mai doresti sa folosesti acest webhook, poti sa",
|
||||
"link_disable_webhook": "dezactiveaza",
|
||||
"view_documentation": "Vizualizeaza documentatie"
|
||||
},
|
||||
"login": {
|
||||
"alert_email_confirm_necessary": "Trebuie sa iti confirmi adresa de email inainte de a te conecta",
|
||||
"alert_password_change_required": "Trebuie sa iti schimbi parola inainte de a te conecta",
|
||||
"dismiss": "Revoca",
|
||||
"email": "Adresa de email",
|
||||
"email_error_msg": "Adresa de email invalida",
|
||||
"forgot_password": "Ai uitat parola?",
|
||||
"introduction2": "Acest serviciu este condus de catre partenerul nostru",
|
||||
"learn_more_link": "Afla mai multe despre Home Assistant Coud",
|
||||
"password": "Parola",
|
||||
"password_error_msg": "Parolele au cel putin 8 caractere",
|
||||
"sign_in": "Conecteaza-te",
|
||||
"start_trial": "Incepe perioada de proba de o luna",
|
||||
"title": "Conectare in Cloud",
|
||||
"trial_info": "Nu sunt necesare informatii de plata"
|
||||
},
|
||||
"register": {
|
||||
"account_created": "Cont creat! Verifica email-ul pentru instructiuni cum sa iti activezi contul",
|
||||
"create_account": "Creaza cont",
|
||||
"email_address": "Adresa de email",
|
||||
"email_error_msg": "Adresa de email invalida",
|
||||
"feature_amazon_alexa": "Integrare cu Amazon Alexa",
|
||||
"feature_google_home": "Integrare cu Google Assistant",
|
||||
"feature_remote_control": "Controleaza Home Asisstant cand nu esti acasa",
|
||||
"headline": "Incepe perioada de proba gratuita",
|
||||
"information": "Creaza un cont pentru a incepe perioada de proba de o luna cu Home Assistant Cloud. Nu sunt necesare informatii de plata",
|
||||
"information2": "Perioada de proba va va da acces la toate beneficiile Home Assistant Cloud, incluzand",
|
||||
"information3": "Acest serviciu este condus de catre partenerul nostru",
|
||||
"information3a": ", o companie creata de fondatorii Home Assistant si Hass.io",
|
||||
"information4": "Prin inregistrarea unui cont esti de acord cu urmatorii termeni si conditii",
|
||||
"link_privacy_policy": "Politica de Confidentialitate",
|
||||
"link_terms_conditions": "Termeni si Conditii",
|
||||
"password": "Parola",
|
||||
"password_error_msg": "Parolele au cel putin 8 caractere",
|
||||
"resend_confirm_email": "Retrimite email-ul de confirmare",
|
||||
"start_trial": "Incepe perioada de proba",
|
||||
"title": "Inregistreaza Cont"
|
||||
}
|
||||
},
|
||||
"core": {
|
||||
"caption": "عمومی",
|
||||
@@ -666,32 +876,126 @@
|
||||
}
|
||||
},
|
||||
"customize": {
|
||||
"attributes_not_set": "Urmatoarele atribute nu au fost fixate. Fixeaza-le daca vrei",
|
||||
"pick_attribute": "Alege un atribut pentru a trece peste acesta",
|
||||
"picker": {
|
||||
"header": "سفارشی سازی ها",
|
||||
"introduction": "نویسه ویژگی های هر سازمانی. سفارشی سازی اضافه شده / ویرایش شده فورا اثر می کند. سفارشی های حذف شده هنگامی که موجودیت به روز می شود اثر می کند."
|
||||
},
|
||||
"warning": {
|
||||
"include_link": "Include customize.yaml"
|
||||
}
|
||||
},
|
||||
"devices": {
|
||||
"automation": {
|
||||
"automations": "Automatizari",
|
||||
"conditions": {
|
||||
"caption": "Fa ceva doar daca..."
|
||||
},
|
||||
"create": "Creaza automatizare cu acest dispozitiv",
|
||||
"no_automations": "Nu exista automatizari",
|
||||
"no_device_automations": "Nu exista automatizari disponibile pentru acest dispozitiv",
|
||||
"triggers": {
|
||||
"caption": "Fa ceva cand..."
|
||||
}
|
||||
},
|
||||
"cant_edit": "Puteti edita doar elemente create in Interfata Utilizator",
|
||||
"caption": "Dispozitive",
|
||||
"confirm_delete": "Esti sigur ca vrei sa elimini acest dispozitiv?",
|
||||
"confirm_rename_entity_ids": "Vrei de asemenea sa redenumesti Entity ID-ul entitatilor tale?",
|
||||
"data_table": {
|
||||
"area": "Zona",
|
||||
"battery": "Baterie",
|
||||
"device": "Dispozitiv",
|
||||
"integration": "Integrare",
|
||||
"manufacturer": "Fabricant",
|
||||
"model": "Model",
|
||||
"no_devices": "دستگاهی وجود ندارد"
|
||||
}
|
||||
},
|
||||
"delete": "Elimina",
|
||||
"device_not_found": "Nu s-a descoperit dispozitivul.",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Adauga la Lovelace",
|
||||
"entities": "Entitati",
|
||||
"none": "Acest dispozitiv nu are nicio entitate"
|
||||
},
|
||||
"name": "Nume",
|
||||
"no_devices": "Nu exista dispozitive",
|
||||
"scene": {
|
||||
"create": "Creaza scena cu acest dispozitiv",
|
||||
"no_scenes": "Nu exista scene",
|
||||
"scenes": "Scene"
|
||||
},
|
||||
"scenes": "Scene",
|
||||
"script": {
|
||||
"create": "Creaza script cu acest dispozitiv",
|
||||
"no_scripts": "Nu exista scripturi",
|
||||
"scripts": "Scripturi"
|
||||
},
|
||||
"scripts": "Scripturi",
|
||||
"unknown_error": "Eroare necunoscuta",
|
||||
"unnamed_device": "Dispozitiv nedenumit",
|
||||
"update": "Actualizeaza"
|
||||
},
|
||||
"entities": {
|
||||
"caption": "ثبت منطقه",
|
||||
"description": "مرور کلیه اشخاص شناخته شده.",
|
||||
"picker": {
|
||||
"filter": {
|
||||
"filter": "Filtru",
|
||||
"show_disabled": "Afiseaza entitatile dezactivate",
|
||||
"show_unavailable": "Afiseaza entitatile indisponibile"
|
||||
},
|
||||
"header": "ثبت منطقه",
|
||||
"headers": {
|
||||
"entity_id": "ID Entitate",
|
||||
"integration": "Integrare",
|
||||
"name": "Nume",
|
||||
"status": "Status"
|
||||
},
|
||||
"introduction": "دستیار خانه نگهداری رجیستری از هر نهاد که تا به حال دیده است که می تواند منحصر به فرد شناسایی شده است. هر یک از این نهاد ها یک شناسه نهادی اختصاص داده است که فقط برای این نهاد محفوظ خواهد ماند.",
|
||||
"introduction2": "از رجیستر entity استفاده کنید تا نام را عوض کند، شناسه موجودیت را تغییر دهید یا ورودی را از صفحه اصلی دستیار حذف کنید. توجه داشته باشید، از بین بردن ورودی رجیستر entity entity entity را حذف نخواهد کرد. برای انجام این کار، پیوند زیر را دنبال کنید و آن را از صفحه ی ادغام حذف کنید.",
|
||||
"status": {
|
||||
"restored": "بازیابی شد"
|
||||
"disabled": "Dezactivat",
|
||||
"ok": "OK",
|
||||
"restored": "بازیابی شد",
|
||||
"unavailable": "Indisponibil"
|
||||
}
|
||||
}
|
||||
},
|
||||
"filtering": {
|
||||
"clear": "Elimina",
|
||||
"filtering_by": "Filtreaza dupa"
|
||||
},
|
||||
"header": "پیکربندی HOME ASSistant",
|
||||
"helpers": {
|
||||
"caption": "Ajutoare",
|
||||
"description": "Elemente ce pot ajuta la construirea de automatizari",
|
||||
"dialog": {
|
||||
"add_helper": "Adauga ajutor",
|
||||
"add_platform": "Adauga {platforma}",
|
||||
"create": "Creaza"
|
||||
},
|
||||
"picker": {
|
||||
"add_helper": "Adauga ajutor",
|
||||
"headers": {
|
||||
"editable": "Editabil",
|
||||
"name": "Nume",
|
||||
"type": "Tip"
|
||||
}
|
||||
},
|
||||
"types": {
|
||||
"input_boolean": "Comutare",
|
||||
"input_datetime": "Data si/sau ora",
|
||||
"input_number": "Numar",
|
||||
"input_text": "Text"
|
||||
}
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Adauga integrare",
|
||||
"caption": "یکپارچگی",
|
||||
"config_entry": {
|
||||
"delete": "Sterge",
|
||||
"device_unavailable": "دستگاه در دسترس نیست",
|
||||
"entity_unavailable": "نهاد در دسترس نیست",
|
||||
"firmware": "سیستم عامل: {version}",
|
||||
@@ -700,52 +1004,156 @@
|
||||
"no_area": "بدون منطقه",
|
||||
"no_device": " بدون دستگاه",
|
||||
"no_devices": "این ادغام هیچ دستگاهی ندارد.",
|
||||
"restart_confirm": "راه اندازی مجدد home assistant به پایان بردن این ادغام"
|
||||
"options": "Optiuni",
|
||||
"rename": "Redenumeste",
|
||||
"restart_confirm": "راه اندازی مجدد home assistant به پایان بردن این ادغام",
|
||||
"system_options": "Optiuni de sistem"
|
||||
},
|
||||
"config_flow": {
|
||||
"aborted": "Esuat",
|
||||
"close": "Inchide",
|
||||
"created_config": "Configurare creata pentru {nume}",
|
||||
"external_step": {
|
||||
"description": "این مرحله نیاز به بازدید از وب سایت خارجی دارد که باید تکمیل شود.",
|
||||
"open_site": "باز کردن سایت"
|
||||
},
|
||||
"loading_first_time": "لطفاً منتظر بمانید تا ادغام نصب شود"
|
||||
"finish": "Termina",
|
||||
"loading_first_time": "لطفاً منتظر بمانید تا ادغام نصب شود",
|
||||
"not_all_required_fields": "Nu toate campurile necesare sunt completate",
|
||||
"submit": "Trimite"
|
||||
},
|
||||
"configure": "پیکربندی",
|
||||
"configured": "پیکربندی شده",
|
||||
"description": "مدیریت دستگاهها و خدمات متصل شده",
|
||||
"discovered": "کشف شده",
|
||||
"ignore": {
|
||||
"hide_ignored": "Ascunde integrarile ignorate",
|
||||
"ignore": "Ignora",
|
||||
"ignored": "Ignorat",
|
||||
"show_ignored": "Afiseaza integrarile ignorate"
|
||||
},
|
||||
"integration": "integrare",
|
||||
"integration_not_found": "Nu s-a gasit integrarea",
|
||||
"new": "تنظیم ادغام جدید",
|
||||
"none": "هیچ چیز پیکربندی نشده است"
|
||||
"no_integrations": "Se pare ca nu ai configurat nicio integrare inca. Apasa pe butonul de mai jos pentru a adauga prima integrare",
|
||||
"none": "هیچ چیز پیکربندی نشده است",
|
||||
"none_found": "Nu s-au gasit integrari",
|
||||
"none_found_detail": "Ajusteaza criteriul de cautare ",
|
||||
"note_about_integrations": "Nu toate integrarile pot fi configurate inca folosind interfata utilizator",
|
||||
"note_about_website_reference": "Mai multe sunt disponibile la",
|
||||
"rename_dialog": "Editeaza numele acestei optiuni de configurare",
|
||||
"rename_input_label": "Introdu nume"
|
||||
},
|
||||
"introduction": "در اینجا می توانید اجزای خود و صفحه اصلی دستیار را پیکربندی کنید. ",
|
||||
"lovelace": {
|
||||
"dashboards": {
|
||||
"default_dashboard": "این داشبورد پیش فرض است",
|
||||
"detail": {
|
||||
"title_required": "عنوان مورد نیاز است."
|
||||
"create": "Creaza",
|
||||
"delete": "Elimina",
|
||||
"require_admin": "Doar administratorul",
|
||||
"title_required": "عنوان مورد نیاز است.",
|
||||
"update": "Actualizeaza",
|
||||
"url": "URL"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"caption": "Resurse",
|
||||
"confirm_delete": "Esti sigur ca vrei sa elimini aceasta resursa?",
|
||||
"detail": {
|
||||
"create": "ایجاد کن",
|
||||
"delete": "پاک کن",
|
||||
"update": "به روز رسانی"
|
||||
"dismiss": "Inchide",
|
||||
"new_resource": "Adauga resursa noua",
|
||||
"type": "Tipul resursei",
|
||||
"update": "به روز رسانی",
|
||||
"url": "URL",
|
||||
"url_error_msg": "URL este un camp necesar",
|
||||
"warning_header": "Mare atentie!"
|
||||
},
|
||||
"picker": {
|
||||
"add_resource": "Adauga resursa",
|
||||
"headers": {
|
||||
"type": "Tip",
|
||||
"url": "URL"
|
||||
},
|
||||
"no_resources": "منابعی وجود ندارد"
|
||||
},
|
||||
"refresh_header": "Vrei sa reimprospatezi? ",
|
||||
"types": {
|
||||
"module": "Modul JavaScript"
|
||||
}
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Adauga Persoana",
|
||||
"caption": "افراد",
|
||||
"confirm_delete": "Esti sigur ca vrei sa elimini aceasta persoana?",
|
||||
"confirm_delete2": "Toate dispozitivele apartinand acestei persoane vor deveni neatribuite",
|
||||
"create_person": "Creaza Persoana",
|
||||
"description": "مدیریت افراد خانه هوشمند",
|
||||
"detail": {
|
||||
"create": "Creaza",
|
||||
"delete": "Elimina",
|
||||
"device_tracker_intro": "دستگاه هایی که متعلق به این شخص هستند را انتخاب کنید.",
|
||||
"device_tracker_pick": "دستگاه را برای پیگیری انتخاب کنید",
|
||||
"device_tracker_picked": "پیگیری دستگاه",
|
||||
"name": "نام"
|
||||
"link_integrations_page": "Pagina Integrari",
|
||||
"link_presence_detection_integrations": "Integrari detectie prezenta",
|
||||
"linked_user": "Utilizator corelat",
|
||||
"name": "نام",
|
||||
"name_error_msg": "Este necesar numele",
|
||||
"new_person": "Persoana Noua",
|
||||
"update": "Actualizeaza"
|
||||
},
|
||||
"introduction": "Aici poti defini fiecare persoana de interes in Home Assistant",
|
||||
"no_persons_created_yet": "Se pare ca nu ai creat nicio persoana deocamdata"
|
||||
},
|
||||
"scene": {
|
||||
"caption": "Scene",
|
||||
"description": "Creaza si editeaza scene",
|
||||
"editor": {
|
||||
"entities": {
|
||||
"add": "Adauga entitate",
|
||||
"delete": "Elimina entitatea",
|
||||
"device_entities": "Daca adaugi o entitate care apartine unui dispozitiv, acel dispozitiv va fi adaugat"
|
||||
}
|
||||
},
|
||||
"picker": {
|
||||
"header": "Editor de scene",
|
||||
"headers": {
|
||||
"name": "Nume"
|
||||
},
|
||||
"introduction": "Editorul de scene permite crearea si editare de scene. Va rugam folositi link-ul de mai jos pentru a citi instructiunile si a va asigurat ca ati configurat corect Home Assistant",
|
||||
"learn_more": "Invata mai multe despre scene"
|
||||
}
|
||||
},
|
||||
"script": {
|
||||
"editor": {
|
||||
"default_name": "Script nou",
|
||||
"delete_confirm": "Esti sigur ca vrei sa elimini acest script?",
|
||||
"delete_script": "Elimina script",
|
||||
"introduction": "Foloseste script-uri pentru a executa mai multe actiuni succesive",
|
||||
"link_available_actions": "Afla mai multe despre actiunile disponibile",
|
||||
"load_error_not_editable": "Doar scripturile definite in scripts.yaml sunt editabile",
|
||||
"sequence": "Secventa",
|
||||
"sequence_sentence": "Ordinea actiunilor in acest script"
|
||||
},
|
||||
"picker": {
|
||||
"add_script": "Adauga script",
|
||||
"edit_script": "Editeaza script",
|
||||
"header": "Editor de scripturi",
|
||||
"headers": {
|
||||
"name": "Nume"
|
||||
},
|
||||
"learn_more": "Afla mai multe despre scripturi",
|
||||
"no_scripts": "Nu s-au gasit scripturi editabile",
|
||||
"show_info": "Afiseaza informatii despre script",
|
||||
"trigger_script": "Declanseaza script"
|
||||
}
|
||||
},
|
||||
"server_control": {
|
||||
"caption": "Controale Server",
|
||||
"section": {
|
||||
"reloading": {
|
||||
"automation": "بارگیری مجدد اتوماسیون",
|
||||
@@ -780,7 +1188,17 @@
|
||||
"confirm_user_deletion": "آیا مطمئنید می خواهید {name} را حذف کنید ؟",
|
||||
"deactivate_user": "غیر فعال کردن کاربر",
|
||||
"delete_user": "حذف کاربر",
|
||||
"unnamed_user": "کاربر نامشخص"
|
||||
"name": "Nume",
|
||||
"owner": "Proprietar",
|
||||
"unnamed_user": "کاربر نامشخص",
|
||||
"update_user": "Actualizeaza"
|
||||
},
|
||||
"picker": {
|
||||
"headers": {
|
||||
"group": "Grup",
|
||||
"name": "Nume",
|
||||
"system": "Sistem"
|
||||
}
|
||||
}
|
||||
},
|
||||
"zha": {
|
||||
@@ -790,6 +1208,9 @@
|
||||
"search_again": "جستجوی مجدد",
|
||||
"spinner": "جستجو برای دستگاه های ZHY Zigbee ..."
|
||||
},
|
||||
"add": {
|
||||
"caption": "Adauga dispozitive"
|
||||
},
|
||||
"caption": "ZHA",
|
||||
"common": {
|
||||
"add_devices": "افزودن دستگاهها",
|
||||
@@ -797,6 +1218,22 @@
|
||||
"value": "مقدار"
|
||||
},
|
||||
"description": "صفحه اصلی اتوماسیون مدیریت شبکه Zigbee",
|
||||
"groups": {
|
||||
"add_members": "Adauga membri",
|
||||
"adding_members": "Se adauga membri",
|
||||
"create": "Creaza grup",
|
||||
"creating_group": "Se creaza grup",
|
||||
"group_details": "Acestea sunt toate detaliile pentru grupul Zigbee selectat",
|
||||
"group_info": "Informatii Grup",
|
||||
"group_name_placeholder": "Nume grup",
|
||||
"group_not_found": "Nu s-a gasit grup!",
|
||||
"introduction": "Creaza si editeaza grupuri zigbee",
|
||||
"members": "Membri",
|
||||
"remove_groups": "Elimina grupuri",
|
||||
"remove_members": "Elimina membri",
|
||||
"removing_groups": "Se elimina grupuri",
|
||||
"removing_members": "Se elimina membri"
|
||||
},
|
||||
"network_management": {
|
||||
"header": "مدیریت شبکه",
|
||||
"introduction": "دستوراتی که روی کل شبکه تأثیر می گذارند"
|
||||
@@ -805,10 +1242,25 @@
|
||||
"header": "مدیریت دستگاه"
|
||||
}
|
||||
},
|
||||
"zone": {
|
||||
"add_zone": "Adauga zona",
|
||||
"caption": "Zone",
|
||||
"confirm_delete": "Esti sigur ca vrei sa elimini aceasta zona?",
|
||||
"create_zone": "Creaza zona",
|
||||
"detail": {
|
||||
"icon": "Iconita",
|
||||
"name": "Nume",
|
||||
"new_zone": "Zona noua",
|
||||
"radius": "Raza"
|
||||
},
|
||||
"no_zones_created_yet": "Se pare ca inca nu ai creat nicio zona"
|
||||
},
|
||||
"zwave": {
|
||||
"caption": "Z-Wave",
|
||||
"common": {
|
||||
"index": "Index",
|
||||
"unknown": "نامشخص",
|
||||
"value": "Valoare",
|
||||
"wakeup_interval": "فاصله Wakeup"
|
||||
},
|
||||
"node_config": {
|
||||
@@ -820,6 +1272,13 @@
|
||||
"set_config_parameter": "تنظیم پارامتر پیکربندی",
|
||||
"set_wakeup": "تنظیم فاصله Wakeup",
|
||||
"true": "صحیح"
|
||||
},
|
||||
"services": {
|
||||
"add_node": "Adauga Nod",
|
||||
"cancel_command": "Anuleaza Comanda",
|
||||
"remove_node": "Elimina Nodul",
|
||||
"save_config": "Salveaza Configuratie",
|
||||
"test_network": "Testare Retea"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -829,8 +1288,11 @@
|
||||
"title": "رویدادها"
|
||||
},
|
||||
"info": {
|
||||
"built_using": "Construit cu ajutorul",
|
||||
"home_assistant_logo": "Logo Home Assistant",
|
||||
"icons_by": "آیکون توسط",
|
||||
"server": "سرور",
|
||||
"source": "Sursa:",
|
||||
"title": "اطلاعات"
|
||||
},
|
||||
"logs": {
|
||||
@@ -838,12 +1300,31 @@
|
||||
"title": "وقایع"
|
||||
},
|
||||
"mqtt": {
|
||||
"publish": "Publica",
|
||||
"subscribe_to": "Subiect pentru abonare",
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"call_service": "Apeleaza serviciul",
|
||||
"column_description": "Descriere",
|
||||
"column_example": "Exemplu",
|
||||
"column_parameter": "Parametru",
|
||||
"no_description": "Nu este disponibila nicio descriere",
|
||||
"no_parameters": "Acest serviciu nu accepta parametri",
|
||||
"select_service": "Selecteaza un serviciu pentru a-i vedea descrierea",
|
||||
"title": "خدمات"
|
||||
},
|
||||
"states": {
|
||||
"attributes": "Atribute",
|
||||
"current_entities": "Entitati curente",
|
||||
"description2": "Acesta nu va comunica cu dispozitivul",
|
||||
"entity": "Entitate",
|
||||
"filter_attributes": "Filtreaza atributele",
|
||||
"filter_entities": "Filtreaza entitatile",
|
||||
"filter_states": "Filtreaza starile",
|
||||
"set_state": "Fixeaza stare",
|
||||
"state": "Stare",
|
||||
"state_attributes": "Stare atribute *(YAML, optional)",
|
||||
"title": "وضعیت"
|
||||
},
|
||||
"templates": {
|
||||
@@ -855,11 +1336,13 @@
|
||||
"showing_entries": "نمایش نوشته ها برای"
|
||||
},
|
||||
"logbook": {
|
||||
"entries_not_found": "Nu s-au gasit intrari in logbook",
|
||||
"period": "دوره",
|
||||
"showing_entries": "نمایش نامه برای"
|
||||
},
|
||||
"lovelace": {
|
||||
"cards": {
|
||||
"confirm_delete": "Esti sigur ca vrei sa elimini acest card?",
|
||||
"empty_state": {
|
||||
"go_to_integrations_page": "به صفحه ادغام بروید.",
|
||||
"no_devices": "این صفحه به شما اجازه می دهد تا دستگاه های خود را کنترل کنید، با این حال به نظر می رسد که هیچ دستگاهی تنظیم نشده است. برای شروع به صفحه ادغام بروید.",
|
||||
@@ -884,17 +1367,37 @@
|
||||
},
|
||||
"editor": {
|
||||
"card": {
|
||||
"alarm-panel": {
|
||||
"available_states": "Stari disponibile",
|
||||
"name": "Panou de alarma"
|
||||
},
|
||||
"conditional": {
|
||||
"card": "کارت",
|
||||
"conditions": "شرایط",
|
||||
"current_state": "جاری"
|
||||
"current_state": "جاری",
|
||||
"name": "Conditional"
|
||||
},
|
||||
"config": {
|
||||
"optional": "Optional",
|
||||
"required": "Necesar"
|
||||
},
|
||||
"entities": {
|
||||
"name": "Entitati"
|
||||
},
|
||||
"entity-filter": {
|
||||
"name": "Filtru entitate"
|
||||
},
|
||||
"entity": {
|
||||
"name": "Entitate"
|
||||
},
|
||||
"generic": {
|
||||
"attribute": "Atribut",
|
||||
"manual": "دستی",
|
||||
"manual_description": "آیا نیاز به اضافه کردن کارت سفارشی دارید یا فقط می خواهید yaml را به صورت دستی بنویسید؟",
|
||||
"maximum": "بیشترین",
|
||||
"minimum": "کمترین",
|
||||
"name": "نام",
|
||||
"no_theme": "Nicio tema",
|
||||
"refresh_interval": "فاصله رفرش",
|
||||
"show_icon": "نمایش آیکون؟",
|
||||
"show_name": "نمایش نام؟",
|
||||
@@ -905,6 +1408,12 @@
|
||||
"unit": "واحد",
|
||||
"url": "آدرس"
|
||||
},
|
||||
"glance": {
|
||||
"name": "Privire"
|
||||
},
|
||||
"iframe": {
|
||||
"name": "Pagina web"
|
||||
},
|
||||
"light": {
|
||||
"name": "چراغ"
|
||||
},
|
||||
@@ -924,18 +1433,28 @@
|
||||
"picture": {
|
||||
"name": "تصویر"
|
||||
},
|
||||
"plant-status": {
|
||||
"description": "Cardul Plant Status este pentru toti iubitorii de plante"
|
||||
},
|
||||
"sensor": {
|
||||
"description": "Cardul Sensor va ofera o viziune rapida a starii senzorilor cu un grafic optional pentru a vizualiza schimbarile produse in timp",
|
||||
"graph_detail": "نمودار جزئیات",
|
||||
"graph_type": "نوع نمودار",
|
||||
"name": "سنسور"
|
||||
},
|
||||
"shopping-list": {
|
||||
"description": "Cardul Shopping List va permite sa adaugati, editati, verificati sau eliminati elemente din lista de cumparaturi",
|
||||
"name": "لیست خرید"
|
||||
},
|
||||
"thermostat": {
|
||||
"description": "Cardul Thermostat va da control asupra entitatii ce controleaza clima. Acesta permite schimbarea temperaturii si a modului de operare al acestei entitati",
|
||||
"name": "ترموستات"
|
||||
},
|
||||
"vertical-stack": {
|
||||
"description": "Cardul Vertical Stack va permite gruparea mai multor carduri astfel incat acestea intotdeauna sa stea in aceeasi coloana"
|
||||
},
|
||||
"weather-forecast": {
|
||||
"description": "Cardul Weather Forecast afiseaza vremea. Foarte util a se include in interfate ce vor fi afisate pe perete",
|
||||
"name": "پیش بینی آب و هوا"
|
||||
}
|
||||
},
|
||||
@@ -947,6 +1466,9 @@
|
||||
"pick_card": "کارتی را که می خواهید اضافه کنید انتخاب کنید ؛",
|
||||
"toggle_editor": "تغییر ویرایشگر"
|
||||
},
|
||||
"edit_lovelace": {
|
||||
"explanation": "Acest titlu este afisat deasupra tuturor vizualizarilor in Lovelace"
|
||||
},
|
||||
"edit_view": {
|
||||
"add": "افزودن نمایه",
|
||||
"edit": "ویرایش نما",
|
||||
@@ -973,13 +1495,23 @@
|
||||
"save_config": {
|
||||
"cancel": "بیخیال",
|
||||
"close": "ببند",
|
||||
"empty_config": "Incepe cu un tablou de bord gol",
|
||||
"header": "کنترل UI Lovelace خود را بگیرید",
|
||||
"para": "به طور پیش فرض Home Assistant رابط کاربر خود را حفظ می کند، آن را به روز می کند زمانی که موجودیت های جدید و یا اجزای Lovelace در دسترس قرار گیرد. اگر کنترل داشته باشید دیگر تغییرات را برای شما انجام نخواهیم داد.",
|
||||
"para_sure": "آیا مطمئن هستید که میخواهید کنترل رابط کاربری خود را کنترل کنید؟",
|
||||
"save": "کنترل را به دست گرفتن"
|
||||
},
|
||||
"suggest_card": {
|
||||
"header": "Am creat o sugestie pentru tine"
|
||||
},
|
||||
"view": {
|
||||
"panel_mode": {
|
||||
"warning_multiple_cards": "Aceasta vizualizare contine mai mult de un card, dar un panou de vizualizare poate arata doar un card"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"close": "Inchide",
|
||||
"help": "کمک",
|
||||
"refresh": "تازه کردن",
|
||||
"reload_resources": "بارگذاری مجدد منابع"
|
||||
@@ -989,13 +1521,24 @@
|
||||
"refresh_body": "شما باید صفحه را تازه سازی کنید تا بارگذاری مجدد را کامل کنید ، آیا می خواهید اکنون دوباره آن را تازه کنید ؟",
|
||||
"refresh_header": "آیا می خواهید تازه سازی کنید ؟"
|
||||
},
|
||||
"unused_entities": {
|
||||
"available_entities": "Acestea sunt entitatile disponibile care nu se afla inca in Lovelace",
|
||||
"domain": "Domeniu",
|
||||
"entity": "Entitate",
|
||||
"entity_id": "ID Entitate",
|
||||
"last_changed": "Modificat ultima data",
|
||||
"select_to_add": "Selecteaza entitatile pe care doresti sa le adaugi la un card si apasa butonul add card",
|
||||
"title": "Entitati nefolosite"
|
||||
},
|
||||
"views": {
|
||||
"confirm_delete": "Elimini vizualizare?",
|
||||
"confirm_delete_existing_cards": "با حذف این نمای کارت ها نیز حذف می شود"
|
||||
},
|
||||
"warning": {
|
||||
"attribute_not_found": "ویژگی {attribute} در دسترس نیست:: {entity}",
|
||||
"entity_non_numeric": "نهاد غیر عددی است: {entity}",
|
||||
"entity_not_found": "نهاد موجود نیست: {entity}"
|
||||
"entity_not_found": "نهاد موجود نیست: {entity}",
|
||||
"entity_unavailable": "{entitate} indisponibila in acest moment"
|
||||
}
|
||||
},
|
||||
"mailbox": {
|
||||
@@ -1068,6 +1611,24 @@
|
||||
"logging_in_with": "ورود با ** {authProviderName} **.",
|
||||
"pick_auth_provider": "یا وارد سیستم شوید"
|
||||
},
|
||||
"page-demo": {
|
||||
"cards": {
|
||||
"demo": {
|
||||
"learn_more": "Afla mai multe despre Home Assistant "
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"arsaboo": {
|
||||
"names": {
|
||||
"family_room": "Living",
|
||||
"hallway": "Hol",
|
||||
"kitchen": "Bucatarie",
|
||||
"master_bedroom": "Dormitor Principal",
|
||||
"upstairs": "Etaj"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"page-onboarding": {
|
||||
"core-config": {
|
||||
"button_detect": "تشخیص",
|
||||
@@ -1108,6 +1669,12 @@
|
||||
"new_password": "رمز جدید"
|
||||
},
|
||||
"current_user": "شما در حال حاضر به عنوان {fullName} وارد شده اید.",
|
||||
"dashboard": {
|
||||
"header": "Tablou de bord"
|
||||
},
|
||||
"logout": "Deconectare",
|
||||
"logout_text": "Esti sigur ca vrei sa te deconectezi?",
|
||||
"logout_title": "Deconectare?",
|
||||
"long_lived_access_tokens": {
|
||||
"confirm_delete": "آیا مطمئن هستید که میخواهید token زیر را برای {name} حذف کنید؟",
|
||||
"created_at": "ایجاد شده در {date}",
|
||||
|
@@ -206,6 +206,8 @@
|
||||
"stopped": "Pysäytetty"
|
||||
},
|
||||
"default": {
|
||||
"off": "Pois",
|
||||
"on": "Päällä",
|
||||
"unavailable": "Ei saatavissa",
|
||||
"unknown": "Tuntematon"
|
||||
},
|
||||
@@ -329,7 +331,7 @@
|
||||
"ui": {
|
||||
"auth_store": {
|
||||
"ask": "Haluatko pysyä kirjautuneena sisään?",
|
||||
"confirm": "Tallenna käyttäjätunnus",
|
||||
"confirm": "Kyllä",
|
||||
"decline": "Ei kiitos"
|
||||
},
|
||||
"card": {
|
||||
@@ -475,7 +477,10 @@
|
||||
"close": "Sulje",
|
||||
"delete": "Poista",
|
||||
"loading": "Ladataan",
|
||||
"next": "Seuraava",
|
||||
"no": "Ei",
|
||||
"previous": "Edellinen",
|
||||
"refresh": "Päivitä",
|
||||
"save": "Tallenna",
|
||||
"successfully_deleted": "Poistettu onnistuneesti",
|
||||
"successfully_saved": "Tallennus onnistui",
|
||||
@@ -499,12 +504,14 @@
|
||||
"device-picker": {
|
||||
"clear": "Tyhjennä",
|
||||
"device": "Laite",
|
||||
"show_devices": "Näytä laitteet"
|
||||
"show_devices": "Näytä laitteet",
|
||||
"toggle": "Vaihda"
|
||||
},
|
||||
"entity": {
|
||||
"entity-picker": {
|
||||
"clear": "Tyhjennä",
|
||||
"entity": "Kohde"
|
||||
"entity": "Kohde",
|
||||
"show_entities": "Näytä kohteet"
|
||||
}
|
||||
},
|
||||
"history_charts": {
|
||||
@@ -518,6 +525,7 @@
|
||||
"entity": "Liittyvät kohteet",
|
||||
"group": "Osa seuraavia ryhmiä",
|
||||
"integration": "Integraatio",
|
||||
"no_related_found": "Aiheeseen liittyviä komponentteja ei löytynyt.",
|
||||
"scene": "Osa seuraavia tilanteita",
|
||||
"script": "Osa seuraavia skriptejä"
|
||||
},
|
||||
@@ -544,6 +552,9 @@
|
||||
"title": "Järjestelmäasetukset kohteelle {integration}",
|
||||
"update": "Päivitä"
|
||||
},
|
||||
"domain_toggler": {
|
||||
"title": "Kytke verkkotunnukset"
|
||||
},
|
||||
"entity_registry": {
|
||||
"control": "Ohjaus",
|
||||
"dismiss": "Hylkää",
|
||||
@@ -555,12 +566,14 @@
|
||||
"enabled_label": "Ota kohte käyttöön",
|
||||
"entity_id": "Kohde ID",
|
||||
"icon": "Kuvakkeen yliajo",
|
||||
"icon_error": "Kuvakkeen tulisi olla muodossa etuliite:ikoni, esimerkiksi: mdi:home",
|
||||
"name": "Nimen yliajo",
|
||||
"note": "Huomaa: tämä ei ehkä vielä toimi kaikissa integraatioissa.",
|
||||
"unavailable": "Tämä kohde ei ole tällä hetkellä käytettävissä.",
|
||||
"update": "Päivitä"
|
||||
},
|
||||
"related": "liittyvä",
|
||||
"no_unique_id": "Tällä kohteella ei ole yksilöivää tunnusta, joten sen asetuksia ei voida hallita käyttöliittymästä.",
|
||||
"related": "Liittyvät",
|
||||
"settings": "Asetukset"
|
||||
},
|
||||
"generic": {
|
||||
@@ -590,7 +603,9 @@
|
||||
"unit_of_measurement": "Mittayksikkö"
|
||||
},
|
||||
"input_select": {
|
||||
"add": "Lisää",
|
||||
"add_option": "Lisää vaihtoehto",
|
||||
"no_options": "Valintoja ei vielä ole.",
|
||||
"options": "Asetukset"
|
||||
},
|
||||
"input_text": {
|
||||
@@ -598,16 +613,25 @@
|
||||
"min": "Vähimmäispituus",
|
||||
"mode": "Näyttötila",
|
||||
"password": "Salasana",
|
||||
"pattern": "Regex-malli käyttäjäpuolen validointia varten.",
|
||||
"text": "Teksti"
|
||||
}
|
||||
},
|
||||
"platform_not_loaded": "Integrointia {platform} ei ole ladattu. Voit ladata sen llisäämällä \"default_config:\" tai {platform}: konfiguraatiotiedostoon.",
|
||||
"required_error_msg": "Tämä kenttä on pakollinen",
|
||||
"yaml_not_editable": "Tämän kohteen asetuksia ei voi muokata käyttöliittymästä. Vain käyttöliittymästä määritetyt kohteet ovat määritettävissä käyttöliittymästä."
|
||||
},
|
||||
"more_info_control": {
|
||||
"dismiss": "Sulje ikkuna",
|
||||
"edit": "Muokkaa kohdetta",
|
||||
"person": {
|
||||
"create_zone": "Luo vyöhyke nykyisestä sijainnista"
|
||||
},
|
||||
"restored": {
|
||||
"confirm_remove_text": "Haluatko varmasti poistaa tämän kohteen?",
|
||||
"confirm_remove_title": "Poistetaanko kohde?",
|
||||
"remove_action": "Poista kohde"
|
||||
"not_provided": "Tämä kohde ei ole tällä hetkellä käytettävissä ja se on orpo poistetulle, muutetulle tai virheelliselle integraatiolle tai laitteelle.",
|
||||
"remove_action": "Poista kohde",
|
||||
"remove_intro": "Jos kokonaisuutta ei enää käytetä, voit puhdistaa sen poistamalla sen."
|
||||
},
|
||||
"script": {
|
||||
"last_action": "Edellinen toiminto",
|
||||
@@ -624,6 +648,7 @@
|
||||
},
|
||||
"vacuum": {
|
||||
"clean_spot": "Puhdista paikka",
|
||||
"commands": "Pölynimurin komennot:",
|
||||
"fan_speed": "Tuulettimen nopeus",
|
||||
"locate": "Paikanna",
|
||||
"pause": "Tauko",
|
||||
@@ -635,9 +660,14 @@
|
||||
}
|
||||
},
|
||||
"mqtt_device_debug_info": {
|
||||
"deserialize": "Yritetään jäsentää MQTT-viestejä JSON-muodossa",
|
||||
"entities": "Kohteet",
|
||||
"no_entities": "Ei kohteita",
|
||||
"no_triggers": "Ei laukaisimia",
|
||||
"payload_display": "Tietosisältönäyttö",
|
||||
"recent_messages": "{n} viimeksi vastaanotettua viestiä",
|
||||
"show_as_yaml": "Näytä YAML-muodossa",
|
||||
"title": "{device} vianetsintätiedot",
|
||||
"triggers": "Laukaisimet"
|
||||
},
|
||||
"options_flow": {
|
||||
@@ -710,8 +740,13 @@
|
||||
"triggered": "Laukaisi kohteen {name}"
|
||||
},
|
||||
"panel": {
|
||||
"calendar": {
|
||||
"my_calendars": "Omat kalenterit",
|
||||
"today": "Tänään"
|
||||
},
|
||||
"config": {
|
||||
"advanced_mode": {
|
||||
"hint_enable": "Puuttuvatko asetusvaihtoehdot? Ota edistynyt tila käyttöön",
|
||||
"link_profile_page": "profiilisivusi"
|
||||
},
|
||||
"areas": {
|
||||
@@ -721,6 +756,7 @@
|
||||
"devices": "Laitteet"
|
||||
},
|
||||
"delete": {
|
||||
"confirmation_text": "Tälle alueelle kuuluvien laitteiden osoitus poistetaan.",
|
||||
"confirmation_title": "Haluatko varmasti poistaa tämän alueen?"
|
||||
},
|
||||
"description": "Yleiskuva kaikista kotisi alueista.",
|
||||
@@ -810,6 +846,9 @@
|
||||
},
|
||||
"label": "Laite"
|
||||
},
|
||||
"not": {
|
||||
"label": "Ei"
|
||||
},
|
||||
"numeric_state": {
|
||||
"above": "Yli",
|
||||
"below": "Alle",
|
||||
@@ -856,6 +895,7 @@
|
||||
},
|
||||
"edit_ui": "Muokkaa käyttöliittymässä",
|
||||
"edit_yaml": "Muokkaa YAML-tiedostona",
|
||||
"enable_disable": "Ota automaatio käyttöön tai poista se käytöstä",
|
||||
"introduction": "Käytä automaatioita herättääksesi kotisi eloon",
|
||||
"load_error_not_editable": "Vain automaatiot tiedostossa automations.yaml ovat muokattavissa.",
|
||||
"load_error_unknown": "Virhe ladatessa automaatiota ( {err_no} )",
|
||||
@@ -979,6 +1019,7 @@
|
||||
"enable_ha_skill": "Ota Kotiavustajan taito käyttöön Alexassa",
|
||||
"enable_state_reporting": "Ota tilaraportointi käyttöön",
|
||||
"info": "Alexa Integraatio Home Assistant Cloudille mahdollistaa Home Assistant laitteiden ohjaamisen miltä tahansa Alexa laitteelta.",
|
||||
"info_state_reporting": "Jos otat tilaraportoinnin käyttöön, Home Assistant lähettää kaikki julkistettujen kohteiden tilamuutokset Amazonille. Tämän avulla voit aina nähdä uusimmat tilat Alexa-sovelluksessa ja käyttää tilamuutoksia rutiinien luomiseen.",
|
||||
"manage_entities": "Hallitse kohteita",
|
||||
"state_reporting_error": "Tilaa {enable_disable} .ei ole saatavilla",
|
||||
"sync_entities": "Synkronoi kohteet",
|
||||
@@ -995,10 +1036,13 @@
|
||||
"enable_state_reporting": "Ota tilaraportointi käyttöön",
|
||||
"enter_pin_error": "PIN-koodin tallentaminen ei onnistu:",
|
||||
"enter_pin_hint": "Anna PIN-koodi turvalaitteiden käyttämistä varten",
|
||||
"enter_pin_info": "Anna turvalaitteille, kuten oville, autotalleille ja lukoille PIN-koodi. Tätä koodia tullaan sinulta kysymään käyttäessäsi edellä mainittuja laitteita Google Assistantin kautta.",
|
||||
"info": "Google Assistant Integraatio Home Assistant Cloudille mahdollistaa Home Assistant laitteiden ohjaamisen miltä tahansa Google Assistant laitteelta.",
|
||||
"info_state_reporting": "Jos otat tilaraportoinnin käyttöön, Home Assistant lähettää kaikki julkistettujen kohteiden tilamuutokset Googlelle. Tämän avulla voit aina nähdä uusimmat tilat Google-sovelluksessa.",
|
||||
"manage_entities": "Hallitse kohteita",
|
||||
"security_devices": "Turvalaitteet",
|
||||
"sync_entities": "Synkronoi kohteet Googleen",
|
||||
"sync_entities_404_message": "Kohteiden synkronointi Googlelle epäonnistui. Kysy \"Hey Google, sync my devices\" synkronoidaksesi kohteet.",
|
||||
"title": "Google Assistant"
|
||||
},
|
||||
"integrations": "Integraatiot",
|
||||
@@ -1021,6 +1065,7 @@
|
||||
"thank_you_note": "Kiitos, että olet osa Home Assistant Cloudia. Sinun kaltaisten ihmisten takia pystymme tarjoamaan loistavan kodin automaatiokokemuksen kaikille. Kiitos!",
|
||||
"webhooks": {
|
||||
"disable_hook_error_msg": "Webhookin poistaminen epäonnistui:",
|
||||
"info": "Kaikille, jotka ovat määritetty käynnistymään webhookin avulla, voidaan antaa julkisesti saatavilla oleba URL jotta voit lähettää tietoja takaisin Home Assistant mistä tahansa, paljastamatta järjestelmääsi Internetiin.",
|
||||
"link_learn_more": "Lisätietoja webhook-pohjaisten automaatioiden luomisesta.",
|
||||
"loading": "Ladataan...",
|
||||
"manage": "Hallitse",
|
||||
@@ -1032,13 +1077,14 @@
|
||||
}
|
||||
},
|
||||
"alexa": {
|
||||
"banner": "Tämän käyttöliittymän kautta näkyvien kohteiden muokkaaminen on poistettu käytöstä, koska olet määrittänyt kohdesuodattimet kohteessa configuration.yaml.",
|
||||
"expose": "Julkista Alexalle",
|
||||
"exposed_entities": "Julkistetut kohteet",
|
||||
"not_exposed_entities": "eJulk",
|
||||
"title": "Alexa"
|
||||
},
|
||||
"caption": "Home Assistant Cloud",
|
||||
"description_features": "Ohjaus possa kotoa, käytä Alexaa ja Google Assistentia",
|
||||
"description_features": "Ohjaus poissa kotoa Alexan tai Google Assistantin avulla.",
|
||||
"description_login": "Kirjautunut sisään {email}",
|
||||
"description_not_login": "Et ole kirjautunut",
|
||||
"dialog_certificate": {
|
||||
@@ -1069,6 +1115,7 @@
|
||||
"title": "Unohtuiko salasana?"
|
||||
},
|
||||
"google": {
|
||||
"banner": "Tämän käyttöliittymän kautta näkyvien kihteiden muokkaaminen on poistettu käytöstä, koska olet määrittänyt kohdesuodattimet kohteessa configuration.yaml.",
|
||||
"disable_2FA": "Poista kaksivaiheinen tunnistautuminen",
|
||||
"expose": "Julkista Google Assistantille",
|
||||
"exposed_entities": "Julkistetut kohteet",
|
||||
@@ -1157,13 +1204,16 @@
|
||||
"attributes_set": "Seuraavat kohteet määritteet asetetaan ohjelmallisesti.",
|
||||
"caption": "Muokkaukset",
|
||||
"description": "Muokkaa laitteita",
|
||||
"different_include": "Mahdollisesti verkkotunnuksen, glob-kaavan tai muun sisällön kautta.",
|
||||
"pick_attribute": "Valitse yliajettava määrite",
|
||||
"picker": {
|
||||
"header": "Räätälöinti",
|
||||
"introduction": "Muotoile ominaisuuksia olemuskohtaisesti. Lisäykset/muokkaukset tulevat välittömästi voimaan. Poistetut mukautukset tulevat voimaan, kun olemus päivitetään."
|
||||
},
|
||||
"warning": {
|
||||
"include_link": "sisällytä customize.yaml"
|
||||
"include_link": "sisällytä customize.yaml",
|
||||
"include_sentence": "Näyttää siltä, että configuration.yaml ei oikein",
|
||||
"not_applied": "Täällä tehdyt muutokset on kirjoitettu siihen, mutta niitä ei sovelleta kokoonpanon uudelleenlatauksen jälkeen, ellei niitä oteta käyttöön."
|
||||
}
|
||||
},
|
||||
"devices": {
|
||||
@@ -1175,6 +1225,7 @@
|
||||
"conditions": {
|
||||
"caption": "Tee jotain vain, jos..."
|
||||
},
|
||||
"create": "Luo automaatio laitteella",
|
||||
"no_automations": "Ei automaatioita",
|
||||
"no_device_automations": "Tälle laitteelle ei ole käytettävissä automaatioita.",
|
||||
"triggers": {
|
||||
@@ -1195,7 +1246,7 @@
|
||||
"no_devices": "Ei laitteita"
|
||||
},
|
||||
"delete": "Poista",
|
||||
"description": "Hallitse yhdistettyjä laitteita",
|
||||
"description": "Hallitse yhdistettyjä laitteita.",
|
||||
"device_not_found": "Laitetta ei löydy.",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Lisää Lovelace näkymään",
|
||||
@@ -1221,23 +1272,26 @@
|
||||
"update": "Päivitä"
|
||||
},
|
||||
"entities": {
|
||||
"caption": "Olemusrekisteri",
|
||||
"caption": "Kohteet",
|
||||
"description": "Yleiskuva kaikista tunnetuista entiteeteistä.",
|
||||
"picker": {
|
||||
"disable_selected": {
|
||||
"button": "Poista valitut käytöstä",
|
||||
"confirm_text": "Käytöstä poistettuja kohteita ei lisätä Home Assistantiin."
|
||||
"confirm_text": "Käytöstä poistettuja kohteita ei lisätä Home Assistantiin.",
|
||||
"confirm_title": "Haluatko poistaa käytöstä {number} kohdetta?"
|
||||
},
|
||||
"enable_selected": {
|
||||
"button": "Ota valitut käyttöön",
|
||||
"confirm_text": "Tämä tekee ne saataville Home Assistantissa, jos ne ovat nyt poistettu käytöstä.",
|
||||
"confirm_title": "Haluatko ottaa {number} kohdetta käyttöön?"
|
||||
},
|
||||
"filter": {
|
||||
"filter": "Suodatin",
|
||||
"show_disabled": "Näytä käytöstä poistetut kohteet",
|
||||
"show_readonly": "Näytä vain luku -kohteet"
|
||||
"show_readonly": "Näytä vain luku -kohteet",
|
||||
"show_unavailable": "Näytä ei-käytettävissä olevat kohteet"
|
||||
},
|
||||
"header": "Olemusrekisteri",
|
||||
"header": "Kohteet",
|
||||
"headers": {
|
||||
"entity_id": "Kohde ID",
|
||||
"integration": "Integraatio",
|
||||
@@ -1245,14 +1299,15 @@
|
||||
"status": "Tila"
|
||||
},
|
||||
"introduction": "Home Assistant pitää rekisteriä jokaisesta havaitetusta olemuksesta, joka voidaan yksilöidä. Kullekin näille yksiköille määritetään olemus-ID, varattu juuri tälle yksikölle.",
|
||||
"introduction2": "Yksikkörekisterin avulla voit ohittaa nimeä, muuttaa yksikön tunnusta tai poistaa merkinnän Home Assistantista. Huomaa, että rekisterimerkinnän poistaminen ei poista yksikköä sinäänsä. Sitä voit seuraamalla alla olevaa linkkiä ja poistamalla sitä integrointisivulta.",
|
||||
"introduction2": "Kohderekisterin avulla voit yliajaa nimen, muuttaa sen ID-tunnusta tai poistaa sen Home Assistantista. Huomaa, että rekisterimerkinnän poistaminen ei poista kohdetta.",
|
||||
"remove_selected": {
|
||||
"button": "Poista valitut",
|
||||
"confirm_partly_text": "Voit poistaa vain {removable} valittujen {selected} entiteetin. Entiteetit voidaan poistaa vain, jos integrointi ei enää tarjoa entiteettejä. Joskus Home Assistant on käynnistettävä uudelleen, ennen kuin voit poistaa poistetun integroinnin entiteetit. Haluatko varmasti poistaa siirrettävät entiteetit?",
|
||||
"confirm_partly_title": "Vain {number} valittua entiteettiä voidaan poistaa.",
|
||||
"confirm_text": "Sinun tulisi poistaa ne Lovelace-käyttöliittymästä ja automaatioista, jos ne sisältävät näitä kohteita.",
|
||||
"confirm_title": "Haluatko poistaa {number} kohdetta?"
|
||||
},
|
||||
"selected": "{numero} valittuna",
|
||||
"selected": "{number} valittuna",
|
||||
"status": {
|
||||
"disabled": "Poistettu käytöstä",
|
||||
"ok": "Ok",
|
||||
@@ -1263,12 +1318,15 @@
|
||||
}
|
||||
},
|
||||
"filtering": {
|
||||
"clear": "Tyhjennä"
|
||||
"clear": "Tyhjennä",
|
||||
"filtering_by": "Suodatus"
|
||||
},
|
||||
"header": "Säädä Home Assistanttia",
|
||||
"helpers": {
|
||||
"caption": "Auttajat",
|
||||
"description": "Elementit, jotka voivat auttaa rakentamaan automaatioita.",
|
||||
"dialog": {
|
||||
"add_helper": "Lisää apustin",
|
||||
"add_helper": "Lisää auttaja",
|
||||
"add_platform": "Lisää {platform}",
|
||||
"create": "Luo"
|
||||
},
|
||||
@@ -1284,18 +1342,22 @@
|
||||
"types": {
|
||||
"input_boolean": "Kytkin",
|
||||
"input_datetime": "Päivämäärä ja/tai kellonaika",
|
||||
"input_select": "Alasvetovalikko"
|
||||
"input_number": "Numero",
|
||||
"input_select": "Alasvetovalikko",
|
||||
"input_text": "Teksti"
|
||||
}
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Lisää integraatio",
|
||||
"caption": "Integraatiot",
|
||||
"config_entry": {
|
||||
"area": "Alueessa {alue}",
|
||||
"area": "Alueessa {area}",
|
||||
"delete": "Poista",
|
||||
"delete_button": "Poista {integration}",
|
||||
"delete_confirm": "Haluatko varmasti poistaa tämän integraation?",
|
||||
"device_unavailable": "laite ei saatavissa",
|
||||
"devices": "{count} {count, plural,\n one {laite}\n other {laitteet}\n}",
|
||||
"entities": "{count} {count, plural,\n one {kohde}\n other {kohteet}\n}",
|
||||
"entity_unavailable": "kohde ei saatavilla",
|
||||
"firmware": "Laiteohjelmisto: {version}",
|
||||
"hub": "Yhdistetty kautta",
|
||||
@@ -1306,9 +1368,9 @@
|
||||
"options": "Asetukset",
|
||||
"rename": "Nimeä uudelleen",
|
||||
"restart_confirm": "Käynnistä Home Assistant uudellen viimeistelläksesi tämän integraation poistamisen",
|
||||
"settings_button": "Muokkaa {Integration}-asetuksia",
|
||||
"settings_button": "Muokkaa {integration}-asetuksia",
|
||||
"system_options": "Järjestelmäasetukset",
|
||||
"system_options_button": "{Integration}-järjestelmän asetukset"
|
||||
"system_options_button": "{integration}-järjestelmän asetukset"
|
||||
},
|
||||
"config_flow": {
|
||||
"aborted": "Keskeytetty",
|
||||
@@ -1332,6 +1394,10 @@
|
||||
"discovered": "Löydetty",
|
||||
"home_assistant_website": "Home Assistant – sivusto",
|
||||
"ignore": {
|
||||
"confirm_delete_ignore": "Tämä saa integroinnin näkymään löydetyissä integroinneissa uudelleen, kun se löydetään. Tämä saattaa vaatia uudelleenkäynnistyksen tai kestää jonkin aikaa.",
|
||||
"confirm_delete_ignore_title": "Lopeta integraation {name} ohittaminen?",
|
||||
"confirm_ignore": "Oletko varma, ettet halua määrittää tätä integrointia? Voit kumota tämän napsauttamalla oikeassa yläkulmassa olevasta valikosta \"Näytä ohitetut integroinnit\".",
|
||||
"confirm_ignore_title": "Ohitetaanko kohteen {name} etsintä?",
|
||||
"hide_ignored": "Piilota ohitetut integraatiot",
|
||||
"ignore": "Ohita",
|
||||
"ignored": "Ohitettu",
|
||||
@@ -1341,7 +1407,10 @@
|
||||
"integration": "integraatio",
|
||||
"integration_not_found": "Integraatiota ei löydy.",
|
||||
"new": "Määritä uusi integraatio",
|
||||
"no_integrations": "Näyttää ettei yhtään integraatiota ole määritetty. Lisää ensimmäinen integraatio klikkaamalla painiketta alhaalta!",
|
||||
"none": "Mitään ei ole vielä määritetty",
|
||||
"none_found": "Integraatioita ei löytynyt",
|
||||
"none_found_detail": "Muokkaa haku ehtojasi",
|
||||
"note_about_integrations": "Kaikkia integraatioita ei voi vielä määrittää käyttöliittymän kautta.",
|
||||
"note_about_website_reference": "Lisää saatavilla",
|
||||
"rename_dialog": "Muokkaa tämän määritysmerkinnän nimeä",
|
||||
@@ -1351,6 +1420,7 @@
|
||||
"lovelace": {
|
||||
"caption": "Lovelace-kojelaudat",
|
||||
"dashboards": {
|
||||
"cant_edit_default": "Lovelace-koontinäyttöä ei voi muokata käyttöliittymästä. Voit piilottaa sen määrittämällä toisen koontinäytön oletukseksi.",
|
||||
"cant_edit_yaml": "YAML-tiedostossa määritettyjä kojelautoja ei voi muokata käyttöliittymästä. Muuta niitä tiedostossa configuration.yaml.",
|
||||
"caption": "Kojelaudat",
|
||||
"conf_mode": {
|
||||
@@ -1414,7 +1484,7 @@
|
||||
},
|
||||
"no_resources": "Ei resursseja"
|
||||
},
|
||||
"refresh_body": "Sinun on päivitettävä sivu suorittaaksesi poiston loppuun. Haluatko päivittää nyt?",
|
||||
"refresh_body": "Sinun on päivitettävä sivu suorittaaksesi poisto loppuun. Haluatko päivittää nyt?",
|
||||
"refresh_header": "Haluatko päivittää?",
|
||||
"types": {
|
||||
"css": "Tyylitiedosto",
|
||||
@@ -1447,7 +1517,8 @@
|
||||
"update": "Päivitä"
|
||||
},
|
||||
"introduction": "Täällä voit määritellä jokaisen kiinnostavan henkilön Home Assistantissa.",
|
||||
"no_persons_created_yet": "Näyttää siltä, ettet ole vielä luonut yhtään henkilöä."
|
||||
"no_persons_created_yet": "Näyttää siltä, ettet ole vielä luonut yhtään henkilöä.",
|
||||
"note_about_persons_configured_in_yaml": "Huomaa: configuration.yaml-tiedoston kautta määritettyjä henkilöitä ei voi muokata käyttöliittymän kautta."
|
||||
},
|
||||
"scene": {
|
||||
"activated": "Aktivoitu tilanne {name}.",
|
||||
@@ -1466,7 +1537,7 @@
|
||||
"delete": "Poista kohde",
|
||||
"device_entities": "Jos lisäät kohteen, joka kuuluu laitteeseen, laite lisätään.",
|
||||
"header": "Kohteet",
|
||||
"introduction": "Kohteet jotka eivät kuulu laitteisiin voidaan asettaa täällä.",
|
||||
"introduction": "Kohteet, jotka eivät kuulu laitteisiin, voidaan asettaa täällä.",
|
||||
"without_device": "Kohteet ilman laitetta"
|
||||
},
|
||||
"introduction": "Käytä tilanteita herättääksesi kotisi eloon.",
|
||||
@@ -1578,6 +1649,7 @@
|
||||
"name": "Nimi",
|
||||
"owner": "Omistaja",
|
||||
"system_generated": "Järjestelmän luoma",
|
||||
"system_generated_users_not_editable": "Järjestelmän luomia käyttäjiä ei voi päivittää.",
|
||||
"system_generated_users_not_removable": "Järjestelmän luomia käyttäjiä ei voi poistaa.",
|
||||
"unnamed_user": "Nimeämätön käyttäjä",
|
||||
"update_user": "Päivitä"
|
||||
@@ -1608,6 +1680,7 @@
|
||||
"header": "Klusterin määritteet",
|
||||
"help_attribute_dropdown": "Valitse määrite, jonka arvoa haluat tarkastella tai määrittää.",
|
||||
"help_get_zigbee_attribute": "Hae valitun määritteen arvo.",
|
||||
"help_set_zigbee_attribute": "Määritä määritetyn kohteen määritetyn klusterin määritteen arvo.",
|
||||
"introduction": "Tarkastele ja muokkaa klusterimääritteitä.",
|
||||
"set_zigbee_attribute": "Aseta Zigbee-ominaisuus"
|
||||
},
|
||||
@@ -1635,11 +1708,14 @@
|
||||
"header": "Zigbee-kotiautomaatio - laite"
|
||||
},
|
||||
"group_binding": {
|
||||
"bind_button_help": "Sido valittu ryhmä valittuihin laiteklustereihin.",
|
||||
"bind_button_label": "Sido ryhmä",
|
||||
"cluster_selection_help": "Valitse valittuun ryhmään sidottavat klusterit.",
|
||||
"group_picker_help": "Valitse ryhmä, jos haluat antaa sidontakomennon.",
|
||||
"group_picker_label": "Sidottavat ryhmät",
|
||||
"header": "Ryhmäsidonta",
|
||||
"introduction": "Sido ja pura ryhmiä",
|
||||
"unbind_button_help": "Pura valitun ryhmän sidonta valituista laiteklustereista.",
|
||||
"unbind_button_label": "Pura ryhmän sidonta"
|
||||
},
|
||||
"groups": {
|
||||
@@ -1678,6 +1754,8 @@
|
||||
"node_management": {
|
||||
"header": "Laitehallinta",
|
||||
"help_node_dropdown": "Valitse laite tarkastellaksesi laitekohtaisia vaihtoehtoja.",
|
||||
"hint_battery_devices": "Huomautus: Nukkuvien (akkukäyttöisten) laitteiden on oltava hereillä, kun niitä vastaan suoritetaan komentoja. Voit yleensä herättää uneliaan laitteen käynnistämällä sen.",
|
||||
"hint_wakeup": "Joissakin laitteissa, kuten Xiaomi-antureissa, on herätyspainike, jota voit painaa 5 sekunnin välein, jotka pitävät laitteet hereillä, kun olet vuorovaikutuksessa niiden kanssa.",
|
||||
"introduction": "Suorita ZHA-komennot, jotka vaikuttavat yhteen laitteeseen. Valitse laite nähdäksesi luettelon käytettävissä olevista komennoista."
|
||||
},
|
||||
"title": "Zigbee-kotiautomaatio"
|
||||
@@ -1685,6 +1763,7 @@
|
||||
"zone": {
|
||||
"add_zone": "Lisää vyöhyke",
|
||||
"caption": "Alueet",
|
||||
"configured_in_yaml": "Configuration.yaml-tiedoston kautta määritettyjä vyöhykkeitä ei voi muokata käyttöliittymän kautta.",
|
||||
"confirm_delete": "Haluatko varmasti poistaa tämän vyöhykkeen?",
|
||||
"create_zone": "Luo alue",
|
||||
"description": "Hallitse vyöhykkeitä, joissa haluat seurata ihmisiä.",
|
||||
@@ -1703,7 +1782,10 @@
|
||||
"required_error_msg": "Tämä kenttä on pakollinen",
|
||||
"update": "Päivitä"
|
||||
},
|
||||
"edit_home_zone": "Voit asettaa kotisi sijainnin kohdasta Asetukset>Yleinen.",
|
||||
"edit_home_zone": "Kotivyöhykkeen sädettä ei voi vielä määrittää käyttöliittymästä. Raahaa merkkiä kartalla muuttaaksesi kotivyöhykettä.",
|
||||
"edit_home_zone_narrow": "Kotivyöhykkeen sädettä ei voi vielä muokata käyttöliittymästä. Paikka voidaan muuttaa yleisestä konfiguraatiosta.",
|
||||
"go_to_core_config": "Siirry yleisiin asetuksiin?",
|
||||
"home_zone_core_config": "Kotivyöhykkeen sijaintia voi muokata yleiset asetukset-sivulta. Koti-alueen sädettä ei voi vielä muokata Frontendistä. Haluatko siirtyä yleisiin asetuksiin?",
|
||||
"introduction": "Vyöhykkeiden avulla voit määrittää alueita maan päällä. Kun henkilö on vyöhykkeellä, tila saa vyöhykkeen nimen. Vyöhykkeitä voidaan käyttää myös laukaisimina tai ehtoina automaatioissa.",
|
||||
"no_zones_created_yet": "Näyttää siltä, että et ole vielä luonut vyöhykkeitä."
|
||||
},
|
||||
@@ -1761,6 +1843,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"custom": {
|
||||
"external_panel": {
|
||||
"complete_access": "Se voi käyttää kaikkia Home Assistantin tietoja.",
|
||||
"hide_message": "Tarkista panel_custom-komponentin dokumentaatio piilottaaksesi tämän viestin",
|
||||
"question_trust": "Luotatko ulkoiseen paneeliin {name} osoitteessa {link} ?"
|
||||
}
|
||||
},
|
||||
"developer-tools": {
|
||||
"tabs": {
|
||||
"events": {
|
||||
@@ -1790,8 +1879,10 @@
|
||||
"home_assistant_logo": "Home Assistant-logo",
|
||||
"icons_by": "Kuvakkeet luonut",
|
||||
"license": "Julkaistu Apache 2.0-lisenssillä",
|
||||
"path_configuration": "Polku configuration.yaml-tiedostoon: {path}",
|
||||
"server": "palvelin",
|
||||
"source": "Lähde:",
|
||||
"system_health_error": "Järjestelmän kunto-komponenttia ei ole ladattu. Lisää 'system_health:' kohteeseen configuration.yaml",
|
||||
"title": "Tiedot"
|
||||
},
|
||||
"logs": {
|
||||
@@ -1799,6 +1890,7 @@
|
||||
"details": "Lokitiedot ( {level} )",
|
||||
"load_full_log": "Lataa Home Assistantin koko loki",
|
||||
"loading_log": "Ladataan virhelokia...",
|
||||
"multiple_messages": "Viesti esiintyi ensimmäisen kerran {time} ja tämän jälkeen {counter} kertaa",
|
||||
"no_errors": "Virheitä ei ole ilmoitettu.",
|
||||
"no_issues": "Ei uusia aiheita!",
|
||||
"refresh": "Päivitä",
|
||||
@@ -1824,6 +1916,7 @@
|
||||
"column_example": "Esimerkki",
|
||||
"column_parameter": "Parametri",
|
||||
"data": "Palvelutiedot (YAML, valinnainen)",
|
||||
"description": "Service dev -työkalun avulla voit kutsua mitMitä tahansa käytettävissä olevaan palvelua Home Assistant -sovelluksessa.",
|
||||
"fill_example_data": "Täytä esimerkkitiedoilla",
|
||||
"no_description": "Kuvausta ei ole saatavilla",
|
||||
"no_parameters": "Tämä palvelu ei ota parametreja.",
|
||||
@@ -1831,8 +1924,11 @@
|
||||
"title": "Palvelut"
|
||||
},
|
||||
"states": {
|
||||
"alert_entity_field": "Kohde on pakollinen kenttä",
|
||||
"attributes": "Määritteet",
|
||||
"current_entities": "Nykyiset kohteet",
|
||||
"description1": "Aseta laitteen esitys Home Assistant -sovelluksessa.",
|
||||
"description2": "Tämä ei kommunikoi varsinaisen laitteen kanssa.",
|
||||
"entity": "Kohde",
|
||||
"filter_attributes": "Suodata määritteitä",
|
||||
"filter_entities": "Suodata kohteita",
|
||||
@@ -1841,11 +1937,16 @@
|
||||
"no_entities": "Ei kohteita",
|
||||
"set_state": "Aseta tila",
|
||||
"state": "Tila",
|
||||
"state_attributes": "Tilamääritteet (YAML, valinnainen)",
|
||||
"title": "Tilat"
|
||||
},
|
||||
"templates": {
|
||||
"description": "Mallit tehdään Jinja2-mallimoottorilla, joissa on joitain Home Assistant -kohtaisia laajennuksia.",
|
||||
"editor": "Mallieditori",
|
||||
"title": "Malli"
|
||||
"jinja_documentation": "Jinja2-mallin dokumentaatio",
|
||||
"template_extensions": "Home Assistant -mallilaajennukset",
|
||||
"title": "Malli",
|
||||
"unknown_error_template": "Tuntematon virhe mallin renderöinnissa"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1884,6 +1985,7 @@
|
||||
"url": "Avaa ikkuna {url_path}"
|
||||
},
|
||||
"safe-mode": {
|
||||
"description": "Home Assistant joutui vaikeuksiin kokoonpanoa ladattaessa, ja se on nyt käynnissä vikasietotilassa. Katso virhelokistua mikä meni pieleen.",
|
||||
"header": "Vikasietotila aktivoitu"
|
||||
},
|
||||
"shopping-list": {
|
||||
@@ -1900,16 +2002,20 @@
|
||||
"card": {
|
||||
"alarm-panel": {
|
||||
"available_states": "Käytettävissä olevat tilat",
|
||||
"description": "Hälytyspaneelikortin kortin avulla voit virittää ja purkaa hälytyksen ohjauspaneelin integrointeja.",
|
||||
"name": "Hälytyspaneeli"
|
||||
},
|
||||
"button": {
|
||||
"description": "Painikekortti antaa sinun lisätä painikkeita tehtävien suorittamiseen.",
|
||||
"name": "Painike"
|
||||
},
|
||||
"conditional": {
|
||||
"card": "Kortti",
|
||||
"change_type": "Muuta tyyppiä",
|
||||
"condition_explanation": "Kortti näytetään, kun kaikki alla olevat ehdot täyttyvät.",
|
||||
"conditions": "Ehdot",
|
||||
"current_state": "Nykyinen",
|
||||
"description": "Ehdollinen kortti näyttää toisen kortin kohteen tilan perusteella.",
|
||||
"name": "Ehdollinen",
|
||||
"state_equal": "Tila on yhtä suuri kuin",
|
||||
"state_not_equal": "Tila ei ole yhtä suuri kuin"
|
||||
@@ -1919,13 +2025,17 @@
|
||||
"required": "Vaadittu"
|
||||
},
|
||||
"entities": {
|
||||
"description": "Kohde-kortti on yleisin korttityyppi. Se ryhmittelee kohteet yhteen luetteloiksi.",
|
||||
"name": "Kohteet",
|
||||
"show_header_toggle": "Näytä otsikkokytkin?"
|
||||
"show_header_toggle": "Näytä otsikkokytkin?",
|
||||
"toggle": "Ota kohteet käyttöön tai poista käytöstä"
|
||||
},
|
||||
"entity-filter": {
|
||||
"description": "Kohdesuodatin-kortin avulla voit määrittää luettelon kohteista, joita haluat seurata vain tietyssä tilassa.",
|
||||
"name": "Kohteen suodatus"
|
||||
},
|
||||
"entity": {
|
||||
"description": "Kohdekortti antaa sinulle nopean yleiskatsauksen kohteen tilasta.",
|
||||
"name": "Kohde"
|
||||
},
|
||||
"gauge": {
|
||||
@@ -1952,6 +2062,7 @@
|
||||
"icon_height": "Kuvakkeen korkeus",
|
||||
"image": "Kuvan polku",
|
||||
"manual": "Manuaalinen",
|
||||
"manual_description": "Haluatko lisätä mukautetun kortin tai vain kirjoittaa YAML:in manuaalisesti?",
|
||||
"maximum": "Enimmäismäärä",
|
||||
"minimum": "Vähimmäismäärä",
|
||||
"name": "Nimi",
|
||||
@@ -1969,18 +2080,23 @@
|
||||
},
|
||||
"glance": {
|
||||
"columns": "Sarakkeet",
|
||||
"description": "Glance-kortti on hyödyllinen useiden anturien ryhmittelemiseksi kompaktiin yleiskuvaan.",
|
||||
"name": "Pikavilkaisu"
|
||||
},
|
||||
"history-graph": {
|
||||
"description": "Historiakaavio-kortin avulla voit näyttää kaavion kullekin luettelossa olevalle kohteelle.",
|
||||
"name": "Historiakuvaaja"
|
||||
},
|
||||
"horizontal-stack": {
|
||||
"description": "Vaakapinokortin avulla voit pinota yhteen useita kortteja, jolloin ne ovat aina vierekkäin yhden sarakkeen tilassa.",
|
||||
"name": "Vaakapino"
|
||||
},
|
||||
"iframe": {
|
||||
"description": "Verkkosivukortin avulla voit upottaa suosikkiverkkosivusi suoraan Home Assistantiin.",
|
||||
"name": "iFrame"
|
||||
},
|
||||
"light": {
|
||||
"description": "Valokortti antaa sinun muuttaa valon kirkkautta.",
|
||||
"name": "Valo"
|
||||
},
|
||||
"map": {
|
||||
@@ -1998,38 +2114,50 @@
|
||||
"name": "Merkintä"
|
||||
},
|
||||
"media-control": {
|
||||
"description": "Media Control -korttia käytetään mediasoittimen näyttämiseen käyttöliittymässä, jossa on helppokäyttöiset ohjaimet.",
|
||||
"name": "Mediaohjaus"
|
||||
},
|
||||
"picture-elements": {
|
||||
"description": "Picture Elements -kortti on yksi monipuolisimmista korttityypeistä. Korttien avulla voit sijoittaa kuvakkeita tai tekstiä ja jopa palveluja! Koordinaatteihin perustuvassa kuvassa.",
|
||||
"name": "Kuvaelementit"
|
||||
},
|
||||
"picture-entity": {
|
||||
"description": "Kuvakohde -kortti näyttää kohteen kuvan muodossa. URL-osoitteesta saatujen kuvien sijasta se voi myös näyttää kameran kuvan.",
|
||||
"name": "Kuvakohde"
|
||||
},
|
||||
"picture-glance": {
|
||||
"description": "Picture Glance -kortissa näkyy kuva ja vastaava kohde näkyy kuvakkeena. Oikealla puolella olevat kohteet sallivat vaihtotoiminnot, toiset näyttävät enemmän tietoja -valintaikkunan.",
|
||||
"name": "Kuva pikavilkaisu"
|
||||
},
|
||||
"picture": {
|
||||
"description": "Kuvakortti antaa sinun asettaa kuvan, jota käytetään navigointiin käyttöliittymän eri poluille tai palvelun suorittamiseen.",
|
||||
"name": "Kuva"
|
||||
},
|
||||
"plant-status": {
|
||||
"description": "Kasvien tila -kortti on tarkoitettu kaikille siellä oleville ihanille kotikasvitieteilijöille.",
|
||||
"name": "Kasvin tila"
|
||||
},
|
||||
"sensor": {
|
||||
"description": "Anturikortti antaa sinulle nopean yleiskatsauksen antureiden tilasta valinnaisella kaaviolla, joka kuvaa muutosta ajan myötä.",
|
||||
"graph_detail": "Kaavion tiedot",
|
||||
"graph_type": "Kaavion tyyppi",
|
||||
"name": "Sensori"
|
||||
},
|
||||
"shopping-list": {
|
||||
"description": "Ostolistakortti antaa sinun lisätä, muokata, tarkistaa ja tyhjentää kohteita ostoslistaltasi.",
|
||||
"integration_not_loaded": "Tämä kortti vaatii `shopping_list` -integraation ottamisen käyttöön.",
|
||||
"name": "Ostoslista"
|
||||
},
|
||||
"thermostat": {
|
||||
"description": "Termostaatti-kortti antaa sinun hallita ilmastokohteita. Voit muuttaa kohteen lämpötilaa ja toimintaa.",
|
||||
"name": "Termostaatti"
|
||||
},
|
||||
"vertical-stack": {
|
||||
"description": "Pystypino-kortti antaa sinun ryhmitellä useita kortteja niin, että ne ovat aina samassa sarakkeessa.",
|
||||
"name": "Pystypino"
|
||||
},
|
||||
"weather-forecast": {
|
||||
"description": "Sääennustekortti näyttää säätiedot. Erittäin hyödyllinen sisällyttää käyttöliittymiin, joita ihmiset näkevät seinällä.",
|
||||
"name": "Sääennuste"
|
||||
}
|
||||
},
|
||||
@@ -2046,6 +2174,7 @@
|
||||
"move": "Siirrä",
|
||||
"options": "Lisää vaihtoehtoja",
|
||||
"pick_card": "Valitse kortti jonka haluat lisätä",
|
||||
"pick_card_view_title": "Minkä kortin haluat lisätä {name} -näkymääsi?",
|
||||
"show_code_editor": "Näytä koodieditori",
|
||||
"show_visual_editor": "Näytä visuaalinen editori",
|
||||
"toggle_editor": "Vaihda editori"
|
||||
@@ -2060,12 +2189,15 @@
|
||||
"delete": "Poista näkymä",
|
||||
"edit": "Muokkaa näkymää",
|
||||
"header": "Näytä asetukset",
|
||||
"header_name": "{nimi} Näytä asetukset",
|
||||
"header_name": "{name} Näytä asetukset",
|
||||
"move_left": "Siirrä näkymää vasemmalle",
|
||||
"move_right": "Siirrä näkymää oikealle",
|
||||
"tab_badges": "Merkit",
|
||||
"tab_settings": "Asetukset",
|
||||
"tab_visibility": "Näkyvyys"
|
||||
"tab_visibility": "Näkyvyys",
|
||||
"visibility": {
|
||||
"select_users": "Valitse ketkä käyttäjät näkevät tämän näkymän navigoinnissa"
|
||||
}
|
||||
},
|
||||
"header": "Muokkaa käyttöliittymää",
|
||||
"menu": {
|
||||
@@ -2088,6 +2220,7 @@
|
||||
"error_remove": "Asetusta ei voida poistaa: {error}",
|
||||
"error_save_yaml": "YAML-tiedostoa ei voi tallentaa: {error}",
|
||||
"header": "Muokkaa asetuksia",
|
||||
"resources_moved": "Resursseja ei enää lisätä Lovelace-kokoonpanoon, mutta ne voidaan lisätä Lovelace config -paneeliin.",
|
||||
"save": "Tallenna",
|
||||
"saved": "Tallennettu",
|
||||
"unsaved_changes": "Tallentamattomat muutokset"
|
||||
@@ -2100,7 +2233,9 @@
|
||||
"para": "Oletuksena Home Assistant ylläpitää käyttöliittymääsi, päivittäen sitä uusien yksiköiden tai Lovelace komponenttien tullessa saataville. Jos muokkaat käyttöliittymääsi, emme enää tee muutoksia automaattisesti.",
|
||||
"para_sure": "Oletko varma, että haluat ottaa haltuun käyttöliittymän?",
|
||||
"save": "Ota hallintaan",
|
||||
"yaml_mode": "Käytät YAML-tilaa, mikä tarkoittaa, että et voi muuttaa Lovelace-kokoonpanoa käyttöliittymästä. Jos haluat muuttaa Lovelace-sovellusta käyttöliittymästä, poista 'mode: yaml' Lovelace-määrityksestäsi tiedostossa 'configuration.yaml'."
|
||||
"yaml_config": "Tämän aloittamisen helpottamiseksi on tämä hallintapaneelin nykyinen kokoonpano:",
|
||||
"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'."
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Lisää Lovelace-käyttöliittymään",
|
||||
@@ -2109,7 +2244,9 @@
|
||||
},
|
||||
"view": {
|
||||
"panel_mode": {
|
||||
"title": "Paneelitila?"
|
||||
"description": "Tämä renderöi ensimmäisen kortin täydellä leveydellä. Muita kortteja tässä näkymässä ei näytetä.",
|
||||
"title": "Paneelitila?",
|
||||
"warning_multiple_cards": "Tämä näkymä sisältää useamman kuin yhden kortin, paneelinäkymä tukee vain yhtä korttia."
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2118,10 +2255,12 @@
|
||||
"configure_ui": "Määrittele käyttöliittymä",
|
||||
"exit_edit_mode": "Poistu käyttöliittymän muokkaustilasta",
|
||||
"help": "Apua",
|
||||
"refresh": "Päivitä"
|
||||
"refresh": "Päivitä",
|
||||
"reload_resources": "Lataa resurssit uudelleen"
|
||||
},
|
||||
"reload_lovelace": "Lataa Lovelace uudelleen",
|
||||
"reload_resources": {
|
||||
"refresh_body": "Sinun täytyy päivittää sivu viimeistelläksesi uudelleenlatauksen, haluatko päivittää nyt?",
|
||||
"refresh_header": "Haluatko päivittää?"
|
||||
},
|
||||
"unused_entities": {
|
||||
@@ -2130,14 +2269,17 @@
|
||||
"entity": "Kohde",
|
||||
"entity_id": "Kohde ID",
|
||||
"last_changed": "Viimeksi muutettu",
|
||||
"select_to_add": "Valitse kohteet, jotka haluat lisätä korttiin, ja napsauta sitten Lisää kortti -painiketta.",
|
||||
"title": "Käyttämättömät entiteetit"
|
||||
},
|
||||
"views": {
|
||||
"confirm_delete": "Oletko varma, että haluat poistaa tämän näkymän?",
|
||||
"confirm_delete_existing_cards": "Tämän näkymän poistaminen poistaa myös kortit",
|
||||
"confirm_delete_existing_cards_text": "Haluatko varmasti poistaa näkymän {name}? Näkymä sisältää {number}-kortteja, jotka poistetaan. Tätä toimintoa ei voi kumota.",
|
||||
"confirm_delete_text": "Haluatko varmasti poistaa '{name}' -näkymäsi?"
|
||||
},
|
||||
"warning": {
|
||||
"attribute_not_found": "Määrite {attribute} ei ole käytettävissä kohteessa {entity}",
|
||||
"entity_non_numeric": "Yksikkö ei ole numeerinen: {entity}",
|
||||
"entity_not_found": "Yksikkö ei ole käytettävissä: {entity}",
|
||||
"entity_unavailable": "{entity} ei ole tällä hetkellä käytettävissä"
|
||||
@@ -2279,6 +2421,7 @@
|
||||
"mirror": "Peili",
|
||||
"patio": "Terassi",
|
||||
"right": "Oikea",
|
||||
"temperature_study": "Lämpötilaoppi",
|
||||
"upstairs": "Yläkerta"
|
||||
},
|
||||
"unit": {
|
||||
|
@@ -206,6 +206,8 @@
|
||||
"stopped": "Arrêté"
|
||||
},
|
||||
"default": {
|
||||
"off": "Off",
|
||||
"on": "On",
|
||||
"unavailable": "Indisponible",
|
||||
"unknown": "Inconnu"
|
||||
},
|
||||
@@ -471,11 +473,15 @@
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
"and": "et",
|
||||
"cancel": "Annuler",
|
||||
"close": "Fermer",
|
||||
"delete": "Supprimer",
|
||||
"loading": "Chargement",
|
||||
"next": "Suivant",
|
||||
"no": "Non",
|
||||
"previous": "Précédent",
|
||||
"refresh": "Rafraîchir",
|
||||
"save": "Enregistrer",
|
||||
"successfully_deleted": "Supprimé avec succès",
|
||||
"successfully_saved": "Enregistré avec succès",
|
||||
@@ -526,11 +532,11 @@
|
||||
},
|
||||
"relative_time": {
|
||||
"duration": {
|
||||
"day": "{count} {count, plural,\none {jour}\nother {jours}\n}",
|
||||
"hour": "{count} {count, plural,\none {heure}\nother {heures}\n}",
|
||||
"minute": "{count} {count, plural,\none {minute}\nother {minutes}\n}",
|
||||
"second": "{count} {count, plural,\none {seconde}\nother {secondes}\n}",
|
||||
"week": "{count} {count, plural,\none {semaine}\nother {semaines}\n}"
|
||||
"day": "{count} {count, plural,\nzero {jour}\none {jour}\nother {jours}\n}",
|
||||
"hour": "{count} {count, plural,\nzero {heure}\none {heure}\nother {heures}\n}",
|
||||
"minute": "{count} {count, plural,\nzero {minute}\none {minute}\nother {minutes}\n}",
|
||||
"second": "{count} {count, plural,\nzero {seconde}\none {seconde}\nother {secondes}\n}",
|
||||
"week": "{count} {count, plural,\nzero {semaine}\none {semaine}\nother {semaines}\n}"
|
||||
},
|
||||
"future": "Dans {time}",
|
||||
"never": "Jamais",
|
||||
@@ -655,8 +661,13 @@
|
||||
}
|
||||
},
|
||||
"mqtt_device_debug_info": {
|
||||
"deserialize": "Tentative d'analyse des messages MQTT en tant que JSON",
|
||||
"entities": "Entités",
|
||||
"no_entities": "Aucune entité",
|
||||
"no_triggers": "Pas de déclencheur",
|
||||
"payload_display": "Affichage de la charge utile",
|
||||
"recent_messages": "{n} dernier(s) message(s) reçu(s)",
|
||||
"show_as_yaml": "Afficher en tant que YAML",
|
||||
"title": "{device} informations de débogage",
|
||||
"triggers": "Déclencheurs"
|
||||
},
|
||||
@@ -707,11 +718,11 @@
|
||||
}
|
||||
},
|
||||
"duration": {
|
||||
"day": "{count} {count, plural,\none {jour}\nother {jours}\n}",
|
||||
"hour": "{count} {count, plural,\none {heure}\nother {heures}\n}",
|
||||
"minute": "{count} {count, plural,\none {minute}\nother {minutes}\n}",
|
||||
"second": "{count} {count, plural,\none {seconde}\nother {secondes}\n}",
|
||||
"week": "{count} {count, plural,\none {semaine}\nother {semaines}\n}"
|
||||
"day": "{count} {count, plural,\nzero {jour}\none {jour}\nother {jours}\n}",
|
||||
"hour": "{count} {count, plural,\nzero {heure}\none {heure}\nother {heures}\n}",
|
||||
"minute": "{count} {count, plural,\nzero {minute}\none {minute}\nother {minutes}\n}",
|
||||
"second": "{count} {count, plural,\nzero {seconde}\none {seconde}\nother {secondes}\n}",
|
||||
"week": "{count} {count, plural,\nzero {semaine}\none {semaine}\nother {semaines}\n}"
|
||||
},
|
||||
"login-form": {
|
||||
"log_in": "Connexion",
|
||||
@@ -730,6 +741,10 @@
|
||||
"triggered": "{name} déclenché"
|
||||
},
|
||||
"panel": {
|
||||
"calendar": {
|
||||
"my_calendars": "Mes calendriers",
|
||||
"today": "Aujourd'hui"
|
||||
},
|
||||
"config": {
|
||||
"advanced_mode": {
|
||||
"hint_enable": "Options de configuration manquantes? Activer le mode avancé",
|
||||
@@ -832,6 +847,9 @@
|
||||
},
|
||||
"label": "Appareil"
|
||||
},
|
||||
"not": {
|
||||
"label": "Pas"
|
||||
},
|
||||
"numeric_state": {
|
||||
"above": "Au-Dessus",
|
||||
"below": "En-Dessous",
|
||||
@@ -1163,7 +1181,9 @@
|
||||
"edit_requires_storage": "L'éditeur est désactivé car la configuration est stockée dans configuration.yaml.",
|
||||
"elevation": "Élévation",
|
||||
"elevation_meters": "mètres",
|
||||
"external_url": "URL externe",
|
||||
"imperial_example": "Fahrenheit, livres",
|
||||
"internal_url": "URL interne",
|
||||
"latitude": "Latitude",
|
||||
"location_name": "Nom de votre installation Home Assistant",
|
||||
"longitude": "Longitude",
|
||||
@@ -1230,6 +1250,7 @@
|
||||
},
|
||||
"delete": "Supprimer",
|
||||
"description": "Gérer les appareils connectés",
|
||||
"device_info": "Informations sur l’appareil",
|
||||
"device_not_found": "Appareil non trouvé.",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Ajouter à Lovelace",
|
||||
@@ -1339,6 +1360,8 @@
|
||||
"delete_button": "Supprimer {integration}",
|
||||
"delete_confirm": "Êtes-vous sûr de vouloir supprimer cette intégration?",
|
||||
"device_unavailable": "appareil indisponible",
|
||||
"devices": "{count} {count, plural,\n zero {appareil}\n one {appareil}\n other {appareils}\n}",
|
||||
"entities": "{count} {count, plural,\n zero {entité}\n one {entité}\n other {entités}\n}",
|
||||
"entity_unavailable": "entité indisponible",
|
||||
"firmware": "Firmware: {version}",
|
||||
"hub": "Connecté via",
|
||||
@@ -1388,9 +1411,13 @@
|
||||
"integration": "intégration",
|
||||
"integration_not_found": "Intégration introuvable.",
|
||||
"new": "Configurer une nouvelle intégration",
|
||||
"no_integrations": "Il semble que vous n'ayez pas encore configuré d'intégrations. Cliquez sur le bouton ci-dessous pour ajouter votre première intégration!",
|
||||
"none": "Rien n'est encore configuré",
|
||||
"none_found": "Aucune intégration trouvée",
|
||||
"none_found_detail": "Ajustez vos critères de recherche.",
|
||||
"note_about_integrations": "Toutes les intégrations ne peuvent pas encore être configurées via l'interface utilisateur.",
|
||||
"note_about_website_reference": "D'autres sont disponibles sur le ",
|
||||
"rename_dialog": "Modifier le nom de cette entrée de configuration",
|
||||
"rename_input_label": "Nom de l'entrée"
|
||||
},
|
||||
"introduction": "Ici, il est possible de configurer vos composants et Home Assistant. Tout n'est pas encore possible de configurer à partir de l'interface utilisateur, mais nous y travaillons.",
|
||||
@@ -2207,12 +2234,12 @@
|
||||
"close": "Fermer",
|
||||
"empty_config": "Commencez avec un tableau de bord vide",
|
||||
"header": "Prenez le contrôle de votre Interface Lovelace",
|
||||
"para": "Par défaut, Home Assistant maintient votre interface utilisateur, la met à jour lorsque de nouvelles entités ou de nouveaux composants Lovelace UI sont disponibles. Si vous prenez le contrôle, nous ne ferons plus les changements automatiquement pour vous.",
|
||||
"para": "Par défaut, Home Assistant maintient votre interface utilisateur et la met à jour lorsque de nouvelles entités ou de nouveaux composants Lovelace UI sont disponibles. Si vous prenez le contrôle, nous ne ferons plus les changements automatiquement pour vous.",
|
||||
"para_sure": "Êtes-vous sûr de vouloir prendre le contrôle de l'interface utilisateur?",
|
||||
"save": "Prenez le contrôle",
|
||||
"yaml_config": "Pour vous aider à démarrer, voici la configuration actuelle de ce tableau de bord:",
|
||||
"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, ce qui signifie que vous ne pouvez pas modifier votre configuration Lovelace depuis l'interface utilisateur. Si vous souhaitez modifier Lovelace de l'interface utilisateur, supprimez «mode: yaml» de votre configuration Lovelace dans «configuration.yaml»."
|
||||
"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»."
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Ajouter à Lovelace UI",
|
||||
@@ -2258,7 +2285,8 @@
|
||||
"warning": {
|
||||
"attribute_not_found": "Attribut {attribute} non disponible dans: {entity}",
|
||||
"entity_non_numeric": "L'entité est non numérique: {entity}",
|
||||
"entity_not_found": "Entité non disponible: {entity}"
|
||||
"entity_not_found": "Entité non disponible: {entity}",
|
||||
"entity_unavailable": "{entity} n'est pas disponible actuellement"
|
||||
}
|
||||
},
|
||||
"mailbox": {
|
||||
|
1
translations/frontend/fy.json
Normal file
1
translations/frontend/fy.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
1
translations/frontend/gl.json
Normal file
1
translations/frontend/gl.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
@@ -147,6 +147,8 @@
|
||||
"stopped": "Gstoppt"
|
||||
},
|
||||
"default": {
|
||||
"off": "Aus",
|
||||
"on": "An",
|
||||
"unavailable": "Nid verfüägbar",
|
||||
"unknown": "Unbekannt"
|
||||
},
|
||||
@@ -345,7 +347,10 @@
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
"loading": "Lade"
|
||||
"loading": "Lade",
|
||||
"next": "Weiter",
|
||||
"previous": "Zurück",
|
||||
"refresh": "Neu laden"
|
||||
},
|
||||
"components": {
|
||||
"device-picker": {
|
||||
@@ -370,6 +375,10 @@
|
||||
"connection_lost": "Vrbindig vrlore. Neu verbinde..."
|
||||
},
|
||||
"panel": {
|
||||
"calendar": {
|
||||
"my_calendars": "Meine Kalender",
|
||||
"today": "Heute"
|
||||
},
|
||||
"config": {
|
||||
"automation": {
|
||||
"caption": "Automation",
|
||||
@@ -396,6 +405,9 @@
|
||||
"conditions": {
|
||||
"header": "Bedingig",
|
||||
"type": {
|
||||
"not": {
|
||||
"label": "Nicht"
|
||||
},
|
||||
"sun": {
|
||||
"after": "Nachhär:",
|
||||
"before": "Vorhär:",
|
||||
@@ -462,6 +474,7 @@
|
||||
"caption": "Home Assistant Cloud"
|
||||
},
|
||||
"devices": {
|
||||
"device_info": "Geräteinformationen",
|
||||
"scripts": "Scripts"
|
||||
},
|
||||
"integrations": {
|
||||
@@ -474,7 +487,9 @@
|
||||
},
|
||||
"configure": "Konfiguriärä",
|
||||
"configured": "Konfiguriärt",
|
||||
"discovered": "Erkennt"
|
||||
"discovered": "Erkennt",
|
||||
"none_found": "Keine Integrationen gefunden",
|
||||
"none_found_detail": "Passen Sie Ihre Suchkriterien an."
|
||||
},
|
||||
"users": {
|
||||
"caption": "Benutzer",
|
||||
|
@@ -206,6 +206,8 @@
|
||||
"stopped": "עצור"
|
||||
},
|
||||
"default": {
|
||||
"off": "מופסק",
|
||||
"on": "מופעל",
|
||||
"unavailable": "לא זמין",
|
||||
"unknown": "לא ידוע"
|
||||
},
|
||||
@@ -1096,6 +1098,7 @@
|
||||
"caption": "אינטגרציות",
|
||||
"config_entry": {
|
||||
"area": "ב {area}",
|
||||
"delete": "מחק",
|
||||
"delete_button": "מחק {integration}",
|
||||
"delete_confirm": "האם אתה בטוח שברצונך למחוק אינטגרציה זו?",
|
||||
"device_unavailable": "התקן אינו זמין",
|
||||
@@ -1106,8 +1109,11 @@
|
||||
"no_area": "ללא אזור",
|
||||
"no_device": "ישויות ללא מכשירים",
|
||||
"no_devices": "לאינטגרציה זו אין התקנים.",
|
||||
"options": "אפשרויות",
|
||||
"rename": "שנה שם",
|
||||
"restart_confirm": "הפעל מחדש את Home Assistant כדי להשלים את הסרת האינטגרציה",
|
||||
"settings_button": "ערוך הגדרות עבור {integration}",
|
||||
"system_options": "אפשרויות מערכת",
|
||||
"system_options_button": "אפשרויות מערכת עבור {integration}"
|
||||
},
|
||||
"config_flow": {
|
||||
@@ -1132,6 +1138,8 @@
|
||||
"integration_not_found": "האינטגרציה לא נמצאה.",
|
||||
"new": "הגדר אינטגרציה",
|
||||
"none": "כלום אינו הוגדר עדיין",
|
||||
"none_found": "לא נמצאו אינטגרציות",
|
||||
"none_found_detail": "התאם את קריטריוני החיפוש שלך.",
|
||||
"note_about_integrations": "קיימות אינטגרציות שלא ניתן עדיין להגדירן ע\"י ממשק המשתמש.",
|
||||
"note_about_website_reference": "מידע נוסף זמין ב:"
|
||||
},
|
||||
@@ -1751,7 +1759,8 @@
|
||||
},
|
||||
"warning": {
|
||||
"entity_non_numeric": "הישות אינה מספרית: {entity}",
|
||||
"entity_not_found": "הישות אינה זמינה: {entity}"
|
||||
"entity_not_found": "הישות אינה זמינה: {entity}",
|
||||
"entity_unavailable": "כרגע {entity} אינו זמין"
|
||||
}
|
||||
},
|
||||
"mailbox": {
|
||||
|
@@ -92,6 +92,8 @@
|
||||
"off": "बंद"
|
||||
},
|
||||
"default": {
|
||||
"off": "बंद",
|
||||
"on": "चालू",
|
||||
"unavailable": "अनुपलब्ध",
|
||||
"unknown": "अनजान"
|
||||
},
|
||||
@@ -153,8 +155,31 @@
|
||||
}
|
||||
},
|
||||
"ui": {
|
||||
"card": {
|
||||
"weather": {
|
||||
"attributes": {
|
||||
"precipitation": "वर्षण"
|
||||
},
|
||||
"high": "उच्च",
|
||||
"low": "कम"
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
"undo": "Undo"
|
||||
"undo": "पूर्ववत करें"
|
||||
},
|
||||
"dialogs": {
|
||||
"mqtt_device_debug_info": {
|
||||
"entities": "संस्थाएं",
|
||||
"no_entities": "कोई संस्थाएं नहीं",
|
||||
"no_triggers": "कोई ट्रिगर नहीं",
|
||||
"show_as_yaml": "YAML के रूप में दिखाएं",
|
||||
"triggers": "ट्रिगर"
|
||||
},
|
||||
"zha_device_info": {
|
||||
"services": {
|
||||
"zigbee_information": "डिवाइस के लिए Zigbee जानकारी देखें।"
|
||||
}
|
||||
}
|
||||
},
|
||||
"duration": {
|
||||
"day": "{count} {count, plural,\n one {दिन}\n other {दिन}\n}",
|
||||
@@ -170,6 +195,9 @@
|
||||
"editor": {
|
||||
"conditions": {
|
||||
"type": {
|
||||
"not": {
|
||||
"label": "नहीं"
|
||||
},
|
||||
"sun": {
|
||||
"after": "बाद:",
|
||||
"before": "पहले:",
|
||||
@@ -203,12 +231,49 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"picker": {
|
||||
"headers": {
|
||||
"name": "नाम"
|
||||
}
|
||||
}
|
||||
},
|
||||
"filtering": {
|
||||
"clear": "विशद",
|
||||
"filtering_by": "द्वारा छान रहे हैं"
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "एकीकरण जोड़ें",
|
||||
"config_entry": {
|
||||
"delete": "हटाएं",
|
||||
"rename": "नाम बदलें",
|
||||
"system_options": "सिस्टम विकल्प"
|
||||
},
|
||||
"integration": "एकीकरण",
|
||||
"no_integrations": "लगता है जैसे आपके पास अभी तक कोई भी पूर्णांक कॉन्फ़िगर नहीं है। अपना पहला एकीकरण जोड़ने के लिए नीचे दिए गए बटन पर क्लिक करें!",
|
||||
"rename_dialog": "इस कॉन्फ़िगरेशन प्रविष्टि का नाम संपादित करें",
|
||||
"rename_input_label": "प्रवेश का नाम"
|
||||
},
|
||||
"script": {
|
||||
"picker": {
|
||||
"headers": {
|
||||
"name": "नाम"
|
||||
}
|
||||
}
|
||||
},
|
||||
"users": {
|
||||
"editor": {
|
||||
"admin": "admin",
|
||||
"system_generated_users_not_editable": "ARAVIN"
|
||||
"admin": "प्रशासक",
|
||||
"name": "नाम",
|
||||
"system_generated_users_not_editable": "सिस्टम जनरेट किए गए उपयोगकर्ताओं को अपडेट करने में असमर्थ।",
|
||||
"update_user": "अपडेट"
|
||||
},
|
||||
"picker": {
|
||||
"headers": {
|
||||
"group": "समूह",
|
||||
"name": "नाम",
|
||||
"system": "सिस्टम"
|
||||
}
|
||||
}
|
||||
},
|
||||
"zha": {
|
||||
@@ -248,7 +313,10 @@
|
||||
"editor": {
|
||||
"card": {
|
||||
"entity": {
|
||||
"description": "KARNATAKA"
|
||||
"description": "एंटिटी कार्ड आपको अपनी इकाई की स्थिति का त्वरित अवलोकन देता है।"
|
||||
},
|
||||
"generic": {
|
||||
"double_tap_action": "डबल टैप एक्शन"
|
||||
},
|
||||
"map": {
|
||||
"hours_to_show": "hours to show"
|
||||
@@ -258,6 +326,12 @@
|
||||
"custom_card": "custom_ card",
|
||||
"no_description": "description"
|
||||
}
|
||||
},
|
||||
"reload_resources": {
|
||||
"refresh_header": "क्या आप रिफ्रेश करना चाहते हैं?"
|
||||
},
|
||||
"warning": {
|
||||
"entity_unavailable": "{entity} वर्तमान में अनुपलब्ध है"
|
||||
}
|
||||
},
|
||||
"page-authorize": {
|
||||
@@ -284,6 +358,11 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"dashboard": {
|
||||
"description": "इस उपकरण के लिए एक डिफ़ॉल्ट डैशबोर्ड चुनें।",
|
||||
"dropdown_label": "डैशबोर्ड",
|
||||
"header": "डैशबोर्ड"
|
||||
},
|
||||
"language": {
|
||||
"link_promo": "अनुवाद करने में सहायता करें"
|
||||
}
|
||||
|
@@ -206,6 +206,8 @@
|
||||
"stopped": "Megállítva"
|
||||
},
|
||||
"default": {
|
||||
"off": "Ki",
|
||||
"on": "Be",
|
||||
"unavailable": "Nem elérhető",
|
||||
"unknown": "Ismeretlen"
|
||||
},
|
||||
@@ -344,7 +346,7 @@
|
||||
},
|
||||
"automation": {
|
||||
"last_triggered": "Utoljára aktiválva",
|
||||
"trigger": "Aktivál"
|
||||
"trigger": "Végrehajt"
|
||||
},
|
||||
"camera": {
|
||||
"not_available": "Kép nem áll rendelkezésre"
|
||||
@@ -475,7 +477,10 @@
|
||||
"close": "Bezárás",
|
||||
"delete": "Törlés",
|
||||
"loading": "Betöltés",
|
||||
"next": "Tovább",
|
||||
"no": "Nem",
|
||||
"previous": "Előző",
|
||||
"refresh": "Frissítés",
|
||||
"save": "Mentés",
|
||||
"successfully_deleted": "Sikeresen törölve",
|
||||
"successfully_saved": "Sikeresen elmentve",
|
||||
@@ -660,7 +665,7 @@
|
||||
"no_entities": "Nincsenek entitások",
|
||||
"no_triggers": "Nincsenek eseményindítók",
|
||||
"payload_display": "Payload megjelenítése",
|
||||
"recent_messages": "{n} legfrissebb fogadott üzenet",
|
||||
"recent_messages": "{n} legfrissebb fogadott üzenet(ek)",
|
||||
"show_as_yaml": "Megjelenítés YAML-ként",
|
||||
"title": "{device} debug infók",
|
||||
"triggers": "Eseményindítók"
|
||||
@@ -735,6 +740,10 @@
|
||||
"triggered": "Aktiválva {name}"
|
||||
},
|
||||
"panel": {
|
||||
"calendar": {
|
||||
"my_calendars": "Saját naptáraim",
|
||||
"today": "Ma"
|
||||
},
|
||||
"config": {
|
||||
"advanced_mode": {
|
||||
"hint_enable": "Hiányzó konfigurációs beállítások? Kapcsold be a haladó üzemmódot",
|
||||
@@ -837,6 +846,9 @@
|
||||
},
|
||||
"label": "Eszköz"
|
||||
},
|
||||
"not": {
|
||||
"label": "Nem"
|
||||
},
|
||||
"numeric_state": {
|
||||
"above": "Felett",
|
||||
"below": "Alatt",
|
||||
@@ -1397,6 +1409,8 @@
|
||||
"new": "Új integráció beállítása",
|
||||
"no_integrations": "Úgy tűnik, még nincs beállítva egyetlen integráció sem. Kattints az alábbi gombra az első integráció hozzáadásához!",
|
||||
"none": "Még semmi sincs beállítva",
|
||||
"none_found": "Nincsenek integrációk",
|
||||
"none_found_detail": "Módosítsd a keresési feltételeket.",
|
||||
"note_about_integrations": "Még nem minden integráció konfigurálható a felhasználói felületen keresztül.",
|
||||
"note_about_website_reference": "Továbbiak érhetőek el itt: ",
|
||||
"rename_dialog": "A konfigurációs bejegyzés nevének szerkesztése",
|
||||
@@ -2216,12 +2230,12 @@
|
||||
"close": "Bezárás",
|
||||
"empty_config": "Kezdj egy üres irányítópulttal",
|
||||
"header": "Vedd át az irányítást a Lovelace UI felett",
|
||||
"para": "Alapértelmezés szerint a Home Assistant kezeli a felhasználói felületet, és frissíti azt, amikor új entitások vagy Lovelace komponensek válnak elérhetővé. Ha átveszed az irányítást, többé nem fogunk automatikusan módosításokat végezni számodra.",
|
||||
"para": "Ezt az irányítópultot jelenleg a Home Assistant kezeli. Automatikusan frissül, amikor új entitások vagy Lovelace komponensek válnak elérhetővé. Ha átveszed az irányítást, akkor ez az irányítópult nem fog többé automatikusan frissülni. Bármikor létre tudsz hozni egy új irányítópultot a konfigurációban a próbálgatáshoz.",
|
||||
"para_sure": "Biztosan át szeretnéd venni az irányítást a felhasználói felületed felett?",
|
||||
"save": "Irányítás átvétele",
|
||||
"yaml_config": "A kezdéshez itt a jelenlegi konfigurációja ennek az irányítópultnak:",
|
||||
"yaml_control": "Ahhoz, hogy átvedd az irányítást YAML módban, hozz létre egy YAML fájlt az irányítópult konfigurációjában megadott vagy az alapértelmezett 'ui-lovelace.yaml' névvel.",
|
||||
"yaml_mode": "YAML módot használsz, ezért nem módosíthatod a Lovelace konfigurációt a felhasználói felületről. Ha mégis onnan szeretnéd, akkor távolítsd el a 'mode: yaml' bejegyzést a Lovelace konfigurációból a 'configuration.yaml' fájlban."
|
||||
"yaml_mode": "YAML módot használsz ehhez az irányítópulthoz, ezért nem módosíthatod a Lovelace konfigurációt a felhasználói felületről. Ha mégis onnan szeretnéd, akkor távolítsd el a 'mode: yaml' bejegyzést a Lovelace konfigurációból a 'configuration.yaml' fájlban."
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Hozzáadás a Lovelace-hez",
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user