Merge pull request #2661 from home-assistant/dev

20190202.0
This commit is contained in:
Paulus Schoutsen 2019-02-02 14:00:28 -08:00 committed by GitHub
commit cf1b9e5067
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
53 changed files with 418 additions and 163 deletions

View File

@ -1,20 +1,27 @@
const del = require("del");
const path = require("path");
const gulp = require("gulp");
const foreach = require("gulp-foreach");
const hash = require("gulp-hash");
const hashFilename = require("gulp-hash-filename");
const merge = require("gulp-merge-json");
const minify = require("gulp-jsonminify");
const rename = require("gulp-rename");
const transform = require("gulp-json-transform");
const isDemo = process.env.DEMO === "1";
const inDir = "translations";
const workDir = "build-translations";
const fullDir = workDir + "/full";
const coreDir = workDir + "/core";
const outDir = workDir + "/output";
String.prototype.rsplit = function(sep, maxsplit) {
var split = this.split(sep);
return maxsplit
? [split.slice(0, -maxsplit).join(sep)].concat(split.slice(-maxsplit))
: split;
};
// Panel translations which should be split from the core translations. These
// should mirror the fragment definitions in polymer.json, so that we load
// additional resources at equivalent points.
@ -95,6 +102,12 @@ function lokalise_transform(data, original) {
return output;
}
let taskName = "clean-translations";
gulp.task(taskName, function() {
return del([`${outDir}/**/*.json`]);
});
tasks.push(taskName);
/**
* This task will build a master translation file, to be used as the base for
* all languages. This starts with src/translations/en.json, and replaces all
@ -104,8 +117,8 @@ function lokalise_transform(data, original) {
* project is buildable immediately after merging new translation keys, since
* the Lokalise update to translations/en.json will not happen immediately.
*/
let taskName = "build-master-translation";
gulp.task(taskName, function() {
taskName = "build-master-translation";
gulp.task(taskName, ["clean-translations"], function() {
return gulp
.src("src/translations/en.json")
.pipe(
@ -207,6 +220,7 @@ gulp.task(taskName, splitTasks, function() {
})
)
.pipe(minify())
.pipe(hashFilename())
.pipe(
rename((filePath) => {
if (filePath.dirname === "core") {
@ -231,7 +245,7 @@ gulp.task(taskName, ["build-flattened-translations"], function() {
hash({
algorithm: "md5",
hashLength: 32,
template: isDemo ? "<%= name %>.json" : "<%= name %>-<%= hash %>.json",
template: "<%= name %>.json",
})
)
.pipe(hash.manifest("translationFingerprints.json"))
@ -241,8 +255,10 @@ gulp.task(taskName, ["build-flattened-translations"], function() {
// all translation fragment fingerprints under the translation name key
const newData = {};
Object.entries(data).forEach(([key, value]) => {
const parts = key.split("/");
let translation = key;
const [path, _md5] = key.rsplit("-", 1);
// let translation = key;
let translation = path;
const parts = translation.split("/");
if (parts.length === 2) {
translation = parts[1];
}
@ -251,7 +267,7 @@ gulp.task(taskName, ["build-flattened-translations"], function() {
fingerprints: {},
};
}
newData[translation].fingerprints[key] = value;
newData[translation].fingerprints[path] = value;
});
return newData;
})

View File

@ -73,6 +73,7 @@
"es6-object-assign": "^1.1.0",
"eslint-import-resolver-webpack": "^0.10.1",
"fecha": "^3.0.0",
"gulp-hash-filename": "^2.0.1",
"home-assistant-js-websocket": "^3.2.4",
"intl-messageformat": "^2.2.0",
"jquery": "^3.3.1",

View File

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

View File

@ -5,6 +5,7 @@ import { PolymerElement } from "@polymer/polymer/polymer-element";
import EventsMixin from "../mixins/events-mixin";
import isComponentLoaded from "../common/config/is_component_loaded";
import { fireEvent } from "../common/dom/fire_event";
/*
* @appliesMixin EventsMixin
@ -43,7 +44,11 @@ class HaStartVoiceButton extends EventsMixin(PolymerElement) {
}
handleListenClick() {
this.fire("hass-start-voice");
fireEvent(this, "show-dialog", {
dialogImport: () =>
import(/* webpackChunkName: "voice-command-dialog" */ "../dialogs/ha-voice-command-dialog"),
dialogTag: "ha-voice-command-dialog",
});
}
}

View File

@ -1,20 +1,14 @@
import {
createCollection,
getUser,
Connection,
getCollection,
} from "home-assistant-js-websocket";
import { User } from "../types";
export const userCollection = (conn: Connection) =>
getCollection(conn, "_usr", () => getUser(conn) as Promise<User>, undefined);
export const subscribeUser = (
conn: Connection,
onChange: (user: User) => void
) =>
createCollection<User>(
"_usr",
// the getUser command is mistyped in current verrsion of HAWS.
// Fixed in 3.2.5
() => (getUser(conn) as unknown) as Promise<User>,
undefined,
conn,
onChange
);
) => userCollection(conn).subscribe(onChange);

View File

@ -159,6 +159,10 @@ class HaVoiceCommandDialog extends DialogMixin(PolymerElement) {
return ["dialogOpenChanged(opened)"];
}
showDialog() {
this.opened = true;
}
initRecognition() {
/* eslint-disable new-cap */
this.recognition = new webkitSpeechRecognition();

View File

@ -1,9 +1,6 @@
// Load polyfill first so HTML imports start resolving
/* eslint-disable import/first */
import "../resources/html-import/polyfill";
import "@polymer/app-route/app-location";
import "@polymer/app-route/app-route";
import "@polymer/iron-flex-layout/iron-flex-layout-classes";
import "@polymer/paper-styles/typography";
import { setPassiveTouchGestures } from "@polymer/polymer/lib/utils/settings";
@ -16,13 +13,6 @@ import "../components/ha-iconset-svg";
import "../layouts/app/home-assistant";
/* polyfill for paper-dropdown */
setTimeout(
() =>
import(/* webpackChunkName: "polyfill-web-animations-next" */ "web-animations-js/web-animations-next-lite.min"),
2000
);
setPassiveTouchGestures(true);
/* LastPass createElement workaround. See #428 */
document.createElement = Document.prototype.createElement;

View File

@ -1,44 +0,0 @@
import { afterNextRender } from "@polymer/polymer/lib/utils/render-status";
import { getUser } from "home-assistant-js-websocket";
import { clearState } from "../../util/ha-pref-storage";
import { askWrite } from "../../common/auth/token_storage";
import { subscribeUser } from "../../data/ws-user";
export default (superClass) =>
class extends superClass {
firstUpdated(changedProps) {
super.firstUpdated(changedProps);
this.addEventListener("hass-logout", () => this._handleLogout());
// HACK :( We don't have a way yet to trigger an update of `subscribeUser`
this.addEventListener("hass-refresh-current-user", () =>
getUser(this.hass.connection).then((user) => this._updateHass({ user }))
);
}
hassConnected() {
super.hassConnected();
subscribeUser(this.hass.connection, (user) => this._updateHass({ user }));
afterNextRender(null, () => {
if (askWrite()) {
const el = document.createElement("ha-store-auth-card");
this.shadowRoot.appendChild(el);
this.provideHass(el);
import(/* webpackChunkName: "ha-store-auth-card" */ "../../dialogs/ha-store-auth-card");
}
});
}
async _handleLogout() {
try {
await this.hass.auth.revoke();
this.hass.connection.close();
clearState();
document.location.href = "/";
} catch (err) {
// eslint-disable-next-line
console.error(err);
alert("Log out failed");
}
}
};

View File

@ -0,0 +1,55 @@
import { clearState } from "../../util/ha-pref-storage";
import { askWrite } from "../../common/auth/token_storage";
import { subscribeUser, userCollection } from "../../data/ws-user";
import { Constructor, LitElement } from "lit-element";
import { HassBaseEl } from "./hass-base-mixin";
declare global {
// for fire event
interface HASSDomEvents {
"hass-refresh-current-user": undefined;
}
}
export default (superClass: Constructor<LitElement & HassBaseEl>) =>
class extends superClass {
protected firstUpdated(changedProps) {
super.firstUpdated(changedProps);
this.addEventListener("hass-logout", () => this._handleLogout());
this.addEventListener("hass-refresh-current-user", () => {
userCollection(this.hass!.connection).refresh();
});
}
protected hassConnected() {
super.hassConnected();
subscribeUser(this.hass!.connection, (user) =>
this._updateHass({ user })
);
if (askWrite()) {
this.updateComplete
.then(() =>
import(/* webpackChunkName: "ha-store-auth-card" */ "../../dialogs/ha-store-auth-card")
)
.then(() => {
const el = document.createElement("ha-store-auth-card");
this.shadowRoot!.appendChild(el);
this.provideHass(el);
});
}
}
private async _handleLogout() {
try {
await this.hass!.auth.revoke();
this.hass!.connection.close();
clearState();
document.location.href = "/";
} catch (err) {
// tslint:disable-next-line
console.error(err);
alert("Log out failed");
}
}
};

View File

@ -1,10 +1,10 @@
import "@polymer/app-route/app-location";
import "@polymer/iron-flex-layout/iron-flex-layout-classes";
import {
html,
LitElement,
PropertyDeclarations,
PropertyValues,
css,
} from "lit-element";
import "../home-assistant-main";
@ -27,6 +27,7 @@ import { Route, HomeAssistant } from "../../types";
import { navigate } from "../../common/navigate";
(LitElement.prototype as any).html = html;
(LitElement.prototype as any).css = css;
const ext = <T>(baseClass: T, mixins): T =>
mixins.reduceRight((base, mixin) => mixin(base), baseClass);
@ -82,6 +83,8 @@ export class HomeAssistantAppEl extends ext(HassBaseMixin(LitElement), [
protected firstUpdated(changedProps) {
super.firstUpdated(changedProps);
setTimeout(registerServiceWorker, 1000);
/* polyfill for paper-dropdown */
import(/* webpackChunkName: "polyfill-web-animations-next" */ "web-animations-js/web-animations-next-lite.min");
}
protected updated(changedProps: PropertyValues): void {

View File

@ -1,23 +0,0 @@
import { afterNextRender } from "@polymer/polymer/lib/utils/render-status";
export default (superClass) =>
class extends superClass {
firstUpdated(changedProps) {
super.firstUpdated(changedProps);
this.addEventListener("hass-more-info", (e) => this._handleMoreInfo(e));
// Load it once we are having the initial rendering done.
afterNextRender(null, () =>
import(/* webpackChunkName: "more-info-dialog" */ "../../dialogs/ha-more-info-dialog")
);
}
async _handleMoreInfo(ev) {
if (!this.__moreInfoEl) {
this.__moreInfoEl = document.createElement("ha-more-info-dialog");
this.shadowRoot.appendChild(this.__moreInfoEl);
this.provideHass(this.__moreInfoEl);
}
this._updateHass({ moreInfoEntityId: ev.detail.entityId });
}
};

View File

@ -0,0 +1,34 @@
import { Constructor, LitElement } from "lit-element";
import { HassBaseEl } from "./hass-base-mixin";
declare global {
// for fire event
interface HASSDomEvents {
"hass-more-info": {
entityId: string;
};
}
}
export default (superClass: Constructor<LitElement & HassBaseEl>) =>
class extends superClass {
private _moreInfoEl?: any;
protected firstUpdated(changedProps) {
super.firstUpdated(changedProps);
this.addEventListener("hass-more-info", (e) => this._handleMoreInfo(e));
// Load it once we are having the initial rendering done.
import(/* webpackChunkName: "more-info-dialog" */ "../../dialogs/ha-more-info-dialog");
}
private async _handleMoreInfo(ev) {
if (!this._moreInfoEl) {
this._moreInfoEl = document.createElement("ha-more-info-dialog");
this.shadowRoot!.appendChild(this._moreInfoEl);
this.provideHass(this._moreInfoEl);
}
this._updateHass({ moreInfoEntityId: ev.detail.entityId });
}
};

View File

@ -22,9 +22,6 @@ import { HomeAssistant, Route } from "../types";
import { fireEvent } from "../common/dom/fire_event";
import { PolymerChangedEvent } from "../polymer-types";
import(/* webpackChunkName: "ha-sidebar" */ "../components/ha-sidebar");
import(/* webpackChunkName: "voice-command-dialog" */ "../dialogs/ha-voice-command-dialog");
const NON_SWIPABLE_PANELS = ["kiosk", "map"];
class HomeAssistantMain extends LitElement {
@ -51,7 +48,6 @@ class HomeAssistantMain extends LitElement {
return html`
<ha-url-sync .hass=${hass}></ha-url-sync>
<ha-voice-command-dialog .hass=${hass}></ha-voice-command-dialog>
<iron-media-query
query="(max-width: 870px)"
query-matches-changed=${this._narrowChanged}
@ -84,6 +80,8 @@ class HomeAssistantMain extends LitElement {
}
protected firstUpdated() {
import(/* webpackChunkName: "ha-sidebar" */ "../components/ha-sidebar");
this.addEventListener("hass-open-menu", () => {
if (this._narrow) {
this.drawer.open();
@ -97,9 +95,6 @@ class HomeAssistantMain extends LitElement {
fireEvent(this, "hass-dock-sidebar", { dock: false });
}
});
this.addEventListener("hass-start-voice", () => {
(this.voiceDialog as any).opened = true;
});
}
protected updated(changedProps: PropertyValues) {
@ -125,10 +120,6 @@ class HomeAssistantMain extends LitElement {
return this.shadowRoot!.querySelector("app-drawer")!;
}
private get voiceDialog() {
return this.shadowRoot!.querySelector("ha-voice-command-dialog")!;
}
static get styles(): CSSResult {
return css`
:host {

View File

@ -18,6 +18,7 @@ import "../../resources/ha-style";
import formatDate from "../../common/datetime/format_date";
import LocalizeMixin from "../../mixins/localize-mixin";
import { computeRTL } from "../../common/util/compute_rtl";
/*
* @appliesMixin LocalizeMixin
@ -37,6 +38,15 @@ class HaPanelHistory extends LocalizeMixin(PolymerElement) {
paper-dropdown-menu {
max-width: 100px;
margin-top: 13px;
margin-right: 16px;
--paper-input-container-label-floating: {
padding-bottom: 10px;
}
}
:host([rtl]) paper-dropdown-menu {
text-align: right;
}
paper-item {
@ -158,6 +168,12 @@ class HaPanelHistory extends LocalizeMixin(PolymerElement) {
type: String,
value: "date",
},
rtl: {
type: Boolean,
reflectToAttribute: true,
computed: "_computeRTL(hass)",
},
};
}
@ -198,6 +214,10 @@ class HaPanelHistory extends LocalizeMixin(PolymerElement) {
return 1;
}
}
_computeRTL(hass) {
return computeRTL(hass);
}
}
customElements.define("ha-panel-history", HaPanelHistory);

View File

@ -18,6 +18,7 @@ import "./ha-logbook";
import formatDate from "../../common/datetime/format_date";
import LocalizeMixin from "../../mixins/localize-mixin";
import { computeRTL } from "../../common/util/compute_rtl";
/*
* @appliesMixin LocalizeMixin
@ -52,6 +53,13 @@ class HaPanelLogbook extends LocalizeMixin(PolymerElement) {
paper-dropdown-menu {
max-width: 100px;
margin-right: 16px;
--paper-input-container-label-floating: {
padding-bottom: 10px;
}
}
:host([rtl]) paper-dropdown-menu {
text-align: right;
}
paper-item {
@ -205,6 +213,12 @@ class HaPanelLogbook extends LocalizeMixin(PolymerElement) {
datePicker: {
type: Object,
},
rtl: {
type: Boolean,
reflectToAttribute: true,
computed: "_computeRTL(hass)",
},
};
}
@ -242,6 +256,10 @@ class HaPanelLogbook extends LocalizeMixin(PolymerElement) {
refreshLogbook() {
this.shadowRoot.querySelector("ha-logbook-data").refreshLogbook();
}
_computeRTL(hass) {
return computeRTL(hass);
}
}
customElements.define("ha-panel-logbook", HaPanelLogbook);

View File

@ -453,8 +453,7 @@ export class HuiEditCard extends LitElement {
flex: auto;
}
.content hui-card-preview {
margin-top: 0;
margin-left: 24px;
margin: 0 24px;
flex: 490px;
max-width: 490px;
}

View File

@ -168,7 +168,9 @@ class HUIRoot extends LitElement {
slot="dropdown-content"
>
<paper-item @click="${this.lovelace!.enableFullEditMode}"
>Raw config editor</paper-item
>${this.hass!.localize(
"ui.panel.lovelace.editor.menu.raw_editor"
)}</paper-item
>
</paper-listbox>
</paper-menu-button>
@ -206,19 +208,27 @@ class HUIRoot extends LitElement {
${this._yamlMode
? html`
<paper-item @click="${this._handleRefresh}"
>Refresh</paper-item
>${this.hass!.localize(
"ui.panel.lovelace.menu.refresh"
)}</paper-item
>
`
: ""}
<paper-item @click="${this._handleUnusedEntities}"
>Unused entities</paper-item
>${this.hass!.localize(
"ui.panel.lovelace.menu.unused_entities"
)}</paper-item
>
<paper-item @click="${this._editModeEnable}"
>${this.hass!.localize(
"ui.panel.lovelace.editor.configure_ui"
"ui.panel.lovelace.menu.configure_ui"
)}</paper-item
>
<paper-item @click="${this._handleHelp}"
>${this.hass!.localize(
"ui.panel.lovelace.menu.help"
)}</paper-item
>
<paper-item @click="${this._handleHelp}">Help</paper-item>
</paper-listbox>
</paper-menu-button>
</app-toolbar>

View File

@ -808,7 +808,8 @@
"period": "Period"
},
"logbook": {
"showing_entries": "[%key:ui::panel::history::showing_entries%]"
"showing_entries": "[%key:ui::panel::history::showing_entries%]",
"period": "Period"
},
"lovelace": {
"cards": {
@ -823,9 +824,17 @@
"add_item": "Add item"
}
},
"menu": {
"configure_ui": "Configure UI",
"unused_entities": "Unused entities",
"help": "Help",
"refresh": "Refresh"
},
"editor": {
"header": "Edit UI",
"configure_ui": "Configure UI",
"menu": {
"raw_editor": "Raw config editor"
},
"edit_view": {
"header": "View Configuration",
"add": "Add view",

View File

@ -1,6 +1,7 @@
{
"ar": {
"nativeName": "العربية"
"nativeName": "العربية",
"isRTL": true
},
"bg": {
"nativeName": "Български"

View File

@ -753,7 +753,6 @@
"migrate": "Мигриране на конфигурация"
},
"header": "Редактиране на потребителския интерфейс",
"configure_ui": "Конфигуриране на потребителския интерфейс",
"edit_view": {
"header": "Конфигурация на изглед",
"add": "Добавяне на изглед",
@ -767,6 +766,9 @@
"cancel": "Няма значение",
"save": "Поемете контрола"
}
},
"menu": {
"configure_ui": "Конфигуриране на потребителския интерфейс"
}
}
},

View File

@ -433,6 +433,14 @@
"hours": "Hores",
"minutes": "Minuts",
"seconds": "Segons"
},
"geo_location": {
"label": "Geolocalització",
"source": "Font",
"zone": "Zona",
"event": "Esdeveniment:",
"enter": "Entrar",
"leave": "Sortir"
}
}
},
@ -565,7 +573,18 @@
},
"zha": {
"caption": "ZHA",
"description": "Gestiona la xarxa domòtica ZIgbee"
"description": "Gestiona la xarxa domòtica ZIgbee",
"services": {
"reconfigure": "Reconfigura el dispositiu ZHA (dispositiu curatiu). Utilitza-ho si tens problemes amb el dispositiu. Si el dispositiu en qüestió està alimentat per bateria, assegura't que estigui despert i accepti ordres quan utilitzis aquest servei."
}
},
"area_registry": {
"caption": "Registre d'àrees",
"description": "Visió general de totes les àrees de la casa."
},
"entity_registry": {
"caption": "Registre d'entitats",
"description": "Visió general de totes les entitats conegudes."
}
},
"profile": {
@ -734,6 +753,11 @@
"checked_items": "Articles seleccionats",
"clear_items": "Esborrar els articles seleccionats",
"add_item": "Afegir element"
},
"empty_state": {
"title": "Benvingut\/da a casa",
"no_devices": "Aquesta pàgina et permet controlar els teus dispositius, però sembla que encara no en tens cap configurat. Vés a la pàgina d'integracions per començar.",
"go_to_integrations_page": "Vés a la pàgina d'integracions."
}
},
"editor": {
@ -753,7 +777,6 @@
"migrate": "Migrar la configuració"
},
"header": "Editar la interfície d'usuari (UI)",
"configure_ui": "Configurar la interfície d'usuari",
"edit_view": {
"header": "Configuració de la visualització",
"add": "Afegeix visualització",
@ -767,6 +790,9 @@
"cancel": "M'ho he repensat",
"save": "Prendre el control"
}
},
"menu": {
"configure_ui": "Configurar la interfície d'usuari"
}
}
},
@ -999,7 +1025,10 @@
"weblink": "Enllaços web",
"zwave": "Z-Wave",
"vacuum": "Aspiradora",
"zha": "ZHA"
"zha": "ZHA",
"hassio": "Hass.io",
"homeassistant": "Home Assistant",
"lovelace": "Lovelace"
},
"attribute": {
"weather": {

View File

@ -743,7 +743,6 @@
"migrate": "Migrovat konfiguraci"
},
"header": "Upravit UI",
"configure_ui": "Konfigurovat UI",
"edit_view": {
"header": "Zobrazit konfiguraci",
"add": "Přidat pohled",
@ -757,6 +756,9 @@
"cancel": "Zahodit změnu",
"save": "Převzít kontrolu"
}
},
"menu": {
"configure_ui": "Konfigurovat UI"
}
}
},

View File

@ -743,7 +743,6 @@
"migrate": "Migrer opsætning"
},
"header": "Rediger UI",
"configure_ui": "Konfigurer UI",
"edit_view": {
"header": "Vis konfiguration",
"add": "Tilføje visning",
@ -757,6 +756,9 @@
"cancel": "Glem det",
"save": "tag kontrol"
}
},
"menu": {
"configure_ui": "Konfigurer UI"
}
}
},

View File

@ -753,7 +753,6 @@
"migrate": "Konfiguration migrieren"
},
"header": "Benutzeroberfläche bearbeiten",
"configure_ui": "Benutzeroberfläche konfigurieren",
"edit_view": {
"header": "Konfiguration anzeigen",
"add": "Ansicht hinzufügen",
@ -767,6 +766,9 @@
"cancel": "Abbrechen",
"save": "Kontrolle übernehmen"
}
},
"menu": {
"configure_ui": "Benutzeroberfläche konfigurieren"
}
}
},

View File

@ -753,7 +753,6 @@
"migrate": "Ρυθμίσεις μετεγκατάστασης"
},
"header": "Επεξεργασία περιβάλλοντος χρήστη",
"configure_ui": "Διαμορφώστε το περιβάλλον χρήστη",
"edit_view": {
"header": "Ρυθμίσεις",
"add": "Προσθήκη προβολής",
@ -767,6 +766,9 @@
"cancel": "Δεν πειράζει",
"save": "Πάρτε τον έλεγχο"
}
},
"menu": {
"configure_ui": "Διαμορφώστε το περιβάλλον χρήστη"
}
}
},

View File

@ -777,7 +777,6 @@
"migrate": "Migrate config"
},
"header": "Edit UI",
"configure_ui": "Configure UI",
"edit_view": {
"header": "View Configuration",
"add": "Add view",
@ -791,6 +790,9 @@
"cancel": "Never mind",
"save": "Take control"
}
},
"menu": {
"configure_ui": "Configure UI"
}
}
},
@ -1026,7 +1028,8 @@
"zha": "ZHA",
"hassio": "Hass.io",
"homeassistant": "Home Assistant",
"lovelace": "Lovelace"
"lovelace": "Lovelace",
"system_health": "System Health"
},
"attribute": {
"weather": {

View File

@ -753,7 +753,6 @@
"migrate": "Migrar configuración"
},
"header": "Editar la interfaz de usuario",
"configure_ui": "Configurar la interfaz de usuario",
"edit_view": {
"header": "Ver configuración",
"add": "Añadir vista",
@ -767,6 +766,9 @@
"cancel": "No importa",
"save": "Tomar el control"
}
},
"menu": {
"configure_ui": "Configurar la interfaz de usuario"
}
}
},

View File

@ -737,13 +737,15 @@
"delete": "Kustuta"
},
"header": "Muuda kasutajaliidest",
"configure_ui": "Seadista kasutajaliidest",
"edit_view": {
"header": "Vaata seadeid",
"add": "Lisa vaade",
"edit": "Muuda vaadet",
"delete": "Kustuta vaade"
}
},
"menu": {
"configure_ui": "Seadista kasutajaliidest"
}
}
},

View File

@ -741,7 +741,6 @@
"migrate": "Tuo vanhat asetukset"
},
"header": "Muokkaa käyttöliittymää",
"configure_ui": "Määrittele käyttöliittymä",
"edit_view": {
"header": "Näytä asetukset",
"add": "Lisää näkymä",
@ -755,6 +754,9 @@
"cancel": "Antaa olla",
"save": "Ota hallintaan"
}
},
"menu": {
"configure_ui": "Määrittele käyttöliittymä"
}
}
},

View File

@ -749,7 +749,6 @@
"migrate": "Migrer la configuration"
},
"header": "Modifier l'interface utilisateur",
"configure_ui": "Configurer l'interface utilisateur",
"edit_view": {
"header": "Voir la configuration",
"add": "Ajouter la vue",
@ -763,6 +762,9 @@
"cancel": "Oublie ce que j'ai dit, c'est pas grave.",
"save": "Prenez le contrôle"
}
},
"menu": {
"configure_ui": "Configurer l'interface utilisateur"
}
}
},

View File

@ -427,6 +427,20 @@
"webhook": {
"label": "Webhook",
"webhook_id": "Webhook ID"
},
"time_pattern": {
"label": "תבנית זמן",
"hours": "שעות",
"minutes": "דקות",
"seconds": "שניות"
},
"geo_location": {
"label": "מיקום גיאוגרפי",
"source": "מקור",
"zone": "אזור",
"event": "אירוע:",
"enter": "כניסה",
"leave": "יציאה"
}
}
},
@ -556,6 +570,20 @@
"device_unavailable": "התקן אינו זמין",
"entity_unavailable": "ישות לא זמינה"
}
},
"zha": {
"description": "ניהול רשת Zigbee לאוטומציה ביתית",
"services": {
"reconfigure": "התקן מחדש את התקן ה ZHA. השתמש באפשרות זו אם אתה נתקל בבעיות בהתקן. אם ההתקן המדובר הוא התקן המופעל באמצעות סוללות, ודא שהוא ער ויכול לקבל פקודות בעת שימוש בשירות זה."
}
},
"area_registry": {
"caption": "מאגר האזורים",
"description": "סקירה של כל האזורים בביתך."
},
"entity_registry": {
"caption": "מאגר הישויות",
"description": "סקירה של כל הישויות המוכרות"
}
},
"profile": {
@ -724,6 +752,11 @@
"checked_items": "פריטים מסומנים",
"clear_items": "נקה פריטים מסומנים",
"add_item": "הוסף פריט"
},
"empty_state": {
"title": "ברוך הבא הביתה",
"no_devices": "דף זה מאפשר לך לשלוט במכשירים שלך, אך נראה שעדיין לא הוגדרו מכשירים. עבור אל דף האינטגרציות כדי להתחיל.",
"go_to_integrations_page": "עבור אל דף האינטגרציות."
}
},
"editor": {
@ -743,7 +776,6 @@
"migrate": "הגר הגדרה"
},
"header": "ערוך UI",
"configure_ui": "הגדר UI",
"edit_view": {
"header": "הצג הגדרות",
"add": "הוסף תצוגה",
@ -757,6 +789,9 @@
"cancel": "לא משנה",
"save": "קח שליטה"
}
},
"menu": {
"configure_ui": "הגדר UI"
}
}
},
@ -926,6 +961,19 @@
"save": "שמור",
"name": "שם",
"entity_id": "מזהה ישות"
},
"more_info_control": {
"script": {
"last_action": "פעולה אחרונה"
},
"sun": {
"elevation": "גובה",
"rising": "זורחת",
"setting": "שוקעת"
},
"updater": {
"title": "הוראות עדכון"
}
}
},
"auth_store": {

View File

@ -725,7 +725,6 @@
"migrate": "Migriraj konfiguraciju"
},
"header": "Uredi UI",
"configure_ui": "Konfiguriraj UI",
"edit_view": {
"header": "Pogledaj konfiguraciju",
"add": "Dodaj prikaz",
@ -739,6 +738,9 @@
"cancel": "Nema veze",
"save": "Preuzmi kontrolu"
}
},
"menu": {
"configure_ui": "Konfiguriraj UI"
}
}
},

View File

@ -753,7 +753,6 @@
"migrate": "Konfiguráció áttelepítése"
},
"header": "Felhasználói felület szerkesztése",
"configure_ui": "Felhasználói felület konfigurálása",
"edit_view": {
"header": "Nézet konfigurálása",
"add": "Nézet hozzáadása",
@ -767,6 +766,9 @@
"cancel": "Mégsem",
"save": "Irányítás átvétele"
}
},
"menu": {
"configure_ui": "Felhasználói felület konfigurálása"
}
}
},

View File

@ -753,7 +753,6 @@
"migrate": "Esporta configurazione"
},
"header": "Modifica dell'interfaccia utente",
"configure_ui": "Configurare l'interfaccia utente",
"edit_view": {
"header": "Visualizza configurazione",
"add": "Aggiungi vista",
@ -767,6 +766,9 @@
"cancel": "Rinuncia",
"save": "Prendere il controllo"
}
},
"menu": {
"configure_ui": "Configurare l'interfaccia utente"
}
}
},

View File

@ -753,7 +753,6 @@
"migrate": "설정 마이그레이션"
},
"header": "UI 편집",
"configure_ui": "UI 구성",
"edit_view": {
"header": "구성 보기",
"add": "뷰 추가",
@ -767,6 +766,9 @@
"cancel": "아닙니다",
"save": "직접 관리할게요"
}
},
"menu": {
"configure_ui": "UI 구성"
}
}
},

View File

@ -777,7 +777,6 @@
"migrate": "Konfiguratioun migréieren"
},
"header": "UI änneren",
"configure_ui": "UI konfiguréieren",
"edit_view": {
"header": "Konfiguratioun kucken",
"add": "Vue dobäisetzen",
@ -791,6 +790,9 @@
"cancel": "Vergiess et",
"save": "Kontroll iwwerhuelen"
}
},
"menu": {
"configure_ui": "UI konfiguréieren"
}
}
},

View File

@ -753,7 +753,6 @@
"migrate": "Pārvietot konfigurāciju"
},
"header": "Rediģēt lietotāja interfeisu",
"configure_ui": "Konfigurēt lietotāja interfeisu",
"edit_view": {
"header": "Skatīt konfigurāciju",
"add": "Pievienot skatu",
@ -767,6 +766,9 @@
"cancel": "Nekas",
"save": "Pārņemt kontroli"
}
},
"menu": {
"configure_ui": "Konfigurēt lietotāja interfeisu"
}
}
},

View File

@ -753,7 +753,6 @@
"migrate": "Overfør konfigurasjon"
},
"header": "Rediger brukergrensesnitt",
"configure_ui": "Konfigurer brukergrensesnitt",
"edit_view": {
"header": "Vis konfigurasjon",
"add": "Legg til visning",
@ -767,6 +766,9 @@
"cancel": "Glem det",
"save": "Ta kontroll"
}
},
"menu": {
"configure_ui": "Konfigurer brukergrensesnitt"
}
}
},

View File

@ -753,7 +753,6 @@
"migrate": "Configuratie migreren"
},
"header": "Bewerk UI",
"configure_ui": "Configureer UI",
"edit_view": {
"header": "Bekijk de configuratie",
"add": "Weergave toevoegen",
@ -767,6 +766,9 @@
"cancel": "Laat maar",
"save": "Neem over"
}
},
"menu": {
"configure_ui": "Configureer UI"
}
}
},

View File

@ -743,7 +743,6 @@
"migrate": "Overfør konfigurasjon"
},
"header": "Rediger brukargrensesnitt",
"configure_ui": "Konfigurer brukargrensesnitt",
"edit_view": {
"header": "Vis konfigurasjon",
"add": "Legg til side",
@ -757,6 +756,9 @@
"cancel": "Gløym det",
"save": "Ta kontroll"
}
},
"menu": {
"configure_ui": "Konfigurer brukargrensesnitt"
}
}
},

View File

@ -777,7 +777,6 @@
"migrate": "Migracja konfiguracji"
},
"header": "Edycja interfejsu użytkownika",
"configure_ui": "Konfiguracja interfejsu użytkownika",
"edit_view": {
"header": "Konfiguracja widoku",
"add": "Dodaj widok",
@ -791,6 +790,9 @@
"cancel": "Nieważne",
"save": "Przejmuję kontrolę"
}
},
"menu": {
"configure_ui": "Konfiguracja interfejsu użytkownika"
}
}
},

View File

@ -743,7 +743,6 @@
"migrate": "Migrar configuração"
},
"header": "Editar “interface” do usuário",
"configure_ui": "Configurar “interface” do usuário",
"edit_view": {
"header": "Configurações",
"add": "Editar visualização",
@ -757,6 +756,9 @@
"cancel": "Nunca",
"save": "Assuma o controle"
}
},
"menu": {
"configure_ui": "Configurar “interface” do usuário"
}
}
},

View File

@ -743,7 +743,6 @@
"migrate": "Migrar configuração"
},
"header": "Editar UI",
"configure_ui": "Configurar UI",
"edit_view": {
"header": "Ver configuração",
"add": "Acrescentar vista",
@ -757,6 +756,9 @@
"cancel": "Cancelar",
"save": "Assumir o controle"
}
},
"menu": {
"configure_ui": "Configurar UI"
}
}
},

View File

@ -927,7 +927,8 @@
"updater": "Updater",
"weblink": "Legătură web",
"zwave": "Z-Wave",
"vacuum": "Aspirator"
"vacuum": "Aspirator",
"system_health": "Stare Sistem"
},
"attribute": {
"weather": {

View File

@ -777,7 +777,6 @@
"migrate": "Перенести настройки"
},
"header": "Редактирование интерфейса",
"configure_ui": "Настройка интерфейса",
"edit_view": {
"header": "Настройки вкладки",
"add": "Добавить вкладку",
@ -791,6 +790,9 @@
"cancel": "Оставить как есть",
"save": "Получить контроль"
}
},
"menu": {
"configure_ui": "Настройка интерфейса"
}
}
},

View File

@ -753,7 +753,6 @@
"migrate": "Migrovať konfiguráciu"
},
"header": "Upraviť používateľské rozhranie",
"configure_ui": "Konfigurovať používateľské rozhranie",
"edit_view": {
"header": "Konfigurácia zobrazenia",
"add": "Pridať zobrazenie",
@ -767,6 +766,9 @@
"cancel": "Nevadí",
"save": "Prevziať kontrolu"
}
},
"menu": {
"configure_ui": "Konfigurovať používateľské rozhranie"
}
}
},

View File

@ -753,7 +753,6 @@
"migrate": "Migriraj nastavitve"
},
"header": "Uredi UI",
"configure_ui": "Konfiguriraj UI",
"edit_view": {
"header": "Prikaži konfiguracijo",
"add": "Dodaj pogled",
@ -767,6 +766,9 @@
"cancel": "Pozabi",
"save": "Prevzemite nadzor"
}
},
"menu": {
"configure_ui": "Konfiguriraj UI"
}
}
},

View File

@ -345,7 +345,7 @@
},
"customize": {
"caption": "Anpassning",
"description": "Anpassa dina enheter"
"description": "Anpassa dina entiteter"
},
"automation": {
"caption": "Automationer",
@ -418,7 +418,7 @@
},
"zone": {
"label": "Zon",
"entity": "Enhet med position",
"entity": "Entitet med position",
"zone": "Zon",
"event": "Händelse",
"enter": "Ankommer",
@ -433,6 +433,14 @@
"hours": "Timmar",
"minutes": "Minuter",
"seconds": "Sekunder"
},
"geo_location": {
"label": "Geolocation",
"source": "Källa",
"zone": "Zon",
"event": "Händelse:",
"enter": "Ankomma",
"leave": "Lämna"
}
}
},
@ -476,7 +484,7 @@
},
"zone": {
"label": "Zon",
"entity": "Enhet med position",
"entity": "Entitet med position",
"zone": "Zon"
}
}
@ -565,7 +573,18 @@
},
"zha": {
"caption": "ZHA",
"description": "Zigbee Home Automation nätverkhantering"
"description": "Zigbee Home Automation nätverkhantering",
"services": {
"reconfigure": "Återkonfigurera ZHA-enheten (läka enheten). Använd det här om du har problem med enheten. Om den aktuella enheten är en batteridriven enhet, se till att den är vaken och accepterar kommandon när du använder den här tjänsten."
}
},
"area_registry": {
"caption": "Områdesregister",
"description": "Oversikt över alla områden i ditt hem"
},
"entity_registry": {
"caption": "Entitetsregister",
"description": "Översikt över alla kända entiteter"
}
},
"profile": {
@ -734,6 +753,11 @@
"checked_items": "Markerade objekt",
"clear_items": "Rensa avbockade objekt",
"add_item": "Lägg till objekt"
},
"empty_state": {
"title": "Välkommen hem",
"no_devices": "På den här sidan kan du styra dina enheter, men det ser ut som om du inte har några enheter ännu. Gå till integrationssidan för att komma igång.",
"go_to_integrations_page": "Gå till integrationssidan."
}
},
"editor": {
@ -753,7 +777,6 @@
"migrate": "Migrera konfigurationen"
},
"header": "Ändra användargränssnittet",
"configure_ui": "Konfigurera användargränssnittet",
"edit_view": {
"header": "Visa konfiguration",
"add": "Lägg till vy",
@ -767,6 +790,9 @@
"cancel": "Glöm det",
"save": "Ta kontroll"
}
},
"menu": {
"configure_ui": "Konfigurera användargränssnittet"
}
}
},
@ -901,7 +927,7 @@
"components": {
"entity": {
"entity-picker": {
"entity": "Enhet"
"entity": "Entitet"
}
},
"service-picker": {
@ -935,7 +961,7 @@
"more_info_settings": {
"save": "Spara",
"name": "Namn",
"entity_id": "Enhets-ID"
"entity_id": "Entitets-ID"
},
"more_info_control": {
"script": {
@ -999,7 +1025,11 @@
"weblink": "Webblänk",
"zwave": "Z-Wave",
"vacuum": "Dammsugare",
"zha": "ZHA"
"zha": "ZHA",
"hassio": "Hass.io",
"homeassistant": "Home Assistant",
"lovelace": "Lovelace",
"system_health": "Systemhälsa"
},
"attribute": {
"weather": {

View File

@ -655,7 +655,6 @@
"migrate": "Ayarları aktar"
},
"header": "Kullanıcı arayüzünü düzenle",
"configure_ui": "Kullanıcı arayüzünü ayarla",
"edit_view": {
"header": "Ayarları görüntüle",
"add": "Görünüm ekle",
@ -669,6 +668,9 @@
"cancel": "Boşver",
"save": "Kontrol altına al"
}
},
"menu": {
"configure_ui": "Kullanıcı arayüzünü ayarla"
}
}
},

View File

@ -671,7 +671,6 @@
"migrate": "Перенесення конфігурації"
},
"header": "Редагування інтерфейсу",
"configure_ui": "Налаштувати інтерфейс користувача",
"edit_view": {
"header": "Перегляд Конфігурації",
"add": "Додати вигляд",
@ -685,6 +684,9 @@
"cancel": "Неважливо",
"save": "Взяти під контроль"
}
},
"menu": {
"configure_ui": "Налаштувати інтерфейс користувача"
}
}
},

View File

@ -751,7 +751,6 @@
"migrate": "迁移配置"
},
"header": "编辑 UI",
"configure_ui": "配置 UI",
"edit_view": {
"header": "查看配置",
"add": "添加视图",
@ -765,6 +764,9 @@
"cancel": "没关系",
"save": "自行编辑"
}
},
"menu": {
"configure_ui": "配置 UI"
}
}
},

View File

@ -777,7 +777,6 @@
"migrate": "遷移設定"
},
"header": "編輯 UI",
"configure_ui": "設定 UI",
"edit_view": {
"header": "檢視設定",
"add": "新增視圖",
@ -791,6 +790,9 @@
"cancel": "我再想想",
"save": "自行編輯"
}
},
"menu": {
"configure_ui": "設定 UI"
}
}
},

View File

@ -7019,6 +7019,11 @@ gulp-foreach@^0.1.0:
gulp-util "~2.2.14"
through2 "~0.6.3"
gulp-hash-filename@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/gulp-hash-filename/-/gulp-hash-filename-2.0.1.tgz#c30656261a9b622d636766e48b8297125b4ddde8"
integrity sha512-pMg5owb8Dt0wqjgPx/TFbU3c5ckD16rrgo0BTm9PQ3pVC1Zsgw7AYx1+DP2t31JoUTeN1/dPuXNWnCNvN/wj7A==
gulp-hash@^4.2.2:
version "4.2.2"
resolved "https://registry.yarnpkg.com/gulp-hash/-/gulp-hash-4.2.2.tgz#2cf4ad081ef7a65393a51e3df58f514f388f4523"