mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-15 13:26:34 +00:00
Merge pull request #9285 from home-assistant/dev
This commit is contained in:
commit
cf03f103ab
@ -4,6 +4,7 @@ import { mdiDotsVertical } from "@mdi/js";
|
||||
import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit";
|
||||
import { customElement, property, query, state } from "lit/decorators";
|
||||
import { fireEvent } from "../../../../src/common/dom/fire_event";
|
||||
import { slugify } from "../../../../src/common/string/slugify";
|
||||
import "../../../../src/components/buttons/ha-progress-button";
|
||||
import "../../../../src/components/ha-button-menu";
|
||||
import { createCloseHeading } from "../../../../src/components/ha-dialog";
|
||||
@ -287,10 +288,9 @@ class HassioSnapshotDialog
|
||||
}
|
||||
}
|
||||
|
||||
const name = this._computeName.replace(/[^a-z0-9]+/gi, "_");
|
||||
const a = document.createElement("a");
|
||||
a.href = signedPath.path;
|
||||
a.download = `Hass_io_${name}.tar`;
|
||||
a.download = `home_assistant_snapshot_${slugify(this._computeName)}.tar`;
|
||||
this.shadowRoot!.appendChild(a);
|
||||
a.click();
|
||||
this.shadowRoot!.removeChild(a);
|
||||
|
@ -103,27 +103,25 @@ export class HassioMain extends SupervisorBaseElement {
|
||||
|
||||
private _applyTheme() {
|
||||
let themeName: string;
|
||||
let themeSettings:
|
||||
| Partial<HomeAssistant["selectedThemeSettings"]>
|
||||
| undefined;
|
||||
let themeSettings: Partial<HomeAssistant["selectedTheme"]> | undefined;
|
||||
|
||||
if (atLeastVersion(this.hass.config.version, 0, 114)) {
|
||||
themeName =
|
||||
this.hass.selectedThemeSettings?.theme ||
|
||||
this.hass.selectedTheme?.theme ||
|
||||
(this.hass.themes.darkMode && this.hass.themes.default_dark_theme
|
||||
? this.hass.themes.default_dark_theme!
|
||||
: this.hass.themes.default_theme);
|
||||
|
||||
themeSettings = this.hass.selectedThemeSettings;
|
||||
themeSettings = this.hass.selectedTheme;
|
||||
if (themeSettings?.dark === undefined) {
|
||||
themeSettings = {
|
||||
...this.hass.selectedThemeSettings,
|
||||
...this.hass.selectedTheme,
|
||||
dark: this.hass.themes.darkMode,
|
||||
};
|
||||
}
|
||||
} else {
|
||||
themeName =
|
||||
((this.hass.selectedThemeSettings as unknown) as string) ||
|
||||
((this.hass.selectedTheme as unknown) as string) ||
|
||||
this.hass.themes.default_theme;
|
||||
}
|
||||
|
||||
|
2
setup.py
2
setup.py
@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
||||
|
||||
setup(
|
||||
name="home-assistant-frontend",
|
||||
version="20210526.0",
|
||||
version="20210528.0",
|
||||
description="The Home Assistant frontend",
|
||||
url="https://github.com/home-assistant/home-assistant-polymer",
|
||||
author="The Home Assistant Authors",
|
||||
|
@ -31,7 +31,7 @@ export const applyThemesOnElement = (
|
||||
element,
|
||||
themes: HomeAssistant["themes"],
|
||||
selectedTheme?: string,
|
||||
themeSettings?: Partial<HomeAssistant["selectedThemeSettings"]>
|
||||
themeSettings?: Partial<HomeAssistant["selectedTheme"]>
|
||||
) => {
|
||||
let cacheKey = selectedTheme;
|
||||
let themeRules: Partial<ThemeVars> = {};
|
||||
|
10
src/common/util/promise-timeout.ts
Normal file
10
src/common/util/promise-timeout.ts
Normal file
@ -0,0 +1,10 @@
|
||||
export const promiseTimeout = (ms: number, promise: Promise<any>) => {
|
||||
const timeout = new Promise((_resolve, reject) => {
|
||||
setTimeout(() => {
|
||||
reject(`Timed out in ${ms} ms.`);
|
||||
}, ms);
|
||||
});
|
||||
|
||||
// Returns a race between our timeout and the passed in promise
|
||||
return Promise.race([promise, timeout]);
|
||||
};
|
@ -125,6 +125,7 @@ export class HaIcon extends LitElement {
|
||||
databaseIcon = await getIcon(iconName);
|
||||
} catch (_err) {
|
||||
// Firefox in private mode doesn't support IDB
|
||||
// iOS Safari sometimes doesn't open the DB
|
||||
databaseIcon = undefined;
|
||||
}
|
||||
|
||||
|
@ -377,6 +377,7 @@ class StateHistoryChartLine extends LocalizeMixin(PolymerElement) {
|
||||
major: {
|
||||
fontStyle: "bold",
|
||||
},
|
||||
autoSkipPadding: 20,
|
||||
},
|
||||
},
|
||||
],
|
||||
|
@ -236,10 +236,13 @@ class StateHistoryChartTimeline extends LocalizeMixin(PolymerElement) {
|
||||
major: {
|
||||
fontStyle: "bold",
|
||||
},
|
||||
autoSkipPadding: 50,
|
||||
},
|
||||
categoryPercentage: undefined,
|
||||
barPercentage: undefined,
|
||||
time: { format: undefined },
|
||||
time: {
|
||||
format: undefined,
|
||||
},
|
||||
},
|
||||
],
|
||||
yAxes: [
|
||||
|
@ -1,4 +1,5 @@
|
||||
import { clear, get, set, createStore } from "idb-keyval";
|
||||
import { clear, get, set, createStore, promisifyRequest } from "idb-keyval";
|
||||
import { promiseTimeout } from "../common/util/promise-timeout";
|
||||
import { iconMetadata } from "../resources/icon-metadata";
|
||||
import { IconMeta } from "../types";
|
||||
|
||||
@ -14,33 +15,34 @@ export const iconStore = createStore("hass-icon-db", "mdi-icon-store");
|
||||
|
||||
export const MDI_PREFIXES = ["mdi", "hass", "hassio", "hademo"];
|
||||
|
||||
let toRead: Array<[string, (iconPath: string) => void, () => void]> = [];
|
||||
let toRead: Array<
|
||||
[string, (iconPath: string | undefined) => void, (e: any) => void]
|
||||
> = [];
|
||||
|
||||
// Queue up as many icon fetches in 1 transaction
|
||||
export const getIcon = (iconName: string) =>
|
||||
new Promise<string>((resolve, reject) => {
|
||||
new Promise<string | undefined>((resolve, reject) => {
|
||||
toRead.push([iconName, resolve, reject]);
|
||||
|
||||
if (toRead.length > 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
const results: Array<[(iconPath: string) => void, IDBRequest]> = [];
|
||||
|
||||
iconStore("readonly", (store) => {
|
||||
for (const [iconName_, resolve_] of toRead) {
|
||||
results.push([resolve_, store.get(iconName_)]);
|
||||
}
|
||||
})
|
||||
.then(() => {
|
||||
for (const [resolve_, request] of results) {
|
||||
resolve_(request.result);
|
||||
promiseTimeout(
|
||||
1000,
|
||||
iconStore("readonly", (store) => {
|
||||
for (const [iconName_, resolve_, reject_] of toRead) {
|
||||
promisifyRequest<string | undefined>(store.get(iconName_))
|
||||
.then((icon) => resolve_(icon))
|
||||
.catch((e) => reject_(e));
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
)
|
||||
.catch((e) => {
|
||||
// Firefox in private mode doesn't support IDB
|
||||
// Safari sometime doesn't open the DB so we time out
|
||||
for (const [, , reject_] of toRead) {
|
||||
reject_();
|
||||
reject_(e);
|
||||
}
|
||||
})
|
||||
.finally(() => {
|
||||
|
@ -277,7 +277,7 @@ export const provideHass = (
|
||||
mockTheme(theme) {
|
||||
invalidateThemeCache();
|
||||
hass().updateHass({
|
||||
selectedThemeSettings: { theme: theme ? "mock" : "default" },
|
||||
selectedTheme: { theme: theme ? "mock" : "default" },
|
||||
themes: {
|
||||
...hass().themes,
|
||||
themes: {
|
||||
@ -285,11 +285,11 @@ export const provideHass = (
|
||||
},
|
||||
},
|
||||
});
|
||||
const { themes, selectedThemeSettings } = hass();
|
||||
const { themes, selectedTheme } = hass();
|
||||
applyThemesOnElement(
|
||||
document.documentElement,
|
||||
themes,
|
||||
selectedThemeSettings!.theme
|
||||
selectedTheme!.theme
|
||||
);
|
||||
},
|
||||
|
||||
|
@ -81,27 +81,25 @@ class SupervisorErrorScreen extends LitElement {
|
||||
|
||||
private _applyTheme() {
|
||||
let themeName: string;
|
||||
let themeSettings:
|
||||
| Partial<HomeAssistant["selectedThemeSettings"]>
|
||||
| undefined;
|
||||
let themeSettings: Partial<HomeAssistant["selectedTheme"]> | undefined;
|
||||
|
||||
if (atLeastVersion(this.hass.config.version, 0, 114)) {
|
||||
themeName =
|
||||
this.hass.selectedThemeSettings?.theme ||
|
||||
this.hass.selectedTheme?.theme ||
|
||||
(this.hass.themes.darkMode && this.hass.themes.default_dark_theme
|
||||
? this.hass.themes.default_dark_theme!
|
||||
: this.hass.themes.default_theme);
|
||||
|
||||
themeSettings = this.hass.selectedThemeSettings;
|
||||
themeSettings = this.hass.selectedTheme;
|
||||
if (themeName === "default" && themeSettings?.dark === undefined) {
|
||||
themeSettings = {
|
||||
...this.hass.selectedThemeSettings,
|
||||
...this.hass.selectedTheme,
|
||||
dark: this.hass.themes.darkMode,
|
||||
};
|
||||
}
|
||||
} else {
|
||||
themeName =
|
||||
((this.hass.selectedThemeSettings as unknown) as string) ||
|
||||
((this.hass.selectedTheme as unknown) as string) ||
|
||||
this.hass.themes.default_theme;
|
||||
}
|
||||
|
||||
|
@ -152,7 +152,7 @@ export class HUIView extends ReactiveElement {
|
||||
changedProperties.has("hass") &&
|
||||
(!oldHass ||
|
||||
this.hass.themes !== oldHass.themes ||
|
||||
this.hass.selectedThemeSettings !== oldHass.selectedThemeSettings)
|
||||
this.hass.selectedTheme !== oldHass.selectedTheme)
|
||||
) {
|
||||
applyThemesOnElement(this, this.hass.themes, this._viewConfigTheme);
|
||||
}
|
||||
|
@ -41,9 +41,9 @@ export class HaPickThemeRow extends LitElement {
|
||||
const hasThemes =
|
||||
this.hass.themes.themes && Object.keys(this.hass.themes.themes).length;
|
||||
const curTheme =
|
||||
this.hass.selectedThemeSettings?.theme || this.hass.themes.default_theme;
|
||||
this.hass.selectedTheme?.theme || this.hass.themes.default_theme;
|
||||
|
||||
const themeSettings = this.hass.selectedThemeSettings;
|
||||
const themeSettings = this.hass.selectedTheme;
|
||||
|
||||
return html`
|
||||
<ha-settings-row .narrow=${this.narrow}>
|
||||
@ -162,8 +162,7 @@ export class HaPickThemeRow extends LitElement {
|
||||
(!oldHass || oldHass.themes.themes !== this.hass.themes.themes);
|
||||
const selectedThemeChanged =
|
||||
changedProperties.has("hass") &&
|
||||
(!oldHass ||
|
||||
oldHass.selectedThemeSettings !== this.hass.selectedThemeSettings);
|
||||
(!oldHass || oldHass.selectedTheme !== this.hass.selectedTheme);
|
||||
|
||||
if (themesChanged) {
|
||||
this._themeNames = ["Backend-selected", "default"].concat(
|
||||
@ -173,16 +172,16 @@ export class HaPickThemeRow extends LitElement {
|
||||
|
||||
if (selectedThemeChanged) {
|
||||
if (
|
||||
this.hass.selectedThemeSettings &&
|
||||
this._themeNames.indexOf(this.hass.selectedThemeSettings.theme) > 0
|
||||
this.hass.selectedTheme &&
|
||||
this._themeNames.indexOf(this.hass.selectedTheme.theme) > 0
|
||||
) {
|
||||
this._selectedThemeIndex = this._themeNames.indexOf(
|
||||
this.hass.selectedThemeSettings.theme
|
||||
this.hass.selectedTheme.theme
|
||||
);
|
||||
this._selectedTheme = this.hass.themes.themes[
|
||||
this.hass.selectedThemeSettings.theme
|
||||
this.hass.selectedTheme.theme
|
||||
];
|
||||
} else if (!this.hass.selectedThemeSettings) {
|
||||
} else if (!this.hass.selectedTheme) {
|
||||
this._selectedThemeIndex = 0;
|
||||
}
|
||||
}
|
||||
@ -220,7 +219,7 @@ export class HaPickThemeRow extends LitElement {
|
||||
private _handleThemeSelection(ev: CustomEvent) {
|
||||
const theme = ev.detail.item.theme;
|
||||
if (theme === "Backend-selected") {
|
||||
if (this.hass.selectedThemeSettings?.theme) {
|
||||
if (this.hass.selectedTheme?.theme) {
|
||||
fireEvent(this, "settheme", {
|
||||
theme: "",
|
||||
primaryColor: undefined,
|
||||
|
@ -39,7 +39,7 @@ export const connectionMixin = <T extends Constructor<HassBaseEl>>(
|
||||
states: null as any,
|
||||
config: null as any,
|
||||
themes: null as any,
|
||||
selectedThemeSettings: null,
|
||||
selectedTheme: null,
|
||||
panels: null as any,
|
||||
services: null as any,
|
||||
user: null as any,
|
||||
|
@ -11,10 +11,10 @@ import { HassBaseEl } from "./hass-base-mixin";
|
||||
declare global {
|
||||
// for add event listener
|
||||
interface HTMLElementEventMap {
|
||||
settheme: HASSDomEvent<Partial<HomeAssistant["selectedThemeSettings"]>>;
|
||||
settheme: HASSDomEvent<Partial<HomeAssistant["selectedTheme"]>>;
|
||||
}
|
||||
interface HASSDomEvents {
|
||||
settheme: Partial<HomeAssistant["selectedThemeSettings"]>;
|
||||
settheme: Partial<HomeAssistant["selectedTheme"]>;
|
||||
}
|
||||
}
|
||||
|
||||
@ -28,8 +28,8 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
|
||||
super.firstUpdated(changedProps);
|
||||
this.addEventListener("settheme", (ev) => {
|
||||
this._updateHass({
|
||||
selectedThemeSettings: {
|
||||
...this.hass!.selectedThemeSettings!,
|
||||
selectedTheme: {
|
||||
...this.hass!.selectedTheme!,
|
||||
...ev.detail,
|
||||
},
|
||||
});
|
||||
@ -68,8 +68,8 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
|
||||
return;
|
||||
}
|
||||
|
||||
let themeSettings: Partial<HomeAssistant["selectedThemeSettings"]> = this
|
||||
.hass!.selectedThemeSettings;
|
||||
let themeSettings: Partial<HomeAssistant["selectedTheme"]> = this.hass!
|
||||
.selectedTheme;
|
||||
|
||||
const themeName =
|
||||
themeSettings?.theme ||
|
||||
@ -89,7 +89,7 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
|
||||
darkMode = false;
|
||||
}
|
||||
|
||||
themeSettings = { ...this.hass.selectedThemeSettings, dark: darkMode };
|
||||
themeSettings = { ...this.hass.selectedTheme, dark: darkMode };
|
||||
|
||||
applyThemesOnElement(
|
||||
document.documentElement,
|
||||
|
@ -194,7 +194,7 @@ export interface HomeAssistant {
|
||||
services: HassServices;
|
||||
config: HassConfig;
|
||||
themes: Themes;
|
||||
selectedThemeSettings: ThemeSettings | null;
|
||||
selectedTheme: ThemeSettings | null;
|
||||
panels: Panels;
|
||||
panelUrl: string;
|
||||
// i18n
|
||||
|
@ -2,16 +2,13 @@ import { HomeAssistant } from "../types";
|
||||
|
||||
const STORED_STATE = [
|
||||
"dockedSidebar",
|
||||
"selectedThemeSettings",
|
||||
"selectedTheme",
|
||||
"selectedLanguage",
|
||||
"vibrate",
|
||||
"suspendWhenHidden",
|
||||
"enableShortcuts",
|
||||
"defaultPanel",
|
||||
];
|
||||
// Deprecated states will be loaded once so that the values can be migrated to other states if required,
|
||||
// but during the next state storing, the deprecated keys will be removed.
|
||||
const STORED_STATE_DEPRECATED = ["selectedTheme"];
|
||||
const STORAGE = window.localStorage || {};
|
||||
|
||||
export function storeState(hass: HomeAssistant) {
|
||||
@ -20,9 +17,6 @@ export function storeState(hass: HomeAssistant) {
|
||||
const value = hass[key];
|
||||
STORAGE[key] = JSON.stringify(value === undefined ? null : value);
|
||||
});
|
||||
STORED_STATE_DEPRECATED.forEach((key) => {
|
||||
if (key in STORAGE) delete STORAGE[key];
|
||||
});
|
||||
} catch (err) {
|
||||
// Safari throws exception in private mode
|
||||
}
|
||||
@ -31,17 +25,13 @@ export function storeState(hass: HomeAssistant) {
|
||||
export function getState() {
|
||||
const state = {};
|
||||
|
||||
STORED_STATE.concat(STORED_STATE_DEPRECATED).forEach((key) => {
|
||||
STORED_STATE.forEach((key) => {
|
||||
if (key in STORAGE) {
|
||||
let value = JSON.parse(STORAGE[key]);
|
||||
// selectedTheme went from string to object on 20200718
|
||||
if (key === "selectedTheme" && typeof value === "string") {
|
||||
value = { theme: value };
|
||||
}
|
||||
// selectedTheme was renamed to selectedThemeSettings on 20210207
|
||||
if (key === "selectedTheme") {
|
||||
key = "selectedThemeSettings";
|
||||
}
|
||||
// dockedSidebar went from boolean to enum on 20190720
|
||||
if (key === "dockedSidebar" && typeof value === "boolean") {
|
||||
value = value ? "docked" : "auto";
|
||||
|
@ -101,6 +101,7 @@ hassAttributeUtil.LOGIC_STATE_ATTRIBUTES = {
|
||||
supported_features: undefined,
|
||||
attribution: undefined,
|
||||
restored: undefined,
|
||||
editable: undefined,
|
||||
custom_ui_more_info: { type: "string" },
|
||||
custom_ui_state_card: { type: "string" },
|
||||
device_class: {
|
||||
@ -109,6 +110,13 @@ hassAttributeUtil.LOGIC_STATE_ATTRIBUTES = {
|
||||
description: "Device class",
|
||||
domains: ["binary_sensor", "cover", "humidifier", "sensor", "switch"],
|
||||
},
|
||||
state_class: {
|
||||
type: "array",
|
||||
options: { sensor: ["measurement"] },
|
||||
description: "State class",
|
||||
domains: ["sensor"],
|
||||
},
|
||||
last_reset: undefined,
|
||||
assumed_state: {
|
||||
type: "boolean",
|
||||
domains: [
|
||||
|
@ -292,7 +292,7 @@
|
||||
"save": "Desa",
|
||||
"show_more": "Mostra més informació al respecte",
|
||||
"update": "Actualitza",
|
||||
"update_available": "{count, plural,\n one {Actualització pendent}\n other {{count} Actualitzacions pendents}\n}",
|
||||
"update_available": "{count, plural,\n one {Actualització pendent}\n other {{count} actualitzacions pendents}\n}",
|
||||
"version": "Versió",
|
||||
"yes": "Sí"
|
||||
},
|
||||
@ -314,7 +314,7 @@
|
||||
"addon_new_version": "Nova versió disponible",
|
||||
"addon_running": "El complement s'està executant",
|
||||
"addon_stopped": "El complement està aturat",
|
||||
"addons": "Complements",
|
||||
"addons": "Complements instal·lats",
|
||||
"no_addons": "Encara no tens cap complement instal·lat. Vés al directori de complements per començar!"
|
||||
},
|
||||
"dialog": {
|
||||
@ -396,14 +396,15 @@
|
||||
},
|
||||
"folders": "Carpetes",
|
||||
"full_snapshot": "Instantània completa",
|
||||
"name": "Nom",
|
||||
"name": "Nom de la instantània",
|
||||
"no_snapshots": "Encara no tens instantànies.",
|
||||
"partial_snapshot": "Instantània parcial",
|
||||
"password": "Contrasenya",
|
||||
"password": "Contrasenya de la instantània",
|
||||
"password_protected": "protegit amb contrasenya",
|
||||
"password_protection": "Protecció amb contrasenya",
|
||||
"security": "Seguretat",
|
||||
"type": "Tipus",
|
||||
"select_type": "Selecciona què vols restaurar",
|
||||
"type": "Tipus d'instantània",
|
||||
"upload_snapshot": "Puja instantània"
|
||||
},
|
||||
"store": {
|
||||
@ -720,6 +721,9 @@
|
||||
"no_match": "No s'han trobat àrees coincidents",
|
||||
"show_areas": "Mostra àrees"
|
||||
},
|
||||
"attributes": {
|
||||
"expansion_header": "Atributs"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
"add_user": "Afegeix usuari",
|
||||
"remove_user": "Elimina usuari",
|
||||
@ -1719,6 +1723,7 @@
|
||||
"title": "Alexa"
|
||||
},
|
||||
"connected": "Connectat",
|
||||
"connecting": "Connectant...",
|
||||
"connection_status": "Estat de connexió amb Cloud",
|
||||
"fetching_subscription": "Obtenint subscripció...",
|
||||
"google": {
|
||||
@ -2959,6 +2964,7 @@
|
||||
},
|
||||
"logs": {
|
||||
"log_level": "Nivell dels registres",
|
||||
"log_level_changed": "Nivell de registre canviat a: {level}",
|
||||
"subscribed_to_logs": "Subscrit a missatges de registre Z-Wave JS...",
|
||||
"title": "Registres de Z-Wave JS"
|
||||
},
|
||||
|
@ -292,7 +292,7 @@
|
||||
"save": "Uložit",
|
||||
"show_more": "Zobrazit o tom více informací",
|
||||
"update": "Aktualizovat",
|
||||
"update_available": "{count, plural,\n one {Aktualizace}\n few {{count} aktualizace}\n other {{count} aktualizací}\n}",
|
||||
"update_available": "{count, plural,\n one {Čekající aktualizace}\n few {{count} čekající aktualizace}\n other {{count} čekajících aktualizací}\n}",
|
||||
"version": "Verze",
|
||||
"yes": "Ano"
|
||||
},
|
||||
@ -314,7 +314,7 @@
|
||||
"addon_new_version": "K dispozici je nová verze",
|
||||
"addon_running": "Doplněk je spuštěn",
|
||||
"addon_stopped": "Doplněk je zastaven",
|
||||
"addons": "Doplňky",
|
||||
"addons": "Nainstalované doplňky",
|
||||
"no_addons": "Zatím nemáte nainstalované žádné doplňky. Chcete-li začít, přejděte do obchodu s doplňky."
|
||||
},
|
||||
"dialog": {
|
||||
@ -396,14 +396,15 @@
|
||||
},
|
||||
"folders": "Složky",
|
||||
"full_snapshot": "Úplná záloha",
|
||||
"name": "Název",
|
||||
"name": "Název zálohy",
|
||||
"no_snapshots": "Zatím nemáte žádné zálohy.",
|
||||
"partial_snapshot": "Částečná záloha",
|
||||
"password": "Heslo",
|
||||
"password": "Heslo zálohy",
|
||||
"password_protected": "chráněno heslem",
|
||||
"password_protection": "Ochrana heslem",
|
||||
"security": "Zabezpečení",
|
||||
"type": "Typ",
|
||||
"select_type": "Vyberte, co chcete obnovit",
|
||||
"type": "Typ zálohy",
|
||||
"upload_snapshot": "Nahrát zálohu"
|
||||
},
|
||||
"store": {
|
||||
@ -720,6 +721,9 @@
|
||||
"no_match": "Nebyly nalezeny žádné odpovídající oblasti",
|
||||
"show_areas": "Zobrazit oblasti"
|
||||
},
|
||||
"attributes": {
|
||||
"expansion_header": "Atributy"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
"add_user": "Přidat uživatele",
|
||||
"remove_user": "Odebrat uživatele",
|
||||
@ -1719,6 +1723,7 @@
|
||||
"title": "Alexa"
|
||||
},
|
||||
"connected": "Připojeno",
|
||||
"connecting": "Připojování...",
|
||||
"connection_status": "Stav cloudového připojení",
|
||||
"fetching_subscription": "Načítání předplatného ...",
|
||||
"google": {
|
||||
@ -2956,6 +2961,7 @@
|
||||
},
|
||||
"logs": {
|
||||
"log_level": "Úroveň protokolu",
|
||||
"log_level_changed": "Úroveň protokolu změněna na: {level}",
|
||||
"title": "Z-Wave JS protokoly"
|
||||
},
|
||||
"navigation": {
|
||||
|
@ -45,6 +45,7 @@
|
||||
"away": "بیرون",
|
||||
"boost": "افزایش",
|
||||
"comfort": "آسایش",
|
||||
"eco": "اکو",
|
||||
"home": "خانه",
|
||||
"none": "هیچ کدام",
|
||||
"sleep": "خواب"
|
||||
@ -100,6 +101,27 @@
|
||||
}
|
||||
},
|
||||
"supervisor": {
|
||||
"addon": {
|
||||
"configuration": {
|
||||
"audio": {
|
||||
"default": "پیش فرض",
|
||||
"header": "صوتی",
|
||||
"input": "ورودی",
|
||||
"output": "خروجی"
|
||||
},
|
||||
"network": {
|
||||
"disabled": "غیر فعال",
|
||||
"header": "شبکه",
|
||||
"host": "میزبان"
|
||||
},
|
||||
"options": {
|
||||
"edit_in_ui": "ویرایش در رابط کاربری",
|
||||
"edit_in_yaml": "ویرایش در YAML",
|
||||
"header": "تنظیمات",
|
||||
"show_unused_optional": "گزینه های پیکربندی اختیاری استفاده نشده را نشان دهید"
|
||||
}
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
"close": "بستن"
|
||||
}
|
||||
|
@ -403,6 +403,7 @@
|
||||
"password_protected": "비밀번호로 보호됨",
|
||||
"password_protection": "비밀번호 보호",
|
||||
"security": "보안",
|
||||
"select_type": "복원 할 항목 선택",
|
||||
"type": "유형",
|
||||
"upload_snapshot": "스냅숏 올리기"
|
||||
},
|
||||
@ -720,6 +721,9 @@
|
||||
"no_match": "일치하는 영역을 찾을 수 없습니다",
|
||||
"show_areas": "영역 표시하기"
|
||||
},
|
||||
"attributes": {
|
||||
"expansion_header": "속성"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
"add_user": "사용자 추가하기",
|
||||
"remove_user": "사용자 제거하기",
|
||||
@ -1719,6 +1723,7 @@
|
||||
"title": "Alexa"
|
||||
},
|
||||
"connected": "연결됨",
|
||||
"connecting": "연결 중 ...",
|
||||
"connection_status": "클라우드 연결 상태",
|
||||
"fetching_subscription": "구독 정보를 가져오는 중…",
|
||||
"google": {
|
||||
@ -2959,6 +2964,7 @@
|
||||
},
|
||||
"logs": {
|
||||
"log_level": "로그 레벨",
|
||||
"log_level_changed": "로그 레벨이 변경되었습니다: {level}",
|
||||
"subscribed_to_logs": "Z-Wave JS 로그 메시지 수신 ...",
|
||||
"title": "Z-Wave JS 로그"
|
||||
},
|
||||
|
@ -314,7 +314,7 @@
|
||||
"addon_new_version": "Nieuwe versie beschikbaar",
|
||||
"addon_running": "Add-on wordt uitgevoerd",
|
||||
"addon_stopped": "Add-on is gestopt",
|
||||
"addons": "Add-ons",
|
||||
"addons": "Geïnstalleerde add-ons",
|
||||
"no_addons": "Je hebt nog geen add-ons geïnstalleerd. Ga naar de add-on store om te beginnen!"
|
||||
},
|
||||
"dialog": {
|
||||
@ -396,14 +396,15 @@
|
||||
},
|
||||
"folders": "Mappen",
|
||||
"full_snapshot": "Volledige snapshot",
|
||||
"name": "Naam",
|
||||
"name": "Snapshot naam",
|
||||
"no_snapshots": "Je hebt nog geen snapshots.",
|
||||
"partial_snapshot": "Gedeeltelijke snapshot",
|
||||
"password": "Wachtwoord",
|
||||
"password": "Snapshot wachtwoord",
|
||||
"password_protected": "beveiligd met wachtwoord",
|
||||
"password_protection": "Wachtwoord bescherming",
|
||||
"security": "Beveiliging",
|
||||
"type": "Type",
|
||||
"select_type": "Selecteer wat u wilt herstellen",
|
||||
"type": "Snapshot type",
|
||||
"upload_snapshot": "Upload snapshot"
|
||||
},
|
||||
"store": {
|
||||
@ -720,6 +721,9 @@
|
||||
"no_match": "Geen overeenkomende gebieden gevonden",
|
||||
"show_areas": "Toon gebieden"
|
||||
},
|
||||
"attributes": {
|
||||
"expansion_header": "Attributen"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
"add_user": "Gebruiker toevoegen",
|
||||
"remove_user": "Gebruiker verwijderen",
|
||||
@ -1719,6 +1723,7 @@
|
||||
"title": "Alexa"
|
||||
},
|
||||
"connected": "Verbonden",
|
||||
"connecting": "Verbinden...",
|
||||
"connection_status": "Cloud verbindingsstatus",
|
||||
"fetching_subscription": "Abonnement ophalen...",
|
||||
"google": {
|
||||
@ -2959,6 +2964,7 @@
|
||||
},
|
||||
"logs": {
|
||||
"log_level": "Log niveau",
|
||||
"log_level_changed": "Logboekniveau gewijzigd in: {level}",
|
||||
"subscribed_to_logs": "Geabonneerd op Z-Wave JS log berichten ...",
|
||||
"title": "Z-Wave JS Logs"
|
||||
},
|
||||
|
@ -396,14 +396,15 @@
|
||||
},
|
||||
"folders": "Foldery",
|
||||
"full_snapshot": "Pełny snapshot",
|
||||
"name": "Nazwa",
|
||||
"name": "Nazwa snapshota",
|
||||
"no_snapshots": "Nie masz jeszcze żadnych snapshotów.",
|
||||
"partial_snapshot": "Częściowy snapshot",
|
||||
"password": "Hasło",
|
||||
"password": "Hasło snapshota",
|
||||
"password_protected": "chroniony hasłem",
|
||||
"password_protection": "Ochrona hasłem",
|
||||
"security": "Bezpieczeństwo",
|
||||
"type": "Typ",
|
||||
"select_type": "Wybierz, co przywrócić",
|
||||
"type": "Typ snapshota",
|
||||
"upload_snapshot": "Prześlij snapshota"
|
||||
},
|
||||
"store": {
|
||||
@ -1722,6 +1723,7 @@
|
||||
"title": "Alexa"
|
||||
},
|
||||
"connected": "połączono",
|
||||
"connecting": "Łączenie...",
|
||||
"connection_status": "Status połączenia z chmurą",
|
||||
"fetching_subscription": "Pobieranie subskrypcji…",
|
||||
"google": {
|
||||
@ -2962,6 +2964,7 @@
|
||||
},
|
||||
"logs": {
|
||||
"log_level": "Poziom loga",
|
||||
"log_level_changed": "Poziom dziennika zmieniony na: {level}",
|
||||
"subscribed_to_logs": "Zasubskrybowano komunikaty dziennika Z-Wave JS...",
|
||||
"title": "Logi Z-Wave JS"
|
||||
},
|
||||
|
@ -112,8 +112,10 @@
|
||||
"output": "Saída"
|
||||
},
|
||||
"network": {
|
||||
"container": "Container",
|
||||
"disabled": "Desativado",
|
||||
"header": "Rede"
|
||||
"header": "Rede",
|
||||
"host": "Servidor"
|
||||
},
|
||||
"options": {
|
||||
"edit_in_ui": "Editar em UI",
|
||||
@ -148,7 +150,14 @@
|
||||
"title": "Acesso completo ao hardware"
|
||||
},
|
||||
"hassio_api": {
|
||||
"description": "O suplemento tem acesso à API do Supervisor, a pedido do autor do complemento. Por defeito, o complemento pode aceder à informação da versão do seu sistema. Quando o complemento solicita acesso de nível 'gestor' ou 'administrador' à API, obterá acesso para controlar múltiplas partes do seu sistema Home Assistant. Esta permissão é indicada por este crachá e terá um impacto negativo na pontuação de segurança do complemento."
|
||||
"description": "O suplemento tem acesso à API do Supervisor, a pedido do autor do complemento. Por defeito, o complemento pode aceder à informação da versão do seu sistema. Quando o complemento solicita acesso de nível 'gestor' ou 'administrador' à API, obterá acesso para controlar múltiplas partes do seu sistema Home Assistant. Esta permissão é indicada por este crachá e terá um impacto negativo na pontuação de segurança do complemento.",
|
||||
"title": "Acesso à API supervisor"
|
||||
},
|
||||
"homeassistant_api": {
|
||||
"title": "Acesso à API do Home Assistant"
|
||||
},
|
||||
"host_network": {
|
||||
"title": "Rede do Servidor"
|
||||
},
|
||||
"ingress": {
|
||||
"title": "Ingress"
|
||||
@ -179,8 +188,10 @@
|
||||
},
|
||||
"changelog": "Changelog",
|
||||
"cpu_usage": "Utilização de CPU do add-on",
|
||||
"hostname": "Nome do servidor",
|
||||
"install": "Instalar",
|
||||
"new_update_available": "{name} {version} está disponível",
|
||||
"not_available_arch": "Este add-on não é compatível com o processador ou sistema operativo do seu dispositivo.",
|
||||
"not_available_version": "Está a executar o Home Assistant {core_version_installed}, para actualizar esta versão do add-on necessita pelo menos da versão {core_version_needed} do Home Assistant",
|
||||
"open_web_ui": "Abrir o interface web",
|
||||
"option": {
|
||||
@ -210,6 +221,7 @@
|
||||
"title": "Aviso: o modo de proteção está desativado!"
|
||||
},
|
||||
"ram_usage": "Utilização de RAM do add-on",
|
||||
"rebuild": "reconstruir",
|
||||
"restart": "Reiniciar",
|
||||
"start": "Iniciar",
|
||||
"stop": "Parar",
|
||||
@ -334,6 +346,7 @@
|
||||
},
|
||||
"my": {
|
||||
"error": "Ocorreu um erro desconhecido",
|
||||
"error_addon_no_ingress": "O add-on solicitado não suporta Ingress",
|
||||
"error_addon_not_found": "Add-on não encontrado",
|
||||
"not_supported": "Este redirecionamento não é suportado pela sua instância Início Assistant. Verifique o {link} para os redirecionamentos suportados e a versão em que foram introduzidos."
|
||||
},
|
||||
@ -369,6 +382,7 @@
|
||||
"password_protected": "Protegido por Palavra-passe",
|
||||
"password_protection": "Proteção por palavra-passe",
|
||||
"security": "Segurança",
|
||||
"select_type": "Selecione o que restaurar",
|
||||
"type": "Tipo",
|
||||
"upload_snapshot": "Upload snapshot"
|
||||
},
|
||||
@ -529,8 +543,11 @@
|
||||
},
|
||||
"light": {
|
||||
"brightness": "Brilho",
|
||||
"cold_white_value": "Brilho branco frio",
|
||||
"color_brightness": "Brilho",
|
||||
"color_temperature": "Temperatura de cor",
|
||||
"effect": "Efeito",
|
||||
"warm_white_value": "Brilho branco quente",
|
||||
"white_value": "Brilho"
|
||||
},
|
||||
"lock": {
|
||||
@ -657,6 +674,10 @@
|
||||
"addon-picker": {
|
||||
"addon": "Add-on",
|
||||
"error": {
|
||||
"fetch_addons": {
|
||||
"description": "A busca de add-ons retornou um erro.",
|
||||
"title": "Erro ao obter add-ons."
|
||||
},
|
||||
"no_supervisor": {
|
||||
"title": "Sem Supervisor"
|
||||
}
|
||||
@ -677,6 +698,9 @@
|
||||
"no_match": "Nenhuma área correspondente encontrada",
|
||||
"show_areas": "Mostrar áreas"
|
||||
},
|
||||
"attributes": {
|
||||
"expansion_header": "Atributos"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
"add_user": "Adicionar um utilizador",
|
||||
"remove_user": "Remover utilizador",
|
||||
@ -803,6 +827,13 @@
|
||||
"label": "Imagem",
|
||||
"unsupported_format": "Formato não suportado, por favor escolha uma imagem JPEG, PNG ou GIF."
|
||||
},
|
||||
"related-filter-menu": {
|
||||
"filter_by_area": "Filtrar por área",
|
||||
"filter_by_device": "Filtrar por dispositivo",
|
||||
"filter_by_entity": "Filtrar por entidade",
|
||||
"filtered_by_area": "área: {area_name}",
|
||||
"filtered_by_device": "dispositivo: {device_name}"
|
||||
},
|
||||
"related-items": {
|
||||
"area": "Área",
|
||||
"automation": "Parte das seguintes automações",
|
||||
@ -840,6 +871,7 @@
|
||||
}
|
||||
},
|
||||
"service-control": {
|
||||
"integration_doc": "Documentação da integração",
|
||||
"required": "Este campo é obrigatório",
|
||||
"service_data": "Dados do serviço",
|
||||
"target": "Alvos",
|
||||
@ -1150,8 +1182,11 @@
|
||||
"bind_header": "Associação",
|
||||
"button_hide": "Ocultar detalhes",
|
||||
"button_show": "Mostrar Detalhes",
|
||||
"cluster_header": "Grupo",
|
||||
"configuration_complete": "Reconfiguração do dispositivo concluída.",
|
||||
"configuring_alt": "A configurar",
|
||||
"min_max_change": "min/max/alterar",
|
||||
"reporting_header": "Relatórios",
|
||||
"start_reconfiguration": "Iniciar reconfiguração"
|
||||
}
|
||||
},
|
||||
@ -1643,6 +1678,7 @@
|
||||
"title": "Alexa"
|
||||
},
|
||||
"connected": "Ligado",
|
||||
"connecting": "A conectar...",
|
||||
"connection_status": "Estado da ligação na cloud",
|
||||
"fetching_subscription": "A buscar assinatura...",
|
||||
"google": {
|
||||
@ -2009,6 +2045,9 @@
|
||||
"filtering_by": "A filtrar por",
|
||||
"show": "Mostrar"
|
||||
},
|
||||
"hassio": {
|
||||
"button": "Configurar"
|
||||
},
|
||||
"header": "Configurar o Home Assistant",
|
||||
"helpers": {
|
||||
"caption": "Auxiliares",
|
||||
@ -2099,10 +2138,12 @@
|
||||
"entity_unavailable": "Entidade indisponível",
|
||||
"firmware": "Firmware: {version}",
|
||||
"hub": "Conectado via",
|
||||
"logs": "Logs",
|
||||
"manuf": "por {manufacturer}",
|
||||
"no_area": "Nenhuma Área",
|
||||
"not_loaded": "Não carregado",
|
||||
"options": "Opções",
|
||||
"provided_by_custom_integration": "Fornecido por uma integração personalizada",
|
||||
"reload": "Recarregar",
|
||||
"reload_confirm": "A integração foi recarregada",
|
||||
"reload_restart_confirm": "Reinicie o Home Assistant para terminar de carregar esta integração",
|
||||
@ -2113,7 +2154,8 @@
|
||||
"loaded": "Carregado",
|
||||
"migration_error": "Erro de migração",
|
||||
"not_loaded": "Não carregado",
|
||||
"setup_error": "Erro ao inicializar"
|
||||
"setup_error": "Erro ao inicializar",
|
||||
"setup_retry": "A repetir a configuração"
|
||||
},
|
||||
"system_options": "Opções do sistema",
|
||||
"unnamed_entry": "Entrada sem nome"
|
||||
@ -2134,6 +2176,9 @@
|
||||
"loading_first_time": "Por favor, aguarde enquanto a integração está a ser instalada",
|
||||
"next": "Próximo",
|
||||
"not_all_required_fields": "Nem todos os campos obrigatórios estão preenchidos.",
|
||||
"pick_flow_step": {
|
||||
"title": "Descobrimos estes, quer configurá-los?"
|
||||
},
|
||||
"submit": "Enviar"
|
||||
},
|
||||
"configure": "Configurar",
|
||||
@ -2180,6 +2225,13 @@
|
||||
"clear": "Limpar",
|
||||
"description": "Ver os registos do Home Assistant",
|
||||
"details": "Detalhes do log ( {level} )",
|
||||
"level": {
|
||||
"critical": "CRÍTICO",
|
||||
"debug": "DEPURAR",
|
||||
"error": "ERRO",
|
||||
"info": "INFO",
|
||||
"warning": "AVISO"
|
||||
},
|
||||
"load_full_log": "Carregar log completo do Home Assistant",
|
||||
"loading_log": "A carregar o log de erros...",
|
||||
"multiple_messages": "mensagem ocorreu primeiro em {time} e repetiu-se {counter} vezes",
|
||||
@ -2691,6 +2743,12 @@
|
||||
"manufacturer_code_override": "Substituição do código do fabricante",
|
||||
"value": "Valor"
|
||||
},
|
||||
"configuration_page": {
|
||||
"shortcuts_title": "Atalhos",
|
||||
"zha_options": {
|
||||
"title": "Opções Globais"
|
||||
}
|
||||
},
|
||||
"device_pairing_card": {
|
||||
"CONFIGURED": "Configuração Completa",
|
||||
"CONFIGURED_status_text": "A inicializar",
|
||||
@ -2778,6 +2836,7 @@
|
||||
"follow_device_instructions": "Siga as instruções do seu dispositivo para ativar o modo de emparelhamento",
|
||||
"inclusion_failed": "Não foi possível adicionar o nó. Por favor verifique os logs para mais informações.",
|
||||
"inclusion_finished": "O nó foi adicionado. Poderá demorar alguns minutos para que todas as entidades fiquem disponiveis, enquanto terminamos a configuração do nó em segundo plano.",
|
||||
"interview_failed": "A consulta do dispositivo falhou. Informações adicionais podem estar disponíveis nos logs.",
|
||||
"introduction": "Este assistente irá guiá-lo para adicionar um nó à sua rede Z-Wave.",
|
||||
"secure_inclusion_warning": "Dispositivos seguros requerem mais largura de banda; demasiados dispositivos seguros podem diminuir a performance da rede Z-Wave. Recomendamos que apenas sejam adicionados dispositivos seguros estritamente necessários, como fechaduras e aberturas de garagem.",
|
||||
"start_inclusion": "Iniciar Inclusão",
|
||||
@ -2814,6 +2873,8 @@
|
||||
},
|
||||
"logs": {
|
||||
"log_level": "Nível de log",
|
||||
"log_level_changed": "Nível de log alterado para: {level}",
|
||||
"subscribed_to_logs": "Inscrito em mensagens de log do Z-Wave JS...",
|
||||
"title": "Z-Wave JS Logs"
|
||||
},
|
||||
"navigation": {
|
||||
@ -2827,7 +2888,10 @@
|
||||
},
|
||||
"node_config": {
|
||||
"error_device_not_found": "Dispositivo não encontrado",
|
||||
"parameter_is_read_only": "Este parâmetro é apenas de leitura."
|
||||
"parameter_is_read_only": "Este parâmetro é apenas de leitura.",
|
||||
"set_param_accepted": "O parâmetro foi atualizado.",
|
||||
"set_param_error": "Ocorreu um erro.",
|
||||
"set_param_queued": "A alteração do parâmetro foi colocada na fila e será atualizada quando o dispositivo for ativado."
|
||||
},
|
||||
"node_status": {
|
||||
"alive": "Ativo",
|
||||
@ -2836,6 +2900,12 @@
|
||||
"dead": "Inativo",
|
||||
"unknown": "Desconhecido"
|
||||
},
|
||||
"reinterview_node": {
|
||||
"in_progress": "A consultar dispositivo. Isto pode demorar algum tempo.",
|
||||
"interview_complete": "Consulta do dispositivo concluída.",
|
||||
"interview_failed": "A consulta do dispositivo falhou. Informações adicionais podem estar disponíveis nos logs.",
|
||||
"start_reinterview": "Iniciar nova consulta"
|
||||
},
|
||||
"remove_node": {
|
||||
"cancel_exclusion": "Cancelar Exclusão",
|
||||
"controller_in_exclusion_mode": "O seu controlador Z-Wave está agora em modo de exclusão.",
|
||||
@ -3666,6 +3736,9 @@
|
||||
}
|
||||
},
|
||||
"page-onboarding": {
|
||||
"analytics": {
|
||||
"finish": "Próximo"
|
||||
},
|
||||
"core-config": {
|
||||
"button_detect": "Detetar",
|
||||
"finish": "Próxima",
|
||||
@ -3675,12 +3748,14 @@
|
||||
"location_name": "Nome da instalação do Home Assistant",
|
||||
"location_name_default": "Início"
|
||||
},
|
||||
"finish": "Terminar",
|
||||
"integration": {
|
||||
"finish": "Terminar",
|
||||
"intro": "Dispositivos e serviços são representados no Home Assistant como integrações. Pode configurá-los agora ou fazê-lo mais tarde no ecrã de configuração.",
|
||||
"more_integrations": "Mais"
|
||||
},
|
||||
"intro": "Está pronto para despertar a sua casa, reclamar a sua privacidade e juntar-se a uma comunidade mundial de tecnólogos?",
|
||||
"next": "Próximo",
|
||||
"restore": {
|
||||
"description": "Em alternativa, pode restaurar a partir de um snapshot anterior.",
|
||||
"hide_log": "Ocultar log completo",
|
||||
@ -3825,6 +3900,17 @@
|
||||
"primary_color": "Cor primária",
|
||||
"reset": "Redefinir"
|
||||
},
|
||||
"time_format": {
|
||||
"description": "Escolha como os horários são formatados.",
|
||||
"dropdown_label": "Formato de hora",
|
||||
"formats": {
|
||||
"12": "12 horas (AM/PM)",
|
||||
"24": "24 horas",
|
||||
"language": "Auto (usar configuração de idioma)",
|
||||
"system": "Utilizar o formato do sistema"
|
||||
},
|
||||
"header": "Formato de hora"
|
||||
},
|
||||
"vibrate": {
|
||||
"description": "Ative ou desative a vibração neste dispositivo ao controlar dispositivos.",
|
||||
"header": "Vibrar"
|
||||
|
@ -383,7 +383,7 @@
|
||||
"could_not_create": "Не удалось создать снимок",
|
||||
"create": "Создать",
|
||||
"create_blocked_not_running": "Создание снимка сейчас невозможно, потому что система находится в состоянии {state}.",
|
||||
"create_snapshot": "Снимки файловой системы",
|
||||
"create_snapshot": "Создать снимок",
|
||||
"created": "Создан",
|
||||
"description": "Снимок файловой системы (snapshot) позволяет легко создавать и восстанавливать резервную копию всех данных Вашего Home Assistant.",
|
||||
"enter_password": "Пожалуйста, введите пароль.",
|
||||
|
@ -396,14 +396,15 @@
|
||||
},
|
||||
"folders": "資料夾",
|
||||
"full_snapshot": "全系統備份",
|
||||
"name": "名稱",
|
||||
"name": "系統備份名稱",
|
||||
"no_snapshots": "目前沒有任何系統備份",
|
||||
"partial_snapshot": "部分系統備份",
|
||||
"password": "密碼",
|
||||
"password": "系統備份密碼",
|
||||
"password_protected": "密碼保護未顯示",
|
||||
"password_protection": "密碼保護",
|
||||
"security": "加密",
|
||||
"type": "類型",
|
||||
"select_type": "選擇所要回復內容",
|
||||
"type": "系統備份類型",
|
||||
"upload_snapshot": "上傳系統備份"
|
||||
},
|
||||
"store": {
|
||||
@ -720,6 +721,9 @@
|
||||
"no_match": "找不到相符分區",
|
||||
"show_areas": "顯示分區"
|
||||
},
|
||||
"attributes": {
|
||||
"expansion_header": "屬性"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
"add_user": "新增使用者",
|
||||
"remove_user": "移除使用者",
|
||||
@ -1719,6 +1723,7 @@
|
||||
"title": "Alexa"
|
||||
},
|
||||
"connected": "已連接",
|
||||
"connecting": "連線中...",
|
||||
"connection_status": "雲服務連線狀態",
|
||||
"fetching_subscription": "取得訂閱狀態中...",
|
||||
"google": {
|
||||
@ -2959,6 +2964,7 @@
|
||||
},
|
||||
"logs": {
|
||||
"log_level": "日誌記錄等級",
|
||||
"log_level_changed": "日誌等級變更為:{level}",
|
||||
"subscribed_to_logs": "訂閱 Z-Wave JS 日誌訊息...",
|
||||
"title": "Z-Wave JS 日誌"
|
||||
},
|
||||
|
@ -5676,9 +5676,9 @@ dns-equal@^1.0.0:
|
||||
integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
|
||||
|
||||
dns-packet@^1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
|
||||
integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==
|
||||
version "1.3.4"
|
||||
resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f"
|
||||
integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==
|
||||
dependencies:
|
||||
ip "^1.1.0"
|
||||
safe-buffer "^5.0.1"
|
||||
|
Loading…
x
Reference in New Issue
Block a user