Merge pull request #4218 from home-assistant/dev

20191114.0
This commit is contained in:
Bram Kragten 2019-11-14 13:47:21 +01:00 committed by GitHub
commit ff7309f5c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
84 changed files with 64619 additions and 61639 deletions

View File

@ -14,7 +14,7 @@ function hasHtml(data) {
function recursiveCheckHasHtml(file, data, errors, recKey) {
Object.keys(data).forEach(function(key) {
if (typeof data[key] === "object") {
nextRecKey = recKey ? `${recKey}.${key}` : key;
const nextRecKey = recKey ? `${recKey}.${key}` : key;
recursiveCheckHasHtml(file, data[key], errors, nextRecKey);
} else if (hasHtml(data[key])) {
errors.push(`HTML found in ${file.path} at key ${recKey}.${key}`);
@ -23,7 +23,7 @@ function recursiveCheckHasHtml(file, data, errors, recKey) {
}
function checkHtml() {
let errors = [];
const errors = [];
return mapStream(function(file, cb) {
const content = file.contents;

View File

@ -45,11 +45,10 @@ function recursiveFlatten(prefix, data) {
let output = {};
Object.keys(data).forEach(function(key) {
if (typeof data[key] === "object") {
output = Object.assign(
{},
output,
recursiveFlatten(prefix + key + ".", data[key])
);
output = {
...output,
...recursiveFlatten(prefix + key + ".", data[key]),
};
} else {
output[prefix + key] = data[key];
}
@ -99,18 +98,16 @@ function recursiveEmpty(data) {
* @link https://docs.lokalise.co/article/KO5SZWLLsy-key-referencing
*/
const re_key_reference = /\[%key:([^%]+)%\]/;
function lokalise_transform(data, original) {
function lokaliseTransform(data, original, file) {
const output = {};
Object.entries(data).forEach(([key, value]) => {
if (value instanceof Object) {
output[key] = lokalise_transform(value, original);
output[key] = lokaliseTransform(value, original, file);
} else {
output[key] = value.replace(re_key_reference, (match, key) => {
const replace = key.split("::").reduce((tr, k) => tr[k], original);
if (typeof replace !== "string") {
throw Error(
`Invalid key placeholder ${key} in src/translations/en.json`
);
throw Error(`Invalid key placeholder ${key} in ${file.path}`);
}
return replace;
});
@ -183,7 +180,7 @@ gulp.task(
.src("src/translations/en.json")
.pipe(
transform(function(data, file) {
return lokalise_transform(data, data);
return lokaliseTransform(data, data, file);
})
)
.pipe(rename("translationMaster.json"))
@ -198,6 +195,11 @@ gulp.task(
gulp.series("build-master-translation", function() {
return gulp
.src([inDir + "/*.json", workDir + "/test.json"], { allowEmpty: true })
.pipe(
transform(function(data, file) {
return lokaliseTransform(data, data, file);
})
)
.pipe(
foreach(function(stream, file) {
// For each language generate a merged json file. It begins with the master

View File

@ -29,11 +29,13 @@ mkdir -p ${LOCAL_DIR}
docker run \
-v ${LOCAL_DIR}:/opt/dest/locale \
--rm \
lokalise/lokalise-cli@sha256:b8329d20280263cad04f65b843e54b9e8e6909a348a678eac959550b5ef5c75f lokalise \
lokalise/lokalise-cli-2@sha256:f1860b26be22fa73b8c93bc5f8690f2afc867610a42de6fc27adc790e5d4425d lokalise2 \
--token ${LOKALISE_TOKEN} \
export ${PROJECT_ID} \
--export_empty skip \
--type json \
--unzip_to /opt/dest
--project-id ${PROJECT_ID} \
file download \
--export-empty-as skip \
--format json \
--original-filenames=false \
--unzip-to /opt/dest
./node_modules/.bin/gulp check-downloaded-translations

View File

@ -33,10 +33,11 @@ fi
docker run \
-v ${LOCAL_FILE}:/opt/src/${LOCAL_FILE} \
lokalise/lokalise-cli@sha256:2198814ebddfda56ee041a4b427521757dd57f75415ea9693696a64c550cef21 lokalise \
lokalise/lokalise-cli-2@sha256:f1860b26be22fa73b8c93bc5f8690f2afc867610a42de6fc27adc790e5d4425d lokalise2 \
--token ${LOKALISE_TOKEN} \
import ${PROJECT_ID} \
--project-id ${PROJECT_ID} \
file upload \
--file /opt/src/${LOCAL_FILE} \
--lang_iso ${LANG_ISO} \
--convert_placeholders 0 \
--replace 1
--lang-iso ${LANG_ISO} \
--convert-placeholders=false \
--replace-modified=true

View File

@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup(
name="home-assistant-frontend",
version="20191108.0",
version="20191114.0",
description="The Home Assistant frontend",
url="https://github.com/home-assistant/home-assistant-polymer",
author="The Home Assistant Authors",

View File

@ -0,0 +1,14 @@
/* tslint:disable */
// @ts-ignore
export const SpeechRecognition =
// @ts-ignore
window.SpeechRecognition || window.webkitSpeechRecognition;
// @ts-ignore
export const SpeechGrammarList =
// @ts-ignore
window.SpeechGrammarList || window.webkitSpeechGrammarList;
// @ts-ignore
export const SpeechRecognitionEvent =
// @ts-ignore
window.SpeechRecognitionEvent || window.webkitSpeechRecognitionEvent;
/* tslint:enable */

21
src/common/util/patch.ts Normal file
View File

@ -0,0 +1,21 @@
export const applyPatch = (data, path, value) => {
if (path.length === 1) {
data[path[0]] = value;
} else {
if (!data[path[0]]) {
data[path[0]] = {};
}
return applyPatch(data[path[0]], path.slice(1), value);
}
};
export const getPath = (data, path) => {
if (path.length === 1) {
return data[path[0]];
} else {
if (data[path[0]] === undefined) {
return undefined;
}
return getPath(data[path[0]], path.slice(1));
}
};

View File

@ -34,6 +34,7 @@ import {
EntityRegistryEntry,
subscribeEntityRegistry,
} from "../../data/entity_registry";
import { computeDomain } from "../../common/entity/compute_domain";
interface Device {
name: string;
@ -64,20 +65,45 @@ const rowRenderer = (root: HTMLElement, _owner, model: { item: Device }) => {
};
@customElement("ha-device-picker")
class HaDevicePicker extends SubscribeMixin(LitElement) {
export class HaDevicePicker extends SubscribeMixin(LitElement) {
@property() public hass!: HomeAssistant;
@property() public label?: string;
@property() public value?: string;
@property() public devices?: DeviceRegistryEntry[];
@property() public areas?: AreaRegistryEntry[];
@property() public entities?: EntityRegistryEntry[];
@property({ type: Boolean }) private _opened?: boolean;
/**
* Show only devices with entities from specific domains.
* @type {Array}
* @attr include-domains
*/
@property({ type: Array, attribute: "include-domains" })
public includeDomains?: string[];
/**
* Show no devices with entities of these domains.
* @type {Array}
* @attr exclude-domains
*/
@property({ type: Array, attribute: "exclude-domains" })
public excludeDomains?: string[];
/**
* Show only deviced with entities of these device classes.
* @type {Array}
* @attr include-device-classes
*/
@property({ type: Array, attribute: "include-device-classes" })
public includeDeviceClasses?: string[];
@property({ type: Boolean })
private _opened?: boolean;
private _getDevices = memoizeOne(
(
devices: DeviceRegistryEntry[],
areas: AreaRegistryEntry[],
entities: EntityRegistryEntry[]
entities: EntityRegistryEntry[],
includeDomains: this["includeDomains"],
excludeDomains: this["excludeDomains"],
includeDeviceClasses: this["includeDeviceClasses"]
): Device[] => {
if (!devices.length) {
return [];
@ -99,7 +125,53 @@ class HaDevicePicker extends SubscribeMixin(LitElement) {
areaLookup[area.area_id] = area;
}
const outputDevices = devices.map((device) => {
let inputDevices = [...devices];
if (includeDomains) {
inputDevices = inputDevices.filter((device) => {
const devEntities = deviceEntityLookup[device.id];
if (!devEntities || !devEntities.length) {
return false;
}
return deviceEntityLookup[device.id].some((entity) =>
includeDomains.includes(computeDomain(entity.entity_id))
);
});
}
if (excludeDomains) {
inputDevices = inputDevices.filter((device) => {
const devEntities = deviceEntityLookup[device.id];
if (!devEntities || !devEntities.length) {
return true;
}
return entities.every(
(entity) =>
!excludeDomains.includes(computeDomain(entity.entity_id))
);
});
}
if (includeDeviceClasses) {
inputDevices = inputDevices.filter((device) => {
const devEntities = deviceEntityLookup[device.id];
if (!devEntities || !devEntities.length) {
return false;
}
return deviceEntityLookup[device.id].some((entity) => {
const stateObj = this.hass.states[entity.entity_id];
if (!stateObj) {
return false;
}
return (
stateObj.attributes.device_class &&
includeDeviceClasses.includes(stateObj.attributes.device_class)
);
});
});
}
const outputDevices = inputDevices.map((device) => {
return {
id: device.id,
name: computeDeviceName(
@ -135,7 +207,14 @@ class HaDevicePicker extends SubscribeMixin(LitElement) {
if (!this.devices || !this.areas || !this.entities) {
return;
}
const devices = this._getDevices(this.devices, this.areas, this.entities);
const devices = this._getDevices(
this.devices,
this.areas,
this.entities,
this.includeDomains,
this.excludeDomains,
this.includeDeviceClasses
);
return html`
<vaadin-combo-box-light
item-value-path="id"
@ -148,7 +227,9 @@ class HaDevicePicker extends SubscribeMixin(LitElement) {
@value-changed=${this._deviceChanged}
>
<paper-input
.label=${this.label}
.label=${this.label === undefined && this.hass
? this.hass.localize("ui.components.device-picker.device")
: this.label}
class="input"
autocapitalize="none"
autocomplete="off"
@ -164,6 +245,7 @@ class HaDevicePicker extends SubscribeMixin(LitElement) {
slot="suffix"
class="clear-button"
icon="hass:close"
@click=${this._clearValue}
no-ripple
>
Clear
@ -189,6 +271,11 @@ class HaDevicePicker extends SubscribeMixin(LitElement) {
`;
}
private _clearValue(ev: Event) {
ev.stopPropagation();
this._setValue("");
}
private get _value() {
return this.value || "";
}
@ -201,14 +288,18 @@ class HaDevicePicker extends SubscribeMixin(LitElement) {
const newValue = ev.detail.value;
if (newValue !== this._value) {
this.value = newValue;
setTimeout(() => {
fireEvent(this, "value-changed", { value: newValue });
fireEvent(this, "change");
}, 0);
this._setValue(newValue);
}
}
private _setValue(value: string) {
this.value = value;
setTimeout(() => {
fireEvent(this, "value-changed", { value });
fireEvent(this, "change");
}, 0);
}
static get styles(): CSSResult {
return css`
paper-input > paper-icon-button {

View File

@ -21,6 +21,7 @@ import { HomeAssistant } from "../../types";
import { HassEntity } from "home-assistant-js-websocket";
import { PolymerChangedEvent } from "../../polymer-types";
import { fireEvent } from "../../common/dom/fire_event";
import { computeDomain } from "../../common/entity/compute_domain";
export type HaEntityPickerEntityFilterFunc = (entityId: HassEntity) => boolean;
@ -62,7 +63,7 @@ class HaEntityPicker extends LitElement {
@property() public value?: string;
/**
* Show entities from specific domains.
* @type {string}
* @type {Array}
* @attr include-domains
*/
@property({ type: Array, attribute: "include-domains" })
@ -74,6 +75,13 @@ class HaEntityPicker extends LitElement {
*/
@property({ type: Array, attribute: "exclude-domains" })
public excludeDomains?: string[];
/**
* Show only entities of these device classes.
* @type {Array}
* @attr include-device-classes
*/
@property({ type: Array, attribute: "include-device-classes" })
public includeDeviceClasses?: string[];
@property() public entityFilter?: HaEntityPickerEntityFilterFunc;
@property({ type: Boolean }) private _opened?: boolean;
@property() private _hass?: HomeAssistant;
@ -83,7 +91,8 @@ class HaEntityPicker extends LitElement {
hass: this["hass"],
includeDomains: this["includeDomains"],
excludeDomains: this["excludeDomains"],
entityFilter: this["entityFilter"]
entityFilter: this["entityFilter"],
includeDeviceClasses: this["includeDeviceClasses"]
) => {
let states: HassEntity[] = [];
@ -94,18 +103,28 @@ class HaEntityPicker extends LitElement {
if (includeDomains) {
entityIds = entityIds.filter((eid) =>
includeDomains.includes(eid.substr(0, eid.indexOf(".")))
includeDomains.includes(computeDomain(eid))
);
}
if (excludeDomains) {
entityIds = entityIds.filter(
(eid) => !excludeDomains.includes(eid.substr(0, eid.indexOf(".")))
(eid) => !excludeDomains.includes(computeDomain(eid))
);
}
states = entityIds.sort().map((key) => hass!.states[key]);
if (includeDeviceClasses) {
states = states.filter(
(stateObj) =>
// We always want to include the entity of the current value
stateObj.entity_id === this.value ||
(stateObj.attributes.device_class &&
includeDeviceClasses.includes(stateObj.attributes.device_class))
);
}
if (entityFilter) {
states = states.filter(
(stateObj) =>
@ -113,6 +132,7 @@ class HaEntityPicker extends LitElement {
stateObj.entity_id === this.value || entityFilter!(stateObj)
);
}
return states;
}
);
@ -130,7 +150,8 @@ class HaEntityPicker extends LitElement {
this._hass,
this.includeDomains,
this.excludeDomains,
this.entityFilter
this.entityFilter,
this.includeDeviceClasses
);
return html`
@ -166,6 +187,7 @@ class HaEntityPicker extends LitElement {
slot="suffix"
class="clear-button"
icon="hass:close"
@click=${this._clearValue}
no-ripple
>
Clear
@ -191,6 +213,11 @@ class HaEntityPicker extends LitElement {
`;
}
private _clearValue(ev: Event) {
ev.stopPropagation();
this._setValue("");
}
private get _value() {
return this.value || "";
}
@ -202,14 +229,18 @@ class HaEntityPicker extends LitElement {
private _valueChanged(ev: PolymerChangedEvent<string>) {
const newValue = ev.detail.value;
if (newValue !== this._value) {
this.value = ev.detail.value;
setTimeout(() => {
fireEvent(this, "value-changed", { value: this.value });
fireEvent(this, "change");
}, 0);
this._setValue(newValue);
}
}
private _setValue(value: string) {
this.value = value;
setTimeout(() => {
fireEvent(this, "value-changed", { value });
fireEvent(this, "change");
}, 0);
}
static get styles(): CSSResult {
return css`
paper-input > paper-icon-button {

View File

@ -32,6 +32,14 @@ export class HaSwitch extends MwcSwitch {
flex-direction: row;
align-items: center;
}
.mdc-switch.mdc-switch--checked .mdc-switch__thumb {
background-color: var(--switch-checked-button-color);
border-color: var(--switch-checked-button-color);
}
.mdc-switch.mdc-switch--checked .mdc-switch__track {
background-color: var(--switch-checked-track-color);
border-color: var(--switch-checked-track-color);
}
.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb {
background-color: var(--switch-unchecked-button-color);
border-color: var(--switch-unchecked-button-color);

View File

@ -1,5 +1,7 @@
import { HomeAssistant } from "../types";
import { EntityFilter } from "../common/entity/entity_filter";
import { AutomationConfig } from "./automation";
import { PlaceholderContainer } from "../panels/config/automation/thingtalk/dialog-thingtalk";
interface CloudStatusBase {
logged_in: boolean;
@ -63,6 +65,11 @@ export interface CloudWebhook {
managed?: boolean;
}
export interface ThingTalkConversion {
config: Partial<AutomationConfig>;
placeholders: PlaceholderContainer;
}
export const fetchCloudStatus = (hass: HomeAssistant) =>
hass.callWS<CloudStatus>({ type: "cloud/status" });
@ -91,6 +98,9 @@ export const disconnectCloudRemote = (hass: HomeAssistant) =>
export const fetchCloudSubscriptionInfo = (hass: HomeAssistant) =>
hass.callWS<SubscriptionInfo>({ type: "cloud/subscription" });
export const convertThingTalk = (hass: HomeAssistant, query: string) =>
hass.callWS<ThingTalkConversion>({ type: "cloud/thingtalk/convert", query });
export const updateCloudPref = (
hass: HomeAssistant,
prefs: {

View File

@ -7,10 +7,33 @@ interface ProcessResults {
};
}
export interface AgentInfo {
attribution?: { name: string; url: string };
onboarding?: { text: string; url: string };
}
export const processText = (
hass: HomeAssistant,
text: string,
// tslint:disable-next-line: variable-name
conversation_id: string
): Promise<ProcessResults> =>
hass.callApi("POST", "conversation/process", { text, conversation_id });
hass.callWS({
type: "conversation/process",
text,
conversation_id,
});
export const getAgentInfo = (hass: HomeAssistant): Promise<AgentInfo> =>
hass.callWS({
type: "conversation/agent/info",
});
export const setConversationOnboarding = (
hass: HomeAssistant,
value: boolean
): Promise<boolean> =>
hass.callWS({
type: "conversation/onboarding/set",
shown: value,
});

View File

@ -16,7 +16,13 @@ import {
} from "lit-element";
import { HomeAssistant } from "../../types";
import { fireEvent } from "../../common/dom/fire_event";
import { processText } from "../../data/conversation";
import { SpeechRecognition } from "../../common/dom/speech-recognition";
import {
processText,
getAgentInfo,
setConversationOnboarding,
AgentInfo,
} from "../../data/conversation";
import { classMap } from "lit-html/directives/class-map";
import { PaperInputElement } from "@polymer/paper-input/paper-input";
import { haStyleDialog } from "../../resources/styles";
@ -35,21 +41,6 @@ interface Results {
final: boolean;
}
/* tslint:disable */
// @ts-ignore
window.SpeechRecognition =
// @ts-ignore
window.SpeechRecognition || window.webkitSpeechRecognition;
// @ts-ignore
window.SpeechGrammarList =
// @ts-ignore
window.SpeechGrammarList || window.webkitSpeechGrammarList;
// @ts-ignore
window.SpeechRecognitionEvent =
// @ts-ignore
window.SpeechRecognitionEvent || window.webkitSpeechRecognitionEvent;
/* tslint:enable */
@customElement("ha-voice-command-dialog")
export class HaVoiceCommandDialog extends LitElement {
@property() public hass!: HomeAssistant;
@ -61,8 +52,9 @@ export class HaVoiceCommandDialog extends LitElement {
},
];
@property() private _opened = false;
@property() private _agentInfo?: AgentInfo;
@query("#messages") private messages!: PaperDialogScrollableElement;
private recognition?: SpeechRecognition;
private recognition!: SpeechRecognition;
private _conversationId?: string;
public async showDialog(): Promise<void> {
@ -70,6 +62,7 @@ export class HaVoiceCommandDialog extends LitElement {
if (SpeechRecognition) {
this._startListening();
}
this._agentInfo = await getAgentInfo(this.hass);
}
protected render(): TemplateResult {
@ -111,7 +104,30 @@ export class HaVoiceCommandDialog extends LitElement {
.opened=${this._opened}
@opened-changed=${this._openedChanged}
>
<paper-dialog-scrollable id="messages">
${this._agentInfo && this._agentInfo.onboarding
? html`
<div class="onboarding">
${this._agentInfo.onboarding.text}
<div class="side-by-side" @click=${this._completeOnboarding}>
<a
class="button"
href="${this._agentInfo.onboarding.url}"
target="_blank"
><mwc-button unelevated>Yes!</mwc-button></a
>
<mwc-button outlined>No</mwc-button>
</div>
</div>
`
: ""}
<paper-dialog-scrollable
id="messages"
class=${classMap({
"top-border": Boolean(
this._agentInfo && this._agentInfo.onboarding
),
})}
>
${this._conversation.map(
(message) => html`
<div class="${this._computeMessageClasses(message)}">
@ -132,36 +148,48 @@ export class HaVoiceCommandDialog extends LitElement {
`
: ""}
</paper-dialog-scrollable>
<paper-input
@keyup=${this._handleKeyUp}
label="${this.hass!.localize(
`ui.dialogs.voice_command.${
SpeechRecognition ? "label_voice" : "label"
}`
)}"
autofocus
>
${SpeechRecognition
<div class="input">
<paper-input
@keyup=${this._handleKeyUp}
label="${this.hass!.localize(
`ui.dialogs.voice_command.${
SpeechRecognition ? "label_voice" : "label"
}`
)}"
autofocus
>
${SpeechRecognition
? html`
<span suffix="" slot="suffix">
${this.results
? html`
<div class="bouncer">
<div class="double-bounce1"></div>
<div class="double-bounce2"></div>
</div>
`
: ""}
<paper-icon-button
.active=${Boolean(this.results)}
icon="hass:microphone"
@click=${this._toggleListening}
>
</paper-icon-button>
</span>
`
: ""}
</paper-input>
${this._agentInfo && this._agentInfo.attribution
? html`
<span suffix="" slot="suffix">
${this.results
? html`
<div class="bouncer">
<div class="double-bounce1"></div>
<div class="double-bounce2"></div>
</div>
`
: ""}
<paper-icon-button
.active=${Boolean(this.results)}
icon="hass:microphone"
@click=${this._toggleListening}
>
</paper-icon-button>
</span>
<a
href=${this._agentInfo.attribution.url}
class="attribution"
target="_blank"
>${this._agentInfo.attribution.name}</a
>
`
: ""}
</paper-input>
</div>
</ha-paper-dialog>
`;
}
@ -196,18 +224,23 @@ export class HaVoiceCommandDialog extends LitElement {
}
}
private _completeOnboarding() {
setConversationOnboarding(this.hass, true);
this._agentInfo! = { ...this._agentInfo, onboarding: undefined };
}
private _initRecognition() {
this.recognition = new SpeechRecognition();
this.recognition.interimResults = true;
this.recognition.lang = "en-US";
this.recognition!.onstart = () => {
this.recognition.onstart = () => {
this.results = {
final: false,
transcript: "",
};
};
this.recognition!.onerror = (event) => {
this.recognition.onerror = (event) => {
this.recognition!.abort();
if (event.error !== "aborted") {
const text =
@ -220,7 +253,7 @@ export class HaVoiceCommandDialog extends LitElement {
}
this.results = null;
};
this.recognition!.onend = () => {
this.recognition.onend = () => {
// Already handled by onerror
if (this.results == null) {
return;
@ -240,7 +273,7 @@ export class HaVoiceCommandDialog extends LitElement {
}
};
this.recognition!.onresult = (event) => {
this.recognition.onresult = (event) => {
const result = event.results[0];
this.results = {
transcript: result[0].transcript,
@ -270,14 +303,6 @@ export class HaVoiceCommandDialog extends LitElement {
message.text = plain.speech;
this.requestUpdate("_conversation");
if (speechSynthesis) {
const speech = new SpeechSynthesisUtterance(
response.speech.plain.speech
);
speech.lang = "en-US";
speechSynthesis.speak(speech);
}
} catch {
message.text = this.hass.localize("ui.dialogs.voice_command.error");
message.error = true;
@ -343,14 +368,42 @@ export class HaVoiceCommandDialog extends LitElement {
color: var(--primary-color);
}
paper-input {
.input {
margin: 0 0 16px 0;
}
ha-paper-dialog {
width: 450px;
}
a.button {
text-decoration: none;
}
a.button > mwc-button {
width: 100%;
}
.onboarding {
padding: 0 24px;
}
paper-dialog-scrollable.top-border::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: var(--divider-color);
}
.side-by-side {
display: flex;
margin: 8px 0;
}
.side-by-side > * {
flex: 1 0;
padding: 4px;
}
.attribution {
color: var(--secondary-text-color);
}
.message {
font-size: 18px;
clear: both;

View File

@ -170,7 +170,8 @@ export class HaAutomationEditor extends LitElement {
}
if (changedProps.has("creatingNew") && this.creatingNew && this.hass) {
this._dirty = false;
const initData = getAutomationEditorInitData();
this._dirty = initData ? true : false;
this._config = {
alias: this.hass.localize(
"ui.panel.config.automation.editor.default_name"
@ -179,7 +180,7 @@ export class HaAutomationEditor extends LitElement {
trigger: [{ platform: "state" }],
condition: [],
action: [{ service: "" }],
...getAutomationEditorInitData(),
...initData,
};
}

View File

@ -23,9 +23,15 @@ import { computeStateName } from "../../../common/entity/compute_state_name";
import { computeRTL } from "../../../common/util/compute_rtl";
import { haStyle } from "../../../resources/styles";
import { HomeAssistant } from "../../../types";
import { AutomationEntity } from "../../../data/automation";
import {
AutomationEntity,
showAutomationEditor,
AutomationConfig,
} from "../../../data/automation";
import format_date_time from "../../../common/datetime/format_date_time";
import { fireEvent } from "../../../common/dom/fire_event";
import { showThingtalkDialog } from "./show-dialog-thingtalk";
import { isComponentLoaded } from "../../../common/config/is_component_loaded";
@customElement("ha-automation-picker")
class HaAutomationPicker extends LitElement {
@ -141,8 +147,7 @@ class HaAutomationPicker extends LitElement {
)}
</ha-card>
</ha-config-section>
<a href="/config/automation/new">
<div>
<ha-fab
slot="fab"
?is-wide=${this.isWide}
@ -151,8 +156,9 @@ class HaAutomationPicker extends LitElement {
"ui.panel.config.automation.picker.add_automation"
)}
?rtl=${computeRTL(this.hass)}
></ha-fab
></a>
@click=${this._createNew}
></ha-fab>
</div>
</hass-subpage>
`;
}
@ -162,6 +168,17 @@ class HaAutomationPicker extends LitElement {
fireEvent(this, "hass-more-info", { entityId });
}
private _createNew() {
if (!isComponentLoaded(this.hass, "cloud")) {
showAutomationEditor(this);
return;
}
showThingtalkDialog(this, {
callback: (config: Partial<AutomationConfig> | undefined) =>
showAutomationEditor(this, config),
});
}
static get styles(): CSSResultArray {
return [
haStyle,
@ -198,6 +215,7 @@ class HaAutomationPicker extends LitElement {
bottom: 16px;
right: 16px;
z-index: 1;
cursor: pointer;
}
ha-fab[is-wide] {

View File

@ -0,0 +1,20 @@
import { fireEvent } from "../../../common/dom/fire_event";
import { AutomationConfig } from "../../../data/automation";
export interface ThingtalkDialogParams {
callback: (config: Partial<AutomationConfig> | undefined) => void;
}
export const loadThingtalkDialog = () =>
import(/* webpackChunkName: "thingtalk-dialog" */ "./thingtalk/dialog-thingtalk");
export const showThingtalkDialog = (
element: HTMLElement,
dialogParams: ThingtalkDialogParams
): void => {
fireEvent(element, "show-dialog", {
dialogTag: "ha-dialog-thinktalk",
dialogImport: loadThingtalkDialog,
dialogParams,
});
};

View File

@ -0,0 +1,259 @@
import {
LitElement,
html,
css,
CSSResult,
TemplateResult,
property,
customElement,
query,
} from "lit-element";
import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable";
import "@polymer/paper-input/paper-input";
import "@polymer/paper-spinner/paper-spinner";
import "@material/mwc-button";
import "../../../../components/dialog/ha-paper-dialog";
import "./ha-thingtalk-placeholders";
import { ThingtalkDialogParams } from "../show-dialog-thingtalk";
import { PolymerChangedEvent } from "../../../../polymer-types";
import { haStyleDialog, haStyle } from "../../../../resources/styles";
import { HomeAssistant } from "../../../../types";
// tslint:disable-next-line
import { PaperInputElement } from "@polymer/paper-input/paper-input";
import { AutomationConfig } from "../../../../data/automation";
// tslint:disable-next-line
import { PlaceholderValues } from "./ha-thingtalk-placeholders";
import { convertThingTalk } from "../../../../data/cloud";
export interface Placeholder {
index: number;
fields: string[];
domains: string[];
device_classes?: string[];
}
export interface PlaceholderContainer {
[key: string]: Placeholder[];
}
@customElement("ha-dialog-thinktalk")
class DialogThingtalk extends LitElement {
@property() public hass!: HomeAssistant;
@property() private _error?: string;
@property() private _params?: ThingtalkDialogParams;
@property() private _submitting: boolean = false;
@property() private _opened = false;
@property() private _placeholders?: PlaceholderContainer;
@query("#input") private _input?: PaperInputElement;
private _value!: string;
private _config!: Partial<AutomationConfig>;
public showDialog(params: ThingtalkDialogParams): void {
this._params = params;
this._error = undefined;
this._opened = true;
}
protected render(): TemplateResult | void {
if (!this._params) {
return html``;
}
if (this._placeholders) {
return html`
<ha-thingtalk-placeholders
.hass=${this.hass}
.placeholders=${this._placeholders}
.opened=${this._opened}
.skip=${() => this._skip()}
@opened-changed=${this._openedChanged}
@placeholders-filled=${this._handlePlaceholders}
>
</ha-thingtalk-placeholders>
`;
}
return html`
<ha-paper-dialog
with-backdrop
.opened=${this._opened}
@opened-changed=${this._openedChanged}
>
<h2>Create a new automation</h2>
<paper-dialog-scrollable>
${this._error
? html`
<div class="error">${this._error}</div>
`
: ""}
Type below what this automation should do, and we will try to convert
it into a Home Assistant automation. (only English is supported for
now)<br /><br />
For example:
<ul @click=${this._handleExampleClick}>
<li>
<button class="link">
Turn off the lights when I leave home
</button>
</li>
<li>
<button class="link">
Turn on the lights when the sun is set
</button>
</li>
<li>
<button class="link">
Notify me if the door opens and I am not at home
</button>
</li>
<li>
<button class="link">
Turn the light on when motion is detected
</button>
</li>
</ul>
<paper-input
id="input"
label="What should this automation do?"
autofocus
@keyup=${this._handleKeyUp}
></paper-input>
<a
href="https://almond.stanford.edu/"
target="_blank"
class="attribution"
>Powered by Almond</a
>
</paper-dialog-scrollable>
<div class="paper-dialog-buttons">
<mwc-button class="left" @click="${this._skip}">
Skip
</mwc-button>
<mwc-button @click="${this._generate}" .disabled=${this._submitting}>
<paper-spinner
?active="${this._submitting}"
alt="Creating your automation..."
></paper-spinner>
Create automation
</mwc-button>
</div>
</ha-paper-dialog>
`;
}
private async _generate() {
this._value = this._input!.value as string;
if (!this._value) {
this._error = "Enter a command or tap skip.";
return;
}
this._submitting = true;
let config: Partial<AutomationConfig>;
let placeholders: PlaceholderContainer;
try {
const result = await convertThingTalk(this.hass, this._value);
config = result.config;
placeholders = result.placeholders;
} catch (err) {
this._error = err.message;
this._submitting = false;
return;
}
this._submitting = false;
if (!Object.keys(config).length) {
this._error = "We couldn't create an automation for that (yet?).";
} else if (Object.keys(placeholders).length) {
this._config = config;
this._placeholders = placeholders;
} else {
this._sendConfig(this._value, config);
}
}
private _handlePlaceholders(ev: CustomEvent) {
const placeholderValues = ev.detail.value as PlaceholderValues;
Object.entries(placeholderValues).forEach(([type, values]) => {
Object.entries(values).forEach(([index, placeholder]) => {
Object.entries(placeholder).forEach(([field, value]) => {
this._config[type][index][field] = value;
});
});
});
this._sendConfig(this._value, this._config);
}
private _sendConfig(input, config) {
this._params!.callback({ alias: input, ...config });
this._closeDialog();
}
private _skip() {
this._params!.callback(undefined);
this._closeDialog();
}
private _closeDialog() {
this._placeholders = undefined;
if (this._input) {
this._input.value = null;
}
this._opened = false;
}
private _openedChanged(ev: PolymerChangedEvent<boolean>): void {
if (!ev.detail.value) {
this._closeDialog();
}
}
private _handleKeyUp(ev: KeyboardEvent) {
if (ev.keyCode === 13) {
this._generate();
}
}
private _handleExampleClick(ev: Event) {
this._input!.value = (ev.target as HTMLAnchorElement).innerText;
}
static get styles(): CSSResult[] {
return [
haStyle,
haStyleDialog,
css`
ha-paper-dialog {
max-width: 500px;
}
mwc-button.left {
margin-right: auto;
}
mwc-button paper-spinner {
width: 14px;
height: 14px;
margin-right: 20px;
}
paper-spinner {
display: none;
}
paper-spinner[active] {
display: block;
}
.error {
color: var(--google-red-500);
}
.attribution {
color: var(--secondary-text-color);
}
`,
];
}
}
declare global {
interface HTMLElementTagNameMap {
"ha-dialog-thinktalk": DialogThingtalk;
}
}

View File

@ -0,0 +1,338 @@
import {
LitElement,
html,
TemplateResult,
property,
customElement,
css,
CSSResult,
query,
} from "lit-element";
import { HomeAssistant } from "../../../../types";
import { PolymerChangedEvent } from "../../../../polymer-types";
import { fireEvent } from "../../../../common/dom/fire_event";
import { haStyleDialog } from "../../../../resources/styles";
import { PlaceholderContainer, Placeholder } from "./dialog-thingtalk";
import { SubscribeMixin } from "../../../../mixins/subscribe-mixin";
import { subscribeEntityRegistry } from "../../../../data/entity_registry";
import { computeDomain } from "../../../../common/entity/compute_domain";
import { HassEntity } from "home-assistant-js-websocket";
import { HaDevicePicker } from "../../../../components/device/ha-device-picker";
import { getPath, applyPatch } from "../../../../common/util/patch";
declare global {
// for fire event
interface HASSDomEvents {
"placeholders-filled": { value: PlaceholderValues };
}
}
export interface PlaceholderValues {
[key: string]: { [index: number]: { [key: string]: string } };
}
interface DeviceEntitiesLookup {
[deviceId: string]: string[];
}
@customElement("ha-thingtalk-placeholders")
export class ThingTalkPlaceholders extends SubscribeMixin(LitElement) {
@property() public hass!: HomeAssistant;
@property() public opened!: boolean;
public skip!: () => void;
@property() public placeholders!: PlaceholderContainer;
@property() private _error?: string;
private _deviceEntityLookup: DeviceEntitiesLookup = {};
private _manualEntities: PlaceholderValues = {};
@property() private _placeholderValues: PlaceholderValues = {};
@query("#device-entity-picker") private _deviceEntityPicker?: HaDevicePicker;
public hassSubscribe() {
return [
subscribeEntityRegistry(this.hass.connection, (entries) => {
for (const entity of entries) {
if (!entity.device_id) {
continue;
}
if (!(entity.device_id in this._deviceEntityLookup)) {
this._deviceEntityLookup[entity.device_id] = [];
}
if (
!this._deviceEntityLookup[entity.device_id].includes(
entity.entity_id
)
) {
this._deviceEntityLookup[entity.device_id].push(entity.entity_id);
}
}
}),
];
}
protected render(): TemplateResult | void {
return html`
<ha-paper-dialog
with-backdrop
.opened=${this.opened}
@opened-changed="${this._openedChanged}"
>
<h2>Great! Now we need to link some devices.</h2>
<paper-dialog-scrollable>
${this._error
? html`
<div class="error">${this._error}</div>
`
: ""}
${Object.entries(this.placeholders).map(
([type, placeholders]) =>
html`
<h3>
${this.hass.localize(
`ui.panel.config.automation.editor.${type}s.name`
)}:
</h3>
${placeholders.map((placeholder) => {
if (placeholder.fields.includes("device_id")) {
return html`
<ha-device-picker
.type=${type}
.placeholder=${placeholder}
@change=${this._devicePicked}
.hass=${this.hass}
.includeDomains=${placeholder.domains}
.includeDeviceClasses=${placeholder.device_classes}
.label=${this._getLabel(
placeholder.domains,
placeholder.device_classes
)}
></ha-device-picker>
${(getPath(this._placeholderValues, [
type,
placeholder.index,
"device_id",
]) &&
placeholder.fields.includes("entity_id") &&
getPath(this._placeholderValues, [
type,
placeholder.index,
"entity_id",
]) === undefined) ||
getPath(this._manualEntities, [
type,
placeholder.index,
"manual",
]) === true
? html`
<ha-entity-picker
id="device-entity-picker"
.type=${type}
.placeholder=${placeholder}
@change=${this._entityPicked}
.includeDomains=${placeholder.domains}
.includeDeviceClasses=${placeholder.device_classes}
.hass=${this.hass}
.label=${this._getLabel(
placeholder.domains,
placeholder.device_classes
)}
.entityFilter=${(state: HassEntity) =>
this._deviceEntityLookup[
this._placeholderValues[type][
placeholder.index
].device_id
].includes(state.entity_id)}
></ha-entity-picker>
`
: ""}
`;
} else if (placeholder.fields.includes("entity_id")) {
return html`
<ha-entity-picker
.type=${type}
.placeholder=${placeholder}
@change=${this._entityPicked}
.includeDomains=${placeholder.domains}
.includeDeviceClasses=${placeholder.device_classes}
.hass=${this.hass}
.label=${this._getLabel(
placeholder.domains,
placeholder.device_classes
)}
></ha-entity-picker>
`;
}
return html`
<div class="error">
Unknown placeholder<br />
${placeholder.domains}<br />
${placeholder.fields.map(
(field) =>
html`
${field}<br />
`
)}
</div>
`;
})}
`
)}
</paper-dialog-scrollable>
<div class="paper-dialog-buttons">
<mwc-button class="left" @click="${this.skip}">
Skip
</mwc-button>
<mwc-button @click="${this._done}" .disabled=${!this._isDone}>
Create automation
</mwc-button>
</div>
</ha-paper-dialog>
`;
}
private get _isDone(): boolean {
return Object.entries(this.placeholders).every(([type, placeholders]) =>
placeholders.every((placeholder) =>
placeholder.fields.every(
(field) =>
getPath(this._placeholderValues, [
type,
placeholder.index,
field,
]) !== undefined
)
)
);
}
private _getLabel(domains: string[], deviceClasses?: string[]) {
return `${domains
.map((domain) => this.hass.localize(`domain.${domain}`))
.join(", ")}${
deviceClasses ? ` of type ${deviceClasses.join(", ")}` : ""
}`;
}
private _devicePicked(ev: Event): void {
const target = ev.target as any;
const placeholder = target.placeholder as Placeholder;
const value = target.value;
const type = target.type;
applyPatch(
this._placeholderValues,
[type, placeholder.index, "device_id"],
value
);
if (!placeholder.fields.includes("entity_id")) {
return;
}
if (value === "") {
delete this._placeholderValues[type][placeholder.index].entity_id;
if (this._deviceEntityPicker) {
this._deviceEntityPicker.value = undefined;
}
applyPatch(
this._manualEntities,
[type, placeholder.index, "manual"],
false
);
this.requestUpdate("_placeholderValues");
return;
}
const devEntities = this._deviceEntityLookup[value];
const entities = devEntities.filter((eid) => {
if (placeholder.device_classes) {
const stateObj = this.hass.states[eid];
if (!stateObj) {
return false;
}
return (
placeholder.domains.includes(computeDomain(eid)) &&
stateObj.attributes.device_class &&
placeholder.device_classes.includes(stateObj.attributes.device_class)
);
}
return placeholder.domains.includes(computeDomain(eid));
});
if (entities.length === 0) {
// Should not happen because we filter the device picker on domain
this._error = `No ${placeholder.domains
.map((domain) => this.hass.localize(`domain.${domain}`))
.join(", ")} entities found in this device.`;
} else if (entities.length === 1) {
applyPatch(
this._placeholderValues,
[type, placeholder.index, "entity_id"],
entities[0]
);
applyPatch(
this._manualEntities,
[type, placeholder.index, "manual"],
false
);
this.requestUpdate("_placeholderValues");
} else {
delete this._placeholderValues[type][placeholder.index].entity_id;
if (this._deviceEntityPicker) {
this._deviceEntityPicker.value = undefined;
}
applyPatch(
this._manualEntities,
[type, placeholder.index, "manual"],
true
);
this.requestUpdate("_placeholderValues");
}
}
private _entityPicked(ev: Event): void {
const target = ev.target as any;
const placeholder = target.placeholder as Placeholder;
const value = target.value;
const type = target.type;
applyPatch(
this._placeholderValues,
[type, placeholder.index, "entity_id"],
value
);
this.requestUpdate("_placeholderValues");
}
private _done(): void {
fireEvent(this, "placeholders-filled", { value: this._placeholderValues });
}
private _openedChanged(ev: PolymerChangedEvent<boolean>): void {
// The opened-changed event doesn't leave the shadowdom so we re-dispatch it
this.dispatchEvent(new CustomEvent(ev.type, ev));
}
static get styles(): CSSResult[] {
return [
haStyleDialog,
css`
ha-paper-dialog {
max-width: 500px;
}
mwc-button.left {
margin-right: auto;
}
paper-dialog-scrollable {
margin-top: 10px;
}
h3 {
margin: 10px 0 0 0;
font-weight: 500;
}
.error {
color: var(--google-red-500);
}
`,
];
}
}
declare global {
interface HTMLElementTagNameMap {
"ha-thingtalk-placeholders": ThingTalkPlaceholders;
}
}

View File

@ -1,153 +0,0 @@
import "@polymer/app-layout/app-header-layout/app-header-layout";
import "@polymer/app-layout/app-header/app-header";
import "@polymer/app-layout/app-toolbar/app-toolbar";
import "@polymer/iron-icon/iron-icon";
import "@polymer/paper-item/paper-item-body";
import "@polymer/paper-item/paper-item";
import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element";
import "../../../components/ha-card";
import "../../../components/ha-menu-button";
import "../../../components/ha-icon-next";
import "../ha-config-section";
import "./ha-config-navigation";
import { isComponentLoaded } from "../../../common/config/is_component_loaded";
import LocalizeMixin from "../../../mixins/localize-mixin";
import NavigateMixin from "../../../mixins/navigate-mixin";
/*
* @appliesMixin LocalizeMixin
*/
class HaConfigDashboard extends NavigateMixin(LocalizeMixin(PolymerElement)) {
static get template() {
return html`
<style include="iron-flex ha-style">
ha-card {
overflow: hidden;
}
.content {
padding-bottom: 32px;
}
ha-card a {
text-decoration: none;
color: var(--primary-text-color);
}
.promo-advanced {
text-align: center;
color: var(--secondary-text-color);
}
.promo-advanced a {
color: var(--secondary-text-color);
}
</style>
<app-header-layout has-scrolling-region="">
<app-header slot="header" fixed="">
<app-toolbar>
<ha-menu-button hass='[[hass]]' narrow='[[narrow]]'></ha-menu-button>
<div main-title="">[[localize('panel.config')]]</div>
</app-toolbar>
</app-header>
<div class="content">
<ha-config-section is-wide="[[isWide]]">
<span slot="header">[[localize('ui.panel.config.header')]]</span>
<span slot="introduction">[[localize('ui.panel.config.introduction')]]</span>
<template is="dom-if" if="[[computeIsLoaded(hass, 'cloud')]]">
<ha-card>
<a href='/config/cloud' tabindex="-1">
<paper-item>
<paper-item-body two-line="">
[[localize('ui.panel.config.cloud.caption')]]
<template is="dom-if" if="[[cloudStatus.logged_in]]">
<div secondary="">
[[localize('ui.panel.config.cloud.description_login', 'email', cloudStatus.email)]]
</div>
</template>
<template is="dom-if" if="[[!cloudStatus.logged_in]]">
<div secondary="">
[[localize('ui.panel.config.cloud.description_features')]]
</div>
</template>
</paper-item-body>
<ha-icon-next></ha-icon-next>
</paper-item>
</ha-card>
</a>
</template>
<ha-card>
<a href='/config/integrations/dashboard' tabindex="-1">
<paper-item>
<paper-item-body two-line>
[[localize('ui.panel.config.integrations.caption')]]
<div secondary>
[[localize('ui.panel.config.integrations.description')]]
</div>
</paper-item-body>
<ha-icon-next></ha-icon-next>
</paper-item>
</a>
<a href='/config/devices/dashboard' tabindex="-1">
<paper-item>
<paper-item-body two-line>
[[localize('ui.panel.config.devices.caption')]]
<div secondary>
[[localize('ui.panel.config.devices.description')]]
</div>
</paper-item-body>
<ha-icon-next></ha-icon-next>
</paper-item>
</a>
<a href='/config/users' tabindex="-1">
<paper-item>
<paper-item-body two-line>
[[localize('ui.panel.config.users.caption')]]
<div secondary>
[[localize('ui.panel.config.users.description')]]
</div>
</paper-item-body>
<ha-icon-next></ha-icon-next>
</paper-item>
</a>
</ha-card>
<ha-config-navigation
hass="[[hass]]"
show-advanced="[[showAdvanced]]"
></ha-config-navigation>
<template is='dom-if' if='[[!showAdvanced]]'>
<div class='promo-advanced'>
[[localize('ui.panel.profile.advanced_mode.hint_enable')]] <a
href="/profile"
>[[localize('ui.panel.profile.advanced_mode.link_profile_page')]]</a>.
</div>
</template>
</ha-config-section>
</div>
</app-header-layout>
`;
}
static get properties() {
return {
hass: Object,
narrow: Boolean,
isWide: Boolean,
cloudStatus: Object,
showAdvanced: Boolean,
};
}
computeIsLoaded(hass, component) {
return isComponentLoaded(hass, component);
}
}
customElements.define("ha-config-dashboard", HaConfigDashboard);

View File

@ -0,0 +1,164 @@
import {
LitElement,
TemplateResult,
html,
CSSResultArray,
css,
customElement,
property,
} from "lit-element";
import "@polymer/app-layout/app-header-layout/app-header-layout";
import "@polymer/app-layout/app-header/app-header";
import "@polymer/app-layout/app-toolbar/app-toolbar";
import "../../../components/ha-menu-button";
import { haStyle } from "../../../resources/styles";
import { HomeAssistant } from "../../../types";
import { CloudStatus, CloudStatusLoggedIn } from "../../../data/cloud";
import { isComponentLoaded } from "../../../common/config/is_component_loaded";
import "../../../components/ha-card";
import "../ha-config-section";
import "./ha-config-navigation";
@customElement("ha-config-dashboard")
class HaConfigDashboard extends LitElement {
@property() public hass!: HomeAssistant;
@property() public narrow!: boolean;
@property() public isWide!: boolean;
@property() public cloudStatus!: CloudStatus;
@property() public showAdvanced!: boolean;
protected render(): TemplateResult | void {
return html`
<app-header-layout has-scrolling-region>
<app-header fixed slot="header">
<app-toolbar>
<ha-menu-button
.hass=${this.hass}
.narrow=${this.narrow}
></ha-menu-button>
<div main-title>${this.hass.localize("panel.config")}</div>
</app-toolbar>
</app-header>
<ha-config-section .narrow=${this.narrow} .isWide=${this.isWide}>
<div slot="header">
${this.hass.localize("ui.panel.config.header")}
</div>
<div slot="introduction">
${this.hass.localize("ui.panel.config.introduction")}
</div>
${isComponentLoaded(this.hass, "cloud")
? html`
<ha-card>
<a href='/config/cloud' tabindex="-1">
<paper-item>
<paper-item-body two-line="">
${this.hass.localize("ui.panel.config.cloud.caption")}
${
this.cloudStatus.logged_in
? html`
<div secondary="">
${this.hass.localize(
"ui.panel.config.cloud.description_login",
"email",
(this.cloudStatus as CloudStatusLoggedIn).email
)}
</div>
`
: html`
<div secondary="">
${this.hass.localize(
"ui.panel.config.cloud.description_features"
)}
</div>
`
}
</paper-item-body>
<ha-icon-next></ha-icon-next>
</paper-item>
</ha-card>
</a>
`
: ""}
<ha-config-navigation
.hass=${this.hass}
.showAdvanced=${this.showAdvanced}
.pages=${[
{ page: "integrations", core: true },
{ page: "devices", core: true },
{ page: "automation" },
{ page: "script" },
{ page: "scene" },
]}
></ha-config-navigation>
<ha-config-navigation
.hass=${this.hass}
.showAdvanced=${this.showAdvanced}
.pages=${[
{ page: "core", core: true },
{ page: "server_control", core: true },
{ page: "entity_registry", core: true },
{ page: "area_registry", core: true },
{ page: "person" },
{ page: "users", core: true },
{ page: "zha" },
{ page: "zwave" },
{ page: "customize", core: true, advanced: true },
]}
></ha-config-navigation>
${!this.showAdvanced
? html`
<div class="promo-advanced">
${this.hass.localize(
"ui.panel.profile.advanced_mode.hint_enable"
)}
<a href="/profile"
>${this.hass.localize(
"ui.panel.profile.advanced_mode.link_profile_page"
)}</a
>.
</div>
`
: ""}
</ha-config-section>
</app-header-layout>
`;
}
static get styles(): CSSResultArray {
return [
haStyle,
css`
ha-card {
overflow: hidden;
}
ha-card a {
text-decoration: none;
color: var(--primary-text-color);
}
.promo-advanced {
text-align: center;
color: var(--secondary-text-color);
}
.promo-advanced a {
color: var(--secondary-text-color);
}
`,
];
}
}
declare global {
interface HTMLElementTagNameMap {
"ha-config-dashboard": HaConfigDashboard;
}
}

View File

@ -17,33 +17,22 @@ import {
} from "lit-element";
import { HomeAssistant } from "../../../types";
const PAGES: Array<{
export interface ConfigPageNavigation {
page: string;
core?: boolean;
advanced?: boolean;
}> = [
{ page: "core", core: true },
{ page: "server_control", core: true },
{ page: "person" },
{ page: "entity_registry", core: true },
{ page: "area_registry", core: true },
{ page: "automation" },
{ page: "script" },
{ page: "scene" },
{ page: "zha" },
{ page: "zwave" },
{ page: "customize", core: true, advanced: true },
];
}
@customElement("ha-config-navigation")
class HaConfigNavigation extends LitElement {
@property() public hass!: HomeAssistant;
@property() public showAdvanced!: boolean;
@property() public pages!: ConfigPageNavigation[];
protected render(): TemplateResult | void {
return html`
<ha-card>
${PAGES.map(({ page, core, advanced }) =>
${this.pages.map(({ page, core, advanced }) =>
(core || isComponentLoaded(this.hass, page)) &&
(!advanced || this.showAdvanced)
? html`

View File

@ -226,6 +226,9 @@ class DialogEntityRegistryDetail extends LitElement {
return [
haStyleDialog,
css`
:host {
--paper-font-title_-_white-space: normal;
}
ha-paper-dialog {
min-width: 400px;
max-width: 450px;

View File

@ -68,7 +68,7 @@ export default class DeviceActionEditor extends Component<
{extraFieldsData && (
<ha-form
data={Object.assign({}, ...extraFieldsData)}
onData-changed={this._extraFieldsChanged}
onvalue-changed={this._extraFieldsChanged}
schema={this.state.capabilities.extra_fields}
computeLabel={this._extraFieldsComputeLabelCallback(hass.localize)}
/>

View File

@ -222,7 +222,7 @@ class DialogPersonDetail extends LitElement {
}
private _openedChanged(ev: PolymerChangedEvent<boolean>): void {
if (ev.detail.value) {
if (!ev.detail.value) {
this._params = undefined;
}
}

View File

@ -107,35 +107,47 @@ class HaConfigSectionServerControl extends LocalizeMixin(PolymerElement) {
service="reload_core_config"
>[[localize('ui.panel.config.server_control.section.reloading.core')]]
</ha-call-service-button>
<ha-call-service-button
hass="[[hass]]"
domain="group"
service="reload"
hidden$="[[!groupLoaded(hass)]]"
>[[localize('ui.panel.config.server_control.section.reloading.group')]]
</ha-call-service-button>
<ha-call-service-button
hass="[[hass]]"
domain="automation"
service="reload"
hidden$="[[!automationLoaded(hass)]]"
>[[localize('ui.panel.config.server_control.section.reloading.automation')]]
</ha-call-service-button>
<ha-call-service-button
hass="[[hass]]"
domain="script"
service="reload"
hidden$="[[!scriptLoaded(hass)]]"
>[[localize('ui.panel.config.server_control.section.reloading.script')]]
</ha-call-service-button>
<ha-call-service-button
hass="[[hass]]"
domain="scene"
service="reload"
hidden$="[[!sceneLoaded(hass)]]"
>[[localize('ui.panel.config.server_control.section.reloading.scene')]]
</ha-call-service-button>
</div>
<template is="dom-if" if="[[groupLoaded(hass)]]">
<div class="card-actions">
<ha-call-service-button
hass="[[hass]]"
domain="group"
service="reload"
>[[localize('ui.panel.config.server_control.section.reloading.group')]]
</ha-call-service-button>
</div>
</template>
<template is="dom-if" if="[[automationLoaded(hass)]]">
<div class="card-actions">
<ha-call-service-button
hass="[[hass]]"
domain="automation"
service="reload"
>[[localize('ui.panel.config.server_control.section.reloading.automation')]]
</ha-call-service-button>
</div>
</template>
<template is="dom-if" if="[[scriptLoaded(hass)]]">
<div class="card-actions">
<ha-call-service-button
hass="[[hass]]"
domain="script"
service="reload"
>[[localize('ui.panel.config.server_control.section.reloading.script')]]
</ha-call-service-button>
</div>
</template>
<template is="dom-if" if="[[sceneLoaded(hass)]]">
<div class="card-actions">
<ha-call-service-button
hass="[[hass]]"
domain="scene"
service="reload"
>[[localize('ui.panel.config.server_control.section.reloading.scene')]]
</ha-call-service-button>
</div>
</template>
</ha-card>
</template>
<ha-card

View File

@ -240,6 +240,11 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) {
}
entityIdChanged() {
if (this._entityId === "") {
this._state = "";
this._stateAttributes = "";
return;
}
var state = this.hass.states[this._entityId];
this._state = state.state;
this._stateAttributes = safeDump(state.attributes);

View File

@ -59,11 +59,11 @@ export class HuiHistoryGraphCardEditor extends LitElement
}
get _hours_to_show(): number {
return this._config!.number || 24;
return this._config!.hours_to_show || 24;
}
get _refresh_interval(): number {
return this._config!.number || 0;
return this._config!.refresh_interval || 0;
}
protected render(): TemplateResult | void {

View File

@ -57,6 +57,8 @@ documentContainer.innerHTML = `<custom-style>
/* controls */
--switch-checked-color: var(--primary-color);
/* --switch-unchecked-color: var(--accent-color); */
--switch-checked-button-color: var(--switch-checked-color, var(--paper-grey-50));
--switch-checked-track-color: var(--switch-checked-color, #000000);
--switch-unchecked-button-color: var(--switch-unchecked-color, var(--paper-grey-50));
--switch-unchecked-track-color: var(--switch-unchecked-color, #000000);
--slider-color: var(--primary-color);

View File

@ -531,7 +531,8 @@
},
"device-picker": {
"clear": "Clear",
"show_devices": "Show devices"
"show_devices": "Show devices",
"device": "Device"
},
"relative_time": {
"past": "{time} ago",
@ -559,8 +560,8 @@
"found": "I found the following for you:",
"error": "Oops, an error has occurred",
"how_can_i_help": "How can I help?",
"label": "Type a question and press <Enter>",
"label_voice": "Type and press <Enter> or tap the microphone icon to speak"
"label": "Type a question and press 'Enter'",
"label_voice": "Type and press 'Enter' or tap the microphone to speak"
},
"confirmation": {
"cancel": "Cancel",
@ -661,10 +662,10 @@
}
},
"area_registry": {
"caption": "Area Registry",
"caption": "Areas",
"description": "Overview of all areas in your home.",
"picker": {
"header": "Area Registry",
"header": "Areas",
"introduction": "Areas are used to organize where devices are. This information will be used throughout Home Assistant to help you in organizing your interface, permissions and integrations with other systems.",
"introduction2": "To place devices in an area, use the link below to navigate to the integrations page and then click on a configured integration to get to the device cards.",
"integrations_page": "Integrations page",
@ -704,7 +705,7 @@
}
},
"server_control": {
"caption": "Server Control",
"caption": "Server Controls",
"description": "Restart and stop the Home Assistant server",
"section": {
"validation": {
@ -717,7 +718,7 @@
"reloading": {
"heading": "Configuration reloading",
"introduction": "Some parts of Home Assistant can reload without requiring a restart. Hitting reload will unload their current configuration and load the new one.",
"core": "Reload core",
"core": "Reload location & customizations",
"group": "Reload groups",
"automation": "Reload automations",
"script": "Reload scripts",
@ -734,10 +735,10 @@
}
},
"customize": {
"caption": "Customization",
"caption": "Customizations",
"description": "Customize your entities",
"picker": {
"header": "Customization",
"header": "Customizations",
"introduction": "Tweak per-entity attributes. Added/edited customizations will take effect immediately. Removed customizations will take effect when the entity is updated."
},
"warning": {
@ -754,7 +755,7 @@
"pick_attribute": "Pick an attribute to override"
},
"automation": {
"caption": "Automation",
"caption": "Automations",
"description": "Create and edit automations",
"picker": {
"header": "Automation Editor",
@ -782,6 +783,7 @@
"placeholder": "Optional description"
},
"triggers": {
"name": "Trigger",
"header": "Triggers",
"introduction": "Triggers are what starts the processing of an automation rule. It is possible to specify multiple triggers for the same rule. Once a trigger starts, Home Assistant will validate the conditions, if any, and call the action.",
"learn_more": "Learn more about triggers",
@ -872,6 +874,7 @@
}
},
"conditions": {
"name": "Condition",
"header": "Conditions",
"introduction": "Conditions are an optional part of an automation rule and can be used to prevent an action from happening when triggered. Conditions look very similar to triggers but are very different. A trigger will look at events happening in the system while a condition only looks at how the system looks right now. A trigger can observe that a switch is being turned on. A condition can only see if a switch is currently on or off.",
"learn_more": "Learn more about conditions",
@ -932,6 +935,7 @@
}
},
"actions": {
"name": "Action",
"header": "Actions",
"introduction": "The actions are what Home Assistant will do when the automation is triggered.",
"learn_more": "Learn more about actions",
@ -977,7 +981,7 @@
}
},
"script": {
"caption": "Script",
"caption": "Scripts",
"description": "Create and edit scripts",
"picker": {
"header": "Script Editor",
@ -1229,10 +1233,10 @@
}
},
"entity_registry": {
"caption": "Entity Registry",
"caption": "Entities",
"description": "Overview of all known entities.",
"picker": {
"header": "Entity Registry",
"header": "Entities",
"introduction": "Home Assistant keeps a registry of every entity it has ever seen that can be uniquely identified. Each of these entities will have an entity ID assigned which will be reserved for just this entity.",
"introduction2": "Use the entity registry to override the name, change the entity ID or remove the entry from Home Assistant. Note, removing the entity registry entry won't remove the entity. To do that, follow the link below and remove it from the integrations page.",
"integrations_page": "Integrations page",

View File

@ -45,6 +45,7 @@ hassAttributeUtil.DOMAIN_DEVICE_CLASS = {
"pressure",
"power",
"signal_strength",
"timestamp",
],
switch: ["switch", "outlet"],
};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,51 +1,112 @@
{
"domain": {
"alarm_control_panel": "Centralni sistem za alarm",
"automation": "Automatizacija",
"binary_sensor": "Binarni senzor",
"calendar": "Kalendar",
"camera": "Kamera",
"climate": "Klima",
"configurator": "Konfigurator",
"conversation": "Razgovor",
"cover": "Poklopac",
"device_tracker": "Praćenje uređaja",
"fan": "Ventilator",
"group": "Grupa",
"history_graph": "Grafik istorije",
"image_processing": "Obrada slike",
"input_boolean": "Unos boolean",
"input_datetime": "Unos datuma",
"input_number": "Unos broja",
"input_select": "Unos izbora",
"input_text": "Unos teksta",
"light": "Svjetlo",
"lock": "Zaključaj",
"mailbox": "Poštansko sanduče",
"media_player": "Media player",
"notify": "Obavjesti",
"plant": "Biljka",
"proximity": "Udaljenost",
"remote": "Daljinski",
"scene": "Scena",
"script": "Skripta",
"sensor": "Senzor",
"sun": "Sunce",
"switch": "Prekidač",
"updater": "Updater",
"weblink": "Weblink",
"zwave": "Z-Wave"
},
"panel": {
"config": "Konfiguracija",
"states": "Pregled",
"map": "Karta",
"logbook": "Dnevnik",
"history": "Istorija",
"mailbox": "Poštansko sanduče",
"shopping_list": "Spisak za kupovinu",
"dev-info": "Info",
"developer_tools": "Alatke za razvoj"
"developer_tools": "Alatke za razvoj",
"history": "Istorija",
"logbook": "Dnevnik",
"mailbox": "Poštansko sanduče",
"map": "Karta",
"shopping_list": "Spisak za kupovinu",
"states": "Pregled"
},
"state": {
"default": {
"off": "Isključen",
"on": "Uključen",
"unknown": "Nepoznat",
"unavailable": "Nedostupan"
},
"state_badge": {
"alarm_control_panel": {
"armed": "Aktiviran",
"disarmed": "Deaktiviran",
"armed_away": "Aktiviran",
"armed_custom_bypass": "Aktiviran",
"armed_home": "Aktiviran kod kuće",
"armed_away": "Aktiviran izvan kuće",
"armed_night": "Aktiviran noću",
"pending": "U isčekivanju",
"armed_night": "Aktiviran",
"arming": "Aktivacija",
"disarmed": "Deaktiviran",
"disarming": "Deaktivacija",
"triggered": "Pokrenut",
"armed_custom_bypass": "Aktiviran pod specijalnim rezimom"
"pending": "Na čekanju",
"triggered": "Započet"
},
"default": {
"unavailable": "Nedostupan",
"unknown": "Nepoznat"
},
"device_tracker": {
"home": "Kod kuće",
"not_home": "Odsutan"
}
},
"state": {
"alarm_control_panel": {
"armed": "Aktiviran",
"armed_away": "Aktiviran izvan kuće",
"armed_custom_bypass": "Aktiviran pod specijalnim rezimom",
"armed_home": "Aktiviran kod kuće",
"armed_night": "Aktiviran noću",
"arming": "Aktivacija",
"disarmed": "Deaktiviran",
"disarming": "Deaktivacija",
"pending": "U isčekivanju",
"triggered": "Pokrenut"
},
"automation": {
"off": "Isključen",
"on": "Uključen"
},
"binary_sensor": {
"battery": {
"off": "Normalno",
"on": "Nisko"
},
"connectivity": {
"off": "Nepovezan",
"on": "Povezan"
},
"default": {
"off": "Isključen",
"on": "Uključen"
},
"moisture": {
"off": "Suho",
"on": "Mokar"
},
"gas": {
"off": "Čist",
"on": "Otkriven"
},
"moisture": {
"off": "Suho",
"on": "Mokar"
},
"motion": {
"off": "Čist",
"on": "Otkriven"
@ -54,6 +115,22 @@
"off": "Čist",
"on": "Otkriven"
},
"opening": {
"off": "Zatvoren",
"on": "Otvoren"
},
"presence": {
"off": "Odsutan",
"on": "Kod kuće"
},
"problem": {
"off": "OK",
"on": "Problem"
},
"safety": {
"off": "Siguran",
"on": "Nesiguran"
},
"smoke": {
"off": "Čist",
"on": "Otkriven"
@ -65,30 +142,6 @@
"vibration": {
"off": "Čist",
"on": "Otkriven"
},
"opening": {
"off": "Zatvoren",
"on": "Otvoren"
},
"safety": {
"off": "Siguran",
"on": "Nesiguran"
},
"presence": {
"off": "Odsutan",
"on": "Kod kuće"
},
"battery": {
"off": "Normalno",
"on": "Nisko"
},
"problem": {
"off": "OK",
"on": "Problem"
},
"connectivity": {
"off": "Nepovezan",
"on": "Povezan"
}
},
"calendar": {
@ -96,37 +149,43 @@
"on": "Uključen"
},
"camera": {
"idle": "Besposlen",
"recording": "Snimanje",
"streaming": "Predaja slike",
"idle": "Besposlen"
"streaming": "Predaja slike"
},
"climate": {
"off": "Isključen",
"on": "Uključen",
"heat": "Toplota",
"cool": "Hladno",
"idle": "Besposlen",
"auto": "Auto",
"cool": "Hladno",
"dry": "Suh",
"fan_only": "Samo ventilator",
"eco": "Eko",
"electric": "Električni",
"performance": "Performans",
"high_demand": "Velika potražnja",
"fan_only": "Samo ventilator",
"gas": "Gas",
"heat": "Toplota",
"heat_pump": "Pumpa za toplotu",
"gas": "Gas"
"high_demand": "Velika potražnja",
"idle": "Besposlen",
"off": "Isključen",
"on": "Uključen",
"performance": "Performans"
},
"configurator": {
"configure": "Podesite",
"configured": "Konfigurirano"
},
"cover": {
"open": "Otvoren",
"opening": "Otvoreno",
"closed": "Zatvoren",
"closing": "Zatvoreno",
"open": "Otvoren",
"opening": "Otvoreno",
"stopped": "Zaustavljen"
},
"default": {
"off": "Isključen",
"on": "Uključen",
"unavailable": "Nedostupan",
"unknown": "Nepoznat"
},
"device_tracker": {
"home": "Kod kuće",
"not_home": "Odsutan"
@ -136,19 +195,19 @@
"on": "Uključen"
},
"group": {
"off": "Isključen",
"on": "Uključen",
"home": "Kod kuće",
"not_home": "Odsutan",
"open": "Otvoren",
"opening": "Otvoreno",
"closed": "Zatvoren",
"closing": "Zatvoreno",
"stopped": "Zaustavljen",
"home": "Kod kuće",
"locked": "Zaključan",
"unlocked": "Otključan",
"not_home": "Odsutan",
"off": "Isključen",
"ok": "OK",
"problem": "Problem"
"on": "Uključen",
"open": "Otvoren",
"opening": "Otvoreno",
"problem": "Problem",
"stopped": "Zaustavljen",
"unlocked": "Otključan"
},
"input_boolean": {
"off": "Isključen",
@ -163,11 +222,11 @@
"unlocked": "Otključan"
},
"media_player": {
"idle": "Besposlen",
"off": "Isključen",
"on": "Uključen",
"playing": "Prikazuje",
"paused": "Pauziran",
"idle": "Besposlen",
"playing": "Prikazuje",
"standby": "U stanju čekanja"
},
"plant": {
@ -199,138 +258,79 @@
},
"zwave": {
"default": {
"initializing": "Inicijalizacija",
"dead": "Mrtav",
"sleeping": "Spava",
"ready": "Spreman"
"initializing": "Inicijalizacija",
"ready": "Spreman",
"sleeping": "Spava"
},
"query_stage": {
"initializing": "Inicijalizacija ( {query_stage} )",
"dead": "Mrtav ({query_stage})"
"dead": "Mrtav ({query_stage})",
"initializing": "Inicijalizacija ( {query_stage} )"
}
}
},
"state_badge": {
"default": {
"unknown": "Nepoznat",
"unavailable": "Nedostupan"
},
"alarm_control_panel": {
"armed": "Aktiviran",
"disarmed": "Deaktiviran",
"armed_home": "Aktiviran kod kuće",
"armed_away": "Aktiviran",
"armed_night": "Aktiviran",
"pending": "Na čekanju",
"arming": "Aktivacija",
"disarming": "Deaktivacija",
"triggered": "Započet",
"armed_custom_bypass": "Aktiviran"
},
"device_tracker": {
"home": "Kod kuće",
"not_home": "Odsutan"
}
},
"ui": {
"common": {
"cancel": "Odustani",
"loading": "Učitava"
},
"duration": {
"day": "{count} {count, plural,\\n one {dan}\\n other {dana}\\n}",
"second": "{count} {count, plural,\\n one {sekunda}\\n other {sekundi}\\n}",
"week": "{count} {count, plural,\\n one {sedmica}\\n other {sedmice}\\n}"
},
"panel": {
"shopping-list": {
"clear_completed": "Čišćenje završeno",
"add_item": "Dodajte objekat",
"microphone_tip": "Dodirnite mikrofon u gornjem desnom uglu i recite “Add candy to my shopping list”"
"config": {
"cloud": {
"caption": "Home Assistant Cloud"
},
"zwave": {
"caption": "Z-Wave",
"node_config": {
"set_config_parameter": "Podesite parametar Config"
}
}
},
"developer-tools": {
"tabs": {
"events": {
"title": "Događanja"
},
"mqtt": {
"title": "MQTT"
},
"services": {
"title": "Usluge"
},
"states": {
"title": "Statusi"
},
"events": {
"title": "Događanja"
},
"templates": {
"title": "Predlošci"
},
"mqtt": {
"title": "MQTT"
}
}
},
"history": {
"showing_entries": "Prikaži rezutate za",
"period": "Period"
"period": "Period",
"showing_entries": "Prikaži rezutate za"
},
"logbook": {
"showing_entries": "Prikaži rezutate za"
},
"mailbox": {
"empty": "Nemate poruke",
"playback_title": "Poruku preslušati",
"delete_button": "Izbriši",
"delete_prompt": "Izbriši ovu poruku?",
"delete_button": "Izbriši"
"empty": "Nemate poruke",
"playback_title": "Poruku preslušati"
},
"config": {
"zwave": {
"caption": "Z-Wave",
"node_config": {
"set_config_parameter": "Podesite parametar Config"
}
},
"cloud": {
"caption": "Home Assistant Cloud"
}
"shopping-list": {
"add_item": "Dodajte objekat",
"clear_completed": "Čišćenje završeno",
"microphone_tip": "Dodirnite mikrofon u gornjem desnom uglu i recite “Add candy to my shopping list”"
}
},
"sidebar": {
"log_out": "Izlaz"
},
"common": {
"loading": "Učitava",
"cancel": "Odustani"
},
"duration": {
"day": "{count} {count, plural,\n one {dan}\n other {dana}\n}",
"week": "{count} {count, plural,\n one {sedmica}\n other {sedmice}\n}",
"second": "{count} {count, plural,\n one {sekunda}\n other {sekundi}\n}"
}
},
"domain": {
"alarm_control_panel": "Centralni sistem za alarm",
"automation": "Automatizacija",
"binary_sensor": "Binarni senzor",
"calendar": "Kalendar",
"camera": "Kamera",
"climate": "Klima",
"configurator": "Konfigurator",
"conversation": "Razgovor",
"cover": "Poklopac",
"device_tracker": "Praćenje uređaja",
"fan": "Ventilator",
"history_graph": "Grafik istorije",
"group": "Grupa",
"image_processing": "Obrada slike",
"input_boolean": "Unos boolean",
"input_datetime": "Unos datuma",
"input_select": "Unos izbora",
"input_number": "Unos broja",
"input_text": "Unos teksta",
"light": "Svjetlo",
"lock": "Zaključaj",
"mailbox": "Poštansko sanduče",
"media_player": "Media player",
"notify": "Obavjesti",
"plant": "Biljka",
"proximity": "Udaljenost",
"remote": "Daljinski",
"scene": "Scena",
"script": "Skripta",
"sensor": "Senzor",
"sun": "Sunce",
"switch": "Prekidač",
"updater": "Updater",
"weblink": "Weblink",
"zwave": "Z-Wave"
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,32 +1,77 @@
{
"panel": {
"config": "Istellige",
"states": "Übersicht",
"map": "Charte",
"logbook": "Logbuech",
"history": "Vrlouf",
"mailbox": "Postigang",
"shopping_list": "Ichoufsliste",
"dev-info": "Info",
"calendar": "Kaländer",
"profile": "Profiu"
"attribute": {
"weather": {
"wind_speed": "Windgschwindigkeit"
}
},
"state": {
"default": {
"off": "Us",
"on": "Ah",
"unknown": "Unbekannt",
"unavailable": "Nid verfüägbar"
},
"domain": {
"automation": "Automation",
"binary_sensor": "Binäre Sensor",
"calendar": "Kaländer",
"camera": "Kamera",
"climate": "Klima",
"configurator": "Configurator",
"conversation": "Gspräch",
"cover": "Roulade",
"group": "Gruppe",
"light": "Liächt",
"lock": "Schloss",
"plant": "Pflanze",
"remote": "Entfernt",
"scene": "Szene",
"script": "Skript",
"sensor": "Sensor",
"sun": "Sunne",
"switch": "Schauter",
"updater": "Updater",
"vacuum": "Stoubsuger",
"weblink": "Weblink",
"zwave": "Z-Wave"
},
"panel": {
"calendar": "Kaländer",
"config": "Istellige",
"dev-info": "Info",
"history": "Vrlouf",
"logbook": "Logbuech",
"mailbox": "Postigang",
"map": "Charte",
"profile": "Profiu",
"shopping_list": "Ichoufsliste",
"states": "Übersicht"
},
"state_badge": {
"alarm_control_panel": {
"armed": "Scharf",
"armed_away": "Scharf",
"armed_custom_bypass": "Scharf",
"armed_home": "Scharf Dahei",
"armed_night": "Scharf",
"arming": "Scharf steue",
"disarmed": "Entschärft",
"disarming": "Deaktiviärt",
"pending": "Usstehend",
"triggered": "Usglöst"
},
"default": {
"unavailable": "Nid verfüägbar",
"unknown": "Unbekannt"
},
"device_tracker": {
"home": "Dahei",
"not_home": "Nid Dahei"
}
},
"state": {
"alarm_control_panel": {
"armed": "Scharf",
"disarmed": "Nid scharf",
"armed_home": "Scharf dihei",
"armed_away": "Scharf usswerts",
"armed_home": "Scharf dihei",
"armed_night": "Scharf Nacht",
"pending": "Usstehehnd",
"arming": "Scharf stelä",
"disarmed": "Nid scharf",
"disarming": "Entsperrä",
"pending": "Usstehehnd",
"triggered": "Usglösst"
},
"automation": {
@ -34,18 +79,29 @@
"on": "Ah"
},
"binary_sensor": {
"battery": {
"off": "Normau",
"on": "Nidrig"
},
"connectivity": {
"off": "Trennt",
"on": "Verbunge"
},
"default": {
"off": "Us",
"on": "Ah"
},
"moisture": {
"off": "Trochä",
"on": "Nass"
},
"gas": {
"off": "Frei",
"on": "Erkännt"
},
"heat": {
"on": "Heiss"
},
"moisture": {
"off": "Trochä",
"on": "Nass"
},
"motion": {
"off": "Ok",
"on": "Erchänt"
@ -54,6 +110,22 @@
"off": "Ok",
"on": "Erchänt"
},
"opening": {
"off": "Gschlosä",
"on": "Offä"
},
"presence": {
"off": "Nid Dahei",
"on": "Dahei"
},
"problem": {
"off": "OK",
"on": "Problem"
},
"safety": {
"off": "Sicher",
"on": "Unsicher"
},
"smoke": {
"off": "Ok",
"on": "Erchänt"
@ -65,33 +137,6 @@
"vibration": {
"off": "Ok",
"on": "Erchänt"
},
"opening": {
"off": "Gschlosä",
"on": "Offä"
},
"safety": {
"off": "Sicher",
"on": "Unsicher"
},
"presence": {
"off": "Nid Dahei",
"on": "Dahei"
},
"battery": {
"off": "Normau",
"on": "Nidrig"
},
"problem": {
"off": "OK",
"on": "Problem"
},
"connectivity": {
"off": "Trennt",
"on": "Verbunge"
},
"heat": {
"on": "Heiss"
}
},
"calendar": {
@ -99,37 +144,43 @@
"on": "Ah"
},
"camera": {
"idle": "Läärlauf",
"recording": "Nimt uf",
"streaming": "Streamt",
"idle": "Läärlauf"
"streaming": "Streamt"
},
"climate": {
"off": "Us",
"on": "Ah",
"heat": "Heizä",
"cool": "Chüälä",
"idle": "Läärlauf",
"auto": "Automatik",
"cool": "Chüälä",
"dry": "Trochä",
"fan_only": "Nur Lüfter",
"eco": "Öko",
"electric": "Strom",
"performance": "Leistig",
"high_demand": "Grossi Nachfrag",
"fan_only": "Nur Lüfter",
"gas": "Gas",
"heat": "Heizä",
"heat_pump": "Heizigspumpi",
"gas": "Gas"
"high_demand": "Grossi Nachfrag",
"idle": "Läärlauf",
"off": "Us",
"on": "Ah",
"performance": "Leistig"
},
"configurator": {
"configure": "Konfiguriärä",
"configured": "Konfiguriärt"
},
"cover": {
"open": "Offä",
"opening": "Am öffnä",
"closed": "Gschlossä",
"closing": "Am schliesse",
"open": "Offä",
"opening": "Am öffnä",
"stopped": "Gstoppt"
},
"default": {
"off": "Us",
"on": "Ah",
"unavailable": "Nid verfüägbar",
"unknown": "Unbekannt"
},
"device_tracker": {
"home": "Dahei",
"not_home": "Nid Dahei"
@ -139,19 +190,19 @@
"on": "Ah"
},
"group": {
"off": "Us",
"on": "Ah",
"home": "Dahei",
"not_home": "Nid Dahei",
"open": "Offä",
"opening": "Am öffnä",
"closed": "Gschlossä",
"closing": "Schlüssä",
"stopped": "Gstoppt",
"home": "Dahei",
"locked": "Gsperrt",
"unlocked": "Entsperrt",
"not_home": "Nid Dahei",
"off": "Us",
"ok": "Ok",
"problem": "Problem"
"on": "Ah",
"open": "Offä",
"opening": "Am öffnä",
"problem": "Problem",
"stopped": "Gstoppt",
"unlocked": "Entsperrt"
},
"input_boolean": {
"off": "Us",
@ -166,11 +217,11 @@
"unlocked": "Entsperrt"
},
"media_player": {
"idle": "Läärlauf",
"off": "Us",
"on": "Ah",
"playing": "Am spilä",
"paused": "Pousiärä",
"idle": "Läärlauf",
"playing": "Am spilä",
"standby": "Standby"
},
"plant": {
@ -200,17 +251,12 @@
"off": "Us",
"on": "Ah"
},
"zwave": {
"default": {
"initializing": "Inizialisiärä",
"dead": "Tod",
"sleeping": "Schlafä",
"ready": "Parat"
},
"query_stage": {
"initializing": "Inizialisiärä ( {query_stage} )",
"dead": "Tod ({query_stage})"
}
"vacuum": {
"cleaning": "Putze",
"error": "Fähler",
"off": "Us",
"on": "I",
"paused": "Pause"
},
"weather": {
"clear-night": "Klar, Nacht",
@ -228,237 +274,79 @@
"windy": "windig",
"windy-variant": "windig"
},
"vacuum": {
"cleaning": "Putze",
"error": "Fähler",
"off": "Us",
"on": "I",
"paused": "Pause"
}
},
"state_badge": {
"default": {
"unknown": "Unbekannt",
"unavailable": "Nid verfüägbar"
},
"alarm_control_panel": {
"armed": "Scharf",
"disarmed": "Entschärft",
"armed_home": "Scharf Dahei",
"armed_away": "Scharf",
"armed_night": "Scharf",
"pending": "Usstehend",
"arming": "Scharf steue",
"disarming": "Deaktiviärt",
"triggered": "Usglöst",
"armed_custom_bypass": "Scharf"
},
"device_tracker": {
"home": "Dahei",
"not_home": "Nid Dahei"
"zwave": {
"default": {
"dead": "Tod",
"initializing": "Inizialisiärä",
"ready": "Parat",
"sleeping": "Schlafä"
},
"query_stage": {
"dead": "Tod ({query_stage})",
"initializing": "Inizialisiärä ( {query_stage} )"
}
}
},
"ui": {
"sidebar": {
"log_out": "Uslogge"
},
"panel": {
"developer-tools": {
"tabs": {
"mqtt": {
"title": "MQTT"
}
}
},
"history": {
"period": "Periode"
},
"mailbox": {
"delete_button": "Lösche"
},
"config": {
"core": {
"section": {
"server_control": {
"server_management": {
"restart": "Neustart",
"stop": "Stop"
}
}
}
},
"automation": {
"caption": "Automation",
"editor": {
"default_name": "Nöii Automation",
"save": "Spichere",
"alias": "Name",
"triggers": {
"header": "Uslöser",
"add": "Uslöser hinzuäfüäge",
"duplicate": "Kopie",
"type": {
"event": {
"label": "Event"
},
"state": {
"label": "Zuästand",
"from": "Vo",
"to": "Für"
},
"homeassistant": {
"label": "Home Assistant",
"start": "Starte",
"shutdown": "Abefahre"
},
"mqtt": {
"label": "MQTT",
"topic": "Topic"
},
"numeric_state": {
"label": "Nummerische Zuästand",
"above": "Über",
"below": "Unger"
},
"sun": {
"label": "Sunne",
"sunrise": "Sunneungergang",
"sunset": "Sunneufgang"
},
"template": {
"label": "Vorlag",
"value_template": "Wärt-Vorlag"
},
"time": {
"label": "Zyt"
},
"zone": {
"label": "Zone",
"enter": "Inecho",
"leave": "Verla"
}
}
},
"conditions": {
"header": "Bedingig",
"type": {
"sun": {
"before": "Vorhär:",
"after": "Nachhär:",
"sunrise": "Sunneungergang",
"sunset": "Sunneufgang"
},
"time": {
"after": "Nachhär",
"before": "Vorhär"
}
}
},
"actions": {
"header": "Aktione",
"unsupported_action": "Nicht unterstützte Aktion: {action}",
"type": {
"delay": {
"label": "Vrzögerig"
},
"wait_template": {
"label": "Warte"
},
"condition": {
"label": "Bedingig"
},
"event": {
"label": "Event uslöse"
}
}
}
}
},
"zwave": {
"caption": "Z-Wave"
},
"users": {
"caption": "Benutzer",
"picker": {
"title": "Benutzer"
},
"editor": {
"rename_user": "Benutzer umbenenne",
"delete_user": "Benutzer lösche"
}
},
"cloud": {
"caption": "Home Assistant Cloud"
},
"integrations": {
"caption": "Integratione",
"discovered": "Erkennt",
"configured": "Konfiguriärt",
"configure": "Konfiguriärä",
"config_entry": {
"manuf": "vo {manufacturer}",
"via": "Verbunge über",
"firmware": "Firmware: {version}",
"device_unavailable": "Grät verfüägbar",
"entity_unavailable": "Entitiy verfüägbar"
}
}
},
"profile": {
"long_lived_access_tokens": {
"create": "Token erzüge",
"prompt_name": "Name?"
},
"is_owner": "Du bisch dr Bsitzer",
"change_password": {
"header": "Passwort wächsle",
"current_password": "Aktuells Passwort",
"new_password": "Nöis Passwort",
"confirm_new_password": "Nöis Passwort bestätige",
"error_required": "Benötigt",
"submit": "Abschicke"
},
"mfa": {
"disable": "Deaktiviert"
}
},
"lovelace": {
"editor": {
"edit_card": {
"save": "Speichern"
}
}
}
},
"common": {
"loading": "Lade"
},
"login-form": {
"password": "Passwort"
},
"components": {
"service-picker": {
"service": "Service"
},
"relative_time": {
"never": "Niä"
},
"entity": {
"entity-picker": {
"clear": "Lösche"
}
},
"device-picker": {
"clear": "Lösche"
}
},
"card": {
"alarm_control_panel": {
"clear_code": "Lösche",
"code": "Code"
},
"automation": {
"trigger": "Uslöser"
},
"climate": {
"away_mode": "Wäg-Modus",
"currently": "Aktuell",
"fan_mode": "Ventilator-Modus",
"on_off": "I \/ us",
"operation": "Aktion",
"swing_mode": "Schwing-Modus",
"target_humidity": "Ziu-Fuächtigkeit",
"target_temperature": "Ziu-Temperatur"
},
"cover": {
"position": "Position",
"tilt_position": "Kipp-Position"
},
"fan": {
"direction": "Richtig",
"oscillate": "Ozilliere",
"speed": "Geschwindigkeit"
},
"light": {
"brightness": "Häuigkeit",
"color_temperature": "Farb-Temperatur",
"effect": "Effekt",
"white_value": "Wiss-Wärt"
},
"lock": {
"lock": "Zuätuä",
"unlock": "Uftuä"
},
"media_player": {
"sound_mode": "Sound-Modus",
"source": "Quelle"
},
"scene": {
"activate": "Aktiviere"
},
"script": {
"execute": "Usfüähre"
},
"vacuum": {
"actions": {
"turn_off": "Ausschaute",
"turn_on": "Ischaute"
}
},
"water_heater": {
"currently": "Aktuell",
"on_off": "I \/ Us",
"operation": "Operation",
"target_temperature": "Ziu-Temperatur"
},
"weather": {
"attributes": {
"air_pressure": "Luftdruck",
@ -474,8 +362,8 @@
"n": "N",
"ne": "NO",
"nne": "NNO",
"nw": "NW",
"nnw": "NNW",
"nw": "NW",
"s": "S",
"se": "SO",
"sse": "SSO",
@ -486,98 +374,210 @@
"wsw": "WSW"
},
"forecast": "Vorhärsag"
}
},
"common": {
"loading": "Lade"
},
"components": {
"device-picker": {
"clear": "Lösche"
},
"alarm_control_panel": {
"code": "Code",
"clear_code": "Lösche"
},
"automation": {
"trigger": "Uslöser"
},
"cover": {
"position": "Position",
"tilt_position": "Kipp-Position"
},
"fan": {
"speed": "Geschwindigkeit",
"oscillate": "Ozilliere",
"direction": "Richtig"
},
"light": {
"brightness": "Häuigkeit",
"color_temperature": "Farb-Temperatur",
"white_value": "Wiss-Wärt",
"effect": "Effekt"
},
"climate": {
"currently": "Aktuell",
"on_off": "I \/ us",
"target_temperature": "Ziu-Temperatur",
"target_humidity": "Ziu-Fuächtigkeit",
"operation": "Aktion",
"fan_mode": "Ventilator-Modus",
"swing_mode": "Schwing-Modus",
"away_mode": "Wäg-Modus"
},
"lock": {
"lock": "Zuätuä",
"unlock": "Uftuä"
},
"media_player": {
"source": "Quelle",
"sound_mode": "Sound-Modus"
},
"vacuum": {
"actions": {
"turn_on": "Ischaute",
"turn_off": "Ausschaute"
"entity": {
"entity-picker": {
"clear": "Lösche"
}
},
"water_heater": {
"currently": "Aktuell",
"on_off": "I \/ Us",
"target_temperature": "Ziu-Temperatur",
"operation": "Operation"
"relative_time": {
"never": "Niä"
},
"service-picker": {
"service": "Service"
}
},
"dialogs": {
"more_info_settings": {
"entity_id": "Entity ID",
"name": "Name",
"save": "Spichere"
}
},
"login-form": {
"password": "Passwort"
},
"notification_toast": {
"connection_lost": "Vrbindig vrlore. Neu verbinde..."
},
"dialogs": {
"more_info_settings": {
"save": "Spichere",
"name": "Name",
"entity_id": "Entity ID"
"panel": {
"config": {
"automation": {
"caption": "Automation",
"editor": {
"actions": {
"header": "Aktione",
"type": {
"condition": {
"label": "Bedingig"
},
"delay": {
"label": "Vrzögerig"
},
"event": {
"label": "Event uslöse"
},
"wait_template": {
"label": "Warte"
}
},
"unsupported_action": "Nicht unterstützte Aktion: {action}"
},
"alias": "Name",
"conditions": {
"header": "Bedingig",
"type": {
"sun": {
"after": "Nachhär:",
"before": "Vorhär:",
"sunrise": "Sunneungergang",
"sunset": "Sunneufgang"
},
"time": {
"after": "Nachhär",
"before": "Vorhär"
}
}
},
"default_name": "Nöii Automation",
"save": "Spichere",
"triggers": {
"add": "Uslöser hinzuäfüäge",
"duplicate": "Kopie",
"header": "Uslöser",
"type": {
"event": {
"label": "Event"
},
"homeassistant": {
"label": "Home Assistant",
"shutdown": "Abefahre",
"start": "Starte"
},
"mqtt": {
"label": "MQTT",
"topic": "Topic"
},
"numeric_state": {
"above": "Über",
"below": "Unger",
"label": "Nummerische Zuästand"
},
"state": {
"from": "Vo",
"label": "Zuästand",
"to": "Für"
},
"sun": {
"label": "Sunne",
"sunrise": "Sunneungergang",
"sunset": "Sunneufgang"
},
"template": {
"label": "Vorlag",
"value_template": "Wärt-Vorlag"
},
"time": {
"label": "Zyt"
},
"zone": {
"enter": "Inecho",
"label": "Zone",
"leave": "Verla"
}
}
}
}
},
"cloud": {
"caption": "Home Assistant Cloud"
},
"core": {
"section": {
"server_control": {
"server_management": {
"restart": "Neustart",
"stop": "Stop"
}
}
}
},
"integrations": {
"caption": "Integratione",
"config_entry": {
"device_unavailable": "Grät verfüägbar",
"entity_unavailable": "Entitiy verfüägbar",
"firmware": "Firmware: {version}",
"manuf": "vo {manufacturer}",
"via": "Verbunge über"
},
"configure": "Konfiguriärä",
"configured": "Konfiguriärt",
"discovered": "Erkennt"
},
"users": {
"caption": "Benutzer",
"editor": {
"delete_user": "Benutzer lösche",
"rename_user": "Benutzer umbenenne"
},
"picker": {
"title": "Benutzer"
}
},
"zwave": {
"caption": "Z-Wave"
}
},
"developer-tools": {
"tabs": {
"mqtt": {
"title": "MQTT"
}
}
},
"history": {
"period": "Periode"
},
"lovelace": {
"editor": {
"edit_card": {
"save": "Speichern"
}
}
},
"mailbox": {
"delete_button": "Lösche"
},
"profile": {
"change_password": {
"confirm_new_password": "Nöis Passwort bestätige",
"current_password": "Aktuells Passwort",
"error_required": "Benötigt",
"header": "Passwort wächsle",
"new_password": "Nöis Passwort",
"submit": "Abschicke"
},
"is_owner": "Du bisch dr Bsitzer",
"long_lived_access_tokens": {
"create": "Token erzüge",
"prompt_name": "Name?"
},
"mfa": {
"disable": "Deaktiviert"
}
}
}
},
"domain": {
"automation": "Automation",
"binary_sensor": "Binäre Sensor",
"calendar": "Kaländer",
"camera": "Kamera",
"climate": "Klima",
"configurator": "Configurator",
"conversation": "Gspräch",
"cover": "Roulade",
"group": "Gruppe",
"light": "Liächt",
"lock": "Schloss",
"plant": "Pflanze",
"remote": "Entfernt",
"scene": "Szene",
"script": "Skript",
"sensor": "Sensor",
"sun": "Sunne",
"switch": "Schauter",
"updater": "Updater",
"weblink": "Weblink",
"zwave": "Z-Wave",
"vacuum": "Stoubsuger"
},
"attribute": {
"weather": {
"wind_speed": "Windgschwindigkeit"
},
"sidebar": {
"log_out": "Uslogge"
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,49 +1,84 @@
{
"attribute": {
"weather": {
"humidity": "नमी",
"visibility": "दृश्यता",
"wind_speed": "हवा की गति"
}
},
"domain": {
"automation": "स्वचालन",
"binary_sensor": "बाइनरी सेंसर",
"climate": "जलवायु",
"device_tracker": "डिवाइस ट्रैकर",
"fan": "पंखा",
"group": "समूह",
"history_graph": "इतिहास ग्राफ",
"image_processing": "इमेज प्रोसेसिंग",
"input_boolean": "इनपुट बूलियन",
"input_datetime": "इनपुट दिनांक समय",
"input_number": "इनपुट संख्या",
"input_select": "इनपुट का चयन करें",
"input_text": "इनपुट टेक्स्ट",
"light": "रोशनी",
"lock": "ताला",
"mailbox": "मेलबॉक्स",
"media_player": "मीडिया प्लेयर",
"notify": "सूचित",
"proximity": "निकटता",
"remote": "रिमोट",
"scene": "दृश्य",
"script": "स्क्रिप्ट",
"sensor": "सेंसर",
"sun": "सूरज",
"switch": "स्विच",
"weblink": "वेब लिंक",
"zwave": "Z-Wave"
},
"panel": {
"config": "कॉंफ़िगरेशन",
"states": "स्थिति",
"map": "नक्शा",
"logbook": "रिपोर्ट",
"history": "इतिहास",
"mailbox": "मेलबॉक्स",
"shopping_list": "खरीदारी की सूची",
"dev-info": "जानकारी",
"developer_tools": "डेवलपर उपकरण"
"developer_tools": "डेवलपर उपकरण",
"history": "इतिहास",
"logbook": "रिपोर्ट",
"mailbox": "मेलबॉक्स",
"map": "नक्शा",
"shopping_list": "खरीदारी की सूची",
"states": "स्थिति"
},
"state_badge": {
"alarm_control_panel": {
"pending": "अपूर्ण"
},
"default": {
"entity_not_found": "Entità non trovata",
"error": "Errore",
"unavailable": "अनुपलब्ध",
"unknown": "अज्ञात"
},
"device_tracker": {
"home": "घर"
}
},
"state": {
"default": {
"off": "बंद",
"unknown": "अनजान",
"unavailable": "अनुपलब्ध"
},
"automation": {
"off": "बंद"
},
"binary_sensor": {
"default": {
"off": "बंद"
},
"motion": {
"off": "विशद",
"on": "अनुसन्धानित"
},
"opening": {
"on": "खुला"
},
"presence": {
"on": "घर"
},
"battery": {
"off": "साधारण",
"on": "कम"
},
"cold": {
"off": "साधारण",
"on": "सर्दी"
},
"connectivity": {
"off": "डिस्कनेक्ट किया गया",
"on": "जुड़े हुए"
},
"cold": {
"off": "साधारण",
"on": "सर्दी"
"default": {
"off": "बंद"
},
"door": {
"off": "बंद",
@ -56,6 +91,16 @@
"heat": {
"on": "गर्म"
},
"motion": {
"off": "विशद",
"on": "अनुसन्धानित"
},
"opening": {
"on": "खुला"
},
"presence": {
"on": "घर"
},
"window": {
"off": "बंद",
"on": "खुली"
@ -68,11 +113,16 @@
"recording": "रिकॉर्डिंग"
},
"climate": {
"off": "बंद",
"heat": "गर्मी",
"cool": "ठंडा",
"dry": "सूखा",
"manual": "गाइड"
"heat": "गर्मी",
"manual": "गाइड",
"off": "बंद"
},
"default": {
"off": "बंद",
"unavailable": "अनुपलब्ध",
"unknown": "अनजान"
},
"device_tracker": {
"home": "घर"
@ -82,9 +132,9 @@
"on": "चालू"
},
"group": {
"home": "घर",
"off": "बंद",
"on": "चालू",
"home": "घर",
"problem": "समस्या"
},
"input_boolean": {
@ -129,68 +179,52 @@
},
"zwave": {
"default": {
"sleeping": "सोया हुआ",
"ready": "तैयार"
"ready": "तैयार",
"sleeping": "सोया हुआ"
},
"query_stage": {
"initializing": "आरंभ ({query_stage})",
"dead": " ( {query_stage} )"
"dead": " ( {query_stage} )",
"initializing": "आरंभ ({query_stage})"
}
}
},
"state_badge": {
"default": {
"unknown": "अज्ञात",
"unavailable": "अनुपलब्ध",
"error": "Errore",
"entity_not_found": "Entità non trovata"
},
"alarm_control_panel": {
"pending": "अपूर्ण"
},
"device_tracker": {
"home": "घर"
}
},
"ui": {
"duration": {
"day": "{count} {count, plural,\\n one {दिन}\\n other {दिन}\\n}",
"week": "{count} {count, plural,\\n one {हफ़्ता}\\n other {हफ़्ते}\\n}"
},
"notification_drawer": {
"empty": "सूचनाएँ नहीं हैं",
"title": "सूचनाएँ"
},
"panel": {
"shopping-list": {
"add_item": "आइटम जोड़ें",
"microphone_tip": "ऊपर दाईं ओर माइक्रोफ़ोन टैप करें और \"मेरी खरीदारी सूची में कैंडी जोड़ें\" कहें"
},
"developer-tools": {
"tabs": {
"services": {
"title": "सेवाएं"
},
"events": {
"title": "घटनाओं"
},
"templates": {
"title": "टेम्पलेट्स"
},
"mqtt": {
"title": "MQTT"
},
"logs": {
"title": "लॉग्स"
}
}
},
"config": {
"zwave": {
"caption": "Z-Wave",
"node_config": {
"set_config_parameter": "कॉन्फ़िगरेशन पैरामीटर सेट करें"
"area_registry": {
"picker": {
"create_area": "Crea un area"
}
},
"automation": {
"editor": {
"conditions": {
"type": {
"sun": {
"after": "बाद:",
"before": "पहले:",
"sunrise": "सूर्योदय",
"sunset": "सूर्यास्त"
},
"time": {
"after": "बाद",
"before": "पहले"
}
}
},
"triggers": {
"type": {
"homeassistant": {
"start": "शुरू",
"shutdown": "शटडाउन"
"shutdown": "शटडाउन",
"start": "शुरू"
},
"mqtt": {
"label": "MQTT",
@ -206,41 +240,47 @@
"sunset": "सूर्यास्त"
}
}
},
"conditions": {
"type": {
"sun": {
"before": "पहले:",
"after": "बाद:",
"sunrise": "सूर्योदय",
"sunset": "सूर्यास्त"
},
"time": {
"after": "बाद",
"before": "पहले"
}
}
}
}
},
"area_registry": {
"picker": {
"create_area": "Crea un area"
}
},
"zha": {
"services": {
"updateDeviceName": "Imposta un nome personalizzato per questo dispositivo nel registro del dispositivo."
"add_device_page": {
"discovery_text": "I dispositivi rilevati verranno visualizzati qui. Seguire le istruzioni per il \/ i dispositivo \/ i e posizionare il \/ i dispositivo \/ i in modalità accoppiamento.",
"header": "Zigbee Home Automation - Aggiungi dispositivi",
"spinner": "Ricerca di dispositivi ZHA Zigbee ..."
},
"device_card": {
"device_name_placeholder": "Nome assegnato dall'utente",
"area_picker_label": "Area",
"device_name_placeholder": "Nome assegnato dall'utente",
"update_name_button": "Aggiorna Nome"
},
"add_device_page": {
"header": "Zigbee Home Automation - Aggiungi dispositivi",
"spinner": "Ricerca di dispositivi ZHA Zigbee ...",
"discovery_text": "I dispositivi rilevati verranno visualizzati qui. Seguire le istruzioni per il \/ i dispositivo \/ i e posizionare il \/ i dispositivo \/ i in modalità accoppiamento."
"services": {
"updateDeviceName": "Imposta un nome personalizzato per questo dispositivo nel registro del dispositivo."
}
},
"zwave": {
"caption": "Z-Wave",
"node_config": {
"set_config_parameter": "कॉन्फ़िगरेशन पैरामीटर सेट करें"
}
}
},
"developer-tools": {
"tabs": {
"events": {
"title": "घटनाओं"
},
"logs": {
"title": "लॉग्स"
},
"mqtt": {
"title": "MQTT"
},
"services": {
"title": "सेवाएं"
},
"templates": {
"title": "टेम्पलेट्स"
}
}
},
@ -266,54 +306,14 @@
"password_not_match": "Password non trovata"
}
}
},
"shopping-list": {
"add_item": "आइटम जोड़ें",
"microphone_tip": "ऊपर दाईं ओर माइक्रोफ़ोन टैप करें और \"मेरी खरीदारी सूची में कैंडी जोड़ें\" कहें"
}
},
"sidebar": {
"log_out": "लॉग आउट"
},
"duration": {
"day": "{count} {count, plural,\n one {दिन}\n other {दिन}\n}",
"week": "{count} {count, plural,\n one {हफ़्ता}\n other {हफ़्ते}\n}"
},
"notification_drawer": {
"empty": "सूचनाएँ नहीं हैं",
"title": "सूचनाएँ"
}
},
"domain": {
"automation": "स्वचालन",
"binary_sensor": "बाइनरी सेंसर",
"climate": "जलवायु",
"device_tracker": "डिवाइस ट्रैकर",
"fan": "पंखा",
"history_graph": "इतिहास ग्राफ",
"group": "समूह",
"image_processing": "इमेज प्रोसेसिंग",
"input_boolean": "इनपुट बूलियन",
"input_datetime": "इनपुट दिनांक समय",
"input_select": "इनपुट का चयन करें",
"input_number": "इनपुट संख्या",
"input_text": "इनपुट टेक्स्ट",
"light": "रोशनी",
"lock": "ताला",
"mailbox": "मेलबॉक्स",
"media_player": "मीडिया प्लेयर",
"notify": "सूचित",
"proximity": "निकटता",
"remote": "रिमोट",
"scene": "दृश्य",
"script": "स्क्रिप्ट",
"sensor": "सेंसर",
"sun": "सूरज",
"switch": "स्विच",
"weblink": "वेब लिंक",
"zwave": "Z-Wave"
},
"attribute": {
"weather": {
"humidity": "नमी",
"visibility": "दृश्यता",
"wind_speed": "हवा की गति"
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +1,49 @@
{
"panel": {
"config": "設定",
"states": "状態",
"map": "地図",
"logbook": "ログブック",
"history": "履歴",
"attribute": {
"weather": {
"humidity": "湿度",
"wind_speed": "風速"
}
},
"domain": {
"automation": "オートメーション",
"binary_sensor": "バイナリセンサー",
"calendar": "カレンダー",
"camera": "カメラ",
"group": "グループ",
"image_processing": "画像処理",
"light": "照明",
"mailbox": "メールボックス",
"shopping_list": "買い物リスト",
"media_player": "メディアプレーヤー",
"notify": "通知",
"script": "スクリプト",
"sensor": "センサー",
"sun": "太陽",
"switch": "スイッチ",
"updater": "アップデーター",
"zwave": "Z-Wave"
},
"panel": {
"calendar": "カレンダー",
"config": "設定",
"developer_tools": "開発者ツール",
"calendar": "カレンダー"
"history": "履歴",
"logbook": "ログブック",
"mailbox": "メールボックス",
"map": "地図",
"shopping_list": "買い物リスト",
"states": "状態"
},
"state_badge": {
"default": {
"unknown": "不明"
},
"device_tracker": {
"home": "在宅",
"not_home": "外出"
}
},
"state": {
"default": {
"off": "オフ",
"on": "オン",
"unknown": "不明",
"unavailable": "利用不可"
},
"alarm_control_panel": {
"triggered": "トリガー"
},
@ -25,25 +52,52 @@
"on": "オン"
},
"binary_sensor": {
"battery": {
"off": "通常",
"on": "低"
},
"cold": {
"off": "通常",
"on": "低温"
},
"connectivity": {
"off": "切断",
"on": "接続済"
},
"default": {
"off": "オフ",
"on": "オン"
},
"moisture": {
"off": "ドライ",
"on": "ウェット"
},
"gas": {
"off": "未検出",
"on": "検出"
},
"heat": {
"on": "高温"
},
"moisture": {
"off": "ドライ",
"on": "ウェット"
},
"motion": {
"off": "クリア",
"on": "検出"
},
"occupancy": {
"off": "未検出",
"on": "検出"
},
"presence": {
"off": "外出",
"on": "在宅"
},
"problem": {
"off": "OK"
},
"safety": {
"off": "安全",
"on": "危険"
},
"smoke": {
"off": "未検出"
},
@ -53,32 +107,6 @@
"vibration": {
"off": "未検出",
"on": "検出"
},
"safety": {
"off": "安全",
"on": "危険"
},
"presence": {
"off": "外出",
"on": "在宅"
},
"battery": {
"off": "通常",
"on": "低"
},
"problem": {
"off": "OK"
},
"connectivity": {
"off": "切断",
"on": "接続済"
},
"cold": {
"off": "通常",
"on": "低温"
},
"heat": {
"on": "高温"
}
},
"calendar": {
@ -89,23 +117,29 @@
"idle": "アイドル"
},
"climate": {
"auto": "オート",
"cool": "冷房",
"dry": "ドライ",
"eco": "エコ",
"fan_only": "ファンのみ",
"gas": "ガス",
"heat": "暖房",
"idle": "アイドル",
"manual": "マニュアル",
"off": "オフ",
"on": "オン",
"heat": "暖房",
"cool": "冷房",
"idle": "アイドル",
"auto": "オート",
"dry": "ドライ",
"fan_only": "ファンのみ",
"eco": "エコ",
"performance": "パフォーマンス",
"gas": "ガス",
"manual": "マニュアル"
"performance": "パフォーマンス"
},
"configurator": {
"configure": "設定",
"configured": "設定済み"
},
"default": {
"off": "オフ",
"on": "オン",
"unavailable": "利用不可",
"unknown": "不明"
},
"device_tracker": {
"home": "在宅",
"not_home": "外出"
@ -115,11 +149,11 @@
"on": "オン"
},
"group": {
"off": "オフ",
"on": "オン",
"home": "在宅",
"not_home": "外出",
"ok": "OK"
"off": "オフ",
"ok": "OK",
"on": "オン"
},
"input_boolean": {
"off": "オフ",
@ -130,11 +164,11 @@
"on": "オン"
},
"media_player": {
"idle": "アイドル",
"off": "オフ",
"on": "オン",
"playing": "再生中",
"paused": "一時停止",
"idle": "アイドル"
"playing": "再生中"
},
"plant": {
"ok": "OK"
@ -159,17 +193,6 @@
"off": "オフ",
"on": "オン"
},
"zwave": {
"default": {
"initializing": "初期化中",
"sleeping": "スリープ",
"ready": "準備完了"
},
"query_stage": {
"initializing": "初期化中 ( {query_stage} )",
"dead": " ({query_stage})"
}
},
"weather": {
"cloudy": "曇り",
"fog": "霧",
@ -183,224 +206,61 @@
"snowy-rainy": "みぞれ",
"sunny": "晴れ",
"windy": "強風"
}
},
"state_badge": {
"default": {
"unknown": "不明"
},
"device_tracker": {
"home": "在宅",
"not_home": "外出"
"zwave": {
"default": {
"initializing": "初期化中",
"ready": "準備完了",
"sleeping": "スリープ"
},
"query_stage": {
"dead": " ({query_stage})",
"initializing": "初期化中 ( {query_stage} )"
}
}
},
"ui": {
"panel": {
"shopping-list": {
"clear_completed": "削除完了",
"add_item": "アイテムを追加"
},
"developer-tools": {
"tabs": {
"services": {
"title": "サービス"
},
"events": {
"title": "イベント"
},
"templates": {
"title": "テンプレート"
},
"mqtt": {
"title": "MQTT"
}
}
},
"history": {
"period": "期間"
},
"mailbox": {
"empty": "メッセージはありません",
"delete_prompt": "このメッセージを削除しますか?",
"delete_button": "削除"
},
"config": {
"header": "Home Assistantの設定",
"core": {
"caption": "一般",
"description": "設定ファイルの検証とサーバーの操作",
"section": {
"server_control": {
"validation": {
"heading": "設定の検証",
"check_config": "設定を確認",
"valid": "設定は有効です!",
"invalid": "設定は無効です"
},
"reloading": {
"heading": "設定の再読込",
"introduction": "Home Assistantの一部は、再起動を必要とせずに再読込できます。再読込を押すと、現在の設定をアンロードし、新しい設定を読み込みます。",
"core": "コアの再読込",
"group": "グループの再読込",
"automation": "オートメーションの再読込",
"script": "スクリプトの再読込"
},
"server_management": {
"heading": "サーバー管理",
"introduction": "Home AssistantからHome Assistantサーバーを操作します。",
"restart": "再起動",
"stop": "停止"
}
}
}
},
"customize": {
"caption": "カスタマイズ"
},
"automation": {
"caption": "オートメーション",
"description": "オートメーションの作成と編集",
"picker": {
"header": "オートメーションエディター",
"no_automations": "編集可能なオートメーションが見つかりません。",
"add_automation": "オートメーションの追加"
},
"editor": {
"default_name": "新しいオートメーション",
"save": "保存",
"alias": "名前",
"triggers": {
"header": "トリガー",
"introduction": "トリガーはオートメーションルールの処理を開始させます。同じルールに対して複数のトリガーを指定することが可能です。トリガーが開始されると、Home Assistantは条件があれば確認し、アクションを呼び出します。\n\n[トリガーについて](https:\/\/home-assistant.io\/docs\/automation\/trigger\/)",
"add": "トリガーを追加",
"duplicate": "複製",
"delete": "削除",
"delete_confirm": "本当に削除しますか?",
"type_select": "トリガーの種類",
"type": {
"event": {
"label": "イベント",
"event_type": "イベントの種類",
"event_data": "イベントのデータ"
},
"state": {
"from": "変化前",
"to": "変化後"
},
"homeassistant": {
"label": "Home Assistant",
"start": "起動",
"shutdown": "停止"
},
"mqtt": {
"label": "MQTT"
},
"sun": {
"sunrise": "日の出",
"sunset": "日の入",
"offset": "オフセット(オプション)"
},
"template": {
"label": "テンプレート"
},
"time": {
"label": "時刻"
}
}
},
"conditions": {
"header": "条件",
"add": "条件を追加",
"delete": "削除",
"delete_confirm": "本当に削除しますか?",
"unsupported_condition": "未サポートの条件:{condition}",
"type_select": "条件の種類",
"type": {
"sun": {
"sunrise": "日の出",
"sunset": "日の入"
}
}
},
"actions": {
"header": "アクション",
"introduction": "アクションは、オートメーションがトリガーされたときにHome Assistantが実行するものです。\n\n [アクションの詳細]https:\/\/home-assistant.io\/docs\/automation\/action\/",
"add": "アクションを追加",
"delete": "削除",
"delete_confirm": "本当に削除しますか?",
"unsupported_action": "未サポートのアクション:{action}",
"type_select": "アクションの種類",
"type": {
"service": {
"service_data": "サービスのデータ"
},
"wait_template": {
"timeout": "タイムアウト(オプション)"
},
"condition": {
"label": "条件"
}
}
}
}
},
"script": {
"caption": "スクリプト",
"description": "スクリプトの作成と編集"
},
"zwave": {
"caption": "Z-Wave",
"description": "Z-waveネットワークを管理します",
"node_config": {
"set_config_parameter": "構成パラメーターの設定"
}
},
"users": {
"caption": "ユーザー",
"description": "ユーザーの管理",
"picker": {
"title": "ユーザー"
},
"editor": {
"rename_user": "ユーザー名を変更",
"change_password": "パスワードの変更",
"activate_user": "ユーザーを有効化",
"deactivate_user": "ユーザーを無効化",
"delete_user": "ユーザーを削除"
}
},
"cloud": {
"description_features": "自宅の外からコントロールするために、AlexaとGoogleアシスタントに統合します。"
}
}
},
"sidebar": {
"log_out": "ログアウト"
},
"common": {
"loading": "読込中",
"cancel": "キャンセル"
},
"duration": {
"week": "{count} {count, plural,\n one {週間}\n other {週間}\n}",
"second": "{count} {count, plural,\n one {秒}\n other {秒}\n}",
"minute": "{count} {count, plural,\n one {分}\n other {分}\n}",
"hour": "{count} {count, plural,\n one {時間}\n other {時間}\n}"
},
"login-form": {
"password": "パスワード",
"log_in": "ログイン"
},
"card": {
"alarm_control_panel": {
"clear_code": "クリア",
"code": "パスワード"
},
"automation": {
"trigger": "トリガー"
},
"camera": {
"not_available": "画像がありません。"
},
"climate": {
"currently": "現在",
"on_off": "オン/オフ",
"operation": "運転切替",
"target_humidity": "目標湿度",
"target_temperature": "目標温度"
},
"fan": {
"speed": "風速"
},
"light": {
"brightness": "明るさ",
"color_temperature": "色温度"
},
"lock": {
"lock": "ロック",
"unlock": "ロック解除"
},
"media_player": {
"text_to_speak": "音声合成"
},
"scene": {
"activate": "有効化"
},
"script": {
"execute": "実行"
},
"water_heater": {
"target_temperature": "目標温度"
},
"weather": {
"attributes": {
"air_pressure": "気圧",
@ -415,8 +275,8 @@
"n": "北",
"ne": "北東",
"nne": "北北東",
"nw": "北西",
"nnw": "北北西",
"nw": "北西",
"s": "南",
"se": "南東",
"sse": "南南東",
@ -427,89 +287,321 @@
"wsw": "西南西"
},
"forecast": "天気予報"
},
"alarm_control_panel": {
"code": "パスワード",
"clear_code": "クリア"
},
"automation": {
"trigger": "トリガー"
},
"fan": {
"speed": "風速"
},
"light": {
"brightness": "明るさ",
"color_temperature": "色温度"
},
"media_player": {
"text_to_speak": "音声合成"
},
"climate": {
"currently": "現在",
"on_off": "オン/オフ",
"target_temperature": "目標温度",
"target_humidity": "目標湿度",
"operation": "運転切替"
},
"lock": {
"lock": "ロック",
"unlock": "ロック解除"
}
},
"common": {
"cancel": "キャンセル",
"loading": "読込中"
},
"components": {
"entity": {
"entity-picker": {
"entity": "エンティティ"
}
},
"service-picker": {
"service": "サービス"
},
"relative_time": {
"past": "{time}前",
"future": "{time}以内"
},
"history_charts": {
"loading_history": "状態履歴を読込中...",
"no_history_found": "状態履歴がありません。"
},
"relative_time": {
"future": "{time}以内",
"past": "{time}前"
},
"service-picker": {
"service": "サービス"
}
},
"notification_toast": {
"entity_turned_on": "{entity}をオンにしました。",
"entity_turned_off": "{entity}をオフにしました。",
"service_called": "サービス{service}を呼び出しました。",
"service_call_failed": "サービス{service}の呼び出しに失敗しました。",
"connection_lost": "切断されました。再接続中..."
},
"dialogs": {
"more_info_control": {
"sun": {
"elevation": "高度",
"rising": "日の出ます",
"setting": "日の入っています"
}
},
"more_info_settings": {
"save": "保存",
"name": "名前"
"name": "名前",
"save": "保存"
}
}
},
"domain": {
"automation": "オートメーション",
"binary_sensor": "バイナリセンサー",
"calendar": "カレンダー",
"camera": "カメラ",
"group": "グループ",
"image_processing": "画像処理",
"light": "照明",
"mailbox": "メールボックス",
"media_player": "メディアプレーヤー",
"notify": "通知",
"script": "スクリプト",
"sensor": "センサー",
"switch": "スイッチ",
"updater": "アップデーター",
"zwave": "Z-Wave"
},
"attribute": {
"weather": {
"humidity": "湿度",
"wind_speed": "風速"
},
"duration": {
"hour": "{count} {count, plural,\\n one {時間}\\n other {時間}\\n}",
"minute": "{count} {count, plural,\\n one {分}\\n other {分}\\n}",
"second": "{count} {count, plural,\\n one {秒}\\n other {秒}\\n}",
"week": "{count} {count, plural,\\n one {週間}\\n other {週間}\\n}"
},
"login-form": {
"log_in": "ログイン",
"password": "パスワード"
},
"notification_toast": {
"connection_lost": "切断されました。再接続中...",
"entity_turned_off": "{entity}をオフにしました。",
"entity_turned_on": "{entity}をオンにしました。",
"service_call_failed": "サービス{service}の呼び出しに失敗しました。",
"service_called": "サービス{service}を呼び出しました。"
},
"panel": {
"config": {
"automation": {
"caption": "オートメーション",
"description": "オートメーションの作成と編集",
"editor": {
"actions": {
"add": "アクションを追加",
"delete": "削除",
"delete_confirm": "本当に削除しますか?",
"header": "アクション",
"introduction": "アクションは、オートメーションがトリガーされたときにHome Assistantが実行するものです。\\n\\n [アクションの詳細]https:\/\/home-assistant.io\/docs\/automation\/action\/",
"type_select": "アクションの種類",
"type": {
"condition": {
"label": "条件"
},
"service": {
"service_data": "サービスのデータ"
},
"wait_template": {
"timeout": "タイムアウト(オプション)"
}
},
"unsupported_action": "未サポートのアクション:{action}"
},
"alias": "名前",
"conditions": {
"add": "条件を追加",
"delete": "削除",
"delete_confirm": "本当に削除しますか?",
"header": "条件",
"type_select": "条件の種類",
"type": {
"sun": {
"label": "太陽",
"sunrise": "日の出",
"sunset": "日の入"
}
},
"unsupported_condition": "未サポートの条件:{condition}"
},
"default_name": "新しいオートメーション",
"save": "保存",
"triggers": {
"add": "トリガーを追加",
"delete": "削除",
"delete_confirm": "本当に削除しますか?",
"duplicate": "複製",
"header": "トリガー",
"introduction": "トリガーはオートメーションルールの処理を開始させます。同じルールに対して複数のトリガーを指定することが可能です。トリガーが開始されると、Home Assistantは条件があれば確認し、アクションを呼び出します。\\n\\n[トリガーについて](https:\/\/home-assistant.io\/docs\/automation\/trigger\/)",
"type_select": "トリガーの種類",
"type": {
"event": {
"event_data": "イベントのデータ",
"event_type": "イベントの種類",
"label": "イベント"
},
"homeassistant": {
"label": "Home Assistant",
"shutdown": "停止",
"start": "起動"
},
"mqtt": {
"label": "MQTT"
},
"state": {
"from": "変化前",
"to": "変化後"
},
"sun": {
"event": "イベント",
"label": "太陽",
"offset": "オフセット(オプション)",
"sunrise": "日の出",
"sunset": "日の入"
},
"template": {
"label": "テンプレート"
},
"time": {
"label": "時刻"
}
}
}
},
"picker": {
"add_automation": "オートメーションの追加",
"header": "オートメーションエディター",
"no_automations": "編集可能なオートメーションが見つかりません。"
}
},
"cloud": {
"description_features": "自宅の外からコントロールするために、AlexaとGoogleアシスタントに統合します。"
},
"core": {
"caption": "一般",
"description": "設定ファイルの検証とサーバーの操作",
"section": {
"server_control": {
"reloading": {
"automation": "オートメーションの再読込",
"core": "コアの再読込",
"group": "グループの再読込",
"heading": "設定の再読込",
"introduction": "Home Assistantの一部は、再起動を必要とせずに再読込できます。再読込を押すと、現在の設定をアンロードし、新しい設定を読み込みます。",
"script": "スクリプトの再読込"
},
"server_management": {
"heading": "サーバー管理",
"introduction": "Home AssistantからHome Assistantサーバーを操作します。",
"restart": "再起動",
"stop": "停止"
},
"validation": {
"check_config": "設定を確認",
"heading": "設定の検証",
"invalid": "設定は無効です",
"valid": "設定は有効です!"
}
}
}
},
"customize": {
"caption": "カスタマイズ"
},
"devices": {
"area_picker_label": "エリア",
"automations": "オートメーション",
"data_table": {
"area": "エリア",
"battery": "バッテリー",
"device": "デバイス",
"manufacturer": "メーカー"
},
"device_not_found": "デバイスが見つかりません。",
"entities": "エンティティ",
"info": "デバイス情報",
"unknown_error": "不明なエラー"
},
"header": "Home Assistantの設定",
"integrations": {
"config_flow": {
"aborted": "中止",
"add_area": "エリアを追加",
"area_picker_label": "エリア",
"close": "閉じる",
"finish": "完了"
}
},
"scene": {
"editor": {
"devices": {
"add": "デバイスを追加",
"delete": "デバイスを削除",
"header": "デバイス"
},
"entities": {
"add": "エンティティを追加",
"header": "エンティティ"
},
"save": "保存"
}
},
"script": {
"caption": "スクリプト",
"description": "スクリプトの作成と編集"
},
"users": {
"caption": "ユーザー",
"description": "ユーザーの管理",
"editor": {
"activate_user": "ユーザーを有効化",
"change_password": "パスワードの変更",
"deactivate_user": "ユーザーを無効化",
"delete_user": "ユーザーを削除",
"rename_user": "ユーザー名を変更"
},
"picker": {
"title": "ユーザー"
}
},
"zwave": {
"caption": "Z-Wave",
"description": "Z-waveネットワークを管理します",
"node_config": {
"set_config_parameter": "構成パラメーターの設定"
}
}
},
"developer-tools": {
"tabs": {
"events": {
"title": "イベント"
},
"mqtt": {
"title": "MQTT"
},
"services": {
"title": "サービス"
},
"templates": {
"title": "テンプレート"
}
}
},
"history": {
"period": "期間"
},
"lovelace": {
"editor": {
"edit_lovelace": {
"edit_title": "タイトルを編集"
},
"edit_view": {
"move_left": "ビューを左に移動",
"move_right": "ビューを右に移動"
}
},
"menu": {
"close": "閉じる"
},
"unused_entities": {
"domain": "ドメイン",
"entity": "エンティティ",
"entity_id": "エンティティ ID",
"last_changed": "最終変更",
"title": "未使用のエンティティ"
}
},
"mailbox": {
"delete_button": "削除",
"delete_prompt": "このメッセージを削除しますか?",
"empty": "メッセージはありません"
},
"page-demo": {
"config": {
"arsaboo": {
"labels": {
"hdmi_switcher": "HDMIスイッチ"
}
}
}
},
"page-onboarding": {
"core-config": {
"intro_location": "どこに住んでいるか知りたいです。 この情報は、他の情報の表示および太陽の位置に関する自動化の設定に役立ちます。 これらの情報がインターネットで外部と共有されることがありません。"
}
},
"profile": {
"advanced_mode": {
"link_profile_page": "プロフィールページ"
}
},
"shopping-list": {
"add_item": "アイテムを追加",
"clear_completed": "削除完了"
}
},
"sidebar": {
"log_out": "ログアウト"
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,28 +1,70 @@
{
"domain": {
"hassio": "Hass.io",
"homeassistant": "Home Assistant",
"lovelace": "Lovelace",
"person": "Asmuo",
"system_health": "Sistemos sveikata",
"zwave": "Z-Wave"
},
"groups": {
"system-admin": "Administratoriai",
"system-read-only": "Tik skaitymo privilegija",
"system-users": "Vartotojai"
},
"panel": {
"config": "Konfigūracija",
"states": "Valdymas",
"map": "Žemėlapis",
"logbook": "Veiksmų žurnalas",
"history": "Istorija",
"logbook": "Veiksmų žurnalas",
"mailbox": "Pašto dėžutė",
"map": "Žemėlapis",
"profile": "Vartotojo profilis",
"shopping_list": "Pirkinių sąrašas",
"profile": "Vartotojo profilis"
"states": "Valdymas"
},
"state": {
"default": {
"off": "Išjungta",
"on": "Įjungta",
"unknown": "Nežinoma",
"unavailable": "(nepasiekiamas)"
},
"state_attributes": {
"climate": {
"fan_mode": {
"auto": "Automatinis",
"off": "Išjungta",
"on": "Įjungta"
}
}
},
"state_badge": {
"alarm_control_panel": {
"armed": "Užrakinta",
"armed_away": "Užrakinta",
"armed_custom_bypass": "Užrakinta",
"armed_home": "Užrakinta",
"armed_night": "Užrakinta",
"arming": "Užrakinama",
"disarmed": "Atrakinta",
"disarming": "Atrakinti"
},
"default": {
"entity_not_found": "Objektas nerastas",
"error": "Klaida",
"unavailable": "Nežin",
"unknown": "Nžn"
},
"device_tracker": {
"home": "Namie",
"not_home": "Išvykęs"
},
"person": {
"home": "Namuose",
"not_home": "Išvykęs"
}
},
"state": {
"alarm_control_panel": {
"armed": "Užrakinta",
"armed_home": "Namų apsauga įjungta",
"pending": "Laukiama",
"arming": "Saugojimo režimo įjungimas",
"disarmed": "Atrakinta",
"disarming": "Saugojimo režimo išjungimas",
"pending": "Laukiama",
"triggered": "Aktyvinta"
},
"automation": {
@ -34,14 +76,22 @@
"off": "Išjungta",
"on": "Įjungta"
},
"moisture": {
"off": "Sausa",
"on": "Šlapia"
"door": {
"off": "Uždaryta",
"on": "Atidaryta"
},
"garage_door": {
"off": "Uždaryta",
"on": "Atidaryta"
},
"gas": {
"off": "Neaptikta",
"on": "Aptikta"
},
"moisture": {
"off": "Sausa",
"on": "Šlapia"
},
"motion": {
"off": "Nejuda",
"on": "Aptiktas judesys"
@ -50,6 +100,14 @@
"off": "Laisva",
"on": "Užimta"
},
"opening": {
"off": "Uždaryta",
"on": "Atidaryta"
},
"safety": {
"off": "Saugu",
"on": "Nesaugu"
},
"smoke": {
"off": "Neaptikta",
"on": "Aptikta"
@ -62,22 +120,6 @@
"off": "Neaptikta",
"on": "Aptikta"
},
"opening": {
"off": "Uždaryta",
"on": "Atidaryta"
},
"safety": {
"off": "Saugu",
"on": "Nesaugu"
},
"door": {
"off": "Uždaryta",
"on": "Atidaryta"
},
"garage_door": {
"off": "Uždaryta",
"on": "Atidaryta"
},
"window": {
"off": "Uždaryta",
"on": "Atidaryta"
@ -88,14 +130,20 @@
"on": "Įjungta"
},
"camera": {
"idle": "Laukimo režimas",
"recording": "Įrašymas",
"streaming": "Transliuojama",
"idle": "Laukimo režimas"
"streaming": "Transliuojama"
},
"climate": {
"manual": "Rankinis",
"off": "Išjungta",
"on": "Įjungta"
},
"default": {
"off": "Išjungta",
"on": "Įjungta",
"manual": "Rankinis"
"unavailable": "(nepasiekiamas)",
"unknown": "Nežinoma"
},
"fan": {
"off": "Išjungta",
@ -103,8 +151,8 @@
},
"group": {
"off": "Išjungta",
"on": "Įjungta",
"ok": "Ok"
"ok": "Ok",
"on": "Įjungta"
},
"input_boolean": {
"on": "Įjungta"
@ -112,6 +160,10 @@
"media_player": {
"on": "Įjungta"
},
"person": {
"home": "Namuose",
"not_home": "Išvykęs"
},
"remote": {
"off": "Išjungta",
"on": "Įjungta"
@ -128,350 +180,23 @@
"off": "Išjungta",
"on": "Įjungta"
},
"zwave": {
"query_stage": {
"initializing": " ( {query_stage} )",
"dead": " ({query_stage})"
}
},
"timer": {
"active": "aktyvus",
"paused": "pristabdytas"
},
"person": {
"home": "Namuose",
"not_home": "Išvykęs"
}
},
"state_badge": {
"default": {
"unknown": "Nžn",
"unavailable": "Nežin",
"error": "Klaida",
"entity_not_found": "Objektas nerastas"
},
"alarm_control_panel": {
"armed": "Užrakinta",
"disarmed": "Atrakinta",
"armed_home": "Užrakinta",
"armed_away": "Užrakinta",
"armed_night": "Užrakinta",
"arming": "Užrakinama",
"disarming": "Atrakinti",
"armed_custom_bypass": "Užrakinta"
},
"device_tracker": {
"home": "Namie",
"not_home": "Išvykęs"
},
"person": {
"home": "Namuose",
"not_home": "Išvykęs"
"zwave": {
"query_stage": {
"dead": " ({query_stage})",
"initializing": " ( {query_stage} )"
}
}
},
"ui": {
"sidebar": {
"log_out": "Atsijungti"
},
"panel": {
"developer-tools": {
"tabs": {
"mqtt": {
"title": "MQTT"
}
}
},
"config": {
"zwave": {
"caption": "Z-Wave",
"node_config": {
"set_config_parameter": "Nustatykite parametrą „Config“"
}
},
"automation": {
"editor": {
"triggers": {
"delete": "Ištrinti",
"type": {
"sun": {
"event": "Ivykis"
},
"zone": {
"zone": "Vieta",
"event": "Įvykis"
},
"webhook": {
"label": "Webhook",
"webhook_id": "Webhook ID"
},
"time_pattern": {
"label": "Laiko modelis",
"hours": "Valandos",
"minutes": "Minutes",
"seconds": "Sekundės"
},
"geo_location": {
"label": "Geolokacija",
"source": "Šaltinis",
"zone": "Zona",
"event": "Įvykis:",
"enter": "Įveskite",
"leave": "Palikite"
}
},
"learn_more": "Sužinokite daugiau apie trigerius"
},
"conditions": {
"duplicate": "Dubliuoti",
"delete": "Ištrinti",
"type": {
"numeric_state": {
"below": "žemiau"
},
"sun": {
"label": "Saulė",
"before": "Prieš:",
"after": "Po:",
"sunrise": "Saulėtekis",
"sunset": "Saulėlydis"
},
"template": {
"label": "Šablonas"
},
"time": {
"label": "Laikas",
"after": "Po",
"before": "Prieš"
},
"zone": {
"label": "Vieta",
"zone": "Vieta"
}
},
"learn_more": "Sužinokite daugiau apie sąlygas"
},
"actions": {
"header": "Veiksmai",
"add": "Pridėti veiksmą",
"duplicate": "Dublikuoti",
"delete": "Trinti",
"delete_confirm": "Ar tikrai norite ištrinti?",
"type": {
"delay": {
"delay": "Uždelsta"
},
"wait_template": {
"label": "Laukti"
},
"event": {
"label": "Sukurti įvykį",
"event": "Įvykiai"
}
},
"learn_more": "Sužinokite daugiau apie veiksmus"
}
},
"picker": {
"learn_more": "Sužinokite daugiau apie automatizavimą"
}
},
"cloud": {
"caption": "Home Assistant Cloud"
},
"zha": {
"description": "„Zigbee Home Automation“ tinklo valdymas",
"services": {
"updateDeviceName": "Nustatyti pasirinktinį pavadinimą šiam įrenginiu, prietaisų registre.",
"remove": "Pašalinkite įrenginį iš „Zigbee“ tinklo."
},
"device_card": {
"device_name_placeholder": "Vartotojo suteiktas vardas",
"area_picker_label": "Sritis",
"update_name_button": "Atnaujinti pavadinimą"
},
"add_device_page": {
"header": "„Zigbee“ namų automatika - pridėti įrenginių",
"spinner": "Ieškoma ZHA Zigbee įrenginių...",
"discovery_text": "Čia bus rodomi atrasti įrenginiai. Vadovaukitės jūsų įtaiso instrukcijomis ir nustatykite jį suporavimo režimui."
}
},
"area_registry": {
"caption": "Sričių registras",
"description": "Visų jūsų namų sričių apžvalga.",
"picker": {
"header": "Sričių registras",
"integrations_page": "Integracijų puslapis",
"no_areas": "Atrodo, kad dar neturite registruotų erdvių!",
"create_area": "SUKURTI ERDVĘ"
},
"no_areas": "Atrodo, kad dar neturite registruotų sričių!",
"create_area": "SUKURTI SRITĮ",
"editor": {
"default_name": "Nauja sritis",
"delete": "IŠTRINTI",
"update": "ATNAUJINTI",
"create": "SUKURTI"
}
},
"entity_registry": {
"caption": "Subjektų registras",
"description": "Visų žinomų subjektų apžvalga.",
"picker": {
"header": "Subjektų registras",
"unavailable": "(nepasiekiamas)",
"introduction2": "Naudokite subjekto registrą, kad perrašytumėte pavadinimą, pakeiskite subjekto ID arba pašalintumėte įrašą iš namų asistento. Atminkite, kad pašalindami registro įrašą tai nepanaikins pačio subjekto. Norėdami tai padaryti, sekite toliau pateiktą nuorodą ir pašalinkite ją iš integracijos puslapio.",
"integrations_page": "Integracijų puslapis"
},
"editor": {
"unavailable": "Šiuo metu šis subjektas nepasiekiamas.",
"default_name": "Nauja sritis",
"delete": "IŠTRINTI",
"update": "ATNAUJINTI"
}
},
"customize": {
"picker": {
"header": "Pritaikymas"
}
},
"person": {
"caption": "Asmenys",
"detail": {
"name": "Vardas",
"device_tracker_intro": "Pasirinkite įrenginius, priklausančius šiam asmeniui.",
"device_tracker_picked": "Stebėti įrenginį",
"device_tracker_pick": "Pasirinkite įrenginį, kurį norite stebėti"
}
},
"integrations": {
"config_entry": {
"no_area": "Nėra srities"
}
},
"users": {
"editor": {
"caption": "Peržiūrėti vartotoją"
},
"add_user": {
"caption": "Pridėti vartotoją",
"name": "Vardas",
"username": "Vartotojo vardas",
"password": "Slaptažodis",
"create": "Sukurti"
}
}
},
"profile": {
"push_notifications": {
"description": "Siųsti pranešimus į šį įrenginį."
},
"change_password": {
"header": "Keisti slaptažodį",
"current_password": "Dabartinis slaptažodis",
"new_password": "Naujas slaptažodis"
},
"mfa_setup": {
"title_aborted": "Nutraukta",
"close": "Uždaryti"
}
},
"lovelace": {
"editor": {
"edit_card": {
"save": "Išsaugoti",
"pick_card": "Pasirinkite kortelę, kurią norite pridėti.",
"add": "Pridėti kortelę",
"edit": "Redaguoti",
"delete": "Ištrinti",
"move": "Perkelti"
},
"migrate": {
"migrate": "Perkelti konfigūraciją"
},
"header": "Redaguoti UI",
"edit_view": {
"header": "Peržiūrėti konfigūraciją",
"add": "Pridėti rodinį",
"edit": "Redaguoti rodinį",
"delete": "Ištrinti rodinį"
},
"save_config": {
"header": "Valdykite savo „Lovelace“ vartotojo sąsają",
"para_sure": "Ar tikrai norite kontroliuoti savo vartotojo sąsają?",
"cancel": "Nesvarbu",
"save": "Kontroliuoti"
},
"menu": {
"raw_editor": "Konfigūracijos redaktorius"
},
"raw_editor": {
"header": "Redaguoti konfigūraciją",
"save": "Išsaugoti",
"unsaved_changes": "Neišsaugoti pakeitimai",
"saved": "Išsaugota"
}
},
"menu": {
"configure_ui": "Konfigūruoti UI",
"unused_entities": "Nepanaudoti elementai",
"help": "Pagalba",
"refresh": "Atnaujinti"
},
"cards": {
"empty_state": {
"title": "Sveiki sugrįžę namo",
"go_to_integrations_page": "Į integracijų puslapį"
}
},
"warning": {
"entity_not_found": "Subjektas nepasiekiamas: {entity}",
"entity_non_numeric": "Subjektas nėra skaitinis: {entity}"
}
},
"logbook": {
"period": "Laikotarpis"
},
"page-authorize": {
"form": {
"providers": {
"command_line": {
"step": {
"init": {
"data": {
"username": "Vartotojo vardas",
"password": "Slaptažodis"
}
},
"mfa": {
"data": {
"code": "Dvieju lygiu autentifikacija"
}
}
},
"error": {
"invalid_auth": "Netinkamas vartotojo vardas arba slaptažodis",
"invalid_code": "Netinkamas autentifikacijos kodas"
}
}
}
}
},
"page-onboarding": {
"user": {
"data": {
"password_confirm": "Patvirtinti slaptažodį"
},
"error": {
"password_not_match": "Slaptažodžiai nesutampa"
}
}
"card": {
"alarm_control_panel": {
"arm_custom_bypass": "Individualizuotas apėjimas"
}
},
"duration": {
"day": "{count} {count, plural,\n one {diena}\n other {dienos}\n}",
"week": "{count} {count, plural,\n one {savaitė}\n other {savaitės}\n}",
"second": "{count} {count, plural,\n one {sekundė}\n other {sekundės}\n}"
},
"common": {
"save": "Išsaugoti"
},
@ -490,32 +215,307 @@
}
}
},
"card": {
"alarm_control_panel": {
"arm_custom_bypass": "Individualizuotas apėjimas"
"duration": {
"day": "{count} {count, plural,\\n one {diena}\\n other {dienos}\\n}",
"second": "{count} {count, plural,\\n one {sekundė}\\n other {sekundės}\\n}",
"week": "{count} {count, plural,\\n one {savaitė}\\n other {savaitės}\\n}"
},
"panel": {
"config": {
"area_registry": {
"caption": "Sričių registras",
"create_area": "SUKURTI SRITĮ",
"description": "Visų jūsų namų sričių apžvalga.",
"editor": {
"create": "SUKURTI",
"default_name": "Nauja sritis",
"delete": "IŠTRINTI",
"update": "ATNAUJINTI"
},
"no_areas": "Atrodo, kad dar neturite registruotų sričių!",
"picker": {
"create_area": "SUKURTI ERDVĘ",
"header": "Sričių registras",
"integrations_page": "Integracijų puslapis",
"no_areas": "Atrodo, kad dar neturite registruotų erdvių!"
}
},
"automation": {
"editor": {
"actions": {
"add": "Pridėti veiksmą",
"delete": "Trinti",
"delete_confirm": "Ar tikrai norite ištrinti?",
"duplicate": "Dublikuoti",
"header": "Veiksmai",
"learn_more": "Sužinokite daugiau apie veiksmus",
"type": {
"delay": {
"delay": "Uždelsta"
},
"event": {
"event": "Įvykiai",
"label": "Sukurti įvykį"
},
"wait_template": {
"label": "Laukti"
}
}
},
"conditions": {
"delete": "Ištrinti",
"duplicate": "Dubliuoti",
"learn_more": "Sužinokite daugiau apie sąlygas",
"type": {
"numeric_state": {
"below": "žemiau"
},
"sun": {
"after": "Po:",
"before": "Prieš:",
"label": "Saulė",
"sunrise": "Saulėtekis",
"sunset": "Saulėlydis"
},
"template": {
"label": "Šablonas"
},
"time": {
"after": "Po",
"before": "Prieš",
"label": "Laikas"
},
"zone": {
"label": "Vieta",
"zone": "Vieta"
}
}
},
"triggers": {
"delete": "Ištrinti",
"learn_more": "Sužinokite daugiau apie trigerius",
"type": {
"geo_location": {
"enter": "Įveskite",
"event": "Įvykis:",
"label": "Geolokacija",
"leave": "Palikite",
"source": "Šaltinis",
"zone": "Zona"
},
"sun": {
"event": "Ivykis"
},
"time_pattern": {
"hours": "Valandos",
"label": "Laiko modelis",
"minutes": "Minutes",
"seconds": "Sekundės"
},
"webhook": {
"label": "Webhook",
"webhook_id": "Webhook ID"
},
"zone": {
"event": "Įvykis",
"zone": "Vieta"
}
}
}
},
"picker": {
"learn_more": "Sužinokite daugiau apie automatizavimą"
}
},
"cloud": {
"caption": "Home Assistant Cloud"
},
"customize": {
"picker": {
"header": "Pritaikymas"
}
},
"entity_registry": {
"caption": "Subjektų registras",
"description": "Visų žinomų subjektų apžvalga.",
"editor": {
"default_name": "Nauja sritis",
"delete": "IŠTRINTI",
"unavailable": "Šiuo metu šis subjektas nepasiekiamas.",
"update": "ATNAUJINTI"
},
"picker": {
"header": "Subjektų registras",
"integrations_page": "Integracijų puslapis",
"introduction2": "Naudokite subjekto registrą, kad perrašytumėte pavadinimą, pakeiskite subjekto ID arba pašalintumėte įrašą iš namų asistento. Atminkite, kad pašalindami registro įrašą tai nepanaikins pačio subjekto. Norėdami tai padaryti, sekite toliau pateiktą nuorodą ir pašalinkite ją iš integracijos puslapio.",
"unavailable": "(nepasiekiamas)"
}
},
"integrations": {
"config_entry": {
"no_area": "Nėra srities"
}
},
"person": {
"caption": "Asmenys",
"detail": {
"device_tracker_intro": "Pasirinkite įrenginius, priklausančius šiam asmeniui.",
"device_tracker_pick": "Pasirinkite įrenginį, kurį norite stebėti",
"device_tracker_picked": "Stebėti įrenginį",
"name": "Vardas"
}
},
"users": {
"add_user": {
"caption": "Pridėti vartotoją",
"create": "Sukurti",
"name": "Vardas",
"password": "Slaptažodis",
"username": "Vartotojo vardas"
},
"editor": {
"caption": "Peržiūrėti vartotoją"
}
},
"zha": {
"add_device_page": {
"discovery_text": "Čia bus rodomi atrasti įrenginiai. Vadovaukitės jūsų įtaiso instrukcijomis ir nustatykite jį suporavimo režimui.",
"header": "„Zigbee“ namų automatika - pridėti įrenginių",
"spinner": "Ieškoma ZHA Zigbee įrenginių..."
},
"description": "„Zigbee Home Automation“ tinklo valdymas",
"device_card": {
"area_picker_label": "Sritis",
"device_name_placeholder": "Vartotojo suteiktas vardas",
"update_name_button": "Atnaujinti pavadinimą"
},
"services": {
"remove": "Pašalinkite įrenginį iš „Zigbee“ tinklo.",
"updateDeviceName": "Nustatyti pasirinktinį pavadinimą šiam įrenginiu, prietaisų registre."
}
},
"zwave": {
"caption": "Z-Wave",
"node_config": {
"set_config_parameter": "Nustatykite parametrą „Config“"
}
}
},
"developer-tools": {
"tabs": {
"mqtt": {
"title": "MQTT"
}
}
},
"logbook": {
"period": "Laikotarpis"
},
"lovelace": {
"cards": {
"empty_state": {
"go_to_integrations_page": "Į integracijų puslapį",
"title": "Sveiki sugrįžę namo"
}
},
"editor": {
"edit_card": {
"add": "Pridėti kortelę",
"delete": "Ištrinti",
"edit": "Redaguoti",
"move": "Perkelti",
"pick_card": "Pasirinkite kortelę, kurią norite pridėti.",
"save": "Išsaugoti"
},
"edit_view": {
"add": "Pridėti rodinį",
"delete": "Ištrinti rodinį",
"edit": "Redaguoti rodinį",
"header": "Peržiūrėti konfigūraciją"
},
"header": "Redaguoti UI",
"menu": {
"raw_editor": "Konfigūracijos redaktorius"
},
"migrate": {
"migrate": "Perkelti konfigūraciją"
},
"raw_editor": {
"header": "Redaguoti konfigūraciją",
"save": "Išsaugoti",
"saved": "Išsaugota",
"unsaved_changes": "Neišsaugoti pakeitimai"
},
"save_config": {
"cancel": "Nesvarbu",
"header": "Valdykite savo „Lovelace“ vartotojo sąsają",
"para_sure": "Ar tikrai norite kontroliuoti savo vartotojo sąsają?",
"save": "Kontroliuoti"
}
},
"menu": {
"configure_ui": "Konfigūruoti UI",
"help": "Pagalba",
"refresh": "Atnaujinti",
"unused_entities": "Nepanaudoti elementai"
},
"warning": {
"entity_non_numeric": "Subjektas nėra skaitinis: {entity}",
"entity_not_found": "Subjektas nepasiekiamas: {entity}"
}
},
"page-authorize": {
"form": {
"providers": {
"command_line": {
"error": {
"invalid_auth": "Netinkamas vartotojo vardas arba slaptažodis",
"invalid_code": "Netinkamas autentifikacijos kodas"
},
"step": {
"init": {
"data": {
"password": "Slaptažodis",
"username": "Vartotojo vardas"
}
},
"mfa": {
"data": {
"code": "Dvieju lygiu autentifikacija"
}
}
}
}
}
}
},
"page-onboarding": {
"user": {
"data": {
"password_confirm": "Patvirtinti slaptažodį"
},
"error": {
"password_not_match": "Slaptažodžiai nesutampa"
}
}
},
"profile": {
"change_password": {
"current_password": "Dabartinis slaptažodis",
"header": "Keisti slaptažodį",
"new_password": "Naujas slaptažodis"
},
"mfa_setup": {
"close": "Uždaryti",
"title_aborted": "Nutraukta"
},
"push_notifications": {
"description": "Siųsti pranešimus į šį įrenginį."
}
}
},
"sidebar": {
"log_out": "Atsijungti"
}
},
"domain": {
"zwave": "Z-Wave",
"hassio": "Hass.io",
"homeassistant": "Home Assistant",
"lovelace": "Lovelace",
"system_health": "Sistemos sveikata",
"person": "Asmuo"
},
"state_attributes": {
"climate": {
"fan_mode": {
"off": "Išjungta",
"on": "Įjungta",
"auto": "Automatinis"
}
}
},
"groups": {
"system-admin": "Administratoriai",
"system-users": "Vartotojai",
"system-read-only": "Tik skaitymo privilegija"
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +1,19 @@
{
"domain": {
"zwave": "Z-Wave"
},
"panel": {
"config": "Konfiguracija",
"states": "Pregled",
"map": "Mapa",
"logbook": "Dnevnik",
"history": "Istorija",
"logbook": "Dnevnik",
"mailbox": "Poštansko sanduče",
"shopping_list": "Lista za kupovinu"
"map": "Mapa",
"shopping_list": "Lista za kupovinu",
"states": "Pregled"
},
"state": {
"zwave": {
"query_stage": {
"initializing": " ( {query_stage} )",
"dead": " ({query_stage})"
}
"climate": {
"manual": "Упутство"
},
"weather": {
"clear-night": "Vedra noć",
@ -31,50 +31,14 @@
"windy": "Vetrovito",
"windy-variant": "Vetrovito"
},
"climate": {
"manual": "Упутство"
"zwave": {
"query_stage": {
"dead": " ({query_stage})",
"initializing": " ( {query_stage} )"
}
}
},
"ui": {
"sidebar": {
"log_out": "Odjaviti se"
},
"panel": {
"developer-tools": {
"tabs": {
"mqtt": {
"title": "MQTT"
}
}
},
"config": {
"zwave": {
"caption": "Z-Wave",
"node_config": {
"set_config_parameter": "Подесите параметар Цонфиг"
}
},
"automation": {
"editor": {
"triggers": {
"type": {
"numeric_state": {
"label": "Numeričko stanje",
"above": "Iznad",
"below": "Ispod"
},
"sun": {
"label": "Sunce"
}
}
}
}
},
"cloud": {
"caption": "Home Assistant Cloud"
}
}
},
"card": {
"scene": {
"activate": "Aktiviraj"
@ -97,8 +61,8 @@
"n": "S",
"ne": "SI",
"nne": "SSI",
"nw": "SZ",
"nnw": "SSZ",
"nw": "SZ",
"s": "J",
"se": "JI",
"sse": "JJI",
@ -110,9 +74,45 @@
},
"forecast": "Vremenska prognoza"
}
},
"panel": {
"config": {
"automation": {
"editor": {
"triggers": {
"type": {
"numeric_state": {
"above": "Iznad",
"below": "Ispod",
"label": "Numeričko stanje"
},
"sun": {
"label": "Sunce"
}
}
}
}
},
"cloud": {
"caption": "Home Assistant Cloud"
},
"zwave": {
"caption": "Z-Wave",
"node_config": {
"set_config_parameter": "Подесите параметар Цонфиг"
}
}
},
"developer-tools": {
"tabs": {
"mqtt": {
"title": "MQTT"
}
}
}
},
"sidebar": {
"log_out": "Odjaviti se"
}
},
"domain": {
"zwave": "Z-Wave"
}
}

View File

@ -1,15 +1,45 @@
{
"domain": {
"person": "Особа",
"zwave": "Z-Wave"
},
"panel": {
"calendar": "Kalendar",
"config": "Конфигурација",
"states": "Преглед",
"map": "Мапа",
"logbook": "Дневник",
"history": "Историја",
"logbook": "Дневник",
"mailbox": "Поштанско сандуче",
"map": "Мапа",
"shopping_list": "Листа за куповину",
"calendar": "Kalendar"
"states": "Преглед"
},
"state_attributes": {
"climate": {
"fan_mode": {
"auto": "Аутоматски",
"off": "Искључен",
"on": "Укључен"
}
}
},
"state_badge": {
"alarm_control_panel": {
"arming": "Aktiviranje",
"disarming": "Deaktiviraj"
},
"default": {
"entity_not_found": "Вредност није пронађена",
"error": "Грешка"
},
"person": {
"home": "Кући",
"not_home": "Одсутан"
}
},
"state": {
"climate": {
"manual": "Упутство"
},
"sun": {
"above_horizon": "Iznad horizonta",
"below_horizon": "Ispod horizonta"
@ -18,81 +48,52 @@
"off": "Isključen",
"on": "Uključen"
},
"timer": {
"active": "укључен",
"idle": "неактна чекању"
},
"zwave": {
"default": {
"ready": "Spreman"
},
"query_stage": {
"initializing": " ( {query_stage} )",
"dead": " ({query_stage})"
"dead": " ({query_stage})",
"initializing": " ( {query_stage} )"
}
},
"climate": {
"manual": "Упутство"
},
"timer": {
"active": "укључен",
"idle": "неактна чекању"
}
},
"state_badge": {
"alarm_control_panel": {
"arming": "Aktiviranje",
"disarming": "Deaktiviraj"
},
"person": {
"home": "Кући",
"not_home": "Одсутан"
},
"default": {
"error": "Грешка",
"entity_not_found": "Вредност није пронађена"
}
},
"ui": {
"sidebar": {
"log_out": "Одјавити се"
"card": {
"lock": {
"lock": "Zaključaj",
"unlock": "Otključaj"
},
"media_player": {
"sound_mode": "Režim zvuka",
"source": "Izvor"
}
},
"dialogs": {
"more_info_settings": {
"name": "Naziv",
"save": "Sačuvaj"
}
},
"panel": {
"developer-tools": {
"tabs": {
"mqtt": {
"title": "MQTT"
}
}
},
"config": {
"zwave": {
"caption": "Z-Wave",
"node_config": {
"set_config_parameter": "Подесите параметар Цонфиг"
}
},
"cloud": {
"caption": "Home Assistant Cloud"
},
"users": {
"editor": {
"caption": "Прикажи корисника"
},
"add_user": {
"caption": "Додај корисника",
"name": "Име",
"username": "Корисничко име",
"password": "Лозинка",
"create": "Направите"
}
},
"automation": {
"picker": {
"learn_more": "Сазнајте више о аутоматизацијама"
},
"editor": {
"triggers": {
"learn_more": "Сазнајте више о окидачима"
}
},
"picker": {
"learn_more": "Сазнајте више о аутоматизацијама"
}
},
"cloud": {
"caption": "Home Assistant Cloud"
},
"integrations": {
"config_flow": {
"external_step": {
@ -100,9 +101,48 @@
"open_site": "Отворите сајт"
}
}
},
"users": {
"add_user": {
"caption": "Додај корисника",
"create": "Направите",
"name": "Име",
"password": "Лозинка",
"username": "Корисничко име"
},
"editor": {
"caption": "Прикажи корисника"
}
},
"zwave": {
"caption": "Z-Wave",
"node_config": {
"set_config_parameter": "Подесите параметар Цонфиг"
}
}
},
"developer-tools": {
"tabs": {
"mqtt": {
"title": "MQTT"
}
}
},
"lovelace": {
"cards": {
"picture-elements": {
"hold": "Придржи:",
"more_info": "Покажи више информација: {name}",
"navigate_to": "Отиђите на {location}",
"tap": "Додирни",
"toggle": "Укључи {name}"
}
}
},
"page-onboarding": {
"integration": {
"finish": "Крај"
},
"user": {
"data": {
"password_confirm": "Потврда лозинке"
@ -110,51 +150,11 @@
"error": {
"password_not_match": "Лозинке се не подударају"
}
},
"integration": {
"finish": "Крај"
}
},
"lovelace": {
"cards": {
"picture-elements": {
"hold": "Придржи:",
"tap": "Додирни",
"navigate_to": "Отиђите на {location}",
"toggle": "Укључи {name}",
"more_info": "Покажи више информација: {name}"
}
}
}
},
"card": {
"lock": {
"lock": "Zaključaj",
"unlock": "Otključaj"
},
"media_player": {
"source": "Izvor",
"sound_mode": "Režim zvuka"
}
},
"dialogs": {
"more_info_settings": {
"save": "Sačuvaj",
"name": "Naziv"
}
}
},
"domain": {
"zwave": "Z-Wave",
"person": "Особа"
},
"state_attributes": {
"climate": {
"fan_mode": {
"off": "Искључен",
"on": "Укључен",
"auto": "Аутоматски"
}
"sidebar": {
"log_out": "Одјавити се"
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,31 +1,64 @@
{
"domain": {
"input_text": "உரை உள்ளிடு",
"light": "மின் விளக்கு",
"lock": "பூட்டு",
"mailbox": "அஞ்சல் பெட்டி",
"media_player": "மீடியா பிளேயர்",
"notify": "தெரிவி",
"remote": "ரிமோட்",
"scene": "காட்சி",
"script": "ஸ்கிரிப்ட்",
"sensor": "சென்சார்",
"sun": "சூரியன்",
"switch": "ஸ்விட்ச்",
"updater": "அப்டேட்டர்",
"weblink": "இணையதள இணைப்பு",
"zwave": "Z-Wave"
},
"panel": {
"config": "அமைப்புகள்",
"states": "கண்ணோட்டம்",
"map": "வரைபடம்",
"logbook": "பதிவேடுகள்",
"history": "வரலாறு",
"logbook": "பதிவேடுகள்",
"mailbox": "அஞ்சல் பெட்டி",
"shopping_list": "பொருட்கள் பட்டியல்"
"map": "வரைபடம்",
"shopping_list": "பொருட்கள் பட்டியல்",
"states": "கண்ணோட்டம்"
},
"state": {
"default": {
"off": "ஆஃப்",
"on": "ஆன்",
"unknown": "தெரியவில்லை",
"unavailable": "கிடைக்கவில்லை"
},
"state_badge": {
"alarm_control_panel": {
"armed": "எச்சரிக்கை ஒலி அமைக்கப்பட்டுள்ளது",
"disarmed": "எச்சரிக்கை ஒலி அமைக்கப்படவில்லை",
"armed_home": "எச்சரிக்கை ஒலி முகப்பு",
"armed_away": "எச்சரிக்கை ஒலி வெளியே",
"armed_night": "எச்சரிக்கை ஒலி இரவில்",
"pending": "நிலுவையில்",
"armed_away": "எச்சரிக்கை ஒலி அமைக்கப்பட்டுள்ளது ",
"armed_custom_bypass": "எச்சரிக்கை ஒலி அமைக்கப்பட்டுள்ளது",
"armed_home": "எச்சரிக்கை ஒலி அமைக்கப்பட்டுள்ளது ",
"armed_night": "எச்சரிக்கை ஒலி அமைக்கப்பட்டுள்ளது",
"arming": "எச்சரிக்கை ஒலி அமைக்கிறது",
"disarmed": "எச்சரிக்கை ஒலி அமைக்கப்படவில்லை",
"disarming": "எச்சரிக்கை ஒலி அமைக்கப்படவில்லை",
"pending": "கிடப்பில்",
"triggered": "தூண்ட"
},
"default": {
"unavailable": "கிடைக்கவில்லை",
"unknown": "தெரியாத"
},
"device_tracker": {
"home": "வீட்டில்",
"not_home": "தொலைவில்"
}
},
"state": {
"alarm_control_panel": {
"armed": "எச்சரிக்கை ஒலி அமைக்கப்பட்டுள்ளது",
"armed_away": "எச்சரிக்கை ஒலி வெளியே",
"armed_custom_bypass": "விருப்ப எச்சரிக்கை ஒலி",
"armed_home": "எச்சரிக்கை ஒலி முகப்பு",
"armed_night": "எச்சரிக்கை ஒலி இரவில்",
"arming": "எச்சரிக்கை ஒலி அமைக்கிறது",
"disarmed": "எச்சரிக்கை ஒலி அமைக்கப்படவில்லை",
"disarming": "எச்சரிக்கை ஒலி நீக்கம்",
"triggered": "தூண்டப்படுகிறது",
"armed_custom_bypass": "விருப்ப எச்சரிக்கை ஒலி"
"pending": "நிலுவையில்",
"triggered": "தூண்டப்படுகிறது"
},
"automation": {
"off": "ஆஃப்",
@ -36,14 +69,18 @@
"off": "ஆஃப்",
"on": "ஆன் "
},
"moisture": {
"off": "உலர்",
"on": "ஈரம்"
},
"gas": {
"off": "தெளிவு",
"on": "கண்டறியப்பட்டது"
},
"heat": {
"off": "ஆஃப்",
"on": "சூடான"
},
"moisture": {
"off": "உலர்",
"on": "ஈரம்"
},
"motion": {
"off": "தெளிவு ",
"on": "கண்டறியப்பட்டது"
@ -52,6 +89,22 @@
"off": "தெளிவு ",
"on": "கண்டறியப்பட்டது"
},
"opening": {
"off": "மூடப்பட்டது",
"on": "திறக்கப்பட்டுள்ளது"
},
"presence": {
"off": "தொலைவில்",
"on": "முகப்பு"
},
"problem": {
"off": "சரி",
"on": "சிக்கல்"
},
"safety": {
"off": "பாதுகாப்பான",
"on": "பாதுகாப்பற்ற"
},
"smoke": {
"off": "தெளிவு ",
"on": "கண்டறியப்பட்டது"
@ -64,26 +117,6 @@
"off": "தெளிவு ",
"on": "கண்டறியப்பட்டது"
},
"opening": {
"off": "மூடப்பட்டது",
"on": "திறக்கப்பட்டுள்ளது"
},
"safety": {
"off": "பாதுகாப்பான",
"on": "பாதுகாப்பற்ற"
},
"presence": {
"off": "தொலைவில்",
"on": "முகப்பு"
},
"problem": {
"off": "சரி",
"on": "சிக்கல்"
},
"heat": {
"off": "ஆஃப்",
"on": "சூடான"
},
"window": {
"off": "மூடப்பட்டுள்ளது",
"on": "திறக்கப்பட்டுள்ளது"
@ -94,38 +127,44 @@
"on": "ஆன் "
},
"camera": {
"idle": "பணியின்றி",
"recording": "பதிவு",
"streaming": "ஸ்ட்ரீமிங்",
"idle": "பணியின்றி"
"streaming": "ஸ்ட்ரீமிங்"
},
"climate": {
"off": "ஆஃப்",
"on": "ஆன் ",
"heat": "வெப்பம்",
"cool": "குளிர்",
"idle": "பணியின்றி",
"auto": "தானாக இயங்குதல்",
"cool": "குளிர்",
"dry": "உலர்ந்த",
"fan_only": "விசிறி மட்டும்",
"eco": "சுற்றுச்சூழல்",
"electric": "மின்சார",
"performance": "செயல்திறன்",
"high_demand": "அதிக தேவை",
"heat_pump": "வெப்ப பம்ப்",
"fan_only": "விசிறி மட்டும்",
"gas": "வாயு",
"manual": "கையேடு"
"heat": "வெப்பம்",
"heat_pump": "வெப்ப பம்ப்",
"high_demand": "அதிக தேவை",
"idle": "பணியின்றி",
"manual": "கையேடு",
"off": "ஆஃப்",
"on": "ஆன் ",
"performance": "செயல்திறன்"
},
"configurator": {
"configure": "உள்ளமை",
"configured": "உள்ளமைக்கப்பட்டது"
},
"cover": {
"open": "திறக்கப்பட்டுள்ளது",
"opening": "திறக்கிறது",
"closed": "மூடப்பட்டது",
"closing": "மூடுகிறது",
"open": "திறக்கப்பட்டுள்ளது",
"opening": "திறக்கிறது",
"stopped": "நிறுத்தப்பட்டது"
},
"default": {
"off": "ஆஃப்",
"on": "ஆன்",
"unavailable": "கிடைக்கவில்லை",
"unknown": "தெரியவில்லை"
},
"device_tracker": {
"home": "முகப்பு",
"not_home": "தொலைவில்"
@ -135,19 +174,19 @@
"on": "விசிறி ஆன்"
},
"group": {
"off": "ஆஃப்",
"on": "ஆன்",
"home": "வீட்டில்",
"not_home": "தொலைவில்",
"open": "திறக்கப்பட்டுள்ளது ",
"opening": "திறக்கிறது ",
"closed": "மூடப்பட்டுள்ளது ",
"closing": "மூடுகிறது ",
"stopped": "நிறுத்தப்பட்டுள்ளது ",
"home": "வீட்டில்",
"locked": "பூட்டப்பட்டுள்ளது ",
"unlocked": "திறக்கப்பட்டுள்ளது ",
"not_home": "தொலைவில்",
"off": "ஆஃப்",
"ok": "சரி",
"problem": "சிக்கல்"
"on": "ஆன்",
"open": "திறக்கப்பட்டுள்ளது ",
"opening": "திறக்கிறது ",
"problem": "சிக்கல்",
"stopped": "நிறுத்தப்பட்டுள்ளது ",
"unlocked": "திறக்கப்பட்டுள்ளது "
},
"input_boolean": {
"off": "ஆஃப்",
@ -162,11 +201,11 @@
"unlocked": "திறக்கப்பட்டது"
},
"media_player": {
"idle": "பணியின்றி",
"off": "ஆஃப்",
"on": "ஆன்",
"playing": "விளையாடுதல்",
"paused": "இடைநிறுத்தப்பட்டுள்ளது",
"idle": "பணியின்றி",
"playing": "விளையாடுதல்",
"standby": "காத்திரு"
},
"plant": {
@ -198,51 +237,24 @@
},
"zwave": {
"default": {
"initializing": "துவக்குகிறது",
"dead": "இறந்துவிட்டது",
"sleeping": "தூங்குகின்றது",
"ready": "தயார்"
"initializing": "துவக்குகிறது",
"ready": "தயார்",
"sleeping": "தூங்குகின்றது"
},
"query_stage": {
"initializing": "துவக்குகிறது ( {query_stage} )",
"dead": "இறந்துவிட்டது ({query_stage})"
"dead": "இறந்துவிட்டது ({query_stage})",
"initializing": "துவக்குகிறது ( {query_stage} )"
}
}
},
"state_badge": {
"default": {
"unknown": "தெரியாத",
"unavailable": "கிடைக்கவில்லை"
},
"alarm_control_panel": {
"armed": "எச்சரிக்கை ஒலி அமைக்கப்பட்டுள்ளது",
"disarmed": "எச்சரிக்கை ஒலி அமைக்கப்படவில்லை",
"armed_home": "எச்சரிக்கை ஒலி அமைக்கப்பட்டுள்ளது ",
"armed_away": "எச்சரிக்கை ஒலி அமைக்கப்பட்டுள்ளது ",
"armed_night": "எச்சரிக்கை ஒலி அமைக்கப்பட்டுள்ளது",
"pending": "கிடப்பில்",
"arming": "எச்சரிக்கை ஒலி அமைக்கிறது",
"disarming": "எச்சரிக்கை ஒலி அமைக்கப்படவில்லை",
"triggered": "தூண்ட",
"armed_custom_bypass": "எச்சரிக்கை ஒலி அமைக்கப்பட்டுள்ளது"
},
"device_tracker": {
"home": "வீட்டில்",
"not_home": "தொலைவில்"
}
},
"ui": {
"sidebar": {
"log_out": "வெளியேறு"
"login-form": {
"log_in": "உள் நுழை",
"password": "கடவுச்சொல்",
"remember": "நினைவில் கொள்"
},
"panel": {
"developer-tools": {
"tabs": {
"mqtt": {
"title": "MQTT"
}
}
},
"config": {
"zwave": {
"caption": "Z-Wave",
@ -250,29 +262,17 @@
"set_config_parameter": "கட்டமைப்பு அளவுருவை அமைக்கவும்"
}
}
},
"developer-tools": {
"tabs": {
"mqtt": {
"title": "MQTT"
}
}
}
},
"login-form": {
"password": "கடவுச்சொல்",
"remember": "நினைவில் கொள்",
"log_in": "உள் நுழை"
"sidebar": {
"log_out": "வெளியேறு"
}
},
"domain": {
"input_text": "உரை உள்ளிடு",
"light": "மின் விளக்கு",
"lock": "பூட்டு",
"mailbox": "அஞ்சல் பெட்டி",
"media_player": "மீடியா பிளேயர்",
"notify": "தெரிவி",
"remote": "ரிமோட்",
"scene": "காட்சி",
"script": "ஸ்கிரிப்ட்",
"sensor": "சென்சார்",
"sun": "சூரியன்",
"switch": "ஸ்விட்ச்",
"updater": "அப்டேட்டர்",
"weblink": "இணையதள இணைப்பு",
"zwave": "Z-Wave"
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,51 @@
{
"ui": {
"card": {
"fan": {
"forward": "آگے",
"reverse": "پیچھے کی جانب"
},
"timer": {
"actions": {
"finish": "ختم",
"pause": "توقف"
}
}
},
"dialogs": {
"zha_device_info": {
"services": {
"remove": "زاگبی نیٹ ورک سے ایک آلہ ہٹائیں ۔"
},
"zha_device_card": {
"area_picker_label": "جگہ"
}
}
},
"panel": {
"config": {
"automation": {
"editor": {
"actions": {
"type": {
"device_id": {
"label": "آلہ"
}
}
},
"conditions": {
"type": {
"device": {
"label": "آلہ"
}
}
}
}
},
"devices": {
"caption": "آلات",
"description": "منسلک آلات کا نظم کریں۔"
},
"server_control": {
"caption": "سرور کنٹرول۔",
"section": {
@ -15,28 +59,6 @@
"node_config": {
"seconds": "سیکنڈ"
}
},
"automation": {
"editor": {
"conditions": {
"type": {
"device": {
"label": "آلہ"
}
}
},
"actions": {
"type": {
"device_id": {
"label": "آلہ"
}
}
}
}
},
"devices": {
"caption": "آلات",
"description": "منسلک آلات کا نظم کریں۔"
}
},
"developer-tools": {
@ -46,28 +68,6 @@
}
}
}
},
"card": {
"fan": {
"forward": "آگے",
"reverse": "پیچھے کی جانب"
},
"timer": {
"actions": {
"pause": "توقف",
"finish": "ختم"
}
}
},
"dialogs": {
"zha_device_info": {
"services": {
"remove": "زاگبی نیٹ ورک سے ایک آلہ ہٹائیں ۔"
},
"zha_device_card": {
"area_picker_label": "جگہ"
}
}
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff