mirror of
https://github.com/home-assistant/frontend.git
synced 2025-08-01 13:37:47 +00:00
Merge pull request #7019 from home-assistant/dev
This commit is contained in:
commit
7d5a27ec0f
@ -153,7 +153,7 @@ export class HassioUpdate extends LitElement {
|
||||
item.progress = true;
|
||||
const confirmed = await showConfirmationDialog(this, {
|
||||
title: `Update ${item.name}`,
|
||||
text: `Are you sure you want to upgrade ${item.name} to version ${item.version}?`,
|
||||
text: `Are you sure you want to update ${item.name} to version ${item.version}?`,
|
||||
confirmText: "update",
|
||||
dismissText: "cancel",
|
||||
});
|
||||
|
@ -79,6 +79,7 @@ class HassioSnapshots extends LitElement {
|
||||
},
|
||||
{ slug: "ssl", name: "SSL", checked: true },
|
||||
{ slug: "share", name: "Share", checked: true },
|
||||
{ slug: "media", name: "Media", checked: true },
|
||||
{ slug: "addons/local", name: "Local add-ons", checked: true },
|
||||
];
|
||||
|
||||
@ -241,7 +242,7 @@ class HassioSnapshots extends LitElement {
|
||||
|
||||
protected firstUpdated(changedProps: PropertyValues) {
|
||||
super.firstUpdated(changedProps);
|
||||
this._updateSnapshots();
|
||||
this.refreshData();
|
||||
}
|
||||
|
||||
protected updated(changedProps: PropertyValues) {
|
||||
|
@ -14,7 +14,6 @@ import {
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import memoizeOne from "memoize-one";
|
||||
import { atLeastVersion } from "../../../src/common/config/version";
|
||||
import "../../../src/components/buttons/ha-progress-button";
|
||||
import "../../../src/components/ha-button-menu";
|
||||
import "../../../src/components/ha-card";
|
||||
@ -85,8 +84,7 @@ class HassioHostInfo extends LitElement {
|
||||
</mwc-button>
|
||||
</ha-settings-row>`
|
||||
: ""}
|
||||
${this.hostInfo.features.includes("network") &&
|
||||
atLeastVersion(this.hass.config.version, 0, 115)
|
||||
${this.hostInfo.features.includes("network")
|
||||
? html` <ha-settings-row>
|
||||
<span slot="heading">
|
||||
IP address
|
||||
|
@ -213,7 +213,7 @@ class HassioSupervisorInfo extends LitElement {
|
||||
|
||||
const confirmed = await showConfirmationDialog(this, {
|
||||
title: "Update supervisor",
|
||||
text: `Are you sure you want to upgrade supervisor to version ${this.supervisorInfo.version_latest}?`,
|
||||
text: `Are you sure you want to update supervisor to version ${this.supervisorInfo.version_latest}?`,
|
||||
confirmText: "update",
|
||||
dismissText: "cancel",
|
||||
});
|
||||
|
2
setup.py
2
setup.py
@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
||||
|
||||
setup(
|
||||
name="home-assistant-frontend",
|
||||
version="20200912.0",
|
||||
version="20200915.0",
|
||||
description="The Home Assistant frontend",
|
||||
url="https://github.com/home-assistant/home-assistant-polymer",
|
||||
author="The Home Assistant Authors",
|
||||
|
@ -1,14 +1,14 @@
|
||||
import { derivedStyles, darkStyles } from "../../resources/styles";
|
||||
import { darkStyles, derivedStyles } from "../../resources/styles";
|
||||
import { HomeAssistant, Theme } from "../../types";
|
||||
import {
|
||||
hex2rgb,
|
||||
lab2hex,
|
||||
lab2rgb,
|
||||
rgb2hex,
|
||||
rgb2lab,
|
||||
lab2rgb,
|
||||
lab2hex,
|
||||
} from "../color/convert-color";
|
||||
import { labBrighten, labDarken } from "../color/lab";
|
||||
import { rgbContrast } from "../color/rgb";
|
||||
import { labDarken, labBrighten } from "../color/lab";
|
||||
|
||||
interface ProcessedTheme {
|
||||
keys: { [key: string]: "" };
|
||||
@ -105,7 +105,7 @@ const processTheme = (
|
||||
const keys = {};
|
||||
for (const key of Object.keys(combinedTheme)) {
|
||||
const prefixedKey = `--${key}`;
|
||||
const value = combinedTheme[key]!;
|
||||
const value = String(combinedTheme[key]);
|
||||
styles[prefixedKey] = value;
|
||||
keys[prefixedKey] = "";
|
||||
|
||||
|
@ -1,17 +1,16 @@
|
||||
import {
|
||||
customElement,
|
||||
html,
|
||||
TemplateResult,
|
||||
LitElement,
|
||||
CSSResult,
|
||||
css,
|
||||
query,
|
||||
property,
|
||||
} from "lit-element";
|
||||
import "@material/mwc-button";
|
||||
import "@material/mwc-menu";
|
||||
import type { Menu, Corner } from "@material/mwc-menu";
|
||||
|
||||
import type { Corner, Menu } from "@material/mwc-menu";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
query,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import "./ha-icon-button";
|
||||
|
||||
@customElement("ha-button-menu")
|
||||
@ -22,6 +21,8 @@ export class HaButtonMenu extends LitElement {
|
||||
|
||||
@property({ type: Boolean }) public activatable = false;
|
||||
|
||||
@property({ type: Boolean }) public disabled = false;
|
||||
|
||||
@query("mwc-menu") private _menu?: Menu;
|
||||
|
||||
public get items() {
|
||||
@ -48,6 +49,9 @@ export class HaButtonMenu extends LitElement {
|
||||
}
|
||||
|
||||
private _handleClick(): void {
|
||||
if (this.disabled) {
|
||||
return;
|
||||
}
|
||||
this._menu!.anchor = this;
|
||||
this._menu!.show();
|
||||
}
|
||||
|
@ -32,6 +32,9 @@ class HaCameraStream extends LitElement {
|
||||
@property({ type: Boolean, attribute: "muted" })
|
||||
public muted = false;
|
||||
|
||||
@property({ type: Boolean, attribute: "allow-exoplayer" })
|
||||
public allowExoPlayer = false;
|
||||
|
||||
// We keep track if we should force MJPEG with a string
|
||||
// that way it automatically resets if we change entity.
|
||||
@internalProperty() private _forceMJPEG?: string;
|
||||
@ -61,6 +64,7 @@ class HaCameraStream extends LitElement {
|
||||
<ha-hls-player
|
||||
autoplay
|
||||
playsinline
|
||||
.allowExoPlayer=${this.allowExoPlayer}
|
||||
.muted=${this.muted}
|
||||
.controls=${this.controls}
|
||||
.hass=${this.hass}
|
||||
|
@ -97,6 +97,7 @@ export class HaCodeEditor extends UpdatingElement {
|
||||
.CodeMirror {
|
||||
height: var(--code-mirror-height, auto);
|
||||
direction: var(--code-mirror-direction, ltr);
|
||||
font-family: var(--code-font-family, monospace);
|
||||
}
|
||||
.CodeMirror-scroll {
|
||||
max-height: var(--code-mirror-max-height, --code-mirror-height);
|
||||
|
@ -12,7 +12,6 @@ import {
|
||||
} from "lit-element";
|
||||
import { fireEvent } from "../common/dom/fire_event";
|
||||
import { nextRender } from "../common/util/render-status";
|
||||
import { getExternalConfig } from "../external_app/external_config";
|
||||
import type { HomeAssistant } from "../types";
|
||||
|
||||
type HLSModule = typeof import("hls.js");
|
||||
@ -35,6 +34,9 @@ class HaHLSPlayer extends LitElement {
|
||||
@property({ type: Boolean, attribute: "playsinline" })
|
||||
public playsInline = false;
|
||||
|
||||
@property({ type: Boolean, attribute: "allow-exoplayer" })
|
||||
public allowExoPlayer = false;
|
||||
|
||||
@query("video") private _videoEl!: HTMLVideoElement;
|
||||
|
||||
@internalProperty() private _attached = false;
|
||||
@ -61,7 +63,7 @@ class HaHLSPlayer extends LitElement {
|
||||
return html`
|
||||
<video
|
||||
?autoplay=${this.autoPlay}
|
||||
?muted=${this.muted}
|
||||
.muted=${this.muted}
|
||||
?playsinline=${this.playsInline}
|
||||
?controls=${this.controls}
|
||||
@loadeddata=${this._elementResized}
|
||||
@ -91,11 +93,7 @@ class HaHLSPlayer extends LitElement {
|
||||
}
|
||||
|
||||
private async _getUseExoPlayer(): Promise<boolean> {
|
||||
if (!this.hass!.auth.external) {
|
||||
return false;
|
||||
}
|
||||
const externalConfig = await getExternalConfig(this.hass!.auth.external);
|
||||
return externalConfig && externalConfig.hasExoPlayer;
|
||||
return false;
|
||||
}
|
||||
|
||||
private async _startHls(): Promise<void> {
|
||||
@ -137,7 +135,10 @@ class HaHLSPlayer extends LitElement {
|
||||
this._videoEl.style.visibility = "hidden";
|
||||
await this.hass!.auth.external!.sendMessage({
|
||||
type: "exoplayer/play_hls",
|
||||
payload: new URL(url, window.location.href).toString(),
|
||||
payload: {
|
||||
url: new URL(url, window.location.href).toString(),
|
||||
muted: this.muted,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -159,8 +159,6 @@ const computePanels = memoizeOne(
|
||||
|
||||
let Sortable;
|
||||
|
||||
let sortStyles: CSSResult;
|
||||
|
||||
@customElement("ha-sidebar")
|
||||
class HaSidebar extends LitElement {
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
@ -171,12 +169,12 @@ class HaSidebar extends LitElement {
|
||||
|
||||
@property({ type: Boolean, reflect: true }) public expanded = false;
|
||||
|
||||
@property({ type: Boolean }) public editMode = false;
|
||||
|
||||
@internalProperty() private _externalConfig?: ExternalConfig;
|
||||
|
||||
@internalProperty() private _notifications?: PersistentNotification[];
|
||||
|
||||
@internalProperty() private _editMode = false;
|
||||
|
||||
// property used only in css
|
||||
// @ts-ignore
|
||||
@property({ type: Boolean, reflect: true }) public rtl = false;
|
||||
@ -227,19 +225,12 @@ class HaSidebar extends LitElement {
|
||||
}
|
||||
|
||||
return html`
|
||||
${this._editMode
|
||||
? html`
|
||||
<style>
|
||||
${sortStyles?.cssText}
|
||||
</style>
|
||||
`
|
||||
: ""}
|
||||
<div
|
||||
class="menu"
|
||||
@action=${this._handleAction}
|
||||
.actionHandler=${actionHandler({
|
||||
hasHold: !this._editMode,
|
||||
disabled: this._editMode,
|
||||
hasHold: !this.editMode,
|
||||
disabled: this.editMode,
|
||||
})}
|
||||
>
|
||||
${!this.narrow
|
||||
@ -257,7 +248,7 @@ class HaSidebar extends LitElement {
|
||||
`
|
||||
: ""}
|
||||
<div class="title">
|
||||
${this._editMode
|
||||
${this.editMode
|
||||
? html`<mwc-button outlined @click=${this._closeEditMode}>
|
||||
${hass.localize("ui.sidebar.done")}
|
||||
</mwc-button>`
|
||||
@ -273,7 +264,7 @@ class HaSidebar extends LitElement {
|
||||
@scroll=${this._listboxScroll}
|
||||
@keydown=${this._listboxKeydown}
|
||||
>
|
||||
${this._editMode
|
||||
${this.editMode
|
||||
? html`<div id="sortable">
|
||||
${guard([this._hiddenPanels, this._renderEmptySortable], () =>
|
||||
this._renderEmptySortable
|
||||
@ -283,7 +274,7 @@ class HaSidebar extends LitElement {
|
||||
</div>`
|
||||
: this._renderPanels(beforeSpacer)}
|
||||
<div class="spacer" disabled></div>
|
||||
${this._editMode && this._hiddenPanels.length
|
||||
${this.editMode && this._hiddenPanels.length
|
||||
? html`
|
||||
${this._hiddenPanels.map((url) => {
|
||||
const panel = this.hass.panels[url];
|
||||
@ -307,7 +298,7 @@ class HaSidebar extends LitElement {
|
||||
: hass.localize(`panel.${panel.title}`) ||
|
||||
panel.title}</span
|
||||
>
|
||||
<mwc-icon-button class="hide-panel">
|
||||
<mwc-icon-button class="show-panel">
|
||||
<ha-svg-icon .path=${mdiPlus}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
</paper-icon-item>`;
|
||||
@ -412,10 +403,10 @@ class HaSidebar extends LitElement {
|
||||
changedProps.has("alwaysExpand") ||
|
||||
changedProps.has("_externalConfig") ||
|
||||
changedProps.has("_notifications") ||
|
||||
changedProps.has("_editMode") ||
|
||||
changedProps.has("editMode") ||
|
||||
changedProps.has("_renderEmptySortable") ||
|
||||
changedProps.has("_hiddenPanels") ||
|
||||
(changedProps.has("_panelOrder") && !this._editMode)
|
||||
(changedProps.has("_panelOrder") && !this.editMode)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
@ -449,9 +440,6 @@ class HaSidebar extends LitElement {
|
||||
subscribeNotifications(this.hass.connection, (notifications) => {
|
||||
this._notifications = notifications;
|
||||
});
|
||||
window.addEventListener("hass-edit-sidebar", () =>
|
||||
this._activateEditMode()
|
||||
);
|
||||
}
|
||||
|
||||
protected updated(changedProps) {
|
||||
@ -459,6 +447,13 @@ class HaSidebar extends LitElement {
|
||||
if (changedProps.has("alwaysExpand")) {
|
||||
this.expanded = this.alwaysExpand;
|
||||
}
|
||||
if (changedProps.has("editMode")) {
|
||||
if (this.editMode) {
|
||||
this._activateEditMode();
|
||||
} else {
|
||||
this._deactivateEditMode();
|
||||
}
|
||||
}
|
||||
if (!changedProps.has("hass")) {
|
||||
return;
|
||||
}
|
||||
@ -489,7 +484,7 @@ class HaSidebar extends LitElement {
|
||||
return;
|
||||
}
|
||||
|
||||
this._activateEditMode();
|
||||
fireEvent(this, "hass-edit-sidebar", { editMode: true });
|
||||
}
|
||||
|
||||
private async _activateEditMode() {
|
||||
@ -499,15 +494,14 @@ class HaSidebar extends LitElement {
|
||||
import("../resources/ha-sortable-style"),
|
||||
]);
|
||||
|
||||
sortStyles = sortStylesImport.sortableStyles;
|
||||
const style = document.createElement("style");
|
||||
style.innerHTML = sortStylesImport.sortableStyles.cssText;
|
||||
this.shadowRoot!.appendChild(style);
|
||||
|
||||
Sortable = sortableImport.Sortable;
|
||||
Sortable.mount(sortableImport.OnSpill);
|
||||
Sortable.mount(sortableImport.AutoScroll());
|
||||
}
|
||||
this._editMode = true;
|
||||
|
||||
fireEvent(this, "hass-open-menu");
|
||||
|
||||
await this.updateComplete;
|
||||
|
||||
@ -519,16 +513,20 @@ class HaSidebar extends LitElement {
|
||||
animation: 150,
|
||||
fallbackClass: "sortable-fallback",
|
||||
dataIdAttr: "data-panel",
|
||||
handle: "paper-icon-item",
|
||||
onSort: async () => {
|
||||
this._panelOrder = this._sortable.toArray();
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
private _closeEditMode() {
|
||||
private _deactivateEditMode() {
|
||||
this._sortable?.destroy();
|
||||
this._sortable = undefined;
|
||||
this._editMode = false;
|
||||
}
|
||||
|
||||
private _closeEditMode() {
|
||||
fireEvent(this, "hass-edit-sidebar", { editMode: false });
|
||||
}
|
||||
|
||||
private async _hidePanel(ev: Event) {
|
||||
@ -692,16 +690,16 @@ class HaSidebar extends LitElement {
|
||||
></ha-svg-icon>`
|
||||
: html`<ha-icon slot="item-icon" .icon=${icon}></ha-icon>`}
|
||||
<span class="item-text">${title}</span>
|
||||
${this._editMode
|
||||
? html`<mwc-icon-button
|
||||
class="hide-panel"
|
||||
.panel=${urlPath}
|
||||
@click=${this._hidePanel}
|
||||
>
|
||||
<ha-svg-icon .path=${mdiClose}></ha-svg-icon>
|
||||
</mwc-icon-button>`
|
||||
: ""}
|
||||
</paper-icon-item>
|
||||
${this.editMode
|
||||
? html`<mwc-icon-button
|
||||
class="hide-panel"
|
||||
.panel=${urlPath}
|
||||
@click=${this._hidePanel}
|
||||
>
|
||||
<ha-svg-icon .path=${mdiClose}></ha-svg-icon>
|
||||
</mwc-icon-button>`
|
||||
: ""}
|
||||
</a>
|
||||
`;
|
||||
}
|
||||
@ -778,6 +776,11 @@ class HaSidebar extends LitElement {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#sortable,
|
||||
.hidden-panel {
|
||||
display: none;
|
||||
}
|
||||
|
||||
paper-listbox {
|
||||
padding: 4px 0;
|
||||
display: flex;
|
||||
|
@ -25,7 +25,7 @@ import { debounce } from "../../common/util/debounce";
|
||||
import {
|
||||
browseLocalMediaPlayer,
|
||||
browseMediaPlayer,
|
||||
BROWSER_SOURCE,
|
||||
BROWSER_PLAYER,
|
||||
MediaClassBrowserSettings,
|
||||
MediaPickedEvent,
|
||||
MediaPlayerBrowseAction,
|
||||
@ -35,6 +35,7 @@ import { showAlertDialog } from "../../dialogs/generic/show-dialog-box";
|
||||
import { installResizeObserver } from "../../panels/lovelace/common/install-resize-observer";
|
||||
import { haStyle } from "../../resources/styles";
|
||||
import type { HomeAssistant } from "../../types";
|
||||
import { documentationUrl } from "../../util/documentation-url";
|
||||
import "../entity/ha-entity-picker";
|
||||
import "../ha-button-menu";
|
||||
import "../ha-card";
|
||||
@ -108,9 +109,11 @@ export class HaMediaPlayerBrowse extends LitElement {
|
||||
text: this._renderError(this._error),
|
||||
});
|
||||
} else {
|
||||
return html`<div class="container">
|
||||
${this._renderError(this._error)}
|
||||
</div>`;
|
||||
return html`
|
||||
<div class="container">
|
||||
${this._renderError(this._error)}
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
@ -235,7 +238,7 @@ export class HaMediaPlayerBrowse extends LitElement {
|
||||
</div>
|
||||
${this._error
|
||||
? html`
|
||||
<div class="container error">
|
||||
<div class="container">
|
||||
${this._renderError(this._error)}
|
||||
</div>
|
||||
`
|
||||
@ -354,7 +357,31 @@ export class HaMediaPlayerBrowse extends LitElement {
|
||||
`
|
||||
: html`
|
||||
<div class="container">
|
||||
${this.hass.localize("ui.components.media-browser.no_items")}
|
||||
${this.hass.localize("ui.components.media-browser.no_items")}<br />
|
||||
|
||||
${currentItem.media_content_id.startsWith(
|
||||
"media-source://media_source/local_source"
|
||||
)
|
||||
? html`${this.hass.localize(
|
||||
"ui.components.media-browser.learn_adding_local_media",
|
||||
"documentation",
|
||||
html`<a
|
||||
href="${documentationUrl(
|
||||
this.hass,
|
||||
"/more-info/local-media/add-media"
|
||||
)}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>${this.hass.localize(
|
||||
"ui.components.media-browser.documentation"
|
||||
)}</a
|
||||
>`
|
||||
)}
|
||||
<br />
|
||||
${this.hass.localize(
|
||||
"ui.components.media-browser.local_media_files"
|
||||
)}.`
|
||||
: ""}
|
||||
</div>
|
||||
`}
|
||||
`;
|
||||
@ -456,7 +483,7 @@ export class HaMediaPlayerBrowse extends LitElement {
|
||||
mediaContentType?: string
|
||||
): Promise<MediaPlayerItem> {
|
||||
const itemData =
|
||||
this.entityId !== BROWSER_SOURCE
|
||||
this.entityId !== BROWSER_PLAYER
|
||||
? await browseMediaPlayer(
|
||||
this.hass,
|
||||
this.entityId,
|
||||
@ -498,29 +525,35 @@ export class HaMediaPlayerBrowse extends LitElement {
|
||||
private _renderError(err: { message: string; code: string }) {
|
||||
if (err.message === "Media directory does not exist.") {
|
||||
return html`
|
||||
<h2>No local media found.</h2>
|
||||
<h2>
|
||||
${this.hass.localize(
|
||||
"ui.components.media-browser.no_local_media_found"
|
||||
)}
|
||||
</h2>
|
||||
<p>
|
||||
It looks like you have not yet created a media directory.
|
||||
<br />Create a directory with the name <b>"media"</b> in the
|
||||
configuration directory of Home Assistant
|
||||
(${this.hass.config.config_dir}). <br />Place your video, audio and
|
||||
image files in this directory to be able to browse and play them in
|
||||
the browser or on supported media players.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Check the
|
||||
<a
|
||||
href="https://www.home-assistant.io/integrations/media_source/#local-media"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>documentation</a
|
||||
>
|
||||
for more info
|
||||
${this.hass.localize("ui.components.media-browser.no_media_folder")}
|
||||
<br />
|
||||
${this.hass.localize(
|
||||
"ui.components.media-browser.setup_local_help",
|
||||
"documentation",
|
||||
html`<a
|
||||
href="${documentationUrl(
|
||||
this.hass,
|
||||
"/more-info/local-media/setup-media"
|
||||
)}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>${this.hass.localize(
|
||||
"ui.components.media-browser.documentation"
|
||||
)}</a
|
||||
>`
|
||||
)}
|
||||
<br />
|
||||
${this.hass.localize("ui.components.media-browser.local_media_files")}
|
||||
</p>
|
||||
`;
|
||||
}
|
||||
return html`<span class="error">err.message</span>`;
|
||||
return html`<span class="error">${err.message}</span>`;
|
||||
}
|
||||
|
||||
static get styles(): CSSResultArray {
|
||||
|
@ -1,23 +1,23 @@
|
||||
import {
|
||||
mdiAccountMusic,
|
||||
mdiAccountMusicOutline,
|
||||
mdiAlbum,
|
||||
mdiApplication,
|
||||
mdiDramaMasks,
|
||||
mdiFileMusic,
|
||||
mdiFolder,
|
||||
mdiGamepadVariant,
|
||||
mdiImage,
|
||||
mdiMovie,
|
||||
mdiMusic,
|
||||
mdiPlaylistMusic,
|
||||
mdiPodcast,
|
||||
mdiTelevisionClassic,
|
||||
mdiVideo,
|
||||
mdiWeb,
|
||||
} from "@mdi/js";
|
||||
import type { HassEntity } from "home-assistant-js-websocket";
|
||||
import type { HomeAssistant } from "../types";
|
||||
import {
|
||||
mdiFolder,
|
||||
mdiPlaylistMusic,
|
||||
mdiFileMusic,
|
||||
mdiAlbum,
|
||||
mdiMusic,
|
||||
mdiTelevisionClassic,
|
||||
mdiMovie,
|
||||
mdiVideo,
|
||||
mdiImage,
|
||||
mdiWeb,
|
||||
mdiGamepadVariant,
|
||||
mdiAccountMusic,
|
||||
mdiPodcast,
|
||||
mdiApplication,
|
||||
mdiAccountMusicOutline,
|
||||
mdiDramaMasks,
|
||||
} from "@mdi/js";
|
||||
|
||||
export const SUPPORT_PAUSE = 1;
|
||||
export const SUPPORT_SEEK = 2;
|
||||
@ -38,7 +38,7 @@ export const CONTRAST_RATIO = 4.5;
|
||||
|
||||
export type MediaPlayerBrowseAction = "pick" | "play";
|
||||
|
||||
export const BROWSER_SOURCE = "browser";
|
||||
export const BROWSER_PLAYER = "browser";
|
||||
|
||||
export type MediaClassBrowserSetting = {
|
||||
icon: string;
|
||||
|
@ -200,7 +200,7 @@ export const weatherSVGStyles = css`
|
||||
fill: var(--weather-icon-sun-color, #fdd93c);
|
||||
}
|
||||
.moon {
|
||||
fill: var(--weather-icon-moon-color, #fdf9cc);
|
||||
fill: var(--weather-icon-moon-color, #fcf497);
|
||||
}
|
||||
.cloud-back {
|
||||
fill: var(--weather-icon-cloud-back-color, #d4d4d4);
|
||||
|
@ -20,6 +20,7 @@ import { LocalizeFunc } from "../../common/translations/localize";
|
||||
import "../../components/ha-icon-next";
|
||||
import { domainToName } from "../../data/integration";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import { documentationUrl } from "../../util/documentation-url";
|
||||
import { FlowConfig } from "./show-dialog-data-entry-flow";
|
||||
import { configFlowContentStyles } from "./styles";
|
||||
|
||||
@ -122,7 +123,7 @@ class StepFlowPickHandler extends LitElement {
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.integrations.note_about_website_reference"
|
||||
)}<a
|
||||
href="https://www.home-assistant.io/integrations/"
|
||||
href="${documentationUrl(this.hass, "/integrations/")}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>${this.hass.localize(
|
||||
|
@ -48,6 +48,7 @@ class MoreInfoCamera extends LitElement {
|
||||
<ha-camera-stream
|
||||
.hass=${this.hass}
|
||||
.stateObj=${this.stateObj}
|
||||
allow-exoplayer
|
||||
controls
|
||||
></ha-camera-stream>
|
||||
${this._cameraPrefs
|
||||
|
@ -32,7 +32,7 @@ class MoreInfoPerson extends LitElement {
|
||||
return html`
|
||||
<ha-attributes
|
||||
.stateObj=${this.stateObj}
|
||||
extraFilters="id,user_id,editable"
|
||||
extra-filters="id,user_id,editable"
|
||||
></ha-attributes>
|
||||
${this.stateObj.attributes.latitude && this.stateObj.attributes.longitude
|
||||
? html`
|
||||
@ -78,6 +78,9 @@ class MoreInfoPerson extends LitElement {
|
||||
margin: 36px 0 8px 0;
|
||||
text-align: right;
|
||||
}
|
||||
ha-map {
|
||||
margin-top: 16px;
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
@ -26,10 +26,8 @@ import { navigate } from "../../common/navigate";
|
||||
import "../../components/ha-dialog";
|
||||
import "../../components/ha-header-bar";
|
||||
import "../../components/ha-svg-icon";
|
||||
import "../../components/state-history-charts";
|
||||
import { removeEntityRegistryEntry } from "../../data/entity_registry";
|
||||
import { showEntityEditorDialog } from "../../panels/config/entities/show-dialog-entity-editor";
|
||||
import "../../panels/logbook/ha-logbook";
|
||||
import { haStyleDialog } from "../../resources/styles";
|
||||
import "../../state-summary/state-card-content";
|
||||
import { HomeAssistant } from "../../types";
|
||||
@ -394,7 +392,9 @@ export class MoreInfoDialog extends LitElement {
|
||||
--dialog-content-padding: 0;
|
||||
}
|
||||
|
||||
state-card-content {
|
||||
state-card-content,
|
||||
ha-more-info-history,
|
||||
ha-more-info-logbook:not(:last-child) {
|
||||
display: block;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
import {
|
||||
css,
|
||||
customElement,
|
||||
html,
|
||||
internalProperty,
|
||||
@ -13,7 +12,6 @@ import { throttle } from "../../common/util/throttle";
|
||||
import "../../components/state-history-charts";
|
||||
import { getRecentWithCache } from "../../data/cached-history";
|
||||
import { HistoryResult } from "../../data/history";
|
||||
import { haStyle } from "../../resources/styles";
|
||||
import { HomeAssistant } from "../../types";
|
||||
|
||||
@customElement("ha-more-info-history")
|
||||
@ -88,18 +86,6 @@ export class MoreInfoHistory extends LitElement {
|
||||
this.hass!.language
|
||||
);
|
||||
}
|
||||
|
||||
static get styles() {
|
||||
return [
|
||||
haStyle,
|
||||
css`
|
||||
state-history-charts {
|
||||
display: block;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
|
@ -152,8 +152,6 @@ export class MoreInfoLogbook extends LitElement {
|
||||
ha-logbook {
|
||||
max-height: 250px;
|
||||
overflow: auto;
|
||||
display: block;
|
||||
margin-top: 16px;
|
||||
}
|
||||
ha-circular-progress {
|
||||
display: flex;
|
||||
|
@ -7,12 +7,13 @@ import {
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
internalProperty,
|
||||
LitElement,
|
||||
property,
|
||||
PropertyValues,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { fireEvent } from "../common/dom/fire_event";
|
||||
import { fireEvent, HASSDomEvent } from "../common/dom/fire_event";
|
||||
import { listenMediaQuery } from "../common/dom/media_query";
|
||||
import { toggleAttribute } from "../common/dom/toggle_attribute";
|
||||
import { showNotificationDrawer } from "../dialogs/notifications/show-notification-drawer";
|
||||
@ -24,10 +25,17 @@ const NON_SWIPABLE_PANELS = ["map"];
|
||||
declare global {
|
||||
// for fire event
|
||||
interface HASSDomEvents {
|
||||
"hass-open-menu": undefined;
|
||||
"hass-toggle-menu": undefined;
|
||||
"hass-edit-sidebar": EditSideBarEvent;
|
||||
"hass-show-notifications": undefined;
|
||||
}
|
||||
interface HTMLElementEventMap {
|
||||
"hass-edit-sidebar": HASSDomEvent<EditSideBarEvent>;
|
||||
}
|
||||
}
|
||||
|
||||
interface EditSideBarEvent {
|
||||
editMode: boolean;
|
||||
}
|
||||
|
||||
@customElement("home-assistant-main")
|
||||
@ -36,7 +44,9 @@ class HomeAssistantMain extends LitElement {
|
||||
|
||||
@property() public route?: Route;
|
||||
|
||||
@property({ type: Boolean }) private narrow?: boolean;
|
||||
@property({ type: Boolean }) public narrow?: boolean;
|
||||
|
||||
@internalProperty() private _sidebarEditMode = false;
|
||||
|
||||
protected render(): TemplateResult {
|
||||
const hass = this.hass;
|
||||
@ -48,7 +58,9 @@ class HomeAssistantMain extends LitElement {
|
||||
const sidebarNarrow = this._sidebarNarrow;
|
||||
|
||||
const disableSwipe =
|
||||
!sidebarNarrow || NON_SWIPABLE_PANELS.indexOf(hass.panelUrl) !== -1;
|
||||
this._sidebarEditMode ||
|
||||
!sidebarNarrow ||
|
||||
NON_SWIPABLE_PANELS.indexOf(hass.panelUrl) !== -1;
|
||||
|
||||
// Style block in render because of the mixin that is not supported
|
||||
return html`
|
||||
@ -76,6 +88,7 @@ class HomeAssistantMain extends LitElement {
|
||||
<ha-sidebar
|
||||
.hass=${hass}
|
||||
.narrow=${sidebarNarrow}
|
||||
.editMode=${this._sidebarEditMode}
|
||||
.alwaysExpand=${sidebarNarrow ||
|
||||
this.hass.dockedSidebar === "docked"}
|
||||
></ha-sidebar>
|
||||
@ -93,18 +106,28 @@ class HomeAssistantMain extends LitElement {
|
||||
protected firstUpdated() {
|
||||
import(/* webpackChunkName: "ha-sidebar" */ "../components/ha-sidebar");
|
||||
|
||||
this.addEventListener("hass-open-menu", () => {
|
||||
if (this._sidebarNarrow) {
|
||||
this.drawer.open();
|
||||
} else {
|
||||
fireEvent(this, "hass-dock-sidebar", {
|
||||
dock: "docked",
|
||||
});
|
||||
setTimeout(() => this.appLayout.resetLayout());
|
||||
this.addEventListener(
|
||||
"hass-edit-sidebar",
|
||||
(ev: HASSDomEvent<EditSideBarEvent>) => {
|
||||
this._sidebarEditMode = ev.detail.editMode;
|
||||
|
||||
if (this._sidebarEditMode) {
|
||||
if (this._sidebarNarrow) {
|
||||
this.drawer.open();
|
||||
} else {
|
||||
fireEvent(this, "hass-dock-sidebar", {
|
||||
dock: "docked",
|
||||
});
|
||||
setTimeout(() => this.appLayout.resetLayout());
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
this.addEventListener("hass-toggle-menu", () => {
|
||||
if (this._sidebarEditMode) {
|
||||
return;
|
||||
}
|
||||
if (this._sidebarNarrow) {
|
||||
if (this.drawer.opened) {
|
||||
this.drawer.close();
|
||||
|
@ -39,6 +39,7 @@ import "../../../layouts/ha-app-layout";
|
||||
import "../../../layouts/hass-tabs-subpage";
|
||||
import { haStyle } from "../../../resources/styles";
|
||||
import { HomeAssistant, Route } from "../../../types";
|
||||
import { documentationUrl } from "../../../util/documentation-url";
|
||||
import "../ha-config-section";
|
||||
import { configSections } from "../ha-panel-config";
|
||||
import "./action/ha-automation-action";
|
||||
@ -159,7 +160,10 @@ export class HaAutomationEditor extends LitElement {
|
||||
"ui.panel.config.automation.editor.modes.description",
|
||||
"documentation_link",
|
||||
html`<a
|
||||
href="https://www.home-assistant.io/integrations/automation/#automation-modes"
|
||||
href="${documentationUrl(
|
||||
this.hass,
|
||||
"/integrations/automation/#automation-modes"
|
||||
)}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>${this.hass.localize(
|
||||
@ -247,7 +251,10 @@ export class HaAutomationEditor extends LitElement {
|
||||
)}
|
||||
</p>
|
||||
<a
|
||||
href="https://home-assistant.io/docs/automation/trigger/"
|
||||
href="${documentationUrl(
|
||||
this.hass,
|
||||
"/docs/automation/trigger/"
|
||||
)}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
@ -276,7 +283,10 @@ export class HaAutomationEditor extends LitElement {
|
||||
)}
|
||||
</p>
|
||||
<a
|
||||
href="https://home-assistant.io/docs/scripts/conditions/"
|
||||
href="${documentationUrl(
|
||||
this.hass,
|
||||
"/docs/scripts/conditions/"
|
||||
)}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
@ -305,7 +315,10 @@ export class HaAutomationEditor extends LitElement {
|
||||
)}
|
||||
</p>
|
||||
<a
|
||||
href="https://home-assistant.io/docs/automation/action/"
|
||||
href="${documentationUrl(
|
||||
this.hass,
|
||||
"/docs/automation/action/"
|
||||
)}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
|
@ -124,6 +124,26 @@ class CloudAlexa extends LitElement {
|
||||
? exposedCards
|
||||
: notExposedCards;
|
||||
|
||||
const iconButton = html`<mwc-icon-button
|
||||
slot="trigger"
|
||||
class=${classMap({
|
||||
exposed: isExposed!,
|
||||
"not-exposed": !isExposed,
|
||||
})}
|
||||
.disabled=${!emptyFilter}
|
||||
.title=${this.hass!.localize("ui.panel.config.cloud.google.expose")}
|
||||
>
|
||||
<ha-svg-icon
|
||||
.path=${config.should_expose !== null
|
||||
? isExposed
|
||||
? mdiCheckboxMarked
|
||||
: mdiCloseBox
|
||||
: isDomainExposed
|
||||
? mdiCheckboxMultipleMarked
|
||||
: mdiCloseBoxMultiple}
|
||||
></ha-svg-icon>
|
||||
</mwc-icon-button>`;
|
||||
|
||||
target.push(html`
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
@ -139,67 +159,50 @@ class CloudAlexa extends LitElement {
|
||||
.map((ifc) => ifc.replace(/(Alexa.|Controller)/g, ""))
|
||||
.join(", ")}
|
||||
</state-info>
|
||||
<ha-button-menu
|
||||
corner="BOTTOM_START"
|
||||
.entityId=${stateObj.entity_id}
|
||||
@action=${this._exposeChanged}
|
||||
>
|
||||
<mwc-icon-button
|
||||
slot="trigger"
|
||||
class=${classMap({
|
||||
exposed: isExposed!,
|
||||
"not-exposed": !isExposed,
|
||||
})}
|
||||
.title=${this.hass!.localize(
|
||||
"ui.panel.config.cloud.alexa.expose"
|
||||
)}
|
||||
>
|
||||
<ha-svg-icon
|
||||
.path=${config.should_expose !== null
|
||||
? isExposed
|
||||
? mdiCheckboxMarked
|
||||
: mdiCloseBox
|
||||
: isDomainExposed
|
||||
? mdiCheckboxMultipleMarked
|
||||
: mdiCloseBoxMultiple}
|
||||
></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
<mwc-list-item hasMeta>
|
||||
${this.hass!.localize(
|
||||
"ui.panel.config.cloud.alexa.expose_entity"
|
||||
)}
|
||||
<ha-svg-icon
|
||||
class="exposed"
|
||||
slot="meta"
|
||||
.path=${mdiCheckboxMarked}
|
||||
></ha-svg-icon>
|
||||
</mwc-list-item>
|
||||
<mwc-list-item hasMeta>
|
||||
${this.hass!.localize(
|
||||
"ui.panel.config.cloud.alexa.dont_expose_entity"
|
||||
)}
|
||||
<ha-svg-icon
|
||||
class="not-exposed"
|
||||
slot="meta"
|
||||
.path=${mdiCloseBox}
|
||||
></ha-svg-icon>
|
||||
</mwc-list-item>
|
||||
<mwc-list-item hasMeta>
|
||||
${this.hass!.localize(
|
||||
"ui.panel.config.cloud.alexa.follow_domain"
|
||||
)}
|
||||
<ha-svg-icon
|
||||
class=${classMap({
|
||||
exposed: isDomainExposed,
|
||||
"not-exposed": !isDomainExposed,
|
||||
})}
|
||||
slot="meta"
|
||||
.path=${isDomainExposed
|
||||
? mdiCheckboxMultipleMarked
|
||||
: mdiCloseBoxMultiple}
|
||||
></ha-svg-icon>
|
||||
</mwc-list-item>
|
||||
</ha-button-menu>
|
||||
${!emptyFilter
|
||||
? html`${iconButton}`
|
||||
: html`<ha-button-menu
|
||||
corner="BOTTOM_START"
|
||||
.entityId=${stateObj.entity_id}
|
||||
@action=${this._exposeChanged}
|
||||
>
|
||||
${iconButton}
|
||||
<mwc-list-item hasMeta>
|
||||
${this.hass!.localize(
|
||||
"ui.panel.config.cloud.google.expose_entity"
|
||||
)}
|
||||
<ha-svg-icon
|
||||
class="exposed"
|
||||
slot="meta"
|
||||
.path=${mdiCheckboxMarked}
|
||||
></ha-svg-icon>
|
||||
</mwc-list-item>
|
||||
<mwc-list-item hasMeta>
|
||||
${this.hass!.localize(
|
||||
"ui.panel.config.cloud.google.dont_expose_entity"
|
||||
)}
|
||||
<ha-svg-icon
|
||||
class="not-exposed"
|
||||
slot="meta"
|
||||
.path=${mdiCloseBox}
|
||||
></ha-svg-icon>
|
||||
</mwc-list-item>
|
||||
<mwc-list-item hasMeta>
|
||||
${this.hass!.localize(
|
||||
"ui.panel.config.cloud.google.follow_domain"
|
||||
)}
|
||||
<ha-svg-icon
|
||||
class=${classMap({
|
||||
exposed: isDomainExposed,
|
||||
"not-exposed": !isDomainExposed,
|
||||
})}
|
||||
slot="meta"
|
||||
.path=${isDomainExposed
|
||||
? mdiCheckboxMultipleMarked
|
||||
: mdiCloseBoxMultiple}
|
||||
></ha-svg-icon>
|
||||
</mwc-list-item>
|
||||
</ha-button-menu>`}
|
||||
</div>
|
||||
</div>
|
||||
</ha-card>
|
||||
|
@ -14,6 +14,7 @@ import type { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialo
|
||||
import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box";
|
||||
import { haStyle } from "../../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../../types";
|
||||
import { documentationUrl } from "../../../../util/documentation-url";
|
||||
import { WebhookDialogParams } from "./show-dialog-manage-cloudhook";
|
||||
|
||||
const inputLabel = "Public URL – Click to copy to clipboard";
|
||||
@ -37,8 +38,11 @@ export class DialogManageCloudhook extends LitElement {
|
||||
const { webhook, cloudhook } = this._params;
|
||||
const docsUrl =
|
||||
webhook.domain === "automation"
|
||||
? "https://www.home-assistant.io/docs/automation/trigger/#webhook-trigger"
|
||||
: `https://www.home-assistant.io/integrations/${webhook.domain}/`;
|
||||
? documentationUrl(
|
||||
this.hass!,
|
||||
"/docs/automation/trigger/#webhook-trigger"
|
||||
)
|
||||
: documentationUrl(this.hass!, `/integrations/${webhook.domain}/`);
|
||||
return html`
|
||||
<ha-paper-dialog with-backdrop>
|
||||
<h2>
|
||||
|
@ -130,6 +130,26 @@ class CloudGoogleAssistant extends LitElement {
|
||||
? exposedCards
|
||||
: notExposedCards;
|
||||
|
||||
const iconButton = html`<mwc-icon-button
|
||||
slot="trigger"
|
||||
class=${classMap({
|
||||
exposed: isExposed!,
|
||||
"not-exposed": !isExposed,
|
||||
})}
|
||||
.disabled=${!emptyFilter}
|
||||
.title=${this.hass!.localize("ui.panel.config.cloud.google.expose")}
|
||||
>
|
||||
<ha-svg-icon
|
||||
.path=${config.should_expose !== null
|
||||
? isExposed
|
||||
? mdiCheckboxMarked
|
||||
: mdiCloseBox
|
||||
: isDomainExposed
|
||||
? mdiCheckboxMultipleMarked
|
||||
: mdiCloseBoxMultiple}
|
||||
></ha-svg-icon>
|
||||
</mwc-icon-button>`;
|
||||
|
||||
target.push(html`
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
@ -144,67 +164,50 @@ class CloudGoogleAssistant extends LitElement {
|
||||
.map((trait) => trait.substr(trait.lastIndexOf(".") + 1))
|
||||
.join(", ")}
|
||||
</state-info>
|
||||
<ha-button-menu
|
||||
corner="BOTTOM_START"
|
||||
.entityId=${stateObj.entity_id}
|
||||
@action=${this._exposeChanged}
|
||||
>
|
||||
<mwc-icon-button
|
||||
slot="trigger"
|
||||
class=${classMap({
|
||||
exposed: isExposed!,
|
||||
"not-exposed": !isExposed,
|
||||
})}
|
||||
.title=${this.hass!.localize(
|
||||
"ui.panel.config.cloud.google.expose"
|
||||
)}
|
||||
>
|
||||
<ha-svg-icon
|
||||
.path=${config.should_expose !== null
|
||||
? isExposed
|
||||
? mdiCheckboxMarked
|
||||
: mdiCloseBox
|
||||
: isDomainExposed
|
||||
? mdiCheckboxMultipleMarked
|
||||
: mdiCloseBoxMultiple}
|
||||
></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
<mwc-list-item hasMeta>
|
||||
${this.hass!.localize(
|
||||
"ui.panel.config.cloud.google.expose_entity"
|
||||
)}
|
||||
<ha-svg-icon
|
||||
class="exposed"
|
||||
slot="meta"
|
||||
.path=${mdiCheckboxMarked}
|
||||
></ha-svg-icon>
|
||||
</mwc-list-item>
|
||||
<mwc-list-item hasMeta>
|
||||
${this.hass!.localize(
|
||||
"ui.panel.config.cloud.google.dont_expose_entity"
|
||||
)}
|
||||
<ha-svg-icon
|
||||
class="not-exposed"
|
||||
slot="meta"
|
||||
.path=${mdiCloseBox}
|
||||
></ha-svg-icon>
|
||||
</mwc-list-item>
|
||||
<mwc-list-item hasMeta>
|
||||
${this.hass!.localize(
|
||||
"ui.panel.config.cloud.google.follow_domain"
|
||||
)}
|
||||
<ha-svg-icon
|
||||
class=${classMap({
|
||||
exposed: isDomainExposed,
|
||||
"not-exposed": !isDomainExposed,
|
||||
})}
|
||||
slot="meta"
|
||||
.path=${isDomainExposed
|
||||
? mdiCheckboxMultipleMarked
|
||||
: mdiCloseBoxMultiple}
|
||||
></ha-svg-icon>
|
||||
</mwc-list-item>
|
||||
</ha-button-menu>
|
||||
${!emptyFilter
|
||||
? html`${iconButton}`
|
||||
: html`<ha-button-menu
|
||||
corner="BOTTOM_START"
|
||||
.entityId=${stateObj.entity_id}
|
||||
@action=${this._exposeChanged}
|
||||
>
|
||||
${iconButton}
|
||||
<mwc-list-item hasMeta>
|
||||
${this.hass!.localize(
|
||||
"ui.panel.config.cloud.google.expose_entity"
|
||||
)}
|
||||
<ha-svg-icon
|
||||
class="exposed"
|
||||
slot="meta"
|
||||
.path=${mdiCheckboxMarked}
|
||||
></ha-svg-icon>
|
||||
</mwc-list-item>
|
||||
<mwc-list-item hasMeta>
|
||||
${this.hass!.localize(
|
||||
"ui.panel.config.cloud.google.dont_expose_entity"
|
||||
)}
|
||||
<ha-svg-icon
|
||||
class="not-exposed"
|
||||
slot="meta"
|
||||
.path=${mdiCloseBox}
|
||||
></ha-svg-icon>
|
||||
</mwc-list-item>
|
||||
<mwc-list-item hasMeta>
|
||||
${this.hass!.localize(
|
||||
"ui.panel.config.cloud.google.follow_domain"
|
||||
)}
|
||||
<ha-svg-icon
|
||||
class=${classMap({
|
||||
exposed: isDomainExposed,
|
||||
"not-exposed": !isDomainExposed,
|
||||
})}
|
||||
slot="meta"
|
||||
.path=${isDomainExposed
|
||||
? mdiCheckboxMultipleMarked
|
||||
: mdiCloseBoxMultiple}
|
||||
></ha-svg-icon>
|
||||
</mwc-list-item>
|
||||
</ha-button-menu>`}
|
||||
</div>
|
||||
${entity.might_2fa
|
||||
? html`
|
||||
|
@ -8,6 +8,7 @@ import "../../../../layouts/hass-subpage";
|
||||
import { EventsMixin } from "../../../../mixins/events-mixin";
|
||||
import LocalizeMixin from "../../../../mixins/localize-mixin";
|
||||
import "../../../../styles/polymer-ha-style";
|
||||
import { documentationUrl } from "../../../../util/documentation-url";
|
||||
import "../../ha-config-section";
|
||||
|
||||
/*
|
||||
@ -70,8 +71,8 @@ class CloudRegister extends LocalizeMixin(EventsMixin(PolymerElement)) {
|
||||
<p>
|
||||
[[localize('ui.panel.config.cloud.register.information4')]]
|
||||
</p><ul>
|
||||
<li><a href="https://home-assistant.io/tos/" target="_blank" rel="noreferrer">[[localize('ui.panel.config.cloud.register.link_terms_conditions')]]</a></li>
|
||||
<li><a href="https://home-assistant.io/privacy/" target="_blank" rel="noreferrer">[[localize('ui.panel.config.cloud.register.link_privacy_policy')]]</a></li>
|
||||
<li><a href="[[_computeDocumentationUrlTos(hass)]]" target="_blank" rel="noreferrer">[[localize('ui.panel.config.cloud.register.link_terms_conditions')]]</a></li>
|
||||
<li><a href="[[_computeDocumentationUrlPrivacy(hass)]]" target="_blank" rel="noreferrer">[[localize('ui.panel.config.cloud.register.link_privacy_policy')]]</a></li>
|
||||
</ul>
|
||||
</p>
|
||||
</div>
|
||||
@ -137,6 +138,14 @@ class CloudRegister extends LocalizeMixin(EventsMixin(PolymerElement)) {
|
||||
}
|
||||
}
|
||||
|
||||
_computeDocumentationUrlTos(hass) {
|
||||
return documentationUrl(hass, "/tos/");
|
||||
}
|
||||
|
||||
_computeDocumentationUrlPrivacy(hass) {
|
||||
return documentationUrl(hass, "/privacy/");
|
||||
}
|
||||
|
||||
_handleRegister() {
|
||||
let invalid = false;
|
||||
|
||||
|
@ -6,10 +6,11 @@ import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
import { computeStateDomain } from "../../../common/entity/compute_state_domain";
|
||||
import LocalizeMixin from "../../../mixins/localize-mixin";
|
||||
import hassAttributeUtil from "../../../util/hass-attributes-util";
|
||||
import "./ha-form-customize-attributes";
|
||||
import "../ha-form-style";
|
||||
import "../../../styles/polymer-ha-style";
|
||||
import { documentationUrl } from "../../../util/documentation-url";
|
||||
import hassAttributeUtil from "../../../util/hass-attributes-util";
|
||||
import "../ha-form-style";
|
||||
import "./ha-form-customize-attributes";
|
||||
|
||||
class HaFormCustomize extends LocalizeMixin(PolymerElement) {
|
||||
static get template() {
|
||||
@ -30,7 +31,7 @@ class HaFormCustomize extends LocalizeMixin(PolymerElement) {
|
||||
<div class="warning">
|
||||
[[localize('ui.panel.config.customize.warning.include_sentence')]]
|
||||
<a
|
||||
href="https://www.home-assistant.io/docs/configuration/customizing-devices/#customization-using-the-ui"
|
||||
href="[[_computeDocumentationUrl(hass)]]"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>[[localize('ui.panel.config.customize.warning.include_link')]]</a
|
||||
@ -210,6 +211,13 @@ class HaFormCustomize extends LocalizeMixin(PolymerElement) {
|
||||
);
|
||||
}
|
||||
|
||||
_computeDocumentationUrl(hass) {
|
||||
return documentationUrl(
|
||||
hass,
|
||||
"/docs/configuration/customizing-devices/#customization-using-the-ui"
|
||||
);
|
||||
}
|
||||
|
||||
computeLocalAttributes(localConfig) {
|
||||
if (!localConfig) return [];
|
||||
const localKeys = Object.keys(localConfig);
|
||||
|
@ -6,9 +6,9 @@ import {
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
internalProperty,
|
||||
LitElement,
|
||||
property,
|
||||
internalProperty,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||
@ -48,12 +48,12 @@ class HaInputNumberForm extends LitElement {
|
||||
this._max = item.max ?? 100;
|
||||
this._min = item.min ?? 0;
|
||||
this._mode = item.mode || "slider";
|
||||
this._step = item.step || 1;
|
||||
this._step = item.step ?? 1;
|
||||
this._unit_of_measurement = item.unit_of_measurement;
|
||||
} else {
|
||||
this._item = {
|
||||
min: 0,
|
||||
max: 0,
|
||||
max: 100,
|
||||
};
|
||||
this._name = "";
|
||||
this._icon = "";
|
||||
@ -176,8 +176,10 @@ class HaInputNumberForm extends LitElement {
|
||||
return;
|
||||
}
|
||||
ev.stopPropagation();
|
||||
const configValue = (ev.target as any).configValue;
|
||||
const value = ev.detail.value;
|
||||
const target = ev.target as any;
|
||||
const configValue = target.configValue;
|
||||
const value =
|
||||
target.type === "number" ? Number(ev.detail.value) : ev.detail.value;
|
||||
if (this[`_${configValue}`] === value) {
|
||||
return;
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ import "./integrations-card";
|
||||
import "./system-health-card";
|
||||
import { configSections } from "../ha-panel-config";
|
||||
import "../../../layouts/hass-tabs-subpage";
|
||||
import { documentationUrl } from "../../../util/documentation-url";
|
||||
|
||||
const JS_TYPE = __BUILD__;
|
||||
const JS_VERSION = __VERSION__;
|
||||
@ -42,7 +43,7 @@ class HaConfigInfo extends LitElement {
|
||||
>
|
||||
<div class="about">
|
||||
<a
|
||||
href="https://www.home-assistant.io"
|
||||
href="${documentationUrl(this.hass, "")}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
><img
|
||||
@ -63,7 +64,7 @@ class HaConfigInfo extends LitElement {
|
||||
</p>
|
||||
<p class="develop">
|
||||
<a
|
||||
href="https://www.home-assistant.io/developers/credits/"
|
||||
href="${documentationUrl(this.hass, "/developers/credits/")}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
|
@ -159,11 +159,13 @@ class OZWNetworkDashboard extends LitElement {
|
||||
}
|
||||
|
||||
private _generateServiceButton(service: string) {
|
||||
const serviceData = { instance_id: this.ozwInstance };
|
||||
return html`
|
||||
<ha-call-service-button
|
||||
.hass=${this.hass}
|
||||
domain="ozw"
|
||||
.service=${service}
|
||||
.serviceData=${serviceData}
|
||||
>
|
||||
${this.hass!.localize(`ui.panel.config.ozw.services.${service}`)}
|
||||
</ha-call-service-button>
|
||||
|
@ -1,20 +1,20 @@
|
||||
import "../../../../../components/ha-icon-button";
|
||||
import "../../../../../components/ha-circular-progress";
|
||||
import { UnsubscribeFunc } from "home-assistant-js-websocket";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
internalProperty,
|
||||
LitElement,
|
||||
property,
|
||||
internalProperty,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import "../../../../../components/buttons/ha-call-api-button";
|
||||
import "../../../../../components/buttons/ha-call-service-button";
|
||||
import "../../../../../components/ha-card";
|
||||
import "../../../../../components/ha-circular-progress";
|
||||
import "../../../../../components/ha-icon";
|
||||
import "../../../../../components/ha-icon-button";
|
||||
import "../../../../../components/ha-service-description";
|
||||
import {
|
||||
fetchNetworkStatus,
|
||||
@ -26,6 +26,7 @@ import {
|
||||
} from "../../../../../data/zwave";
|
||||
import { haStyle } from "../../../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../../../types";
|
||||
import { documentationUrl } from "../../../../../util/documentation-url";
|
||||
import "../../../ha-config-section";
|
||||
|
||||
@customElement("zwave-network")
|
||||
@ -71,7 +72,10 @@ export class ZwaveNetwork extends LitElement {
|
||||
)}
|
||||
<p>
|
||||
<a
|
||||
href="https://www.home-assistant.io/docs/z-wave/control-panel/"
|
||||
href="${documentationUrl(
|
||||
this.hass,
|
||||
"/docs/z-wave/control-panel/"
|
||||
)}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
|
@ -1,14 +1,21 @@
|
||||
import "@material/mwc-icon-button/mwc-icon-button";
|
||||
import { mdiContentCopy } from "@mdi/js";
|
||||
import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable";
|
||||
import "@polymer/paper-tooltip/paper-tooltip";
|
||||
import type { PaperTooltipElement } from "@polymer/paper-tooltip/paper-tooltip";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
html,
|
||||
internalProperty,
|
||||
LitElement,
|
||||
property,
|
||||
internalProperty,
|
||||
query,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import "../../../components/dialog/ha-paper-dialog";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import {
|
||||
domainToName,
|
||||
fetchIntegrationManifest,
|
||||
@ -16,12 +23,11 @@ import {
|
||||
IntegrationManifest,
|
||||
} from "../../../data/integration";
|
||||
import { getLoggedErrorIntegration } from "../../../data/system_log";
|
||||
import { PolymerChangedEvent } from "../../../polymer-types";
|
||||
import type { PolymerChangedEvent } from "../../../polymer-types";
|
||||
import { haStyleDialog } from "../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import { SystemLogDetailDialogParams } from "./show-dialog-system-log-detail";
|
||||
import type { HomeAssistant } from "../../../types";
|
||||
import type { SystemLogDetailDialogParams } from "./show-dialog-system-log-detail";
|
||||
import { formatSystemLogTime } from "./util";
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
|
||||
class DialogSystemLogDetail extends LitElement {
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
@ -30,6 +36,8 @@ class DialogSystemLogDetail extends LitElement {
|
||||
|
||||
@internalProperty() private _manifest?: IntegrationManifest;
|
||||
|
||||
@query("paper-tooltip") private _toolTip?: PaperTooltipElement;
|
||||
|
||||
public async showDialog(params: SystemLogDetailDialogParams): Promise<void> {
|
||||
this._params = params;
|
||||
this._manifest = undefined;
|
||||
@ -66,13 +74,25 @@ class DialogSystemLogDetail extends LitElement {
|
||||
opened
|
||||
@opened-changed="${this._openedChanged}"
|
||||
>
|
||||
<h2>
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.logs.details",
|
||||
"level",
|
||||
item.level
|
||||
)}
|
||||
</h2>
|
||||
<div class="heading">
|
||||
<h2>
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.logs.details",
|
||||
"level",
|
||||
item.level
|
||||
)}
|
||||
</h2>
|
||||
<mwc-icon-button id="copy" @click=${this._copyLog}>
|
||||
<ha-svg-icon .path=${mdiContentCopy}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
<paper-tooltip
|
||||
manual-mode
|
||||
for="copy"
|
||||
position="top"
|
||||
animation-delay="0"
|
||||
>${this.hass.localize("ui.common.copied")}</paper-tooltip
|
||||
>
|
||||
</div>
|
||||
<paper-dialog-scrollable>
|
||||
<p>
|
||||
Logger: ${item.name}<br />
|
||||
@ -148,6 +168,25 @@ class DialogSystemLogDetail extends LitElement {
|
||||
}
|
||||
}
|
||||
|
||||
private _copyLog(): void {
|
||||
const copyElement = this.shadowRoot?.querySelector(
|
||||
"paper-dialog-scrollable"
|
||||
) as HTMLElement;
|
||||
|
||||
const selection = window.getSelection()!;
|
||||
const range = document.createRange();
|
||||
|
||||
range.selectNodeContents(copyElement);
|
||||
selection.removeAllRanges();
|
||||
selection.addRange(range);
|
||||
|
||||
document.execCommand("copy");
|
||||
window.getSelection()!.removeAllRanges();
|
||||
|
||||
this._toolTip!.show();
|
||||
setTimeout(() => this._toolTip?.hide(), 3000);
|
||||
}
|
||||
|
||||
static get styles(): CSSResult[] {
|
||||
return [
|
||||
haStyleDialog,
|
||||
@ -164,6 +203,15 @@ class DialogSystemLogDetail extends LitElement {
|
||||
pre {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.heading {
|
||||
display: flex;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.heading ha-svg-icon {
|
||||
cursor: pointer;
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
|
@ -4,23 +4,24 @@ import {
|
||||
css,
|
||||
CSSResult,
|
||||
html,
|
||||
internalProperty,
|
||||
LitElement,
|
||||
property,
|
||||
internalProperty,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import memoizeOne from "memoize-one";
|
||||
import "../../../components/ha-picture-upload";
|
||||
import type { HaPictureUpload } from "../../../components/ha-picture-upload";
|
||||
import "../../../components/entity/ha-entities-picker";
|
||||
import { createCloseHeading } from "../../../components/ha-dialog";
|
||||
import "../../../components/ha-picture-upload";
|
||||
import type { HaPictureUpload } from "../../../components/ha-picture-upload";
|
||||
import "../../../components/user/ha-user-picker";
|
||||
import { PersonMutableParams } from "../../../data/person";
|
||||
import { CropOptions } from "../../../dialogs/image-cropper-dialog/show-image-cropper-dialog";
|
||||
import { PolymerChangedEvent } from "../../../polymer-types";
|
||||
import { haStyleDialog } from "../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import { documentationUrl } from "../../../util/documentation-url";
|
||||
import { PersonDetailDialogParams } from "./show-dialog-person-detail";
|
||||
import { CropOptions } from "../../../dialogs/image-cropper-dialog/show-image-cropper-dialog";
|
||||
|
||||
const includeDomains = ["device_tracker"];
|
||||
|
||||
@ -153,7 +154,10 @@ class DialogPersonDetail extends LitElement {
|
||||
<ul>
|
||||
<li>
|
||||
<a
|
||||
href="https://www.home-assistant.io/integrations/#presence-detection"
|
||||
href="${documentationUrl(
|
||||
this.hass,
|
||||
"/integrations/#presence-detection"
|
||||
)}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>${this.hass!.localize(
|
||||
|
@ -25,6 +25,7 @@ import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box";
|
||||
import "../../../layouts/hass-tabs-subpage-data-table";
|
||||
import { haStyle } from "../../../resources/styles";
|
||||
import { HomeAssistant, Route } from "../../../types";
|
||||
import { documentationUrl } from "../../../util/documentation-url";
|
||||
import { showToast } from "../../../util/toast";
|
||||
import { configSections } from "../ha-panel-config";
|
||||
|
||||
@ -191,7 +192,7 @@ class HaSceneDashboard extends LitElement {
|
||||
${this.hass.localize("ui.panel.config.scene.picker.introduction")}
|
||||
<p>
|
||||
<a
|
||||
href="https://home-assistant.io/docs/scene/editor/"
|
||||
href="${documentationUrl(this.hass, "/docs/scene/editor/")}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
|
@ -1,44 +1,47 @@
|
||||
import "@material/mwc-fab";
|
||||
import { mdiContentSave } from "@mdi/js";
|
||||
import "@polymer/app-layout/app-header/app-header";
|
||||
import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light";
|
||||
import "@polymer/app-layout/app-toolbar/app-toolbar";
|
||||
import "../../../components/ha-icon-button";
|
||||
import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light";
|
||||
import { PaperListboxElement } from "@polymer/paper-listbox";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
html,
|
||||
internalProperty,
|
||||
LitElement,
|
||||
property,
|
||||
internalProperty,
|
||||
PropertyValues,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { classMap } from "lit-html/directives/class-map";
|
||||
import { computeObjectId } from "../../../common/entity/compute_object_id";
|
||||
import { navigate } from "../../../common/navigate";
|
||||
import { slugify } from "../../../common/string/slugify";
|
||||
import { computeRTL } from "../../../common/util/compute_rtl";
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/ha-icon-button";
|
||||
import "../../../components/ha-icon-input";
|
||||
import "@material/mwc-fab";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import {
|
||||
Action,
|
||||
deleteScript,
|
||||
getScriptEditorInitData,
|
||||
ScriptConfig,
|
||||
MODES,
|
||||
MODES_MAX,
|
||||
ScriptConfig,
|
||||
triggerScript,
|
||||
} from "../../../data/script";
|
||||
import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box";
|
||||
import "../../../layouts/ha-app-layout";
|
||||
import { haStyle } from "../../../resources/styles";
|
||||
import { HomeAssistant, Route } from "../../../types";
|
||||
import { documentationUrl } from "../../../util/documentation-url";
|
||||
import { showToast } from "../../../util/toast";
|
||||
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";
|
||||
import { PaperListboxElement } from "@polymer/paper-listbox";
|
||||
import { slugify } from "../../../common/string/slugify";
|
||||
|
||||
export class HaScriptEditor extends LitElement {
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
@ -146,7 +149,10 @@ export class HaScriptEditor extends LitElement {
|
||||
"ui.panel.config.script.editor.modes.description",
|
||||
"documentation_link",
|
||||
html`<a
|
||||
href="https://www.home-assistant.io/integrations/script/#script-modes"
|
||||
href="${documentationUrl(
|
||||
this.hass,
|
||||
"/integrations/script/#script-modes"
|
||||
)}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>${this.hass.localize(
|
||||
@ -193,6 +199,24 @@ export class HaScriptEditor extends LitElement {
|
||||
</paper-input>`
|
||||
: html``}
|
||||
</div>
|
||||
${this.scriptEntityId
|
||||
? html`
|
||||
<div
|
||||
class="card-actions layout horizontal justified center"
|
||||
>
|
||||
<span></span>
|
||||
<mwc-button
|
||||
@click=${this._runScript}
|
||||
title="${this.hass.localize(
|
||||
"ui.panel.config.script.picker.activate_script"
|
||||
)}"
|
||||
?disabled=${this._dirty}
|
||||
>
|
||||
${this.hass.localize("ui.card.script.execute")}
|
||||
</mwc-button>
|
||||
</div>
|
||||
`
|
||||
: ``}
|
||||
</ha-card>
|
||||
</ha-config-section>
|
||||
|
||||
@ -209,7 +233,7 @@ export class HaScriptEditor extends LitElement {
|
||||
)}
|
||||
</p>
|
||||
<a
|
||||
href="https://home-assistant.io/docs/scripts/"
|
||||
href="${documentationUrl(this.hass, "/docs/scripts/")}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
@ -301,6 +325,18 @@ export class HaScriptEditor extends LitElement {
|
||||
}
|
||||
}
|
||||
|
||||
private async _runScript(ev) {
|
||||
ev.stopPropagation();
|
||||
await triggerScript(this.hass, this.scriptEntityId);
|
||||
showToast(this, {
|
||||
message: this.hass.localize(
|
||||
"ui.notification_toast.triggered",
|
||||
"name",
|
||||
this._config!.alias
|
||||
),
|
||||
});
|
||||
}
|
||||
|
||||
private _modeChanged(ev: CustomEvent) {
|
||||
const mode = ((ev.target as PaperListboxElement)?.selectedItem as any)
|
||||
?.mode;
|
||||
|
@ -25,6 +25,7 @@ import { configSections } from "../ha-panel-config";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
import { stateIcon } from "../../../common/entity/state_icon";
|
||||
import { documentationUrl } from "../../../util/documentation-url";
|
||||
|
||||
@customElement("ha-script-picker")
|
||||
class HaScriptPicker extends LitElement {
|
||||
@ -187,7 +188,7 @@ class HaScriptPicker extends LitElement {
|
||||
${this.hass.localize("ui.panel.config.script.picker.introduction")}
|
||||
<p>
|
||||
<a
|
||||
href="https://home-assistant.io/docs/scripts/editor/"
|
||||
href="${documentationUrl(this.hass, "/docs/scripts/editor/")}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
|
@ -9,6 +9,7 @@ import "../../../components/ha-code-editor";
|
||||
import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box";
|
||||
import { EventsMixin } from "../../../mixins/events-mixin";
|
||||
import LocalizeMixin from "../../../mixins/localize-mixin";
|
||||
import { documentationUrl } from "../../../util/documentation-url";
|
||||
import "../../../styles/polymer-ha-style";
|
||||
import "./event-subscribe-card";
|
||||
import "./events-list";
|
||||
@ -61,7 +62,7 @@ class HaPanelDevEvent extends EventsMixin(LocalizeMixin(PolymerElement)) {
|
||||
<p>
|
||||
[[localize( 'ui.panel.developer-tools.tabs.events.description' )]]
|
||||
<a
|
||||
href="https://www.home-assistant.io/docs/configuration/events/"
|
||||
href="[[_computeDocumentationUrl(hass)]]"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
@ -149,6 +150,10 @@ class HaPanelDevEvent extends EventsMixin(LocalizeMixin(PolymerElement)) {
|
||||
}
|
||||
}
|
||||
|
||||
_computeDocumentationUrl(hass) {
|
||||
return documentationUrl(hass, "/docs/configuration/events/");
|
||||
}
|
||||
|
||||
_computeValidJSON(parsedJSON) {
|
||||
return parsedJSON !== ERROR_SENTINEL;
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ import {
|
||||
} from "../../../data/ws-templates";
|
||||
import { haStyle } from "../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import { documentationUrl } from "../../../util/documentation-url";
|
||||
|
||||
const DEMO_TEMPLATE = `{## Imitate available variables: ##}
|
||||
{% set my_test_json = {
|
||||
@ -107,7 +108,10 @@ class HaPanelDevTemplate extends LitElement {
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://home-assistant.io/docs/configuration/templating/"
|
||||
href="${documentationUrl(
|
||||
this.hass,
|
||||
"/docs/configuration/templating/"
|
||||
)}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
|
@ -285,7 +285,7 @@ class HaLogbook extends LitElement {
|
||||
.narrow .entry {
|
||||
flex-direction: column;
|
||||
line-height: 1.5;
|
||||
padding: 8px;
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
.narrow .icon-message ha-icon {
|
||||
|
@ -63,6 +63,9 @@ export class HuiButtonCard extends LitElement implements LovelaceCard {
|
||||
|
||||
return {
|
||||
type: "button",
|
||||
tap_action: {
|
||||
action: "toggle",
|
||||
},
|
||||
entity: foundEntities[0] || "",
|
||||
};
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard {
|
||||
["light", "switch", "sensor"]
|
||||
);
|
||||
|
||||
return { type: "entities", title: "My Title", entities: foundEntities };
|
||||
return { type: "entities", entities: foundEntities };
|
||||
}
|
||||
|
||||
@internalProperty() private _config?: EntitiesCardConfig;
|
||||
|
@ -43,8 +43,8 @@ export class HuiErrorCard extends LitElement implements LovelaceCard {
|
||||
return css`
|
||||
:host {
|
||||
display: block;
|
||||
background-color: #ef5350;
|
||||
color: white;
|
||||
background-color: var(--error-color);
|
||||
color: var(--color-on-error, white);
|
||||
padding: 8px;
|
||||
font-weight: 500;
|
||||
user-select: text;
|
||||
|
@ -115,7 +115,10 @@ export class HuiDialogEditCard extends LitElement implements HassDialog {
|
||||
const oldConfig = changedProps.get("_cardConfig") as LovelaceCardConfig;
|
||||
|
||||
if (oldConfig?.type !== this._cardConfig!.type) {
|
||||
this._documentationURL = getCardDocumentationURL(this._cardConfig!.type);
|
||||
this._documentationURL = getCardDocumentationURL(
|
||||
this.hass,
|
||||
this._cardConfig!.type
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,14 +1,17 @@
|
||||
import {
|
||||
getCustomCardEntry,
|
||||
CUSTOM_TYPE_PREFIX,
|
||||
getCustomCardEntry,
|
||||
} from "../../../data/lovelace_custom_cards";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import { documentationUrl } from "../../../util/documentation-url";
|
||||
|
||||
const coreDocumentationURLBase = "https://www.home-assistant.io/lovelace/";
|
||||
|
||||
export const getCardDocumentationURL = (type: string): string | undefined => {
|
||||
export const getCardDocumentationURL = (
|
||||
hass: HomeAssistant,
|
||||
type: string
|
||||
): string | undefined => {
|
||||
if (type.startsWith(CUSTOM_TYPE_PREFIX)) {
|
||||
return getCustomCardEntry(type)?.documentationURL;
|
||||
}
|
||||
|
||||
return `${coreDocumentationURLBase}${type}`;
|
||||
return `${documentationUrl(hass, "/lovelace/")}${type}`;
|
||||
};
|
||||
|
@ -1,33 +1,32 @@
|
||||
import "@material/mwc-button";
|
||||
import "@material/mwc-icon-button/mwc-icon-button";
|
||||
import { mdiHelpCircle } from "@mdi/js";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
internalProperty,
|
||||
LitElement,
|
||||
property,
|
||||
internalProperty,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { mdiHelpCircle } from "@mdi/js";
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { computeRTLDirection } from "../../../common/util/compute_rtl";
|
||||
import "../../../components/ha-circular-progress";
|
||||
import "../../../components/ha-dialog";
|
||||
import "../../../components/ha-formfield";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import "../../../components/ha-switch";
|
||||
import "../../../components/ha-yaml-editor";
|
||||
import type { HassDialog } from "../../../dialogs/make-dialog-manager";
|
||||
import { haStyleDialog } from "../../../resources/styles";
|
||||
import type { HomeAssistant } from "../../../types";
|
||||
import { documentationUrl } from "../../../util/documentation-url";
|
||||
import type { SaveDialogParams } from "./show-save-config-dialog";
|
||||
import { computeRTLDirection } from "../../../common/util/compute_rtl";
|
||||
import type { HassDialog } from "../../../dialogs/make-dialog-manager";
|
||||
import "../../../components/ha-switch";
|
||||
import "../../../components/ha-formfield";
|
||||
import "../../../components/ha-yaml-editor";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import "../../../components/ha-dialog";
|
||||
import "../../../components/ha-circular-progress";
|
||||
|
||||
const EMPTY_CONFIG = { views: [] };
|
||||
|
||||
const coreDocumentationURLBase = "https://www.home-assistant.io/lovelace/";
|
||||
|
||||
@customElement("hui-dialog-save-config")
|
||||
export class HuiSaveConfig extends LitElement implements HassDialog {
|
||||
@property({ attribute: false }) public hass?: HomeAssistant;
|
||||
@ -68,7 +67,7 @@ export class HuiSaveConfig extends LitElement implements HassDialog {
|
||||
"ui.panel.lovelace.editor.save_config.header"
|
||||
)}<a
|
||||
class="header_button"
|
||||
href=${coreDocumentationURLBase}
|
||||
href=${documentationUrl(this.hass!, "/lovelace/")}
|
||||
title=${this.hass!.localize("ui.panel.lovelace.menu.help")}
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
|
@ -53,6 +53,7 @@ import { showVoiceCommandDialog } from "../../dialogs/voice-command-dialog/show-
|
||||
import "../../layouts/ha-app-layout";
|
||||
import { haStyle } from "../../resources/styles";
|
||||
import type { HomeAssistant } from "../../types";
|
||||
import { documentationUrl } from "../../util/documentation-url";
|
||||
import { swapView } from "./editor/config-util";
|
||||
import { showEditLovelaceDialog } from "./editor/lovelace-editor/show-edit-lovelace-dialog";
|
||||
import { showEditViewDialog } from "./editor/view-editor/show-edit-view-dialog";
|
||||
@ -136,7 +137,7 @@ class HUIRoot extends LitElement {
|
||||
</mwc-icon-button>
|
||||
</div>
|
||||
<a
|
||||
href="https://www.home-assistant.io/lovelace/"
|
||||
href="${documentationUrl(this.hass, "/lovelace/")}"
|
||||
rel="noreferrer"
|
||||
class="menu-link"
|
||||
target="_blank"
|
||||
@ -266,7 +267,7 @@ class HUIRoot extends LitElement {
|
||||
`
|
||||
: ""}
|
||||
<a
|
||||
href="https://www.home-assistant.io/lovelace/"
|
||||
href="${documentationUrl(this.hass, "/lovelace/")}"
|
||||
rel="noreferrer"
|
||||
class="menu-link"
|
||||
target="_blank"
|
||||
|
@ -17,7 +17,7 @@ import { supportsFeature } from "../../common/entity/supports-feature";
|
||||
import "../../components/ha-menu-button";
|
||||
import "../../components/media-player/ha-media-player-browse";
|
||||
import {
|
||||
BROWSER_SOURCE,
|
||||
BROWSER_PLAYER,
|
||||
MediaPickedEvent,
|
||||
SUPPORT_BROWSE_MEDIA,
|
||||
} from "../../data/media-player";
|
||||
@ -36,7 +36,7 @@ class PanelMediaBrowser extends LitElement {
|
||||
|
||||
// @ts-ignore
|
||||
@LocalStorage("mediaBrowseEntityId", true)
|
||||
private _entityId = BROWSER_SOURCE;
|
||||
private _entityId = BROWSER_PLAYER;
|
||||
|
||||
protected render(): TemplateResult {
|
||||
const stateObj = this._entityId
|
||||
@ -44,7 +44,7 @@ class PanelMediaBrowser extends LitElement {
|
||||
: undefined;
|
||||
|
||||
const title =
|
||||
this._entityId === BROWSER_SOURCE
|
||||
this._entityId === BROWSER_PLAYER
|
||||
? `${this.hass.localize("ui.components.media-browser.web-browser")}`
|
||||
: stateObj?.attributes.friendly_name
|
||||
? `${stateObj?.attributes.friendly_name}`
|
||||
@ -64,7 +64,7 @@ class PanelMediaBrowser extends LitElement {
|
||||
"ui.components.media-browser.media-player-browser"
|
||||
)}
|
||||
</div>
|
||||
<div class="secondary">${title || ""}</div>
|
||||
<div class="secondary-text">${title || ""}</div>
|
||||
</div>
|
||||
<mwc-button @click=${this._showSelectMediaPlayerDialog}>
|
||||
${this.hass.localize("ui.components.media-browser.choose_player")}
|
||||
@ -95,7 +95,7 @@ class PanelMediaBrowser extends LitElement {
|
||||
ev: HASSDomEvent<MediaPickedEvent>
|
||||
): Promise<void> {
|
||||
const item = ev.detail.item;
|
||||
if (this._entityId === BROWSER_SOURCE) {
|
||||
if (this._entityId === BROWSER_PLAYER) {
|
||||
const resolvedUrl: any = await this.hass.callWS({
|
||||
type: "media_source/resolve_media",
|
||||
media_content_id: item.media_content_id,
|
||||
@ -146,8 +146,7 @@ class PanelMediaBrowser extends LitElement {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.heading .secondary {
|
||||
color: var(--secondary-text-color);
|
||||
.heading .secondary-text {
|
||||
font-size: 14px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
@ -1,3 +1,5 @@
|
||||
import "@material/mwc-list/mwc-list";
|
||||
import "@material/mwc-list/mwc-list-item";
|
||||
import "@polymer/paper-item/paper-item";
|
||||
import "@polymer/paper-listbox/paper-listbox";
|
||||
import {
|
||||
@ -13,7 +15,8 @@ import { fireEvent } from "../../common/dom/fire_event";
|
||||
import { computeStateName } from "../../common/entity/compute_state_name";
|
||||
import { compare } from "../../common/string/compare";
|
||||
import { createCloseHeading } from "../../components/ha-dialog";
|
||||
import { BROWSER_SOURCE } from "../../data/media-player";
|
||||
import { UNAVAILABLE_STATES } from "../../data/entity";
|
||||
import { BROWSER_PLAYER } from "../../data/media-player";
|
||||
import { haStyleDialog } from "../../resources/styles";
|
||||
import type { HomeAssistant } from "../../types";
|
||||
import type { SelectMediaPlayerDialogParams } from "./show-select-media-source-dialog";
|
||||
@ -49,30 +52,31 @@ export class HuiDialogSelectMediaPlayer extends LitElement {
|
||||
)}
|
||||
@closed=${this.closeDialog}
|
||||
>
|
||||
<paper-listbox
|
||||
attr-for-selected="itemName"
|
||||
@iron-select=${this._selectSource}
|
||||
><paper-item .itemName=${BROWSER_SOURCE}
|
||||
<mwc-list>
|
||||
<mwc-list-item .player=${BROWSER_PLAYER} @click=${this._selectPlayer}
|
||||
>${this.hass.localize(
|
||||
"ui.components.media-browser.web-browser"
|
||||
)}</paper-item
|
||||
)}</mwc-list-item
|
||||
>
|
||||
${this._params.mediaSources
|
||||
.sort((a, b) => compare(computeStateName(a), computeStateName(b)))
|
||||
.map(
|
||||
(source) => html`
|
||||
<paper-item .itemName=${source.entity_id}
|
||||
>${computeStateName(source)}</paper-item
|
||||
<mwc-list-item
|
||||
.disabled=${UNAVAILABLE_STATES.includes(source.state)}
|
||||
.player=${source.entity_id}
|
||||
@click=${this._selectPlayer}
|
||||
>${computeStateName(source)}</mwc-list-item
|
||||
>
|
||||
`
|
||||
)}
|
||||
</paper-listbox>
|
||||
</mwc-list>
|
||||
</ha-dialog>
|
||||
`;
|
||||
}
|
||||
|
||||
private _selectSource(ev: CustomEvent): void {
|
||||
const entityId = ev.detail.item.itemName;
|
||||
private _selectPlayer(ev: CustomEvent): void {
|
||||
const entityId = (ev.currentTarget as any).player;
|
||||
this._params!.sourceSelectedCallback(entityId);
|
||||
this.closeDialog();
|
||||
}
|
||||
@ -84,8 +88,8 @@ export class HuiDialogSelectMediaPlayer extends LitElement {
|
||||
ha-dialog {
|
||||
--dialog-content-padding: 0 24px 20px;
|
||||
}
|
||||
paper-item {
|
||||
cursor: pointer;
|
||||
mwc-list-item[disabled] {
|
||||
--mdc-theme-text-primary-on-background: var(--disabled-text-color);
|
||||
}
|
||||
`,
|
||||
];
|
||||
|
@ -1,4 +1,5 @@
|
||||
import "@material/mwc-button/mwc-button";
|
||||
import "@material/mwc-icon-button/mwc-icon-button";
|
||||
import { mdiDelete } from "@mdi/js";
|
||||
import {
|
||||
css,
|
||||
@ -80,14 +81,14 @@ class HaLongLivedTokens extends LitElement {
|
||||
)
|
||||
)}
|
||||
</div>
|
||||
<mwc-button
|
||||
<mwc-icon-button
|
||||
.token=${token}
|
||||
.disabled=${token.is_current}
|
||||
.title=${this.hass.localize(`ui.common.delete`)}
|
||||
@click=${this._deleteToken}
|
||||
>
|
||||
<ha-svg-icon .path=${mdiDelete}></ha-svg-icon>
|
||||
</mwc-button>
|
||||
</mwc-icon-button>
|
||||
</ha-settings-row>`
|
||||
)}
|
||||
</div>
|
||||
@ -185,6 +186,9 @@ class HaLongLivedTokens extends LitElement {
|
||||
mwc-button {
|
||||
--mdc-theme-primary: var(--primary-color);
|
||||
}
|
||||
mwc-icon-button {
|
||||
color: var(--primary-text-color);
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
|
@ -201,7 +201,7 @@ class HaPanelProfile extends LitElement {
|
||||
}
|
||||
|
||||
private _customizeSidebar() {
|
||||
fireEvent(this, "hass-edit-sidebar");
|
||||
fireEvent(this, "hass-edit-sidebar", { editMode: true });
|
||||
}
|
||||
|
||||
private async _refreshRefreshTokens() {
|
||||
|
@ -1,24 +1,25 @@
|
||||
import "@material/mwc-button/mwc-button";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import "@polymer/paper-item/paper-item";
|
||||
import "@polymer/paper-listbox/paper-listbox";
|
||||
import "../../components/ha-paper-dropdown-menu";
|
||||
import { TemplateResult, html } from "lit-html";
|
||||
import {
|
||||
property,
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
internalProperty,
|
||||
LitElement,
|
||||
customElement,
|
||||
property,
|
||||
PropertyValues,
|
||||
CSSResult,
|
||||
css,
|
||||
} from "lit-element";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import "../../components/ha-settings-row";
|
||||
import { html, TemplateResult } from "lit-html";
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import "../../components/ha-formfield";
|
||||
import "../../components/ha-paper-dropdown-menu";
|
||||
import "../../components/ha-radio";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import type { HaRadio } from "../../components/ha-radio";
|
||||
import "@material/mwc-button/mwc-button";
|
||||
import "../../components/ha-settings-row";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import { documentationUrl } from "../../util/documentation-url";
|
||||
|
||||
@customElement("ha-pick-theme-row")
|
||||
export class HaPickThemeRow extends LitElement {
|
||||
@ -45,7 +46,10 @@ export class HaPickThemeRow extends LitElement {
|
||||
? this.hass.localize("ui.panel.profile.themes.error_no_theme")
|
||||
: ""}
|
||||
<a
|
||||
href="https://www.home-assistant.io/integrations/frontend/#defining-themes"
|
||||
href="${documentationUrl(
|
||||
this.hass!,
|
||||
"/integrations/frontend/#defining-themes"
|
||||
)}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
|
@ -7,6 +7,7 @@ import { isComponentLoaded } from "../../common/config/is_component_loaded";
|
||||
import { pushSupported } from "../../components/ha-push-notifications-toggle";
|
||||
import LocalizeMixin from "../../mixins/localize-mixin";
|
||||
import "../../components/ha-settings-row";
|
||||
import { documentationUrl } from "../../util/documentation-url";
|
||||
|
||||
/*
|
||||
* @appliesMixin LocalizeMixin
|
||||
@ -26,7 +27,7 @@ class HaPushNotificationsRow extends LocalizeMixin(PolymerElement) {
|
||||
<span slot="description">
|
||||
[[_description(_platformLoaded, _pushSupported)]]
|
||||
<a
|
||||
href="https://www.home-assistant.io/integrations/html5"
|
||||
href="[[_computeDocumentationUrl(hass)]]"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>[[localize('ui.panel.profile.push_notifications.link_promo')]]</a
|
||||
@ -59,6 +60,10 @@ class HaPushNotificationsRow extends LocalizeMixin(PolymerElement) {
|
||||
};
|
||||
}
|
||||
|
||||
_computeDocumentationUrl(hass) {
|
||||
return documentationUrl(hass, "/integrations/html5");
|
||||
}
|
||||
|
||||
_compPlatformLoaded(hass) {
|
||||
return isComponentLoaded(hass, "notify.html5");
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import "@material/mwc-button/mwc-button";
|
||||
import "@material/mwc-icon-button/mwc-icon-button";
|
||||
import { mdiDelete } from "@mdi/js";
|
||||
import "@polymer/paper-tooltip/paper-tooltip";
|
||||
import {
|
||||
@ -83,14 +83,14 @@ class HaRefreshTokens extends LitElement {
|
||||
)}
|
||||
</paper-tooltip>`
|
||||
: ""}
|
||||
<mwc-button
|
||||
<mwc-icon-button
|
||||
.token=${token}
|
||||
.disabled=${token.is_current}
|
||||
.title=${this.hass.localize(`ui.common.delete`)}
|
||||
@click=${this._deleteToken}
|
||||
>
|
||||
<ha-svg-icon .path=${mdiDelete}></ha-svg-icon>
|
||||
</mwc-button>
|
||||
</mwc-icon-button>
|
||||
</div>
|
||||
</ha-settings-row>`
|
||||
)
|
||||
@ -135,8 +135,8 @@ class HaRefreshTokens extends LitElement {
|
||||
ha-settings-row {
|
||||
padding: 0;
|
||||
}
|
||||
mwc-button {
|
||||
--mdc-theme-primary: var(--primary-color);
|
||||
mwc-icon-button {
|
||||
color: var(--primary-text-color);
|
||||
}
|
||||
`,
|
||||
];
|
||||
|
@ -18,8 +18,22 @@ export const sortableStyles = css`
|
||||
animation-duration: 0.33s;
|
||||
}
|
||||
|
||||
#sortable a {
|
||||
height: 48px;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#sortable {
|
||||
outline: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.hidden-panel {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.sortable-fallback {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sortable-ghost {
|
||||
@ -54,13 +68,25 @@ export const sortableStyles = css`
|
||||
}
|
||||
}
|
||||
|
||||
.show-panel,
|
||||
.hide-panel {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
--mdc-icon-button-size: 40px;
|
||||
}
|
||||
|
||||
.hide-panel {
|
||||
top: 4px;
|
||||
right: 8px;
|
||||
}
|
||||
|
||||
:host([expanded]) .hide-panel {
|
||||
display: block;
|
||||
}
|
||||
|
||||
:host([expanded]) .show-panel {
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
|
@ -16,13 +16,11 @@ declare global {
|
||||
interface HASSDomEvents {
|
||||
"hass-dock-sidebar": DockSidebarParams;
|
||||
"hass-default-panel": DefaultPanelParams;
|
||||
"hass-edit-sidebar": undefined;
|
||||
}
|
||||
// for add event listener
|
||||
interface HTMLElementEventMap {
|
||||
"hass-dock-sidebar": HASSDomEvent<DockSidebarParams>;
|
||||
"hass-default-panel": HASSDomEvent<DefaultPanelParams>;
|
||||
"hass-edit-sidebar": undefined;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -278,7 +278,8 @@
|
||||
"successfully_saved": "Successfully saved",
|
||||
"successfully_deleted": "Successfully deleted",
|
||||
"back": "Back",
|
||||
"error_required": "Required"
|
||||
"error_required": "Required",
|
||||
"copied": "Copied"
|
||||
},
|
||||
"components": {
|
||||
"logbook": {
|
||||
@ -373,6 +374,12 @@
|
||||
"video_not_supported": "Your browser does not support the video element.",
|
||||
"media_not_supported": "The Browser Media Player does not support this type of media",
|
||||
"media_browsing_error": "Media Browsing Error",
|
||||
"learn_adding_local_media": "Learn more about adding media in the {documentation}.",
|
||||
"local_media_files": "Place your video, audio and image files in the media directory to be able to browse and play them in the browser or on supported media players.",
|
||||
"documentation": "documentation",
|
||||
"no_local_media_found": "No local media found",
|
||||
"no_media_folder": "It looks like you have not yet created a media directory.",
|
||||
"setup_local_help": "Check the {documentation} on how to setup local media.",
|
||||
"class": {
|
||||
"album": "Album",
|
||||
"app": "App",
|
||||
@ -2149,7 +2156,7 @@
|
||||
"save": "Save",
|
||||
"unsaved_changes": "Unsaved changes",
|
||||
"saved": "Saved",
|
||||
"confirm_remove_config_title": "Are you sure you want to remove your Lovelace UI configuration? We will automatically generate your Lovelace UI views with your areas and devices.",
|
||||
"confirm_remove_config_title": "Are you sure you want to remove your Lovelace UI configuration?",
|
||||
"confirm_remove_config_text": "We will automatically generate your Lovelace UI views with your areas and devices if you remove your Lovelace UI configuration.",
|
||||
"confirm_unsaved_changes": "You have unsaved changes, are you sure you want to exit?",
|
||||
"confirm_unsaved_comments": "Your configuration contains comment(s), these will not be saved. Do you want to continue?",
|
||||
|
11
src/util/documentation-url.ts
Normal file
11
src/util/documentation-url.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import { HomeAssistant } from "../types";
|
||||
|
||||
export const documentationUrl = (hass: HomeAssistant, path: string) => {
|
||||
return `https://${
|
||||
hass.config.version.includes("b")
|
||||
? "rc"
|
||||
: hass.config.version.includes("dev")
|
||||
? "next"
|
||||
: "www"
|
||||
}.home-assistant.io${path}`;
|
||||
};
|
19
test-mocha/util/generate-documentation-url.spec.ts
Normal file
19
test-mocha/util/generate-documentation-url.spec.ts
Normal file
@ -0,0 +1,19 @@
|
||||
import * as assert from "assert";
|
||||
import { documentationUrl } from "../../src/util/documentation-url";
|
||||
|
||||
describe("Generate documentation URL", function () {
|
||||
it("Generate documentation url for stable", function () {
|
||||
assert.strictEqual(
|
||||
// @ts-ignore
|
||||
documentationUrl({ config: { version: "1.0.0" } }, "/blog"),
|
||||
"https://www.home-assistant.io/blog"
|
||||
);
|
||||
});
|
||||
it("Generate documentation url for rc", function () {
|
||||
assert.strictEqual(
|
||||
// @ts-ignore
|
||||
documentationUrl({ config: { version: "1.0.0b0" } }, "/blog"),
|
||||
"https://rc.home-assistant.io/blog"
|
||||
);
|
||||
});
|
||||
});
|
@ -19,6 +19,7 @@
|
||||
"logbook": "Дневник",
|
||||
"mailbox": "Пощенска кутия",
|
||||
"map": "Карта",
|
||||
"media_browser": "Медиен браузър",
|
||||
"profile": "Профил",
|
||||
"shopping_list": "Списък за пазаруване",
|
||||
"states": "Състояние"
|
||||
@ -455,6 +456,7 @@
|
||||
},
|
||||
"common": {
|
||||
"cancel": "Отмени",
|
||||
"continue": "Продължи",
|
||||
"delete": "Изтриване",
|
||||
"loading": "Зареждане",
|
||||
"save": "Запазване",
|
||||
@ -466,6 +468,10 @@
|
||||
"device": "Устройство"
|
||||
},
|
||||
"entity": {
|
||||
"entity-attribute-picker": {
|
||||
"attribute": "Атрибут",
|
||||
"show_attributes": "Показване на атрибутите"
|
||||
},
|
||||
"entity-picker": {
|
||||
"entity": "Обект"
|
||||
}
|
||||
@ -474,6 +480,18 @@
|
||||
"loading_history": "Зареждане на история за състоянието...",
|
||||
"no_history_found": "Не е намерена история за състоянието"
|
||||
},
|
||||
"logbook": {
|
||||
"entries_not_found": "Липсват логове в дневника"
|
||||
},
|
||||
"media-browser": {
|
||||
"audio_not_supported": "Браузърът не поддържа този аудио елемент.",
|
||||
"choose_player": "Изберете плейър",
|
||||
"media_browsing_error": "Грешка в медийния браузър",
|
||||
"media_not_supported": "Плейърът на медийния браузър не поддържа този тип медия",
|
||||
"media_player": "Медиен плейър",
|
||||
"video_not_supported": "Браузърът не поддържа този видео елемент.",
|
||||
"web-browser": "Уеб браузър"
|
||||
},
|
||||
"relative_time": {
|
||||
"duration": {
|
||||
"day": "{count}{count, plural,\n one {ден}\n other {дни}\n}",
|
||||
@ -496,6 +514,9 @@
|
||||
"enable_new_entities_label": "Активирай новодобавените устройства.",
|
||||
"title": "Системни опции за {integration}"
|
||||
},
|
||||
"domain_toggler": {
|
||||
"reset_entities": "Нулиране на обекти"
|
||||
},
|
||||
"entity_registry": {
|
||||
"editor": {
|
||||
"delete": "Изтриване",
|
||||
@ -515,6 +536,9 @@
|
||||
"yaml_not_editable": "Настройките на този обект не могат да бъдат редактирани. Могат да се конфигурират само обектите, създадени от потребителския интерфейс."
|
||||
},
|
||||
"more_info_control": {
|
||||
"controls": "Контроли",
|
||||
"details": "Детайли",
|
||||
"history": "История",
|
||||
"script": {
|
||||
"last_action": "Последно задействане"
|
||||
},
|
||||
@ -644,7 +668,13 @@
|
||||
"label": "Извикване на услуга",
|
||||
"service_data": "Данни за услугата"
|
||||
},
|
||||
"wait_for_trigger": {
|
||||
"continue_timeout": "Продължи след изчакване",
|
||||
"label": "Изчакайте спусък/тригър",
|
||||
"timeout": "Време на изчакване (опция)"
|
||||
},
|
||||
"wait_template": {
|
||||
"continue_timeout": "Продължи след изчакване",
|
||||
"label": "Изчакване",
|
||||
"timeout": "Изчакване (по избор)",
|
||||
"wait_template": "Шаблон за изчакване"
|
||||
@ -692,7 +722,9 @@
|
||||
"time": {
|
||||
"after": "След",
|
||||
"before": "Преди",
|
||||
"label": "Време"
|
||||
"label": "Време",
|
||||
"type_input": "Стойност на помощника за дата/час",
|
||||
"type_value": "Фиксирано време"
|
||||
},
|
||||
"zone": {
|
||||
"entity": "Обект с местоположение",
|
||||
@ -751,6 +783,7 @@
|
||||
"value_template": "Шаблон за стойност (незадължително)"
|
||||
},
|
||||
"state": {
|
||||
"attribute": "Атрибут (опция)",
|
||||
"for": "За период от",
|
||||
"from": "От",
|
||||
"label": "Състояние",
|
||||
@ -775,7 +808,9 @@
|
||||
},
|
||||
"time": {
|
||||
"at": "В",
|
||||
"label": "Време"
|
||||
"label": "Време",
|
||||
"type_input": "Стойност на помощника за дата/час",
|
||||
"type_value": "Фиксирано време"
|
||||
},
|
||||
"webhook": {
|
||||
"label": "Webhook",
|
||||
@ -796,6 +831,8 @@
|
||||
},
|
||||
"picker": {
|
||||
"add_automation": "Добавяне на автоматизация",
|
||||
"duplicate": "Дублиране",
|
||||
"duplicate_automation": "Дублиране на автоматизация",
|
||||
"header": "Редактор на автоматизации",
|
||||
"headers": {
|
||||
"name": "Име"
|
||||
@ -815,10 +852,26 @@
|
||||
"config_documentation": "Документация за конфигурацията"
|
||||
}
|
||||
},
|
||||
"alexa": {
|
||||
"dont_expose_entity": "Не излагай обекта",
|
||||
"expose_entity": "Изложи обекта",
|
||||
"exposed": "{избран} изложен",
|
||||
"follow_domain": "следван домейн",
|
||||
"manage_domains": "Управление на домейни",
|
||||
"not_exposed": "{избран} неизложен"
|
||||
},
|
||||
"caption": "Home Assistant Cloud",
|
||||
"description_features": "Контролирайте дома си, и когато не сте вкъщи, активирайте интегрирациите с Alexa и Google Assistant.",
|
||||
"description_login": "Влезли сте като {email}",
|
||||
"description_not_login": "Не сте влезли"
|
||||
"description_not_login": "Не сте влезли",
|
||||
"google": {
|
||||
"dont_expose_entity": "Не излагай обекта",
|
||||
"expose_entity": "Изложи обекта",
|
||||
"exposed": "{избран} изложен",
|
||||
"follow_domain": "следван домейн",
|
||||
"manage_domains": "Управление на домейни",
|
||||
"not_exposed": "{избран} неизложен"
|
||||
}
|
||||
},
|
||||
"core": {
|
||||
"caption": "Общи",
|
||||
@ -882,6 +935,7 @@
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Добавяне на интеграция",
|
||||
"attention": "Задълителна проверка",
|
||||
"caption": "Интеграции",
|
||||
"config_entry": {
|
||||
"delete": "Изтриване",
|
||||
@ -897,6 +951,7 @@
|
||||
"options": "Настройки",
|
||||
"rename": "Преименуване",
|
||||
"restart_confirm": "Рестартирайте Home Assistant за да завършите премахването на интеграцията",
|
||||
"services": "{брой} {число, множествено число,\n една {услуга}\n други {услуги}\n}",
|
||||
"system_options": "Системни настройки"
|
||||
},
|
||||
"config_flow": {
|
||||
@ -915,6 +970,7 @@
|
||||
"none": "Нищо не е конфигурирано към момента",
|
||||
"none_found": "Не са намерени интеграции",
|
||||
"none_found_detail": "Коригирайте критериите си за търсене.",
|
||||
"reconfigure": "Преконфигурирай",
|
||||
"rename_dialog": "Редактирайте името на този запис в конфигурацията"
|
||||
},
|
||||
"introduction": "Тук е възможно да конфигурирате Вашите компоненти и Home Assistant. Не всичко е възможно да се конфигурира от Интерфейса, но работим по върпоса.",
|
||||
@ -942,6 +998,23 @@
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"ozw": {
|
||||
"node": {
|
||||
"button": "Детайли за възела",
|
||||
"not_found": "Възел не е намерен"
|
||||
},
|
||||
"nodes_table": {
|
||||
"failed": "Неуспешно",
|
||||
"id": "ID",
|
||||
"manufacturer": "Производител",
|
||||
"model": "Модел",
|
||||
"query_stage": "Етап на заявка",
|
||||
"zwave_plus": "Z-Wave плюс"
|
||||
},
|
||||
"refresh_node": {
|
||||
"button": "Обнови възела"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"caption": "Хора",
|
||||
"description": "Управлявайте хората, които следите от Home Assistant.",
|
||||
@ -979,8 +1052,13 @@
|
||||
"group": "Презареждане на гурпите",
|
||||
"heading": "Презареждане на YAML конфигурацията",
|
||||
"introduction": "Някои части от Home Assistant могат да се презаредят без да е необходимо рестартиране. Натискането на Презареди ще отхвърли настоящата конфигурация и ще зареди новата конфигурация.",
|
||||
"mqtt": "Презареди mqtt обектите",
|
||||
"reload": "Презарежди {домейн}",
|
||||
"rpi_gpio": "Презареди GPIO обектите на Raspberry Pi ",
|
||||
"scene": "Презареди сцените",
|
||||
"script": "Презареждане на скриптовете"
|
||||
"script": "Презареждане на скриптовете",
|
||||
"smtp": "Презареди smtp услугите за уведомяване",
|
||||
"telegram": "Презареди telegram услугите за уведомяване"
|
||||
},
|
||||
"server_management": {
|
||||
"confirm_restart": "Сигурни ли сте, че искате да рестартирате Home Assistant?",
|
||||
@ -1005,6 +1083,8 @@
|
||||
"create": "Създаване",
|
||||
"name": "Име",
|
||||
"password": "Парола",
|
||||
"password_confirm": "Потвърди парола",
|
||||
"password_not_match": "Паролите не съвпадат",
|
||||
"username": "Потребителско име"
|
||||
},
|
||||
"caption": "Потребители",
|
||||
@ -1017,6 +1097,8 @@
|
||||
"deactivate_user": "Деактивиране на потребителя",
|
||||
"delete_user": "Изтриване на потребител",
|
||||
"name": "Име",
|
||||
"new_password": "Нова парола",
|
||||
"password_changed": "Паролата е променена!",
|
||||
"system_generated_users_not_editable": "Неуспешно обновяване на системно генерираните потребители"
|
||||
},
|
||||
"picker": {
|
||||
@ -1102,6 +1184,11 @@
|
||||
"title": "Състояния"
|
||||
},
|
||||
"templates": {
|
||||
"all_listeners": "Този шаблон следи за всички събития на промяна на състояние.",
|
||||
"domain": "Домейн",
|
||||
"entity": "Обект",
|
||||
"listeners": "Този шаблон следи за събития със следните промени на състояния:",
|
||||
"no_listeners": "Този шаблон не следи за събития на промяна на състояние и не се актуализира автоматично.",
|
||||
"title": "Шаблон"
|
||||
}
|
||||
}
|
||||
@ -1144,6 +1231,9 @@
|
||||
"entities": {
|
||||
"toggle": "Превключване на обекти."
|
||||
},
|
||||
"generic": {
|
||||
"state_color": "Да се оцветят ли иконите спрямо състоянието?"
|
||||
},
|
||||
"iframe": {
|
||||
"name": "Уеб страница"
|
||||
},
|
||||
@ -1155,6 +1245,10 @@
|
||||
}
|
||||
},
|
||||
"cardpicker": {
|
||||
"by_card": "По карта",
|
||||
"by_entity": "По обект",
|
||||
"domain": "Домейн",
|
||||
"entity": "Обект",
|
||||
"no_description": "Няма налично описание."
|
||||
},
|
||||
"edit_card": {
|
||||
@ -1166,6 +1260,7 @@
|
||||
"move": "Преместване",
|
||||
"options": "Още опции",
|
||||
"pick_card": "Изберете картата, която искате да добавите.",
|
||||
"search_cards": "Търсене на карти",
|
||||
"toggle_editor": "Превключете редактора"
|
||||
},
|
||||
"edit_lovelace": {
|
||||
@ -1419,6 +1514,11 @@
|
||||
"submit": "Промяна"
|
||||
},
|
||||
"current_user": "В момента сте влезли като {fullName}.",
|
||||
"customize_sidebar": {
|
||||
"button": "Редактиране",
|
||||
"description": "Може също да се задържи водача на страничната лента, за да се активира режим за редактиране.",
|
||||
"header": "Промяна на реда и скриване на елементи от страничната лента"
|
||||
},
|
||||
"dashboard": {
|
||||
"dropdown_label": "Табло",
|
||||
"header": "Табло"
|
||||
@ -1438,6 +1538,7 @@
|
||||
"confirm_delete": "Сигурни ли сте, че искате да изтриете кода за достъп за {name}?",
|
||||
"create": "Създай код",
|
||||
"create_failed": "Възникна грешка при създаването на код за достъп.",
|
||||
"created": "Създаване {дата}",
|
||||
"created_at": "Създаден на {date}",
|
||||
"delete_failed": "Възникна грешка при изтриването на кода за достъп.",
|
||||
"description": "Създайте дългосрочни кодове за достъп за да могат скриптовете Ви да взаимодействат с Home Assistant. Всеки код е валиден за 10 години от създаването си. Следните дългосрочни кодове са активни в момента.",
|
||||
@ -1445,6 +1546,7 @@
|
||||
"header": "Дългосрочни кодове за достъп",
|
||||
"last_used": "Последно използван на {date} от {location}",
|
||||
"learn_auth_requests": "Научете се как да правите оторизирани заявки.",
|
||||
"name": "Име",
|
||||
"not_used": "Никога не е бил използван",
|
||||
"prompt_copy_token": "Копирайте кода си за достъп. Той няма да бъде показан отново.",
|
||||
"prompt_name": "Име?"
|
||||
@ -1495,6 +1597,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"done": "Готово",
|
||||
"external_app_configuration": "Конфигурация на приложение"
|
||||
}
|
||||
}
|
||||
|
@ -507,6 +507,7 @@
|
||||
"cancel": "Cancel·la",
|
||||
"close": "Tanca",
|
||||
"continue": "Continua",
|
||||
"copied": "Copiat",
|
||||
"delete": "Elimina",
|
||||
"error_required": "Obligatori",
|
||||
"loading": "Carregant",
|
||||
@ -574,6 +575,28 @@
|
||||
"audio_not_supported": "El teu navegador no és compatible amb l'element d'àudio.",
|
||||
"choose_player": "Tria el reproductor",
|
||||
"choose-source": "Tria la font",
|
||||
"class": {
|
||||
"album": "Àlbum",
|
||||
"app": "Aplicació",
|
||||
"artist": "Artista",
|
||||
"channel": "Canal",
|
||||
"composer": "Compositor",
|
||||
"contributing_artist": "Artista col·laborador",
|
||||
"directory": "Biblioteca",
|
||||
"episode": "Episodi",
|
||||
"game": "Joc",
|
||||
"genre": "Gènere",
|
||||
"image": "Imatge",
|
||||
"movie": "Pel·lícula",
|
||||
"music": "Música",
|
||||
"playlist": "Llista de reproducció",
|
||||
"podcast": "Podcast",
|
||||
"season": "Temporada",
|
||||
"track": "Pista",
|
||||
"tv_show": "Programa de TV",
|
||||
"url": "URL",
|
||||
"video": "Vídeo"
|
||||
},
|
||||
"content-type": {
|
||||
"album": "Àlbum",
|
||||
"artist": "Artista",
|
||||
@ -1943,7 +1966,7 @@
|
||||
},
|
||||
"introduction": "L'editor de scripts et permet crear i editar scripts. Vés a l'enllaç de sota per veure'n les instruccions i assegurar-te que has configurat Home Assistant correctament.",
|
||||
"learn_more": "Més informació sobre els scripts",
|
||||
"no_scripts": "No hem trobat cap script editable",
|
||||
"no_scripts": "No s'ha pogut trobar cap script editable",
|
||||
"show_info": "Mostra informació sobre l'script",
|
||||
"trigger_script": "Dispara l'script"
|
||||
}
|
||||
@ -2352,9 +2375,14 @@
|
||||
"title": "Estats"
|
||||
},
|
||||
"templates": {
|
||||
"all_listeners": "Aquesta plantilla escolta a tots els esdeveniments de canvi d'estat.",
|
||||
"description": "Les plantilles es renderitzen mitjançant el motor Jinja2 amb algunes extensions específiques de Home Assistant.",
|
||||
"domain": "Domini",
|
||||
"editor": "Editor de plantilles",
|
||||
"entity": "Entitat",
|
||||
"jinja_documentation": "Documentació sobre plantilles amb Jinja2",
|
||||
"listeners": "Aquesta plantilla escolta als següents esdeveniments de canvi d'estat:",
|
||||
"no_listeners": "Aquesta plantilla no escolta cap esdeveniment de canvi d'estat i no s'actualitza automàticament.",
|
||||
"reset": "Restableix a la plantilla de demostració",
|
||||
"template_extensions": "Extensions de plantilla de Home Assistant",
|
||||
"title": "Plantilla",
|
||||
@ -2501,7 +2529,7 @@
|
||||
"no_theme": "Sense tema",
|
||||
"refresh_interval": "Interval d'actualització",
|
||||
"search": "Cerca",
|
||||
"secondary_info_attribute": "Atribut d’informació secundària",
|
||||
"secondary_info_attribute": "Atribut d'informació secundària",
|
||||
"show_icon": "Mostra icona?",
|
||||
"show_name": "Mostra nom?",
|
||||
"show_state": "Mostra estat?",
|
||||
@ -2941,6 +2969,11 @@
|
||||
"submit": "Envia"
|
||||
},
|
||||
"current_user": "Has iniciat la sessió com a {fullName}.",
|
||||
"customize_sidebar": {
|
||||
"button": "Edita",
|
||||
"description": "També pots mantenir premuda la capçalera de la barra lateral per activar el mode d'edició.",
|
||||
"header": "Canvia l'ordre i/o amaga elements de la barra lateral"
|
||||
},
|
||||
"dashboard": {
|
||||
"description": "Tria un panell per defecte per a aquest dispositiu.",
|
||||
"dropdown_label": "Panell",
|
||||
@ -3038,6 +3071,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"done": "Fet",
|
||||
"external_app_configuration": "Configuració de l'aplicació",
|
||||
"sidebar_toggle": "Commutació de la barra lateral"
|
||||
}
|
||||
|
@ -507,6 +507,7 @@
|
||||
"cancel": "Zrušit",
|
||||
"close": "Zavřít",
|
||||
"continue": "Pokračovat",
|
||||
"copied": "Zkopírováno",
|
||||
"delete": "Smazat",
|
||||
"error_required": "Povinné",
|
||||
"loading": "Načítání",
|
||||
@ -574,6 +575,28 @@
|
||||
"audio_not_supported": "Váš prohlížeč nepodporuje element \"audio\".",
|
||||
"choose_player": "Vyberte přehrávač",
|
||||
"choose-source": "Zvolte zdroj",
|
||||
"class": {
|
||||
"album": "Album",
|
||||
"app": "Aplikace",
|
||||
"artist": "Umělec",
|
||||
"channel": "Kanál",
|
||||
"composer": "Skladatel",
|
||||
"contributing_artist": "Přispívající umělec",
|
||||
"directory": "Knihovna",
|
||||
"episode": "Epizoda",
|
||||
"game": "Hra",
|
||||
"genre": "Žánr",
|
||||
"image": "Obrázek",
|
||||
"movie": "Film",
|
||||
"music": "Hudba",
|
||||
"playlist": "Seznam skladeb",
|
||||
"podcast": "Podcast",
|
||||
"season": "Sezóna",
|
||||
"track": "Stopa",
|
||||
"tv_show": "Televizní pořad",
|
||||
"url": "Url adresa",
|
||||
"video": "Video"
|
||||
},
|
||||
"content-type": {
|
||||
"album": "Album",
|
||||
"artist": "Umělec",
|
||||
@ -2352,9 +2375,14 @@
|
||||
"title": "Stavy"
|
||||
},
|
||||
"templates": {
|
||||
"all_listeners": "Tato šablona naslouchá všem změnám stavu.",
|
||||
"description": "Šablony jsou vykreslovány pomocí Jinja2 šablonového enginu s některými specifickými rozšířeními pro Home Assistant.",
|
||||
"domain": "Doména",
|
||||
"editor": "Editor šablon",
|
||||
"entity": "Entita",
|
||||
"jinja_documentation": "Dokumentace šablony Jinja2",
|
||||
"listeners": "Tato šablona naslouchá následujícím změnám stavu:",
|
||||
"no_listeners": "Tato šablona neposlouchá žádné změny stavu a nebude se automaticky aktualizovat.",
|
||||
"reset": "Obnovit ukázkovou šablonu",
|
||||
"template_extensions": "Rozšíření šablony Home Assistant",
|
||||
"title": "Šablony",
|
||||
@ -2941,6 +2969,11 @@
|
||||
"submit": "Odeslat"
|
||||
},
|
||||
"current_user": "Nyní jste přihlášeni jako {fullName}.",
|
||||
"customize_sidebar": {
|
||||
"button": "Upravit",
|
||||
"description": "Režim úprav můžete aktivovat také stisknutím a podržením záhlaví postranního panelu.",
|
||||
"header": "Změna pořadí a skrytí položek postranního panelu"
|
||||
},
|
||||
"dashboard": {
|
||||
"description": "Vyberte výchozí dashboard pro toto zařízení.",
|
||||
"dropdown_label": "Dashboard",
|
||||
@ -3038,6 +3071,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"done": "Hotovo",
|
||||
"external_app_configuration": "Konfigurace aplikace",
|
||||
"sidebar_toggle": "Přepínač postranního panelu"
|
||||
}
|
||||
|
@ -419,6 +419,7 @@
|
||||
"unlock": "Entriegeln"
|
||||
},
|
||||
"media_player": {
|
||||
"media_next_track": "Weiter",
|
||||
"media_play": "Abspielen",
|
||||
"sound_mode": "Sound-Modus",
|
||||
"source": "Quelle",
|
||||
@ -501,6 +502,8 @@
|
||||
"back": "Zurück",
|
||||
"cancel": "Abbrechen",
|
||||
"close": "Schließen",
|
||||
"continue": "Weiter",
|
||||
"copied": "Kopiert",
|
||||
"delete": "Löschen",
|
||||
"error_required": "Benötigt",
|
||||
"loading": "Laden",
|
||||
@ -557,8 +560,24 @@
|
||||
"loading_history": "Lade Zustandsverlauf...",
|
||||
"no_history_found": "Kein Zustandsverlauf gefunden."
|
||||
},
|
||||
"logbook": {
|
||||
"entries_not_found": "Keine Logbucheinträge gefunden."
|
||||
},
|
||||
"media-browser": {
|
||||
"audio_not_supported": "Ihr Browser unterstützt das Audioelement nicht.",
|
||||
"choose-source": "Quelle wählen",
|
||||
"class": {
|
||||
"album": "Album",
|
||||
"app": "App",
|
||||
"directory": "Bibliothek",
|
||||
"episode": "Episode",
|
||||
"game": "Spiel",
|
||||
"movie": "Film",
|
||||
"music": "Musik",
|
||||
"season": "Episode",
|
||||
"url": "URL",
|
||||
"video": "Video"
|
||||
},
|
||||
"content-type": {
|
||||
"album": "Album",
|
||||
"artist": "Künstler",
|
||||
@ -566,7 +585,13 @@
|
||||
"playlist": "Playlist",
|
||||
"server": "Server"
|
||||
},
|
||||
"play": "Abspielen"
|
||||
"no_items": "Keine Einträge",
|
||||
"play": "Abspielen",
|
||||
"video_not_supported": "Ihr Browser unterstützt das Videoelement nicht."
|
||||
},
|
||||
"picture-upload": {
|
||||
"label": "Bild",
|
||||
"unsupported_format": "Nicht unterstütztes Format, bitte wähle ein JPEG-, PNG- oder GIF-Bild."
|
||||
},
|
||||
"related-items": {
|
||||
"area": "Bereich",
|
||||
@ -672,8 +697,10 @@
|
||||
"yaml_not_editable": "Die Einstellungen dieser Entität können nicht über die Benutzeroberfläche bearbeitet werden. Nur über die Benutzeroberfläche eingerichtete Entitäten können über die Benutzeroberfläche konfiguriert werden."
|
||||
},
|
||||
"more_info_control": {
|
||||
"details": "Details",
|
||||
"dismiss": "Dialog ausblenden",
|
||||
"edit": "Entität bearbeiten",
|
||||
"history": "Verlauf",
|
||||
"person": {
|
||||
"create_zone": "Zone vom aktuellen Standort erstellen"
|
||||
},
|
||||
@ -849,7 +876,13 @@
|
||||
"type_select": "Aktionstyp",
|
||||
"type": {
|
||||
"choose": {
|
||||
"label": "Auswählen"
|
||||
"add_option": "Option hinzufügen",
|
||||
"conditions": "Bedingungen",
|
||||
"default": "Standard-Aktionen",
|
||||
"label": "Auswählen",
|
||||
"option": "Option {number}",
|
||||
"remove_option": "Option entfernen",
|
||||
"sequence": "Aktionen"
|
||||
},
|
||||
"condition": {
|
||||
"label": "Bedingung"
|
||||
@ -872,6 +905,7 @@
|
||||
},
|
||||
"repeat": {
|
||||
"label": "Wiederholen",
|
||||
"sequence": "Aktionen",
|
||||
"type_select": "Wiederholungstyp",
|
||||
"type": {
|
||||
"count": {
|
||||
@ -1044,6 +1078,7 @@
|
||||
"value_template": "Wert-Template (optional)"
|
||||
},
|
||||
"state": {
|
||||
"attribute": "Attribut (Optional)",
|
||||
"for": "Für",
|
||||
"from": "Von",
|
||||
"label": "Zustand",
|
||||
@ -1068,7 +1103,8 @@
|
||||
},
|
||||
"time": {
|
||||
"at": "Um",
|
||||
"label": "Zeit"
|
||||
"label": "Zeit",
|
||||
"type_value": "Feste Zeit"
|
||||
},
|
||||
"webhook": {
|
||||
"label": "Webhook",
|
||||
@ -1091,6 +1127,8 @@
|
||||
"add_automation": "Automatisierung hinzufügen",
|
||||
"delete_automation": "Automatisierung löschen",
|
||||
"delete_confirm": "Bist du sicher, dass du diese Automatisierung löschen möchtest?",
|
||||
"duplicate": "Duplizieren",
|
||||
"duplicate_automation": "Automatisierung kopieren",
|
||||
"edit_automation": "Automatisierung bearbeiten",
|
||||
"header": "Automatisierungseditor",
|
||||
"headers": {
|
||||
@ -1314,6 +1352,7 @@
|
||||
}
|
||||
},
|
||||
"devices": {
|
||||
"add_prompt": "Mit diesem Gerät wurden noch keine {name} hinzugefügt. Du kannst eins hinzufügen, indem du auf den + Knopf drückst.",
|
||||
"automation": {
|
||||
"actions": {
|
||||
"caption": "Wenn etwas ausgelöst wird ..."
|
||||
@ -1477,6 +1516,7 @@
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Integration hinzufügen",
|
||||
"attention": "Aufmerksamkeit erforderlich",
|
||||
"caption": "Integrationen",
|
||||
"config_entry": {
|
||||
"area": "In {area}",
|
||||
@ -1495,6 +1535,8 @@
|
||||
"no_device": "Entitäten ohne Geräte",
|
||||
"no_devices": "Diese Integration hat keine Geräte.",
|
||||
"options": "Optionen",
|
||||
"reload": "Neu laden",
|
||||
"reload_confirm": "Die Integration wurde neu geladen",
|
||||
"rename": "Umbenennen",
|
||||
"restart_confirm": "Starte Home Assistant neu, um das Entfernen dieser Integration abzuschließen",
|
||||
"settings_button": "Einstellungen für {integration} bearbeiten",
|
||||
@ -1543,6 +1585,7 @@
|
||||
"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 findest du auf der ",
|
||||
"reconfigure": "Neu konfigurieren",
|
||||
"rename_dialog": "Bearbeite den Namen dieses Konfigurationseintrags",
|
||||
"rename_input_label": "Eintragsname",
|
||||
"search": "Such-Integrationen"
|
||||
@ -1653,8 +1696,11 @@
|
||||
"topic": "Topic"
|
||||
},
|
||||
"ozw": {
|
||||
"button": "Konfigurieren",
|
||||
"common": {
|
||||
"instance": "Instanz"
|
||||
"instance": "Instanz",
|
||||
"network": "Netzwerk",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
"zwave_info": "Z-Wave Infos"
|
||||
@ -1664,12 +1710,27 @@
|
||||
"select_instance": "Instanz auswählen"
|
||||
},
|
||||
"network_status": {
|
||||
"details": {
|
||||
"driverremoved": "Der Treiber wurde entfernt",
|
||||
"driverreset": "Der Treiber wurde zurückgesetzt",
|
||||
"ready": "Bereit zum Verbinden",
|
||||
"started": "Verbindung mit MQTT hergestellt",
|
||||
"starting": "Verbinde zu MQTT"
|
||||
},
|
||||
"offline": "Offline",
|
||||
"online": "Online",
|
||||
"starting": "Startet",
|
||||
"unknown": "Unbekannt"
|
||||
},
|
||||
"network": {
|
||||
"header": "Netzwerkverwaltung"
|
||||
},
|
||||
"nodes_table": {
|
||||
"failed": "Fehlgeschlagen",
|
||||
"manufacturer": "Hersteller"
|
||||
},
|
||||
"refresh_node": {
|
||||
"start_refresh_button": "Aktualisierung starten"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
@ -1798,6 +1859,7 @@
|
||||
"core": "Ort & Anpassungen neu laden",
|
||||
"group": "Gruppen neu laden",
|
||||
"heading": "Neuladen der YAML-Konfiguration",
|
||||
"homekit": "HomeKit neu laden",
|
||||
"input_boolean": "Eingabe-Booleans neu laden",
|
||||
"input_datetime": "Eingabe-Datums- und Zeitfelder neu laden",
|
||||
"input_number": "Eingabenummern neu laden",
|
||||
@ -1807,6 +1869,7 @@
|
||||
"person": "Personen neu laden",
|
||||
"scene": "Szenen neu laden",
|
||||
"script": "Skripte neu laden",
|
||||
"telegram": "Telegram-Benachrichtigungsdienste neu laden",
|
||||
"zone": "Zonen neu laden"
|
||||
},
|
||||
"server_management": {
|
||||
@ -1828,12 +1891,18 @@
|
||||
},
|
||||
"tags": {
|
||||
"detail": {
|
||||
"name": "Name"
|
||||
"delete": "Löschen",
|
||||
"description": "Beschreibung",
|
||||
"name": "Name",
|
||||
"update": "Aktualisieren"
|
||||
},
|
||||
"edit": "Bearbeiten",
|
||||
"headers": {
|
||||
"last_scanned": "Zuletzt gescannt",
|
||||
"name": "Name"
|
||||
},
|
||||
"never_scanned": "Nie gescannt"
|
||||
"never_scanned": "Nie gescannt",
|
||||
"write": "Schreiben"
|
||||
},
|
||||
"users": {
|
||||
"add_user": {
|
||||
@ -1841,6 +1910,7 @@
|
||||
"create": "Benutzerkonto anlegen",
|
||||
"name": "Name",
|
||||
"password": "Passwort",
|
||||
"password_confirm": "Passwort bestätigen",
|
||||
"username": "Benutzername"
|
||||
},
|
||||
"caption": "Benutzer",
|
||||
@ -1857,7 +1927,9 @@
|
||||
"group": "Gruppe",
|
||||
"id": "ID",
|
||||
"name": "Name",
|
||||
"new_password": "Neues Passwort",
|
||||
"owner": "Besitzer",
|
||||
"password_changed": "Das Passwort wurde geändert!",
|
||||
"system_generated": "System generiert",
|
||||
"system_generated_users_not_editable": "Systemgenerierte Benutzer können nicht aktualisiert werden.",
|
||||
"system_generated_users_not_removable": "Vom System generierte Benutzer können nicht entfernt werden.",
|
||||
@ -2728,6 +2800,9 @@
|
||||
"submit": "Absenden"
|
||||
},
|
||||
"current_user": "Sie sind derzeit als {fullName} angemeldet.",
|
||||
"customize_sidebar": {
|
||||
"button": "Bearbeiten"
|
||||
},
|
||||
"dashboard": {
|
||||
"description": "Wähle ein Standard-Dashboard für dieses Gerät.",
|
||||
"dropdown_label": "Dashboard",
|
||||
@ -2750,6 +2825,7 @@
|
||||
"confirm_delete": "Möchten Sie den Zugriffs-Token für {name} wirklich löschen?",
|
||||
"create": "Token erstellen",
|
||||
"create_failed": "Das Zugriffs-Token konnte nicht erstellt werden.",
|
||||
"created": "Erstellt am {date}",
|
||||
"created_at": "Erstellt am {date}",
|
||||
"delete_failed": "Fehler beim Löschen des Zugriffs-Tokens.",
|
||||
"description": "Erstelle langlebige Zugriffstoken, damit deine Skripte mit deiner Home Assistant-Instanz interagieren können. Jedes Token ist ab der Erstellung für 10 Jahre gültig. Die folgenden langlebigen Zugriffstoken sind derzeit aktiv.",
|
||||
@ -2757,6 +2833,7 @@
|
||||
"header": "Langlebige Zugangs-Token",
|
||||
"last_used": "Zuletzt verwendet am {date} in {location}",
|
||||
"learn_auth_requests": "Erfahre, wie du authentifizierte Anfragen stellen kannst.",
|
||||
"name": "Name",
|
||||
"not_used": "Wurde noch nie benutzt",
|
||||
"prompt_copy_token": "Kopiere deinen Zugangs-Token. Er wird nicht wieder angezeigt werden.",
|
||||
"prompt_name": "Name?"
|
||||
@ -2808,7 +2885,8 @@
|
||||
"error_no_theme": "Keine Themen verfügbar.",
|
||||
"header": "Thema",
|
||||
"link_promo": "Erfahre mehr über Themen",
|
||||
"primary_color": "Primärfarbe"
|
||||
"primary_color": "Primärfarbe",
|
||||
"reset": "zurücksetzen"
|
||||
},
|
||||
"vibrate": {
|
||||
"description": "Aktiviere oder deaktiviere die Vibration an diesem Gerät, wenn du Geräte steuerst.",
|
||||
@ -2822,6 +2900,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"done": "fertig",
|
||||
"external_app_configuration": "App-Konfiguration",
|
||||
"sidebar_toggle": "Seitenleiste umschalten"
|
||||
}
|
||||
|
@ -507,6 +507,7 @@
|
||||
"cancel": "Cancel",
|
||||
"close": "Close",
|
||||
"continue": "Continue",
|
||||
"copied": "Copied",
|
||||
"delete": "Delete",
|
||||
"error_required": "Required",
|
||||
"loading": "Loading",
|
||||
@ -574,6 +575,28 @@
|
||||
"audio_not_supported": "Your browser does not support the audio element.",
|
||||
"choose_player": "Choose Player",
|
||||
"choose-source": "Choose Source",
|
||||
"class": {
|
||||
"album": "Album",
|
||||
"app": "App",
|
||||
"artist": "Artist",
|
||||
"channel": "Channel",
|
||||
"composer": "Composer",
|
||||
"contributing_artist": "Contributing Artist",
|
||||
"directory": "Library",
|
||||
"episode": "Episode",
|
||||
"game": "Game",
|
||||
"genre": "Genre",
|
||||
"image": "Image",
|
||||
"movie": "Movie",
|
||||
"music": "Music",
|
||||
"playlist": "Playlist",
|
||||
"podcast": "Podcast",
|
||||
"season": "Season",
|
||||
"track": "Track",
|
||||
"tv_show": "TV Show",
|
||||
"url": "Url",
|
||||
"video": "Video"
|
||||
},
|
||||
"content-type": {
|
||||
"album": "Album",
|
||||
"artist": "Artist",
|
||||
@ -2669,7 +2692,7 @@
|
||||
},
|
||||
"raw_editor": {
|
||||
"confirm_remove_config_text": "We will automatically generate your Lovelace UI views with your areas and devices if you remove your Lovelace UI configuration.",
|
||||
"confirm_remove_config_title": "Are you sure you want to remove your Lovelace UI configuration? We will automatically generate your Lovelace UI views with your areas and devices.",
|
||||
"confirm_remove_config_title": "Are you sure you want to remove your Lovelace UI configuration?",
|
||||
"confirm_unsaved_changes": "You have unsaved changes, are you sure you want to exit?",
|
||||
"confirm_unsaved_comments": "Your configuration contains comment(s), these will not be saved. Do you want to continue?",
|
||||
"error_invalid_config": "Your configuration is not valid: {error}",
|
||||
|
@ -19,6 +19,7 @@
|
||||
"logbook": "",
|
||||
"mailbox": "",
|
||||
"map": "",
|
||||
"media_browser": "Navegador de medios",
|
||||
"profile": "Perfil",
|
||||
"shopping_list": "Lista de compras",
|
||||
"states": ""
|
||||
@ -106,7 +107,7 @@
|
||||
},
|
||||
"automation": {
|
||||
"off": "Desactivado",
|
||||
"on": "Encendido"
|
||||
"on": "Activada"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
@ -205,7 +206,7 @@
|
||||
"fan_only": "Sólo ventilador",
|
||||
"heat": "Calentar",
|
||||
"heat_cool": "Calentar/Enfriar",
|
||||
"off": "Desactivar"
|
||||
"off": "Apagado"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Configurar",
|
||||
@ -237,7 +238,7 @@
|
||||
"home": "En Casa",
|
||||
"locked": "Cerrado",
|
||||
"not_home": "Fuera de Casa",
|
||||
"off": "Desactivado",
|
||||
"off": "Apagado",
|
||||
"ok": "OK",
|
||||
"on": "Encendido",
|
||||
"open": "Abierto",
|
||||
@ -419,9 +420,16 @@
|
||||
"unlock": "Desbloquear"
|
||||
},
|
||||
"media_player": {
|
||||
"browse_media": "Explorar medios",
|
||||
"media_next_track": "Siguiente",
|
||||
"media_play": "Reproducir",
|
||||
"media_play_pause": "Reproducir/pausa",
|
||||
"media_previous_track": "Anterior",
|
||||
"sound_mode": "Modo de sonido",
|
||||
"source": "Fuente",
|
||||
"text_to_speak": "Texto a hablar"
|
||||
"text_to_speak": "Texto a hablar",
|
||||
"turn_off": "Apagar",
|
||||
"turn_on": "Encender"
|
||||
},
|
||||
"persistent_notification": {
|
||||
"dismiss": "Descartar"
|
||||
@ -498,6 +506,7 @@
|
||||
"back": "Atrás",
|
||||
"cancel": "Cancelar",
|
||||
"close": "Cerrar",
|
||||
"continue": "Continuar",
|
||||
"delete": "Eliminar",
|
||||
"error_required": "Requerido",
|
||||
"loading": "Cargando",
|
||||
@ -544,6 +553,10 @@
|
||||
"toggle": "Alternar"
|
||||
},
|
||||
"entity": {
|
||||
"entity-attribute-picker": {
|
||||
"attribute": "Atributo",
|
||||
"show_attributes": "Mostrar atributos"
|
||||
},
|
||||
"entity-picker": {
|
||||
"clear": "Limpiar",
|
||||
"entity": "Entidad",
|
||||
@ -554,6 +567,58 @@
|
||||
"loading_history": "Cargando historial de estado...",
|
||||
"no_history_found": "No se encontró historial de estado."
|
||||
},
|
||||
"logbook": {
|
||||
"entries_not_found": "No se encontraron entradas en el libro de registro."
|
||||
},
|
||||
"media-browser": {
|
||||
"audio_not_supported": "Su navegador no soporta el elemento de audio.",
|
||||
"choose_player": "Elige el reproductor",
|
||||
"choose-source": "Elige la fuente",
|
||||
"class": {
|
||||
"album": "Álbum",
|
||||
"app": "Aplicación",
|
||||
"artist": "Artista",
|
||||
"channel": "Canal",
|
||||
"composer": "Compositor",
|
||||
"contributing_artist": "Artista colaborador",
|
||||
"directory": "Biblioteca",
|
||||
"episode": "Episodio",
|
||||
"game": "Juego",
|
||||
"genre": "Género",
|
||||
"image": "Imagen",
|
||||
"movie": "Película",
|
||||
"music": "Música",
|
||||
"playlist": "Lista de reproducción",
|
||||
"podcast": "Podcast",
|
||||
"season": "Temporada",
|
||||
"track": "Pista",
|
||||
"tv_show": "Programa de TV",
|
||||
"url": "URL",
|
||||
"video": "Video"
|
||||
},
|
||||
"content-type": {
|
||||
"album": "Álbum",
|
||||
"artist": "Artista",
|
||||
"library": "Biblioteca",
|
||||
"playlist": "Lista de reproducción",
|
||||
"server": "Servidor"
|
||||
},
|
||||
"media_browsing_error": "Error de navegación de medios",
|
||||
"media_not_supported": "El Reproductor multimedia no es compatible con este tipo de medios",
|
||||
"media_player": "Reproductor multimedia",
|
||||
"media-player-browser": "Navegador del reproductor multimedia",
|
||||
"no_items": "No hay elementos",
|
||||
"pick": "Elegir",
|
||||
"pick-media": "Elija medios",
|
||||
"play": "Reproducir",
|
||||
"play-media": "Reproducir medios",
|
||||
"video_not_supported": "Su navegador no soporta el elemento de vídeo.",
|
||||
"web-browser": "Navegador web"
|
||||
},
|
||||
"picture-upload": {
|
||||
"label": "Imagen",
|
||||
"unsupported_format": "Formato no admitido, elija una imagen JPEG, PNG o GIF."
|
||||
},
|
||||
"related-items": {
|
||||
"area": "Área",
|
||||
"automation": "Parte de las siguientes automatizaciones",
|
||||
@ -574,6 +639,7 @@
|
||||
"week": "{count} {count, plural,\n one {semana}\n other {semanas}\n}"
|
||||
},
|
||||
"future": "en {time}",
|
||||
"just_now": "Ahora mismo",
|
||||
"never": "Nunca",
|
||||
"past": "Hace {time}"
|
||||
},
|
||||
@ -652,13 +718,19 @@
|
||||
"pattern": "Patrón de expresiones regulares para la validación del lado del cliente",
|
||||
"text": "Texto"
|
||||
},
|
||||
"platform_not_loaded": "La integración {platform} no está cargada. Agregue su configuración agregando 'default_config:' o ''{platform}:''.",
|
||||
"platform_not_loaded": "La integración {platform} no está cargada. Añádela a su archivo de configuración agregando 'default_config:' o ''{platform}:''.",
|
||||
"required_error_msg": "Este campo es requerido",
|
||||
"yaml_not_editable": "La configuración de esta entidad no se puede editar desde la interfaz de usuario. Solo las entidades configuradas desde la interfaz de usuario se pueden configurar desde la interfaz de usuario."
|
||||
},
|
||||
"image_cropper": {
|
||||
"crop": "Cortar"
|
||||
},
|
||||
"more_info_control": {
|
||||
"controls": "Controles",
|
||||
"details": "Detalles",
|
||||
"dismiss": "Descartar diálogo",
|
||||
"edit": "Editar entidad",
|
||||
"history": "Historial",
|
||||
"person": {
|
||||
"create_zone": "Crear zona desde ubicación actual"
|
||||
},
|
||||
@ -724,11 +796,11 @@
|
||||
},
|
||||
"zha_device_info": {
|
||||
"buttons": {
|
||||
"add": "Agregar dispositivos",
|
||||
"add": "Agregar dispositivos usando este dispositivo",
|
||||
"clusters": "Administrar clústeres",
|
||||
"reconfigure": "Reconfigurar dispositivo",
|
||||
"remove": "Eliminar dispositivo",
|
||||
"zigbee_information": "Información de Zigbee"
|
||||
"zigbee_information": "Firma del dispositivo Zigbee"
|
||||
},
|
||||
"confirmations": {
|
||||
"remove": "¿Está seguro de que desea eliminar el dispositivo?"
|
||||
@ -748,7 +820,7 @@
|
||||
"unknown": "Desconocido",
|
||||
"zha_device_card": {
|
||||
"area_picker_label": "Área",
|
||||
"device_name_placeholder": "Nombre de usuario",
|
||||
"device_name_placeholder": "Cambiar el nombre del dispositivo",
|
||||
"update_name_button": "Actualizar Nombre"
|
||||
}
|
||||
}
|
||||
@ -798,7 +870,7 @@
|
||||
"confirmation_text": "Todos los dispositivos en esta área quedarán sin asignar.",
|
||||
"confirmation_title": "¿Está seguro de que desea eliminar esta área?"
|
||||
},
|
||||
"description": "Visión general de todas las áreas de su casa.",
|
||||
"description": "Gestione las áreas de su casa.",
|
||||
"editor": {
|
||||
"area_id": "Identificador del área",
|
||||
"create": "Crear",
|
||||
@ -859,13 +931,19 @@
|
||||
"label": "Llamar servico",
|
||||
"service_data": "Datos"
|
||||
},
|
||||
"wait_for_trigger": {
|
||||
"continue_timeout": "Continuar cuando el tiempo venza",
|
||||
"label": "Esperar por un desencadenador",
|
||||
"timeout": "Tiempo limite (opcional)"
|
||||
},
|
||||
"wait_template": {
|
||||
"continue_timeout": "Continuar cuando el tiempo venza",
|
||||
"label": "Esperar",
|
||||
"timeout": "Tiempo de espera (opcional)",
|
||||
"wait_template": "Plantilla de espera"
|
||||
}
|
||||
},
|
||||
"unsupported_action": "Acción no soportada: {action}"
|
||||
"unsupported_action": "No hay soporte en la interfaz de usuario para la acción: {action}"
|
||||
},
|
||||
"alias": "Nombre",
|
||||
"conditions": {
|
||||
@ -923,7 +1001,9 @@
|
||||
"time": {
|
||||
"after": "Después de",
|
||||
"before": "Antes de",
|
||||
"label": "Hora"
|
||||
"label": "Hora",
|
||||
"type_input": "Valor de un auxiliar de tipo fecha/tiempo",
|
||||
"type_value": "Tiempo corregido"
|
||||
},
|
||||
"zone": {
|
||||
"entity": "Entidad con ubicación",
|
||||
@ -931,7 +1011,7 @@
|
||||
"zone": "Zona"
|
||||
}
|
||||
},
|
||||
"unsupported_condition": "Condición no soportada: {condition}"
|
||||
"unsupported_condition": "No hay soporte en la interfaz de usuario para la condición: {condition}"
|
||||
},
|
||||
"default_name": "Nueva Automatización",
|
||||
"description": {
|
||||
@ -1000,7 +1080,7 @@
|
||||
"start": "Inicio"
|
||||
},
|
||||
"mqtt": {
|
||||
"label": "",
|
||||
"label": "MQTT",
|
||||
"payload": "Payload (opcional)",
|
||||
"topic": "Topic"
|
||||
},
|
||||
@ -1011,6 +1091,7 @@
|
||||
"value_template": "Plantilla de valor (opcional)"
|
||||
},
|
||||
"state": {
|
||||
"attribute": "Atributo (opcional)",
|
||||
"for": "Por",
|
||||
"from": "De",
|
||||
"label": "Estado",
|
||||
@ -1023,6 +1104,9 @@
|
||||
"sunrise": "Salida del sol",
|
||||
"sunset": "Puesta de sol"
|
||||
},
|
||||
"tag": {
|
||||
"label": "Etiqueta"
|
||||
},
|
||||
"template": {
|
||||
"label": "Plantilla",
|
||||
"value_template": "Plantilla de valor"
|
||||
@ -1034,8 +1118,10 @@
|
||||
"seconds": "Segundos"
|
||||
},
|
||||
"time": {
|
||||
"at": "A",
|
||||
"label": "Hora"
|
||||
"at": "A las",
|
||||
"label": "Hora",
|
||||
"type_input": "Valor de un auxiliar de tipo fecha/tiempo",
|
||||
"type_value": "Tiempo corregido"
|
||||
},
|
||||
"webhook": {
|
||||
"label": "Webhook",
|
||||
@ -1050,7 +1136,7 @@
|
||||
"zone": "Zona"
|
||||
}
|
||||
},
|
||||
"unsupported_platform": "Plataforma no soportada: {platform}"
|
||||
"unsupported_platform": "No hay soporte en la interfaz de usuario para la plataforma: {platform}"
|
||||
},
|
||||
"unsaved_confirm": "Tiene cambios sin guardar. ¿Estás seguro que quieres salir?"
|
||||
},
|
||||
@ -1058,6 +1144,8 @@
|
||||
"add_automation": "Agregar automatización",
|
||||
"delete_automation": "Eliminar automatización",
|
||||
"delete_confirm": "¿Está seguro de que desea eliminar esta automatización?",
|
||||
"duplicate": "Duplicar",
|
||||
"duplicate_automation": "Duplicar automatización",
|
||||
"edit_automation": "Editar automatización",
|
||||
"header": "Editor de automatizaciones",
|
||||
"headers": {
|
||||
@ -1139,8 +1227,13 @@
|
||||
},
|
||||
"alexa": {
|
||||
"banner": "La edición de las entidades expuestas a través de esta interfaz de usuario está deshabilitada porque ha configurado filtros de entidad en configuration.yaml.",
|
||||
"dont_expose_entity": "No exponer la entidad",
|
||||
"expose": "Exponer a Alexa",
|
||||
"expose_entity": "Exponer la entidad",
|
||||
"exposed": "{selected} expuesto",
|
||||
"exposed_entities": "Entidades expuestas",
|
||||
"follow_domain": "Seguir dominio",
|
||||
"not_exposed": "{selected} no expuesto",
|
||||
"not_exposed_entities": "Entidades no expuestas",
|
||||
"title": "Alexa"
|
||||
},
|
||||
@ -1178,8 +1271,14 @@
|
||||
"google": {
|
||||
"banner": "La edición de las entidades expuestas a través de esta interfaz de usuario está deshabilitada porque ha configurado filtros de entidad en configuration.yaml.",
|
||||
"disable_2FA": "Deshabilitar la autenticación de dos factores",
|
||||
"dont_expose_entity": "No exponer la entidad",
|
||||
"expose": "Exponer al Asistente de Google",
|
||||
"expose_entity": "Exponer la entidad",
|
||||
"exposed": "{selected} expuesto",
|
||||
"exposed_entities": "Entidades expuestas",
|
||||
"follow_domain": "Seguir dominio",
|
||||
"manage_domains": "Gestionar dominios",
|
||||
"not_exposed": "{selected} no expuesto",
|
||||
"not_exposed_entities": "Entidades no expuestas",
|
||||
"sync_to_google": "Sincronizar los cambios con Google.",
|
||||
"title": "Asistente de Google"
|
||||
@ -1281,6 +1380,7 @@
|
||||
}
|
||||
},
|
||||
"devices": {
|
||||
"add_prompt": "Aún no se ha agregado ningún {name} con este dispositivo. Puede agregar uno haciendo clic en el botón + de arriba.",
|
||||
"automation": {
|
||||
"actions": {
|
||||
"caption": "Cuando algo se desencadena..."
|
||||
@ -1300,6 +1400,7 @@
|
||||
"caption": "Dispositivos",
|
||||
"confirm_delete": "¿Está seguro de que desea eliminar este dispositivo?",
|
||||
"confirm_rename_entity_ids": "¿También desea cambiar el nombre de la identificación de la entidad de sus entidades?",
|
||||
"confirm_rename_entity_ids_warning": "Esto no cambiará ninguna configuración (como automatizaciones, scripts, escenas, Lovelace) que esté usando actualmente estas entidades, tendrás que actualizarlas tú mismo.",
|
||||
"data_table": {
|
||||
"area": "Área",
|
||||
"battery": "Batería",
|
||||
@ -1341,7 +1442,7 @@
|
||||
},
|
||||
"entities": {
|
||||
"caption": "Entidades",
|
||||
"description": "Visión general de todas las entidades conocidas.",
|
||||
"description": "Gestione todas las entidades conocidas.",
|
||||
"picker": {
|
||||
"disable_selected": {
|
||||
"button": "Deshabilitar selección",
|
||||
@ -1393,7 +1494,7 @@
|
||||
"header": "Configurar Home Assistant",
|
||||
"helpers": {
|
||||
"caption": "Auxiliares",
|
||||
"description": "Elementos que pueden ayudar a construir automatizaciones.",
|
||||
"description": "Gestionar elementos ayudan a construir automatizaciones",
|
||||
"dialog": {
|
||||
"add_helper": "Agregar auxiliar",
|
||||
"add_platform": "Añadir {platform}",
|
||||
@ -1444,6 +1545,7 @@
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Agregar integración",
|
||||
"attention": "Atención requerida",
|
||||
"caption": "Integraciones",
|
||||
"config_entry": {
|
||||
"area": "En {area}",
|
||||
@ -1464,6 +1566,7 @@
|
||||
"options": "Opciones",
|
||||
"rename": "Renombrar",
|
||||
"restart_confirm": "Reinicie Home Assistant para terminar de eliminar esta integración.",
|
||||
"services": "{count} {count, plural,\n one {service}\n other {services}\n}",
|
||||
"settings_button": "Editar configuración para {integration}",
|
||||
"system_options": "Opciones de Sistema",
|
||||
"system_options_button": "Opciones del sistema para {integration}",
|
||||
@ -1486,7 +1589,7 @@
|
||||
},
|
||||
"configure": "Configurar",
|
||||
"configured": "Configurado",
|
||||
"description": "Administrar y configurar integraciones",
|
||||
"description": "Gestione las integraciones",
|
||||
"details": "Detalles de integración",
|
||||
"discovered": "Descubierto",
|
||||
"home_assistant_website": "Sitio web de Home Assistant",
|
||||
@ -1510,6 +1613,7 @@
|
||||
"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 ",
|
||||
"reconfigure": "Reconfigurar",
|
||||
"rename_dialog": "Editar el nombre de esta entrada de configuración",
|
||||
"rename_input_label": "Ingresar Nombre",
|
||||
"search": "Buscar integraciones"
|
||||
@ -1619,13 +1723,84 @@
|
||||
"title": "",
|
||||
"topic": "tema"
|
||||
},
|
||||
"ozw": {
|
||||
"button": "Configurar",
|
||||
"common": {
|
||||
"controller": "Controlador",
|
||||
"instance": "Instancia",
|
||||
"network": "Red"
|
||||
},
|
||||
"navigation": {
|
||||
"network": "Red",
|
||||
"nodes": "Nodos",
|
||||
"select_instance": "Seleccione la instancia"
|
||||
},
|
||||
"network_status": {
|
||||
"details": {
|
||||
"driverallnodesqueried": "Todos los nodos han sido consultados",
|
||||
"driverallnodesqueriedsomedead": "Todos los nodos han sido consultados. Algunos nodos fueron encontrados inactivos.",
|
||||
"driverawakenodesqueries": "Se han consultado todos los nodos activos",
|
||||
"driverfailed": "No se pudo conectar al controlador Z-Wave",
|
||||
"driverready": "Iniciando el controlador de Z-Wave",
|
||||
"driverremoved": "El controlador ha sido eliminado",
|
||||
"driverreset": "El controlador se ha reiniciado",
|
||||
"offline": "OZWDaemon fuera de línea",
|
||||
"ready": "Listo para conectar",
|
||||
"started": "Conectado a MQTT",
|
||||
"starting": "Conectando con MQTT",
|
||||
"stopped": "OpenZWave se detuvo"
|
||||
},
|
||||
"offline": "Fuera de línea",
|
||||
"online": "En línea",
|
||||
"starting": "Comenzando",
|
||||
"unknown": "Desconocido"
|
||||
},
|
||||
"network": {
|
||||
"header": "Gestión de red",
|
||||
"introduction": "Gestione las funciones de toda la red."
|
||||
},
|
||||
"node_query_stages": {
|
||||
"complete": "El proceso de consulta está completo",
|
||||
"configuration": "Obteniendo los valores de configuración del nodo",
|
||||
"dynamic": "Obteniendo los valores que cambian con frecuencia del nodo"
|
||||
},
|
||||
"node": {
|
||||
"button": "Detalles del nodo",
|
||||
"not_found": "Nodo no encontrado"
|
||||
},
|
||||
"nodes_table": {
|
||||
"failed": "Fallido",
|
||||
"id": "ID",
|
||||
"manufacturer": "Fabricante",
|
||||
"model": "Modelo",
|
||||
"query_stage": "Etapa de consulta",
|
||||
"zwave_plus": "Z-Wave Plus"
|
||||
},
|
||||
"refresh_node": {
|
||||
"battery_note": "Si el nodo funciona con batería, asegúrese de activarlo antes de continuar.",
|
||||
"button": "Actualizar nodo",
|
||||
"complete": "Actualización de nodo completa",
|
||||
"description": "Esto le indicará a OpenZWave que vuelva a consultar un nodo y actualice las clases de comando, las capacidades y los valores del nodo.",
|
||||
"node_status": "Estado del nodo",
|
||||
"refreshing_description": "Actualizando la información del nodo ...",
|
||||
"start_refresh_button": "Iniciar actualización",
|
||||
"step": "Paso",
|
||||
"title": "Actualizar la información del nodos",
|
||||
"wakeup_header": "Instrucciones de activación para",
|
||||
"wakeup_instructions_source": "Las instrucciones de activación se obtienen de la base de datos de dispositivos de la comunidad OpenZWave."
|
||||
},
|
||||
"select_instance": {
|
||||
"header": "Seleccione una instancia OpenZWave",
|
||||
"introduction": "Tiene más de una instancia de OpenZWave en ejecución. ¿Qué instancia te gustaría gestionar?"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Agregar persona",
|
||||
"caption": "Personas",
|
||||
"confirm_delete": "¿Está seguro de que desea eliminar a esta persona?",
|
||||
"confirm_delete2": "Todos los dispositivos que pertenecen a esta persona quedarán sin asignar.",
|
||||
"create_person": "Crear persona",
|
||||
"description": "Gestiona las personas que rastrea Home Assistant.",
|
||||
"description": "Gestione las personas que rastrea Home Assistant.",
|
||||
"detail": {
|
||||
"create": "Crear",
|
||||
"delete": "Eliminar",
|
||||
@ -1648,7 +1823,7 @@
|
||||
"scene": {
|
||||
"activated": "Escena activada {name}.",
|
||||
"caption": "Escenas",
|
||||
"description": "Crear y editar escenas",
|
||||
"description": "Gestionar escenas",
|
||||
"editor": {
|
||||
"default_name": "Nueva escena",
|
||||
"devices": {
|
||||
@ -1743,7 +1918,7 @@
|
||||
"reloading": {
|
||||
"automation": "Recargar automatizaciones",
|
||||
"core": "Recargar ubicación y personalizaciones",
|
||||
"group": "Recargar grupos",
|
||||
"group": "Recargar grupos, entidades grupales, y servicios de notificación",
|
||||
"heading": "Recarga de configuración YAML",
|
||||
"input_boolean": "Recargar controles booleanos",
|
||||
"input_datetime": "Recargar controles de fechas",
|
||||
@ -1751,9 +1926,16 @@
|
||||
"input_select": "Recargar controles de selección",
|
||||
"input_text": "Recargar controles de texto",
|
||||
"introduction": "Algunas partes de Home Assistant pueden recargarse sin requerir un reinicio. Al presionar recargar se descargará su configuración YAML actual y se cargará la nueva.",
|
||||
"mqtt": "Recargar entidades MQTT",
|
||||
"person": "Recargar personas",
|
||||
"reload": "Recargar {domain}",
|
||||
"rest": "Recargar entidades \"rest\" y servicios de notificación.",
|
||||
"rpi_gpio": "Recargue las entidades GPIO de la Raspberry Pi",
|
||||
"scene": "Recargar escenas",
|
||||
"script": "Recargar scripts",
|
||||
"smtp": "Recargar servicios de notificación smtp",
|
||||
"telegram": "Recargar servicios de notificación de telegram",
|
||||
"template": "Recargar las entidades de la plantilla",
|
||||
"zone": "Recargar zonas"
|
||||
},
|
||||
"server_management": {
|
||||
@ -1773,6 +1955,32 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"add_tag": "Añadir etiqueta",
|
||||
"automation_title": "La etiqueta {name} ha sido escaneada",
|
||||
"caption": "Etiquetas",
|
||||
"create_automation": "Crea automatización con etiqueta",
|
||||
"description": "Gestionar etiquetas",
|
||||
"detail": {
|
||||
"create": "Crear",
|
||||
"create_and_write": "Crear y escribir",
|
||||
"delete": "Eliminar",
|
||||
"description": "Descripción",
|
||||
"name": "Nombre",
|
||||
"new_tag": "Nueva etiqueta",
|
||||
"tag_id": "ID de etiqueta",
|
||||
"tag_id_placeholder": "Autogenerado cuando se deja vacío",
|
||||
"update": "Actualizar"
|
||||
},
|
||||
"edit": "Editar",
|
||||
"headers": {
|
||||
"last_scanned": "Último escaneado",
|
||||
"name": "Nombre"
|
||||
},
|
||||
"never_scanned": "Nunca escaneado",
|
||||
"no_tags": "Sin etiquetas",
|
||||
"write": "Escribir"
|
||||
},
|
||||
"users": {
|
||||
"add_user": {
|
||||
"caption": "Agregar usuario",
|
||||
@ -1809,7 +2017,7 @@
|
||||
"system": "Sistema"
|
||||
}
|
||||
},
|
||||
"users_privileges_note": "El grupo de usuarios es un trabajo en progreso. El usuario no podrá administrar la instancia a través de la interfaz de usuario. Todavía estamos auditando todos los puntos finales de la API de administración para garantizar que limiten correctamente el acceso a los administradores."
|
||||
"users_privileges_note": "El grupo de usuarios es un trabajo en progreso. El usuario no podrá administrar la instancia a través de la interfaz de usuario. Todavía estamos auditando todos los puntos finales de la API de administración para garantizar que limiten correctamente el acceso solo a los administradores."
|
||||
},
|
||||
"zha": {
|
||||
"add_device_page": {
|
||||
@ -1847,7 +2055,7 @@
|
||||
"clusters": {
|
||||
"header": "Clústeres",
|
||||
"help_cluster_dropdown": "Seleccione un clúster para ver atributos y comandos.",
|
||||
"introduction": "Los clústeres son los bloques de construcción para la funcionalidad de Zigbee. Separa la funcionalidad en unidades lógicas. Hay tipos de clientes y servidores que se componen de atributos y comandos."
|
||||
"introduction": "Los clústeres son los bloques de construcción para la funcionalidad de Zigbee. Ellos separan la funcionalidad en unidades lógicas. Hay tipos de clientes y servidores que se componen de atributos y comandos."
|
||||
},
|
||||
"common": {
|
||||
"add_devices": "Agregar dispositivos",
|
||||
@ -1879,7 +2087,7 @@
|
||||
"create_group": "Zigbee Home Automation - Crear grupo",
|
||||
"create_group_details": "Ingrese los detalles requeridos para crear un nuevo grupo zigbee",
|
||||
"creating_group": "Creando grupo",
|
||||
"description": "Crear y modificar grupos Zigbee",
|
||||
"description": "Gestione los grupos Zigbee",
|
||||
"group_details": "Aquí están todos los detalles para el grupo Zigbee seleccionado.",
|
||||
"group_id": "Identificación del grupo",
|
||||
"group_info": "Información del grupo",
|
||||
@ -2091,9 +2299,14 @@
|
||||
"title": "Estados"
|
||||
},
|
||||
"templates": {
|
||||
"all_listeners": "Esta plantilla escucha todos los eventos de cambio de estado.",
|
||||
"description": "Las plantillas se representan utilizando el motor de plantillas Jinja2 con algunas extensiones específicas de Home Assistant.",
|
||||
"domain": "Dominio",
|
||||
"editor": "Editor de plantillas",
|
||||
"entity": "Entidad",
|
||||
"jinja_documentation": "Documentación de plantillas Jinja2",
|
||||
"listeners": "Esta plantilla escucha los eventos de los siguientes cambios de estado:",
|
||||
"no_listeners": "Esta plantilla no escucha ningún evento de cambio de estado y no se actualizará automáticamente.",
|
||||
"template_extensions": "Extensiones de plantilla de Home Assistant",
|
||||
"title": "Plantilla",
|
||||
"unknown_error_template": "Error desconocido al mostrar la plantilla"
|
||||
@ -2335,7 +2548,11 @@
|
||||
}
|
||||
},
|
||||
"cardpicker": {
|
||||
"by_card": "Por Tarjeta",
|
||||
"by_entity": "Por Entidad",
|
||||
"custom_card": "Personalizado",
|
||||
"domain": "Dominio",
|
||||
"entity": "Entidad",
|
||||
"no_description": "No hay descripción disponible."
|
||||
},
|
||||
"edit_card": {
|
||||
@ -2349,10 +2566,11 @@
|
||||
"options": "Mas opciones",
|
||||
"pick_card": "¿Qué tarjeta desea agregar?",
|
||||
"pick_card_view_title": "¿Qué tarjeta le gustaría agregar a su vista de {name} ?",
|
||||
"search_cards": "Buscar tarjetas",
|
||||
"show_code_editor": "Mostrar editor de código",
|
||||
"show_visual_editor": "Mostrar el editor visual",
|
||||
"toggle_editor": "Cambiar editor",
|
||||
"typed_header": "{tipo} Configuración de la tarjeta",
|
||||
"typed_header": "{type} Configuración de la tarjeta",
|
||||
"unsaved_changes": "Tiene cambios no guardados"
|
||||
},
|
||||
"edit_lovelace": {
|
||||
@ -2429,7 +2647,7 @@
|
||||
},
|
||||
"menu": {
|
||||
"close": "Cerrar",
|
||||
"configure_ui": "Configurar interfaz de usuario",
|
||||
"configure_ui": "Editar interfaz de usuario",
|
||||
"exit_edit_mode": "Salir del modo de edición de la interfaz de usuario",
|
||||
"help": "Ayuda",
|
||||
"refresh": "Refrescar",
|
||||
@ -2661,6 +2879,11 @@
|
||||
"submit": "Enviar"
|
||||
},
|
||||
"current_user": "Actualmente estás conectado como {fullName} .",
|
||||
"customize_sidebar": {
|
||||
"button": "Editar",
|
||||
"description": "También puede mantener pulsado el encabezado de la barra lateral para activar el modo de edición.",
|
||||
"header": "Cambiar el orden y ocultar elementos de la barra lateral"
|
||||
},
|
||||
"dashboard": {
|
||||
"description": "Elija un tablero predeterminado para este dispositivo.",
|
||||
"dropdown_label": "Tablero",
|
||||
@ -2683,6 +2906,7 @@
|
||||
"confirm_delete": "¿Está seguro de que desea eliminar el token de acceso para {name}?",
|
||||
"create": "Crear Token",
|
||||
"create_failed": "No se pudo crear el token de acceso.",
|
||||
"created": "Creado {date}",
|
||||
"created_at": "Creado en {date}",
|
||||
"delete_failed": "No se pudo eliminar el token de acceso.",
|
||||
"description": "Cree tokens de acceso de larga duración para permitir que sus secuencias de comandos interactúen con la instancia de su Home Assistant. Cada token tendrá una validez de 10 años a partir de su creación. Los siguientes tokens de acceso de larga duración están activos actualmente.",
|
||||
@ -2690,9 +2914,10 @@
|
||||
"header": "Tokens de acceso de larga duración",
|
||||
"last_used": "Utilizado por última vez en {date} desde {location}.",
|
||||
"learn_auth_requests": "Aprenda a realizar solicitudes autenticadas.",
|
||||
"name": "Nombre",
|
||||
"not_used": "Nunca se ha utilizado",
|
||||
"prompt_copy_token": "Copia tu token de acceso. No se volverá a mostrar",
|
||||
"prompt_name": "¿Nombre?"
|
||||
"prompt_name": "Dale un nombre al token"
|
||||
},
|
||||
"mfa_setup": {
|
||||
"close": "Cerrar",
|
||||
@ -2748,6 +2973,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"done": "Hecho",
|
||||
"external_app_configuration": "Configuración de la aplicación",
|
||||
"sidebar_toggle": "Alternar barra lateral"
|
||||
}
|
||||
|
@ -507,6 +507,7 @@
|
||||
"cancel": "Cancelar",
|
||||
"close": "Cerrar",
|
||||
"continue": "Continuar",
|
||||
"copied": "Copiado",
|
||||
"delete": "Eliminar",
|
||||
"error_required": "Obligatorio",
|
||||
"loading": "Cargando",
|
||||
@ -567,10 +568,35 @@
|
||||
"loading_history": "Cargando historial de estado...",
|
||||
"no_history_found": "No se encontró historial de estado."
|
||||
},
|
||||
"logbook": {
|
||||
"entries_not_found": "No se han encontrado entradas en el registro."
|
||||
},
|
||||
"media-browser": {
|
||||
"audio_not_supported": "Tu navegador no es compatible con el elemento de audio.",
|
||||
"choose_player": "Elige reproductor",
|
||||
"choose-source": "Elige la fuente",
|
||||
"class": {
|
||||
"album": "Álbum",
|
||||
"app": "Aplicación",
|
||||
"artist": "Artista",
|
||||
"channel": "Canal",
|
||||
"composer": "Compositor",
|
||||
"contributing_artist": "Artista colaborador",
|
||||
"directory": "Biblioteca",
|
||||
"episode": "Episodio",
|
||||
"game": "Juego",
|
||||
"genre": "Género",
|
||||
"image": "Imagen",
|
||||
"movie": "Película",
|
||||
"music": "Música",
|
||||
"playlist": "Lista de reproducción",
|
||||
"podcast": "Podcast",
|
||||
"season": "Temporada",
|
||||
"track": "Pista",
|
||||
"tv_show": "Programa de TV",
|
||||
"url": "Url",
|
||||
"video": "Vídeo"
|
||||
},
|
||||
"content-type": {
|
||||
"album": "Álbum",
|
||||
"artist": "Artista",
|
||||
@ -703,6 +729,7 @@
|
||||
},
|
||||
"more_info_control": {
|
||||
"controls": "Controles",
|
||||
"details": "Detalles",
|
||||
"dismiss": "Descartar diálogo",
|
||||
"edit": "Editar entidad",
|
||||
"history": "Historial",
|
||||
@ -2348,9 +2375,14 @@
|
||||
"title": "Estados"
|
||||
},
|
||||
"templates": {
|
||||
"all_listeners": "Esta plantilla escucha todos los eventos de cambio de estado.",
|
||||
"description": "Las plantillas se muestran utilizando el motor de plantillas Jinja2 con algunas extensiones específicas de Home Assistant.",
|
||||
"domain": "Dominio",
|
||||
"editor": "Editor de plantillas",
|
||||
"entity": "Entidad",
|
||||
"jinja_documentation": "Documentación de plantilla Jinja2",
|
||||
"listeners": "Esta plantilla escucha los siguientes eventos de cambio de estado:",
|
||||
"no_listeners": "Esta plantilla no escucha ningún evento de cambio de estado y no se actualizará automáticamente.",
|
||||
"reset": "Reiniciar a la plantilla de demostración",
|
||||
"template_extensions": "Extensiones de plantilla de Home Assistant",
|
||||
"title": "Plantillas",
|
||||
@ -2937,6 +2969,11 @@
|
||||
"submit": "Enviar"
|
||||
},
|
||||
"current_user": "Has iniciado sesión como {fullName}.",
|
||||
"customize_sidebar": {
|
||||
"button": "Editar",
|
||||
"description": "También puedes mantener pulsada la cabecera de la barra lateral para activar el modo de edición.",
|
||||
"header": "Cambiar el orden y ocultar elementos de la barra lateral"
|
||||
},
|
||||
"dashboard": {
|
||||
"description": "Selecciona un panel de control predeterminado para este dispositivo.",
|
||||
"dropdown_label": "Panel de control",
|
||||
@ -2959,6 +2996,7 @@
|
||||
"confirm_delete": "¿Estás seguro de que quieres eliminar el token de acceso para {name}?",
|
||||
"create": "Crear Token",
|
||||
"create_failed": "No se ha podido crear el token de acceso.",
|
||||
"created": "Creado en {date}",
|
||||
"created_at": "Creado el {date}",
|
||||
"delete_failed": "Error al eliminar el token de acceso.",
|
||||
"description": "Crea tokens de acceso de larga duración para permitir que tus scripts interactúen con tu instancia de Home Assistant. Cada token será válido por 10 años desde la creación. Los siguientes tokens de acceso de larga duración están actualmente activos.",
|
||||
@ -2966,9 +3004,10 @@
|
||||
"header": "Tokens de acceso de larga duración",
|
||||
"last_used": "Último uso el {date} desde {location}",
|
||||
"learn_auth_requests": "Aprende cómo realizar solicitudes autenticadas.",
|
||||
"name": "Nombre",
|
||||
"not_used": "Nunca ha sido usado",
|
||||
"prompt_copy_token": "Copia tu token de acceso. No se mostrará de nuevo.",
|
||||
"prompt_name": "¿Nombre?"
|
||||
"prompt_name": "Dale un nombre al token"
|
||||
},
|
||||
"mfa_setup": {
|
||||
"close": "Cerrar",
|
||||
@ -3032,6 +3071,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"done": "Hecho",
|
||||
"external_app_configuration": "Configuración de la aplicación",
|
||||
"sidebar_toggle": "Alternar barra lateral"
|
||||
}
|
||||
|
@ -507,6 +507,7 @@
|
||||
"cancel": "Annuler",
|
||||
"close": "Fermer",
|
||||
"continue": "Continuer",
|
||||
"copied": "Copié",
|
||||
"delete": "Supprimer",
|
||||
"error_required": "Obligatoire",
|
||||
"loading": "Chargement",
|
||||
@ -567,10 +568,35 @@
|
||||
"loading_history": "Chargement de l'historique des valeurs ...",
|
||||
"no_history_found": "Aucun historique des valeurs trouvé."
|
||||
},
|
||||
"logbook": {
|
||||
"entries_not_found": "Aucune entrée trouvée dans le journal."
|
||||
},
|
||||
"media-browser": {
|
||||
"audio_not_supported": "Votre navigateur ne prend pas en charge l'élément audio.",
|
||||
"choose_player": "Choisissez le lecteur",
|
||||
"choose-source": "Choisissez la source",
|
||||
"class": {
|
||||
"album": "Album",
|
||||
"app": "App",
|
||||
"artist": "Artiste",
|
||||
"channel": "Canal",
|
||||
"composer": "Compositeur",
|
||||
"contributing_artist": "Artiste collaborateur",
|
||||
"directory": "Bibliothèque",
|
||||
"episode": "Épisode",
|
||||
"game": "Jeu",
|
||||
"genre": "Genre",
|
||||
"image": "Image",
|
||||
"movie": "Film",
|
||||
"music": "Musique",
|
||||
"playlist": "Liste de lecture",
|
||||
"podcast": "Podcast",
|
||||
"season": "Saison",
|
||||
"track": "Piste",
|
||||
"tv_show": "Émission de télévision",
|
||||
"url": "Url",
|
||||
"video": "Vidéo"
|
||||
},
|
||||
"content-type": {
|
||||
"album": "Album",
|
||||
"artist": "Artiste",
|
||||
@ -703,6 +729,7 @@
|
||||
},
|
||||
"more_info_control": {
|
||||
"controls": "Contrôles",
|
||||
"details": "Détails",
|
||||
"dismiss": "Fermer la fenêtre de dialogue",
|
||||
"edit": "Modifier l'entité",
|
||||
"history": "Historique",
|
||||
@ -934,9 +961,12 @@
|
||||
"service_data": "Données du service"
|
||||
},
|
||||
"wait_for_trigger": {
|
||||
"label": "Attendre le déclencheur"
|
||||
"continue_timeout": "Continuer à l'expiration du délai",
|
||||
"label": "Attendre le déclencheur",
|
||||
"timeout": "Délai d'expiration (optionnel)"
|
||||
},
|
||||
"wait_template": {
|
||||
"continue_timeout": "Continuer à l'expiration du délai",
|
||||
"label": "Attendre",
|
||||
"timeout": "Délai d'expiration (optionnel)",
|
||||
"wait_template": "Template d'attente"
|
||||
@ -1000,7 +1030,9 @@
|
||||
"time": {
|
||||
"after": "Après",
|
||||
"before": "Avant",
|
||||
"label": "Heure"
|
||||
"label": "Heure",
|
||||
"type_input": "Valeur d'une aide de date/heure",
|
||||
"type_value": "Temps fixe"
|
||||
},
|
||||
"zone": {
|
||||
"entity": "Entité avec localisation",
|
||||
@ -1567,6 +1599,7 @@
|
||||
"reload_restart_confirm": "Redémarrer Home Assistant pour finaliser le rechargement de cette intégration",
|
||||
"rename": "Renommer",
|
||||
"restart_confirm": "Redémarrer Home Assistant pour terminer la suppression de cette intégration",
|
||||
"services": "{count} {count, plural,\n one {service}\n other {services}\n}",
|
||||
"settings_button": "Modifier les paramètres pour {integration}",
|
||||
"system_options": "Options système",
|
||||
"system_options_button": "Options système pour {integration}",
|
||||
@ -2342,9 +2375,14 @@
|
||||
"title": "États"
|
||||
},
|
||||
"templates": {
|
||||
"all_listeners": "Ce modèle écoute tous les événements de changement d'état.",
|
||||
"description": "Les modèles sont rendus à l'aide du moteur de modèles Jinja2 avec certaines extensions spécifiques de Home Assistant.",
|
||||
"domain": "Domaine",
|
||||
"editor": "Éditeur de modèles",
|
||||
"entity": "Entité",
|
||||
"jinja_documentation": "Documentation de modèle Jinja2",
|
||||
"listeners": "Ce modèle écoute les événements de changement d'état suivants:",
|
||||
"no_listeners": "Ce modèle n'écoute aucun événement de changement d'état et ne sera pas mis à jour automatiquement.",
|
||||
"reset": "Réinitialiser au modèle de démonstration",
|
||||
"template_extensions": "Extensions de modèles de Home Assistant",
|
||||
"title": "Modèle",
|
||||
@ -2931,6 +2969,11 @@
|
||||
"submit": "Envoyer"
|
||||
},
|
||||
"current_user": "Vous êtes actuellement connecté en tant que {fullName}.",
|
||||
"customize_sidebar": {
|
||||
"button": "Modifier",
|
||||
"description": "Vous pouvez également appuyer et maintenir l'en-tête de la barre latérale pour activer le mode d'édition.",
|
||||
"header": "Modifier l'ordre et masquer les éléments de la barre latérale"
|
||||
},
|
||||
"dashboard": {
|
||||
"description": "Choisissez un tableau de bord par défaut pour cet appareil.",
|
||||
"dropdown_label": "Tableau de bord",
|
||||
@ -2953,6 +2996,7 @@
|
||||
"confirm_delete": "Êtes-vous sûr de vouloir supprimer le jeton d'accès de {name} ?",
|
||||
"create": "Créer un jeton",
|
||||
"create_failed": "Impossible de créer le jeton d'accès.",
|
||||
"created": "Créé le {date}",
|
||||
"created_at": "Créé le {date}",
|
||||
"delete_failed": "Impossible de supprimer le jeton d'accès.",
|
||||
"description": "Créez des jetons d'accès de longue durée pour permettre à vos scripts d'interagir avec votre instance de Home Assistant. Chaque jeton sera valable 10 ans à compter de sa création. Les jetons d'accès longue durée suivants sont actuellement actifs.",
|
||||
@ -2960,6 +3004,7 @@
|
||||
"header": "Jetons d'accès de longue durée",
|
||||
"last_used": "Dernière utilisation le {date} à partir de {location}",
|
||||
"learn_auth_requests": "Apprenez comment faire des demandes authentifiées.",
|
||||
"name": "Nom",
|
||||
"not_used": "N'a jamais été utilisé",
|
||||
"prompt_copy_token": "Copiez votre jeton d'accès. Il ne sera plus affiché à nouveau.",
|
||||
"prompt_name": "Nom ?"
|
||||
@ -3026,6 +3071,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"done": "Terminé",
|
||||
"external_app_configuration": "Configuration de l'application",
|
||||
"sidebar_toggle": "Activer la barre latérale"
|
||||
}
|
||||
|
@ -507,6 +507,7 @@
|
||||
"cancel": "Avbryt",
|
||||
"close": "Lukk",
|
||||
"continue": "Fortsette",
|
||||
"copied": "Kopiert",
|
||||
"delete": "Slett",
|
||||
"error_required": "Nødvendig",
|
||||
"loading": "Laster",
|
||||
@ -574,6 +575,28 @@
|
||||
"audio_not_supported": "Nettleseren din støtter ikke lydelementet.",
|
||||
"choose_player": "Velg spiller",
|
||||
"choose-source": "Velg kilde",
|
||||
"class": {
|
||||
"album": "Album",
|
||||
"app": "App",
|
||||
"artist": "Artist",
|
||||
"channel": "Kanal",
|
||||
"composer": "Komponist",
|
||||
"contributing_artist": "Medvirkende artist",
|
||||
"directory": "Bibliotek",
|
||||
"episode": "Episode",
|
||||
"game": "Spill",
|
||||
"genre": "Sjanger",
|
||||
"image": "Bilde",
|
||||
"movie": "Film",
|
||||
"music": "Musikk",
|
||||
"playlist": "Spilleliste",
|
||||
"podcast": "Podcast",
|
||||
"season": "Sesong",
|
||||
"track": "Spor",
|
||||
"tv_show": "TV Serie",
|
||||
"url": "Url",
|
||||
"video": "Video"
|
||||
},
|
||||
"content-type": {
|
||||
"album": "Album",
|
||||
"artist": "Artist",
|
||||
@ -2352,9 +2375,14 @@
|
||||
"title": "Tilstander"
|
||||
},
|
||||
"templates": {
|
||||
"all_listeners": "Denne malen lytter etter alle tilstandsfornede hendelser.",
|
||||
"description": "Maler blir rendret ved hjelp av Jinja2-malmotoren med noen spesifikke utvidelser for Home Assistant.",
|
||||
"domain": "Domene",
|
||||
"editor": "Maleditor",
|
||||
"entity": "Entitet",
|
||||
"jinja_documentation": "Jinja2 mal dokumentasjon",
|
||||
"listeners": "Denne malen lytter etter følgende tilstandsfor endrede hendelser:",
|
||||
"no_listeners": "Denne malen lytter ikke etter eventuelle tilstandsfornedne hendelser og oppdateres ikke automatisk.",
|
||||
"reset": "Tilbakestill til demomal",
|
||||
"template_extensions": "Mal utvidelser for Home Assistant",
|
||||
"title": "Mal",
|
||||
@ -2941,6 +2969,11 @@
|
||||
"submit": "Send inn"
|
||||
},
|
||||
"current_user": "Du er logget inn som {fullName}.",
|
||||
"customize_sidebar": {
|
||||
"button": "Redigere",
|
||||
"description": "Du kan også trykke på og holde nede overskriften på sidefeltet for å aktivere redigeringsmodus.",
|
||||
"header": "Endre rekkefølgen og skjul elementer fra sidepanelet"
|
||||
},
|
||||
"dashboard": {
|
||||
"description": "Velg et standard instrumentbord for denne enheten.",
|
||||
"dropdown_label": "",
|
||||
@ -2963,6 +2996,7 @@
|
||||
"confirm_delete": "Er du sikker på at du vil slette tilgangstoken for {name}?",
|
||||
"create": "Opprett Token",
|
||||
"create_failed": "Kunne ikke opprette tilgangstoken.",
|
||||
"created": "Opprettet {date}",
|
||||
"created_at": "Opprettet den {date}",
|
||||
"delete_failed": "Kan ikke slette tilgangstokenet.",
|
||||
"description": "Opprett langvarige tilgangstokener slik at skriptene dine kan samhandle med din Home Assistant instans. Hver token vil være gyldig i 10 år fra opprettelsen. Følgende langvarige tilgangstokener er for tiden aktive.",
|
||||
@ -2970,9 +3004,10 @@
|
||||
"header": "Langvarige tilgangstokener",
|
||||
"last_used": "Sist brukt den {date} fra {location}",
|
||||
"learn_auth_requests": "Lær hvordan du lager godkjente forespørsler.",
|
||||
"name": "Navn",
|
||||
"not_used": "Har aldri blitt brukt",
|
||||
"prompt_copy_token": "Kopier tilgangstoken. Det blir ikke vist igjen.",
|
||||
"prompt_name": "Navn?"
|
||||
"prompt_name": "Gi tokenet et navn"
|
||||
},
|
||||
"mfa_setup": {
|
||||
"close": "Lukk",
|
||||
@ -3036,6 +3071,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"done": "Ferdig",
|
||||
"external_app_configuration": "Appkonfigurasjon",
|
||||
"sidebar_toggle": "Vis/Skjul sidepanel"
|
||||
}
|
||||
|
@ -507,6 +507,7 @@
|
||||
"cancel": "Annuleren",
|
||||
"close": "Sluiten",
|
||||
"continue": "Ga verder",
|
||||
"copied": "Gekopieerd",
|
||||
"delete": "Verwijderen",
|
||||
"error_required": "Verplicht",
|
||||
"loading": "Bezig met laden",
|
||||
@ -574,6 +575,28 @@
|
||||
"audio_not_supported": "Uw browser ondersteunt het audio-element niet.",
|
||||
"choose_player": "Kies speler",
|
||||
"choose-source": "Kies bron",
|
||||
"class": {
|
||||
"album": "Album",
|
||||
"app": "App",
|
||||
"artist": "Artiest",
|
||||
"channel": "Kanaal",
|
||||
"composer": "Componist",
|
||||
"contributing_artist": "Bijdragende artiest",
|
||||
"directory": "Bibliotheek",
|
||||
"episode": "Aflevering",
|
||||
"game": "Spel",
|
||||
"genre": "Genre",
|
||||
"image": "Afbeelding",
|
||||
"movie": "Film",
|
||||
"music": "Muziek",
|
||||
"playlist": "Afspeellijst",
|
||||
"podcast": "Podcast",
|
||||
"season": "Seizoen",
|
||||
"track": "Nummer",
|
||||
"tv_show": "TV-programma",
|
||||
"url": "Url",
|
||||
"video": "Video"
|
||||
},
|
||||
"content-type": {
|
||||
"album": "Album",
|
||||
"artist": "Artiest",
|
||||
@ -2352,9 +2375,14 @@
|
||||
"title": "Toestanden"
|
||||
},
|
||||
"templates": {
|
||||
"all_listeners": "Deze template luistert naar alle gebeurtenissen met gewijzigde status.",
|
||||
"description": "Sjablonen worden weergegeven met de Jinja2-sjabloonediter samen met enkele extensies van Home Assistant.",
|
||||
"domain": "Domein",
|
||||
"editor": "Sjabloonediter",
|
||||
"entity": "Entiteit",
|
||||
"jinja_documentation": "Jinja2-sjabloondocumentatie",
|
||||
"listeners": "Deze template luistert naar de volgende gebeurtenissen met gewijzigde status:",
|
||||
"no_listeners": "Deze template luistert niet naar gebeurtenissen met statuswijziging en wordt niet automatisch bijgewerkt.",
|
||||
"reset": "Resetten naar demosjabloon",
|
||||
"template_extensions": "Home Assistant sjabloon extensiesHome Assistant",
|
||||
"title": "Sjablonen",
|
||||
@ -2941,6 +2969,11 @@
|
||||
"submit": "Verzenden"
|
||||
},
|
||||
"current_user": "Je bent momenteel ingelogd als {fullName}.",
|
||||
"customize_sidebar": {
|
||||
"button": "Bewerken",
|
||||
"description": "U kunt ook de koptekst van de zijbalk ingedrukt houden om de bewerkingsmodus te activeren.",
|
||||
"header": "Wijzig de volgorde en verberg items van de zijbalk"
|
||||
},
|
||||
"dashboard": {
|
||||
"description": "Kies een standaard dashboard voor dit apparaat.",
|
||||
"dropdown_label": "Dashboard",
|
||||
@ -2963,6 +2996,7 @@
|
||||
"confirm_delete": "Weet je zeker dat je de toegangstoken voor {name} wilt verwijderen?",
|
||||
"create": "Token aanmaken",
|
||||
"create_failed": "De toegangstoken kon niet worden aangemaakt.",
|
||||
"created": "Gemaakt op {date}",
|
||||
"created_at": "Gemaakt op {date}",
|
||||
"delete_failed": "Verwijderen van de toegangstoken is mislukt.",
|
||||
"description": "Maak toegangstokens met een lange levensduur zodat je scripts kunnen communiceren met je Home Assistant-instantie. Elk token is tien jaar geldig vanaf de aanmaakdatum. De volgende langlevende toegangstokens zijn momenteel actief.",
|
||||
@ -2970,9 +3004,10 @@
|
||||
"header": "Toegangtokens met lange levensduur",
|
||||
"last_used": "Laatst gebruikt op {date} vanaf {location}",
|
||||
"learn_auth_requests": "Kom te weten hoe je geverifieerde verzoeken kunt maken",
|
||||
"name": "Naam",
|
||||
"not_used": "Is nog nooit gebruikt",
|
||||
"prompt_copy_token": "Kopieer je toegangstoken. Het wordt niet meer getoond.",
|
||||
"prompt_name": "Naam?"
|
||||
"prompt_name": "Geef het token een naam"
|
||||
},
|
||||
"mfa_setup": {
|
||||
"close": "Sluiten",
|
||||
@ -3036,6 +3071,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"done": "Gedaan",
|
||||
"external_app_configuration": "App configuratie",
|
||||
"sidebar_toggle": "Zijbalk in- en uitschakelen"
|
||||
}
|
||||
|
@ -19,6 +19,7 @@
|
||||
"logbook": "Dziennik",
|
||||
"mailbox": "Poczta",
|
||||
"map": "Mapa",
|
||||
"media_browser": "Odtwarzacz mediów",
|
||||
"profile": "Profil",
|
||||
"shopping_list": "Lista zakupów",
|
||||
"states": "Przegląd"
|
||||
@ -506,6 +507,7 @@
|
||||
"cancel": "Anuluj",
|
||||
"close": "Zamknij",
|
||||
"continue": "Kontynuuj",
|
||||
"copied": "Skopiowano",
|
||||
"delete": "Usuń",
|
||||
"error_required": "To pole jest wymagane",
|
||||
"loading": "Ładowanie",
|
||||
@ -553,6 +555,7 @@
|
||||
},
|
||||
"entity": {
|
||||
"entity-attribute-picker": {
|
||||
"attribute": "Atrybut",
|
||||
"show_attributes": "Pokaż atrybuty"
|
||||
},
|
||||
"entity-picker": {
|
||||
@ -565,10 +568,35 @@
|
||||
"loading_history": "Ładowanie historii...",
|
||||
"no_history_found": "Nie znaleziono historii."
|
||||
},
|
||||
"logbook": {
|
||||
"entries_not_found": "Nie znaleziono wpisów w dzienniku."
|
||||
},
|
||||
"media-browser": {
|
||||
"audio_not_supported": "Twoja przeglądarka nie obsługuje elementu audio.",
|
||||
"choose_player": "Wybierz odtwarzacz",
|
||||
"choose-source": "Wybierz źródło",
|
||||
"class": {
|
||||
"album": "Album",
|
||||
"app": "Aplikacja",
|
||||
"artist": "Artysta",
|
||||
"channel": "Kanał",
|
||||
"composer": "Kompozytor",
|
||||
"contributing_artist": "Artysta współpracujący",
|
||||
"directory": "Biblioteka",
|
||||
"episode": "Odcinek",
|
||||
"game": "Gra",
|
||||
"genre": "Gatunek",
|
||||
"image": "Obraz",
|
||||
"movie": "Film",
|
||||
"music": "Muzyka",
|
||||
"playlist": "Playlista",
|
||||
"podcast": "Podcast",
|
||||
"season": "Sezon",
|
||||
"track": "Ścieżka",
|
||||
"tv_show": "Program telewizyjny",
|
||||
"url": "URL",
|
||||
"video": "Wideo"
|
||||
},
|
||||
"content-type": {
|
||||
"album": "Album",
|
||||
"artist": "Artysta",
|
||||
@ -576,6 +604,7 @@
|
||||
"playlist": "Lista odtwarzania",
|
||||
"server": "Serwer"
|
||||
},
|
||||
"media_browsing_error": "Błąd przeglądania multimediów",
|
||||
"media_not_supported": "Przeglądarka odtwarzacza mediów nie obsługuje tego typu mediów",
|
||||
"media_player": "Odtwarzacz mediów",
|
||||
"media-player-browser": "Przeglądarka odtwarzacza mediów",
|
||||
@ -931,7 +960,13 @@
|
||||
"label": "Wywołanie usługi",
|
||||
"service_data": "Dane usługi"
|
||||
},
|
||||
"wait_for_trigger": {
|
||||
"continue_timeout": "Kontynuuj po przekroczeniu limitu czasu",
|
||||
"label": "Czekaj na wyzwalacz",
|
||||
"timeout": "Limit czasu (opcjonalnie)"
|
||||
},
|
||||
"wait_template": {
|
||||
"continue_timeout": "Kontynuuj po przekroczeniu limitu czasu",
|
||||
"label": "Oczekiwanie",
|
||||
"timeout": "Limit czasu (opcjonalnie)",
|
||||
"wait_template": "Szablon czekania"
|
||||
@ -995,7 +1030,9 @@
|
||||
"time": {
|
||||
"after": "Po",
|
||||
"before": "Przed",
|
||||
"label": "Czas"
|
||||
"label": "Czas",
|
||||
"type_input": "Wartość pomocnika typu data/czas",
|
||||
"type_value": "Ustalony czas"
|
||||
},
|
||||
"zone": {
|
||||
"entity": "Encja z lokalizacją",
|
||||
@ -1083,6 +1120,7 @@
|
||||
"value_template": "Szablon wartości (opcjonalnie)"
|
||||
},
|
||||
"state": {
|
||||
"attribute": "Atrybut (opcjonalnie)",
|
||||
"for": "Przez",
|
||||
"from": "Z",
|
||||
"label": "Stan",
|
||||
@ -1110,7 +1148,9 @@
|
||||
},
|
||||
"time": {
|
||||
"at": "O",
|
||||
"label": "Czas"
|
||||
"label": "Czas",
|
||||
"type_input": "Wartość pomocnika typu data/czas",
|
||||
"type_value": "Ustalony czas"
|
||||
},
|
||||
"webhook": {
|
||||
"label": "Webhook",
|
||||
@ -1134,7 +1174,7 @@
|
||||
"delete_automation": "Usuń automatyzację",
|
||||
"delete_confirm": "Czy na pewno chcesz usunąć tę automatyzację?",
|
||||
"duplicate": "Duplikuj",
|
||||
"duplicate_automation": "Duplikat automatyzację",
|
||||
"duplicate_automation": "Duplikuj automatyzację",
|
||||
"edit_automation": "Edytuj automatyzację",
|
||||
"header": "Edytor automatyzacji",
|
||||
"headers": {
|
||||
@ -1502,7 +1542,7 @@
|
||||
},
|
||||
"types": {
|
||||
"input_boolean": "Przełącznik",
|
||||
"input_datetime": "Data i/lub godzina",
|
||||
"input_datetime": "Data i/lub czas",
|
||||
"input_number": "Numer",
|
||||
"input_select": "Pole wyboru",
|
||||
"input_text": "Tekst"
|
||||
@ -1535,6 +1575,7 @@
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Dodaj integrację",
|
||||
"attention": "Wymaga uwagi",
|
||||
"caption": "Integracje",
|
||||
"config_entry": {
|
||||
"area": "obszar: {area}",
|
||||
@ -1937,7 +1978,7 @@
|
||||
"reloading": {
|
||||
"automation": "Automatyzacje",
|
||||
"command_line": "Encje komponentu linia komend",
|
||||
"core": "Lokalizacja i dostosowywanie",
|
||||
"core": "Lokalizację i dostosowywanie",
|
||||
"filesize": "Encje komponentu wielkość pliku",
|
||||
"filter": "Encje komponentu filtr",
|
||||
"generic": "Encje komponentu kamera IP generic",
|
||||
@ -2334,9 +2375,14 @@
|
||||
"title": "Stany"
|
||||
},
|
||||
"templates": {
|
||||
"all_listeners": "Ten szablon nasłuchuje wszystkich zdarzeń zmiany stanu.",
|
||||
"description": "Szablony są renderowane przy użyciu silnika szablonów Jinja2 z kilkoma specyficznymi rozszerzeniami Home Assistanta.",
|
||||
"domain": "Domena",
|
||||
"editor": "Edytor szablonów",
|
||||
"entity": "Encja",
|
||||
"jinja_documentation": "Dokumentacja szablonów Jinja2",
|
||||
"listeners": "Ten szablon nasłuchuje następujących zdarzeń zmiany stanu:",
|
||||
"no_listeners": "Ten szablon nie nasłuchuje żadnych zdarzeń zmiany stanu i nie zostanie zaktualizowany automatycznie.",
|
||||
"reset": "Zresetuj do szablonu demonstracyjnego",
|
||||
"template_extensions": "Rozszerzenia szablonów Home Assistanta",
|
||||
"title": "Szablon",
|
||||
@ -2923,6 +2969,11 @@
|
||||
"submit": "Zatwierdź"
|
||||
},
|
||||
"current_user": "Jesteś obecnie zalogowany jako {fullName}.",
|
||||
"customize_sidebar": {
|
||||
"button": "Edytuj",
|
||||
"description": "Możesz także nacisnąć i przytrzymać nagłówek paska bocznego, aby aktywować tryb edycji.",
|
||||
"header": "Zmień kolejność i ukryj elementy na pasku bocznym"
|
||||
},
|
||||
"dashboard": {
|
||||
"description": "Wybierz domyślny dashboard dla tego urządzenia.",
|
||||
"dropdown_label": "Dashboard",
|
||||
@ -2945,6 +2996,7 @@
|
||||
"confirm_delete": "Czy na pewno chcesz usunąć token dla {name}?",
|
||||
"create": "Utwórz token",
|
||||
"create_failed": "Nie udało się utworzyć tokena.",
|
||||
"created": "Utworzony {date}",
|
||||
"created_at": "Utworzony {date}",
|
||||
"delete_failed": "Nie udało się usunąć tokena.",
|
||||
"description": "Długoterminowe tokeny dostępu umożliwiają skryptom interakcję z Home Assistantem. Każdy token będzie ważny przez 10 lat od utworzenia. Następujące tokeny są obecnie aktywne.",
|
||||
@ -3019,6 +3071,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"done": "Gotowe",
|
||||
"external_app_configuration": "Konfiguracja aplikacji",
|
||||
"sidebar_toggle": "Przełącz pasek boczny"
|
||||
}
|
||||
|
@ -489,6 +489,7 @@
|
||||
"back": "Înapoi",
|
||||
"cancel": "Revocare",
|
||||
"close": "Închide",
|
||||
"copied": "Copiat",
|
||||
"delete": "Șterge",
|
||||
"error_required": "Necesar",
|
||||
"loading": "Se încarcă",
|
||||
@ -544,6 +545,32 @@
|
||||
"loading_history": "Încărcarea istoricului de stare ...",
|
||||
"no_history_found": "Nici un istoric de stare nu a fost găsit."
|
||||
},
|
||||
"logbook": {
|
||||
"entries_not_found": "Nu s-au găsit intrări în jurnal."
|
||||
},
|
||||
"media-browser": {
|
||||
"class": {
|
||||
"album": "Album",
|
||||
"app": "Aplicație",
|
||||
"artist": "Artist",
|
||||
"channel": "Canal",
|
||||
"composer": "Compozitor",
|
||||
"contributing_artist": "Artist contribuitor",
|
||||
"directory": "Bibliotecă",
|
||||
"episode": "Episod",
|
||||
"game": "Joc",
|
||||
"genre": "Gen",
|
||||
"image": "Imagine",
|
||||
"movie": "Film",
|
||||
"music": "Muzică",
|
||||
"playlist": "Playlist",
|
||||
"podcast": "Podcast",
|
||||
"season": "Sezon",
|
||||
"tv_show": "Emisiune TV",
|
||||
"url": "Url",
|
||||
"video": "Video"
|
||||
}
|
||||
},
|
||||
"related-items": {
|
||||
"area": "Zonă",
|
||||
"automation": "Parte din următoarele automatizări",
|
||||
@ -647,6 +674,7 @@
|
||||
"yaml_not_editable": "Setările acestei entități nu se pot edita din interfața grafica. Numai entitățile configurate in interfața grafica sunt configurabile din interfața grafica."
|
||||
},
|
||||
"more_info_control": {
|
||||
"details": "Detalii",
|
||||
"dismiss": "Se respinge dialogul",
|
||||
"edit": "Editează entitatea",
|
||||
"person": {
|
||||
@ -850,7 +878,13 @@
|
||||
"label": "Cheama serviciu",
|
||||
"service_data": "Date serviciu"
|
||||
},
|
||||
"wait_for_trigger": {
|
||||
"continue_timeout": "Continua la timeout",
|
||||
"label": "Așteptați declanșatorul",
|
||||
"timeout": "Timeout (optional)"
|
||||
},
|
||||
"wait_template": {
|
||||
"continue_timeout": "Continuați la expirare",
|
||||
"label": "Asteptare",
|
||||
"timeout": "Timeout (opțional)",
|
||||
"wait_template": "Sablon Asteptare"
|
||||
@ -1260,6 +1294,7 @@
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Adăugați integrare",
|
||||
"attention": "Atenție necesară",
|
||||
"caption": "Integrări",
|
||||
"config_entry": {
|
||||
"delete": "Șterge",
|
||||
@ -1317,6 +1352,7 @@
|
||||
"none": "Nimic nu a fost configurat încă",
|
||||
"none_found": "Nu s-au găsit integrări",
|
||||
"none_found_detail": "Ajustați criteriile de căutare.",
|
||||
"reconfigure": "Reconfigurați",
|
||||
"rename_dialog": "Editați numele acestei intrări de configurare",
|
||||
"rename_input_label": "Introdu nume",
|
||||
"search": "Căutare integrari"
|
||||
@ -1848,9 +1884,14 @@
|
||||
"title": "Status"
|
||||
},
|
||||
"templates": {
|
||||
"all_listeners": "Acest șablon ascultă următoarele evenimente modificate de stare:",
|
||||
"description": "Șabloanele sunt redate utilizând motorul de șablon Jinja2 cu unele extensii specifice Home Assistant.",
|
||||
"domain": "Domeniu",
|
||||
"editor": "Editor șabloane",
|
||||
"entity": "Entitate",
|
||||
"jinja_documentation": "Șablon documentație Jinja2",
|
||||
"listeners": "Acest șablon ascultă următoarele evenimente modificate de stare:",
|
||||
"no_listeners": "Acest șablon ascultă următoarele evenimente modificate de stare:",
|
||||
"template_extensions": "Șabloane de extensie pentru Home Assistant",
|
||||
"title": "Sabloane",
|
||||
"unknown_error_template": "Sa produs o eroare de randare necunoscută."
|
||||
@ -2353,6 +2394,11 @@
|
||||
"submit": "Trimite"
|
||||
},
|
||||
"current_user": "În prezent sunteți conectat ca {fullName}.",
|
||||
"customize_sidebar": {
|
||||
"button": "Editeaza",
|
||||
"description": "De asemenea, puteți apăsa și ține apăsat antetul barei laterale pentru a activa modul de editare.",
|
||||
"header": "Schimbați ordinea și ascundeți elementele din bara laterală"
|
||||
},
|
||||
"dashboard": {
|
||||
"description": "Alegeți un tablou de bord implicit pentru acest dispozitiv.",
|
||||
"dropdown_label": "Tablou de bord",
|
||||
@ -2375,6 +2421,7 @@
|
||||
"confirm_delete": "Sigur doriti sa stergeti tokenul de acces pentru {name}?",
|
||||
"create": "Creaza un Token",
|
||||
"create_failed": "Crearea tokenului de acces eşuată",
|
||||
"created": "Creat in {data}",
|
||||
"created_at": "Creat in {date}",
|
||||
"delete_failed": "Ştergerea tokenului de acces eşuată",
|
||||
"description": "Creați tokenuri de acces cu durată lungă de viață pentru a permite script-urilor dvs. să interacționeze cu instanța dvs. Home Assistant. Fiecare token va fi valabil timp de 10 ani de la creatie. Următoarele tokenuri de acces de lungă durată sunt active la ora actuala.",
|
||||
@ -2382,6 +2429,7 @@
|
||||
"header": "Tokenuri de acces de lunga durata",
|
||||
"last_used": "Ultima utilizare la {date} din {location}",
|
||||
"learn_auth_requests": "Aflați cum să faceți cereri autentificate.",
|
||||
"name": "Nume",
|
||||
"not_used": "Nu a fost utilizat niciodata",
|
||||
"prompt_copy_token": "Copia token-ul de acces. Acesta nu va fi afișat din nou.",
|
||||
"prompt_name": "Nume?"
|
||||
@ -2443,6 +2491,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"done": "Terminat",
|
||||
"external_app_configuration": "Configurație aplicație",
|
||||
"sidebar_toggle": "Schimbati bara laterală"
|
||||
}
|
||||
|
@ -507,6 +507,7 @@
|
||||
"cancel": "Отменить",
|
||||
"close": "Закрыть",
|
||||
"continue": "Продолжить",
|
||||
"copied": "Скопировано",
|
||||
"delete": "Удалить",
|
||||
"error_required": "Обязательное поле",
|
||||
"loading": "Загрузка",
|
||||
@ -574,6 +575,28 @@
|
||||
"audio_not_supported": "Ваш браузер не поддерживает аудио.",
|
||||
"choose_player": "Выберите медиаплеер",
|
||||
"choose-source": "Выбрать источник",
|
||||
"class": {
|
||||
"album": "Альбом",
|
||||
"app": "Приложение",
|
||||
"artist": "Исполнитель",
|
||||
"channel": "Канал",
|
||||
"composer": "Композитор",
|
||||
"contributing_artist": "Соисполнитель",
|
||||
"directory": "Библиотека",
|
||||
"episode": "Эпизод",
|
||||
"game": "Игра",
|
||||
"genre": "Жанр",
|
||||
"image": "Изображение",
|
||||
"movie": "Фильм",
|
||||
"music": "Музыка",
|
||||
"playlist": "Плейлист",
|
||||
"podcast": "Подкаст",
|
||||
"season": "Сезон",
|
||||
"track": "Трек",
|
||||
"tv_show": "Сериалы",
|
||||
"url": "URL-адрес",
|
||||
"video": "Видео"
|
||||
},
|
||||
"content-type": {
|
||||
"album": "Альбом",
|
||||
"artist": "Исполнитель",
|
||||
@ -2352,9 +2375,14 @@
|
||||
"title": "Состояния"
|
||||
},
|
||||
"templates": {
|
||||
"all_listeners": "Этот шаблон отслеживает все события изменения состояния.",
|
||||
"description": "Здесь Вы можете протестировать поведение шаблонов. В Home Assistant используется шаблонизатор Jinja2 с некоторыми специальными расширениями.",
|
||||
"domain": "Домен",
|
||||
"editor": "Редактор шаблонов",
|
||||
"entity": "Объект",
|
||||
"jinja_documentation": "Узнайте больше о шаблонизаторе Jinja2",
|
||||
"listeners": "Этот шаблон отслеживает следующие события изменения состояния:",
|
||||
"no_listeners": "Этот шаблон не отслеживает события изменения состояния и не обновляется автоматически.",
|
||||
"reset": "Вернуться к демонстрационному шаблону",
|
||||
"template_extensions": "Узнайте больше о шаблонах Home Assistant",
|
||||
"title": "Шаблоны",
|
||||
@ -2941,6 +2969,11 @@
|
||||
"submit": "Подтвердить"
|
||||
},
|
||||
"current_user": "Добро пожаловать, {fullName}! Вы вошли в систему.",
|
||||
"customize_sidebar": {
|
||||
"button": "Изменить",
|
||||
"description": "Режим редактирования можно включить, нажав и удерживая заголовок боковой панели",
|
||||
"header": "Изменить элементы боковой панели"
|
||||
},
|
||||
"dashboard": {
|
||||
"description": "Панель, используемая по умолчанию для этого устройства",
|
||||
"dropdown_label": "Панель",
|
||||
@ -3038,6 +3071,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"done": "Готово",
|
||||
"external_app_configuration": "Настройки приложения",
|
||||
"sidebar_toggle": "Переключатель в боковой панели"
|
||||
}
|
||||
|
@ -574,6 +574,28 @@
|
||||
"audio_not_supported": "您的浏览器不支持音频元素。",
|
||||
"choose_player": "选择播放器",
|
||||
"choose-source": "选择媒体源",
|
||||
"class": {
|
||||
"album": "专辑",
|
||||
"app": "应用",
|
||||
"artist": "艺术家",
|
||||
"channel": "频道",
|
||||
"composer": "作曲家",
|
||||
"contributing_artist": "参与创作者",
|
||||
"directory": "媒体库",
|
||||
"episode": "分集",
|
||||
"game": "游戏",
|
||||
"genre": "体裁",
|
||||
"image": "图片",
|
||||
"movie": "电影",
|
||||
"music": "音乐",
|
||||
"playlist": "播放列表",
|
||||
"podcast": "播客",
|
||||
"season": "播出季",
|
||||
"track": "音轨",
|
||||
"tv_show": "电视节目",
|
||||
"url": "网址",
|
||||
"video": "视频"
|
||||
},
|
||||
"content-type": {
|
||||
"album": "专辑",
|
||||
"artist": "艺术家",
|
||||
@ -2352,9 +2374,14 @@
|
||||
"title": "状态"
|
||||
},
|
||||
"templates": {
|
||||
"all_listeners": "此模板监听所有的状态改变事件。",
|
||||
"description": "模板使用 jinja2 模板引擎和一些 Home Assistant 特定的插件进行渲染。",
|
||||
"domain": "域",
|
||||
"editor": "模板编辑器",
|
||||
"entity": "实体",
|
||||
"jinja_documentation": "Jinja2 模板文档",
|
||||
"listeners": "此模板监听以下状态改变事件:",
|
||||
"no_listeners": "此模板不监听任何状态改变事件,并且不会自动更新。",
|
||||
"reset": "重置为演示模板",
|
||||
"template_extensions": "Home Assistant 模板插件",
|
||||
"title": "模板",
|
||||
@ -2941,6 +2968,11 @@
|
||||
"submit": "提交"
|
||||
},
|
||||
"current_user": "您目前以 {fullName} 的身份登录。",
|
||||
"customize_sidebar": {
|
||||
"button": "编辑",
|
||||
"description": "您也可以长按侧边栏标题来进入编辑模式。",
|
||||
"header": "排序和隐藏侧边栏中的项目"
|
||||
},
|
||||
"dashboard": {
|
||||
"description": "选择此设备的默认仪表盘。",
|
||||
"dropdown_label": "仪表盘",
|
||||
@ -3038,6 +3070,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"done": "完成",
|
||||
"external_app_configuration": "应用配置",
|
||||
"sidebar_toggle": "侧边栏切换"
|
||||
}
|
||||
|
@ -507,6 +507,7 @@
|
||||
"cancel": "取消",
|
||||
"close": "關閉",
|
||||
"continue": "繼續",
|
||||
"copied": "已複製",
|
||||
"delete": "刪除",
|
||||
"error_required": "必填",
|
||||
"loading": "讀取中",
|
||||
@ -574,6 +575,28 @@
|
||||
"audio_not_supported": "瀏覽器不支援音效元件。",
|
||||
"choose_player": "選擇播放器",
|
||||
"choose-source": "選擇來源",
|
||||
"class": {
|
||||
"album": "專輯",
|
||||
"app": "App",
|
||||
"artist": "演唱者",
|
||||
"channel": "頻道",
|
||||
"composer": "作曲者",
|
||||
"contributing_artist": "參與藝術家",
|
||||
"directory": "媒體庫",
|
||||
"episode": "集",
|
||||
"game": "遊戲",
|
||||
"genre": "類型",
|
||||
"image": "圖像",
|
||||
"movie": "電影",
|
||||
"music": "音樂",
|
||||
"playlist": "播放列表",
|
||||
"podcast": "Podcast",
|
||||
"season": "季",
|
||||
"track": "音軌",
|
||||
"tv_show": "電視節目",
|
||||
"url": "網址",
|
||||
"video": "影片"
|
||||
},
|
||||
"content-type": {
|
||||
"album": "專輯",
|
||||
"artist": "演唱者",
|
||||
@ -1982,7 +2005,7 @@
|
||||
"smtp": "重新載入 SMTP 通知服務",
|
||||
"statistics": "重新載入統計資訊實體",
|
||||
"telegram": "重新載入 Telegram 通知服務",
|
||||
"template": "重新載入範例實體",
|
||||
"template": "重新載入模板實體",
|
||||
"trend": "重新載入趨勢實體",
|
||||
"universal": "重新載入通用媒體播放器實體",
|
||||
"zone": "重新載入區域"
|
||||
@ -2352,9 +2375,14 @@
|
||||
"title": "狀態"
|
||||
},
|
||||
"templates": {
|
||||
"all_listeners": "此模板監聽所有狀態變更事件。",
|
||||
"description": "模版使用 Jinja2 模板引擎及 Home Assistant 特殊擴充進行模板渲染。",
|
||||
"domain": "區域",
|
||||
"editor": "模板編輯器",
|
||||
"entity": "實體",
|
||||
"jinja_documentation": "Jinja2 模版文件",
|
||||
"listeners": "此模板監聽以下狀態變更事件:",
|
||||
"no_listeners": "此模板不監聽任何狀態變更事件,將不會自動更新。",
|
||||
"reset": "重置示範範模板",
|
||||
"template_extensions": "Home Assistant 模板擴充",
|
||||
"title": "模板",
|
||||
@ -2941,6 +2969,11 @@
|
||||
"submit": "傳送"
|
||||
},
|
||||
"current_user": "目前登入身份:{fullName}。",
|
||||
"customize_sidebar": {
|
||||
"button": "編輯",
|
||||
"description": "同時也能長按側邊列的標題以啟動編輯模式。",
|
||||
"header": "自側邊列中變更順序或隱藏項目"
|
||||
},
|
||||
"dashboard": {
|
||||
"description": "選擇此設備的預設主面板。",
|
||||
"dropdown_label": "主面板",
|
||||
@ -2963,6 +2996,7 @@
|
||||
"confirm_delete": "確定要刪除{name}存取密鑰嗎?",
|
||||
"create": "創建密鑰",
|
||||
"create_failed": "創建存取密鑰失敗。",
|
||||
"created": "新增日期:{date}",
|
||||
"created_at": "於{date}創建",
|
||||
"delete_failed": "刪除存取密鑰失敗。",
|
||||
"description": "創建長效存取密鑰,可供運用腳本與 Home Assistant 實體進行互動。每個密鑰於創建後,有效期為十年。目前已啟用之永久有效密鑰如下。",
|
||||
@ -2970,9 +3004,10 @@
|
||||
"header": "永久有效存取密鑰",
|
||||
"last_used": "上次使用:於{date}、位置{location}",
|
||||
"learn_auth_requests": "學習如何進行驗證請求。",
|
||||
"name": "名稱",
|
||||
"not_used": "從未使用過",
|
||||
"prompt_copy_token": "複製存取密鑰,將不會再次顯示。",
|
||||
"prompt_name": "名稱?"
|
||||
"prompt_name": "為密鑰命名"
|
||||
},
|
||||
"mfa_setup": {
|
||||
"close": "關閉",
|
||||
@ -3036,6 +3071,7 @@
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"done": "完成",
|
||||
"external_app_configuration": "App 設定",
|
||||
"sidebar_toggle": "側邊欄開關"
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user