Merge pull request #9285 from home-assistant/dev

This commit is contained in:
Bram Kragten 2021-05-28 12:45:21 +02:00 committed by GitHub
commit cf03f103ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 248 additions and 97 deletions

View File

@ -4,6 +4,7 @@ import { mdiDotsVertical } from "@mdi/js";
import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit";
import { customElement, property, query, state } from "lit/decorators"; import { customElement, property, query, state } from "lit/decorators";
import { fireEvent } from "../../../../src/common/dom/fire_event"; 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/buttons/ha-progress-button";
import "../../../../src/components/ha-button-menu"; import "../../../../src/components/ha-button-menu";
import { createCloseHeading } from "../../../../src/components/ha-dialog"; 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"); const a = document.createElement("a");
a.href = signedPath.path; a.href = signedPath.path;
a.download = `Hass_io_${name}.tar`; a.download = `home_assistant_snapshot_${slugify(this._computeName)}.tar`;
this.shadowRoot!.appendChild(a); this.shadowRoot!.appendChild(a);
a.click(); a.click();
this.shadowRoot!.removeChild(a); this.shadowRoot!.removeChild(a);

View File

@ -103,27 +103,25 @@ export class HassioMain extends SupervisorBaseElement {
private _applyTheme() { private _applyTheme() {
let themeName: string; let themeName: string;
let themeSettings: let themeSettings: Partial<HomeAssistant["selectedTheme"]> | undefined;
| Partial<HomeAssistant["selectedThemeSettings"]>
| undefined;
if (atLeastVersion(this.hass.config.version, 0, 114)) { if (atLeastVersion(this.hass.config.version, 0, 114)) {
themeName = themeName =
this.hass.selectedThemeSettings?.theme || this.hass.selectedTheme?.theme ||
(this.hass.themes.darkMode && this.hass.themes.default_dark_theme (this.hass.themes.darkMode && this.hass.themes.default_dark_theme
? this.hass.themes.default_dark_theme! ? this.hass.themes.default_dark_theme!
: this.hass.themes.default_theme); : this.hass.themes.default_theme);
themeSettings = this.hass.selectedThemeSettings; themeSettings = this.hass.selectedTheme;
if (themeSettings?.dark === undefined) { if (themeSettings?.dark === undefined) {
themeSettings = { themeSettings = {
...this.hass.selectedThemeSettings, ...this.hass.selectedTheme,
dark: this.hass.themes.darkMode, dark: this.hass.themes.darkMode,
}; };
} }
} else { } else {
themeName = themeName =
((this.hass.selectedThemeSettings as unknown) as string) || ((this.hass.selectedTheme as unknown) as string) ||
this.hass.themes.default_theme; this.hass.themes.default_theme;
} }

View File

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

View File

@ -31,7 +31,7 @@ export const applyThemesOnElement = (
element, element,
themes: HomeAssistant["themes"], themes: HomeAssistant["themes"],
selectedTheme?: string, selectedTheme?: string,
themeSettings?: Partial<HomeAssistant["selectedThemeSettings"]> themeSettings?: Partial<HomeAssistant["selectedTheme"]>
) => { ) => {
let cacheKey = selectedTheme; let cacheKey = selectedTheme;
let themeRules: Partial<ThemeVars> = {}; let themeRules: Partial<ThemeVars> = {};

View 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]);
};

View File

@ -125,6 +125,7 @@ export class HaIcon extends LitElement {
databaseIcon = await getIcon(iconName); databaseIcon = await getIcon(iconName);
} catch (_err) { } catch (_err) {
// Firefox in private mode doesn't support IDB // Firefox in private mode doesn't support IDB
// iOS Safari sometimes doesn't open the DB
databaseIcon = undefined; databaseIcon = undefined;
} }

View File

@ -377,6 +377,7 @@ class StateHistoryChartLine extends LocalizeMixin(PolymerElement) {
major: { major: {
fontStyle: "bold", fontStyle: "bold",
}, },
autoSkipPadding: 20,
}, },
}, },
], ],

View File

@ -236,10 +236,13 @@ class StateHistoryChartTimeline extends LocalizeMixin(PolymerElement) {
major: { major: {
fontStyle: "bold", fontStyle: "bold",
}, },
autoSkipPadding: 50,
}, },
categoryPercentage: undefined, categoryPercentage: undefined,
barPercentage: undefined, barPercentage: undefined,
time: { format: undefined }, time: {
format: undefined,
},
}, },
], ],
yAxes: [ yAxes: [

View File

@ -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 { iconMetadata } from "../resources/icon-metadata";
import { IconMeta } from "../types"; 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"]; 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 // Queue up as many icon fetches in 1 transaction
export const getIcon = (iconName: string) => export const getIcon = (iconName: string) =>
new Promise<string>((resolve, reject) => { new Promise<string | undefined>((resolve, reject) => {
toRead.push([iconName, resolve, reject]); toRead.push([iconName, resolve, reject]);
if (toRead.length > 1) { if (toRead.length > 1) {
return; return;
} }
const results: Array<[(iconPath: string) => void, IDBRequest]> = []; promiseTimeout(
1000,
iconStore("readonly", (store) => { iconStore("readonly", (store) => {
for (const [iconName_, resolve_] of toRead) { for (const [iconName_, resolve_, reject_] of toRead) {
results.push([resolve_, store.get(iconName_)]); promisifyRequest<string | undefined>(store.get(iconName_))
.then((icon) => resolve_(icon))
.catch((e) => reject_(e));
} }
}) })
.then(() => { )
for (const [resolve_, request] of results) { .catch((e) => {
resolve_(request.result);
}
})
.catch(() => {
// Firefox in private mode doesn't support IDB // Firefox in private mode doesn't support IDB
// Safari sometime doesn't open the DB so we time out
for (const [, , reject_] of toRead) { for (const [, , reject_] of toRead) {
reject_(); reject_(e);
} }
}) })
.finally(() => { .finally(() => {

View File

@ -277,7 +277,7 @@ export const provideHass = (
mockTheme(theme) { mockTheme(theme) {
invalidateThemeCache(); invalidateThemeCache();
hass().updateHass({ hass().updateHass({
selectedThemeSettings: { theme: theme ? "mock" : "default" }, selectedTheme: { theme: theme ? "mock" : "default" },
themes: { themes: {
...hass().themes, ...hass().themes,
themes: { themes: {
@ -285,11 +285,11 @@ export const provideHass = (
}, },
}, },
}); });
const { themes, selectedThemeSettings } = hass(); const { themes, selectedTheme } = hass();
applyThemesOnElement( applyThemesOnElement(
document.documentElement, document.documentElement,
themes, themes,
selectedThemeSettings!.theme selectedTheme!.theme
); );
}, },

View File

@ -81,27 +81,25 @@ class SupervisorErrorScreen extends LitElement {
private _applyTheme() { private _applyTheme() {
let themeName: string; let themeName: string;
let themeSettings: let themeSettings: Partial<HomeAssistant["selectedTheme"]> | undefined;
| Partial<HomeAssistant["selectedThemeSettings"]>
| undefined;
if (atLeastVersion(this.hass.config.version, 0, 114)) { if (atLeastVersion(this.hass.config.version, 0, 114)) {
themeName = themeName =
this.hass.selectedThemeSettings?.theme || this.hass.selectedTheme?.theme ||
(this.hass.themes.darkMode && this.hass.themes.default_dark_theme (this.hass.themes.darkMode && this.hass.themes.default_dark_theme
? this.hass.themes.default_dark_theme! ? this.hass.themes.default_dark_theme!
: this.hass.themes.default_theme); : this.hass.themes.default_theme);
themeSettings = this.hass.selectedThemeSettings; themeSettings = this.hass.selectedTheme;
if (themeName === "default" && themeSettings?.dark === undefined) { if (themeName === "default" && themeSettings?.dark === undefined) {
themeSettings = { themeSettings = {
...this.hass.selectedThemeSettings, ...this.hass.selectedTheme,
dark: this.hass.themes.darkMode, dark: this.hass.themes.darkMode,
}; };
} }
} else { } else {
themeName = themeName =
((this.hass.selectedThemeSettings as unknown) as string) || ((this.hass.selectedTheme as unknown) as string) ||
this.hass.themes.default_theme; this.hass.themes.default_theme;
} }

View File

@ -152,7 +152,7 @@ export class HUIView extends ReactiveElement {
changedProperties.has("hass") && changedProperties.has("hass") &&
(!oldHass || (!oldHass ||
this.hass.themes !== oldHass.themes || this.hass.themes !== oldHass.themes ||
this.hass.selectedThemeSettings !== oldHass.selectedThemeSettings) this.hass.selectedTheme !== oldHass.selectedTheme)
) { ) {
applyThemesOnElement(this, this.hass.themes, this._viewConfigTheme); applyThemesOnElement(this, this.hass.themes, this._viewConfigTheme);
} }

View File

@ -41,9 +41,9 @@ export class HaPickThemeRow extends LitElement {
const hasThemes = const hasThemes =
this.hass.themes.themes && Object.keys(this.hass.themes.themes).length; this.hass.themes.themes && Object.keys(this.hass.themes.themes).length;
const curTheme = 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` return html`
<ha-settings-row .narrow=${this.narrow}> <ha-settings-row .narrow=${this.narrow}>
@ -162,8 +162,7 @@ export class HaPickThemeRow extends LitElement {
(!oldHass || oldHass.themes.themes !== this.hass.themes.themes); (!oldHass || oldHass.themes.themes !== this.hass.themes.themes);
const selectedThemeChanged = const selectedThemeChanged =
changedProperties.has("hass") && changedProperties.has("hass") &&
(!oldHass || (!oldHass || oldHass.selectedTheme !== this.hass.selectedTheme);
oldHass.selectedThemeSettings !== this.hass.selectedThemeSettings);
if (themesChanged) { if (themesChanged) {
this._themeNames = ["Backend-selected", "default"].concat( this._themeNames = ["Backend-selected", "default"].concat(
@ -173,16 +172,16 @@ export class HaPickThemeRow extends LitElement {
if (selectedThemeChanged) { if (selectedThemeChanged) {
if ( if (
this.hass.selectedThemeSettings && this.hass.selectedTheme &&
this._themeNames.indexOf(this.hass.selectedThemeSettings.theme) > 0 this._themeNames.indexOf(this.hass.selectedTheme.theme) > 0
) { ) {
this._selectedThemeIndex = this._themeNames.indexOf( this._selectedThemeIndex = this._themeNames.indexOf(
this.hass.selectedThemeSettings.theme this.hass.selectedTheme.theme
); );
this._selectedTheme = this.hass.themes.themes[ 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; this._selectedThemeIndex = 0;
} }
} }
@ -220,7 +219,7 @@ export class HaPickThemeRow extends LitElement {
private _handleThemeSelection(ev: CustomEvent) { private _handleThemeSelection(ev: CustomEvent) {
const theme = ev.detail.item.theme; const theme = ev.detail.item.theme;
if (theme === "Backend-selected") { if (theme === "Backend-selected") {
if (this.hass.selectedThemeSettings?.theme) { if (this.hass.selectedTheme?.theme) {
fireEvent(this, "settheme", { fireEvent(this, "settheme", {
theme: "", theme: "",
primaryColor: undefined, primaryColor: undefined,

View File

@ -39,7 +39,7 @@ export const connectionMixin = <T extends Constructor<HassBaseEl>>(
states: null as any, states: null as any,
config: null as any, config: null as any,
themes: null as any, themes: null as any,
selectedThemeSettings: null, selectedTheme: null,
panels: null as any, panels: null as any,
services: null as any, services: null as any,
user: null as any, user: null as any,

View File

@ -11,10 +11,10 @@ import { HassBaseEl } from "./hass-base-mixin";
declare global { declare global {
// for add event listener // for add event listener
interface HTMLElementEventMap { interface HTMLElementEventMap {
settheme: HASSDomEvent<Partial<HomeAssistant["selectedThemeSettings"]>>; settheme: HASSDomEvent<Partial<HomeAssistant["selectedTheme"]>>;
} }
interface HASSDomEvents { 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); super.firstUpdated(changedProps);
this.addEventListener("settheme", (ev) => { this.addEventListener("settheme", (ev) => {
this._updateHass({ this._updateHass({
selectedThemeSettings: { selectedTheme: {
...this.hass!.selectedThemeSettings!, ...this.hass!.selectedTheme!,
...ev.detail, ...ev.detail,
}, },
}); });
@ -68,8 +68,8 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
return; return;
} }
let themeSettings: Partial<HomeAssistant["selectedThemeSettings"]> = this let themeSettings: Partial<HomeAssistant["selectedTheme"]> = this.hass!
.hass!.selectedThemeSettings; .selectedTheme;
const themeName = const themeName =
themeSettings?.theme || themeSettings?.theme ||
@ -89,7 +89,7 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
darkMode = false; darkMode = false;
} }
themeSettings = { ...this.hass.selectedThemeSettings, dark: darkMode }; themeSettings = { ...this.hass.selectedTheme, dark: darkMode };
applyThemesOnElement( applyThemesOnElement(
document.documentElement, document.documentElement,

View File

@ -194,7 +194,7 @@ export interface HomeAssistant {
services: HassServices; services: HassServices;
config: HassConfig; config: HassConfig;
themes: Themes; themes: Themes;
selectedThemeSettings: ThemeSettings | null; selectedTheme: ThemeSettings | null;
panels: Panels; panels: Panels;
panelUrl: string; panelUrl: string;
// i18n // i18n

View File

@ -2,16 +2,13 @@ import { HomeAssistant } from "../types";
const STORED_STATE = [ const STORED_STATE = [
"dockedSidebar", "dockedSidebar",
"selectedThemeSettings", "selectedTheme",
"selectedLanguage", "selectedLanguage",
"vibrate", "vibrate",
"suspendWhenHidden", "suspendWhenHidden",
"enableShortcuts", "enableShortcuts",
"defaultPanel", "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 || {}; const STORAGE = window.localStorage || {};
export function storeState(hass: HomeAssistant) { export function storeState(hass: HomeAssistant) {
@ -20,9 +17,6 @@ export function storeState(hass: HomeAssistant) {
const value = hass[key]; const value = hass[key];
STORAGE[key] = JSON.stringify(value === undefined ? null : value); STORAGE[key] = JSON.stringify(value === undefined ? null : value);
}); });
STORED_STATE_DEPRECATED.forEach((key) => {
if (key in STORAGE) delete STORAGE[key];
});
} catch (err) { } catch (err) {
// Safari throws exception in private mode // Safari throws exception in private mode
} }
@ -31,17 +25,13 @@ export function storeState(hass: HomeAssistant) {
export function getState() { export function getState() {
const state = {}; const state = {};
STORED_STATE.concat(STORED_STATE_DEPRECATED).forEach((key) => { STORED_STATE.forEach((key) => {
if (key in STORAGE) { if (key in STORAGE) {
let value = JSON.parse(STORAGE[key]); let value = JSON.parse(STORAGE[key]);
// selectedTheme went from string to object on 20200718 // selectedTheme went from string to object on 20200718
if (key === "selectedTheme" && typeof value === "string") { if (key === "selectedTheme" && typeof value === "string") {
value = { theme: value }; value = { theme: value };
} }
// selectedTheme was renamed to selectedThemeSettings on 20210207
if (key === "selectedTheme") {
key = "selectedThemeSettings";
}
// dockedSidebar went from boolean to enum on 20190720 // dockedSidebar went from boolean to enum on 20190720
if (key === "dockedSidebar" && typeof value === "boolean") { if (key === "dockedSidebar" && typeof value === "boolean") {
value = value ? "docked" : "auto"; value = value ? "docked" : "auto";

View File

@ -101,6 +101,7 @@ hassAttributeUtil.LOGIC_STATE_ATTRIBUTES = {
supported_features: undefined, supported_features: undefined,
attribution: undefined, attribution: undefined,
restored: undefined, restored: undefined,
editable: undefined,
custom_ui_more_info: { type: "string" }, custom_ui_more_info: { type: "string" },
custom_ui_state_card: { type: "string" }, custom_ui_state_card: { type: "string" },
device_class: { device_class: {
@ -109,6 +110,13 @@ hassAttributeUtil.LOGIC_STATE_ATTRIBUTES = {
description: "Device class", description: "Device class",
domains: ["binary_sensor", "cover", "humidifier", "sensor", "switch"], domains: ["binary_sensor", "cover", "humidifier", "sensor", "switch"],
}, },
state_class: {
type: "array",
options: { sensor: ["measurement"] },
description: "State class",
domains: ["sensor"],
},
last_reset: undefined,
assumed_state: { assumed_state: {
type: "boolean", type: "boolean",
domains: [ domains: [

View File

@ -292,7 +292,7 @@
"save": "Desa", "save": "Desa",
"show_more": "Mostra més informació al respecte", "show_more": "Mostra més informació al respecte",
"update": "Actualitza", "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ó", "version": "Versió",
"yes": "Sí" "yes": "Sí"
}, },
@ -314,7 +314,7 @@
"addon_new_version": "Nova versió disponible", "addon_new_version": "Nova versió disponible",
"addon_running": "El complement s'està executant", "addon_running": "El complement s'està executant",
"addon_stopped": "El complement està aturat", "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!" "no_addons": "Encara no tens cap complement instal·lat. Vés al directori de complements per començar!"
}, },
"dialog": { "dialog": {
@ -396,14 +396,15 @@
}, },
"folders": "Carpetes", "folders": "Carpetes",
"full_snapshot": "Instantània completa", "full_snapshot": "Instantània completa",
"name": "Nom", "name": "Nom de la instantània",
"no_snapshots": "Encara no tens instantànies.", "no_snapshots": "Encara no tens instantànies.",
"partial_snapshot": "Instantània parcial", "partial_snapshot": "Instantània parcial",
"password": "Contrasenya", "password": "Contrasenya de la instantània",
"password_protected": "protegit amb contrasenya", "password_protected": "protegit amb contrasenya",
"password_protection": "Protecció amb contrasenya", "password_protection": "Protecció amb contrasenya",
"security": "Seguretat", "security": "Seguretat",
"type": "Tipus", "select_type": "Selecciona què vols restaurar",
"type": "Tipus d'instantània",
"upload_snapshot": "Puja instantània" "upload_snapshot": "Puja instantània"
}, },
"store": { "store": {
@ -720,6 +721,9 @@
"no_match": "No s'han trobat àrees coincidents", "no_match": "No s'han trobat àrees coincidents",
"show_areas": "Mostra àrees" "show_areas": "Mostra àrees"
}, },
"attributes": {
"expansion_header": "Atributs"
},
"blueprint-picker": { "blueprint-picker": {
"add_user": "Afegeix usuari", "add_user": "Afegeix usuari",
"remove_user": "Elimina usuari", "remove_user": "Elimina usuari",
@ -1719,6 +1723,7 @@
"title": "Alexa" "title": "Alexa"
}, },
"connected": "Connectat", "connected": "Connectat",
"connecting": "Connectant...",
"connection_status": "Estat de connexió amb Cloud", "connection_status": "Estat de connexió amb Cloud",
"fetching_subscription": "Obtenint subscripció...", "fetching_subscription": "Obtenint subscripció...",
"google": { "google": {
@ -2959,6 +2964,7 @@
}, },
"logs": { "logs": {
"log_level": "Nivell dels registres", "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...", "subscribed_to_logs": "Subscrit a missatges de registre Z-Wave JS...",
"title": "Registres de Z-Wave JS" "title": "Registres de Z-Wave JS"
}, },

View File

@ -292,7 +292,7 @@
"save": "Uložit", "save": "Uložit",
"show_more": "Zobrazit o tom více informací", "show_more": "Zobrazit o tom více informací",
"update": "Aktualizovat", "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", "version": "Verze",
"yes": "Ano" "yes": "Ano"
}, },
@ -314,7 +314,7 @@
"addon_new_version": "K dispozici je nová verze", "addon_new_version": "K dispozici je nová verze",
"addon_running": "Doplněk je spuštěn", "addon_running": "Doplněk je spuštěn",
"addon_stopped": "Doplněk je zastaven", "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." "no_addons": "Zatím nemáte nainstalované žádné doplňky. Chcete-li začít, přejděte do obchodu s doplňky."
}, },
"dialog": { "dialog": {
@ -396,14 +396,15 @@
}, },
"folders": "Složky", "folders": "Složky",
"full_snapshot": "Úplná záloha", "full_snapshot": "Úplná záloha",
"name": "Název", "name": "Název zálohy",
"no_snapshots": "Zatím nemáte žádné zálohy.", "no_snapshots": "Zatím nemáte žádné zálohy.",
"partial_snapshot": "Částečná záloha", "partial_snapshot": "Částečná záloha",
"password": "Heslo", "password": "Heslo zálohy",
"password_protected": "chráněno heslem", "password_protected": "chráněno heslem",
"password_protection": "Ochrana heslem", "password_protection": "Ochrana heslem",
"security": "Zabezpečení", "security": "Zabezpečení",
"type": "Typ", "select_type": "Vyberte, co chcete obnovit",
"type": "Typ zálohy",
"upload_snapshot": "Nahrát zálohu" "upload_snapshot": "Nahrát zálohu"
}, },
"store": { "store": {
@ -720,6 +721,9 @@
"no_match": "Nebyly nalezeny žádné odpovídající oblasti", "no_match": "Nebyly nalezeny žádné odpovídající oblasti",
"show_areas": "Zobrazit oblasti" "show_areas": "Zobrazit oblasti"
}, },
"attributes": {
"expansion_header": "Atributy"
},
"blueprint-picker": { "blueprint-picker": {
"add_user": "Přidat uživatele", "add_user": "Přidat uživatele",
"remove_user": "Odebrat uživatele", "remove_user": "Odebrat uživatele",
@ -1719,6 +1723,7 @@
"title": "Alexa" "title": "Alexa"
}, },
"connected": "Připojeno", "connected": "Připojeno",
"connecting": "Připojování...",
"connection_status": "Stav cloudového připojení", "connection_status": "Stav cloudového připojení",
"fetching_subscription": "Načítání předplatného ...", "fetching_subscription": "Načítání předplatného ...",
"google": { "google": {
@ -2956,6 +2961,7 @@
}, },
"logs": { "logs": {
"log_level": "Úroveň protokolu", "log_level": "Úroveň protokolu",
"log_level_changed": "Úroveň protokolu změněna na: {level}",
"title": "Z-Wave JS protokoly" "title": "Z-Wave JS protokoly"
}, },
"navigation": { "navigation": {

View File

@ -45,6 +45,7 @@
"away": "بیرون", "away": "بیرون",
"boost": "افزایش", "boost": "افزایش",
"comfort": "آسایش", "comfort": "آسایش",
"eco": "اکو",
"home": "خانه", "home": "خانه",
"none": "هیچ کدام", "none": "هیچ کدام",
"sleep": "خواب" "sleep": "خواب"
@ -100,6 +101,27 @@
} }
}, },
"supervisor": { "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": { "common": {
"close": "بستن" "close": "بستن"
} }

View File

@ -403,6 +403,7 @@
"password_protected": "비밀번호로 보호됨", "password_protected": "비밀번호로 보호됨",
"password_protection": "비밀번호 보호", "password_protection": "비밀번호 보호",
"security": "보안", "security": "보안",
"select_type": "복원 할 항목 선택",
"type": "유형", "type": "유형",
"upload_snapshot": "스냅숏 올리기" "upload_snapshot": "스냅숏 올리기"
}, },
@ -720,6 +721,9 @@
"no_match": "일치하는 영역을 찾을 수 없습니다", "no_match": "일치하는 영역을 찾을 수 없습니다",
"show_areas": "영역 표시하기" "show_areas": "영역 표시하기"
}, },
"attributes": {
"expansion_header": "속성"
},
"blueprint-picker": { "blueprint-picker": {
"add_user": "사용자 추가하기", "add_user": "사용자 추가하기",
"remove_user": "사용자 제거하기", "remove_user": "사용자 제거하기",
@ -1719,6 +1723,7 @@
"title": "Alexa" "title": "Alexa"
}, },
"connected": "연결됨", "connected": "연결됨",
"connecting": "연결 중 ...",
"connection_status": "클라우드 연결 상태", "connection_status": "클라우드 연결 상태",
"fetching_subscription": "구독 정보를 가져오는 중…", "fetching_subscription": "구독 정보를 가져오는 중…",
"google": { "google": {
@ -2959,6 +2964,7 @@
}, },
"logs": { "logs": {
"log_level": "로그 레벨", "log_level": "로그 레벨",
"log_level_changed": "로그 레벨이 변경되었습니다: {level}",
"subscribed_to_logs": "Z-Wave JS 로그 메시지 수신 ...", "subscribed_to_logs": "Z-Wave JS 로그 메시지 수신 ...",
"title": "Z-Wave JS 로그" "title": "Z-Wave JS 로그"
}, },

View File

@ -314,7 +314,7 @@
"addon_new_version": "Nieuwe versie beschikbaar", "addon_new_version": "Nieuwe versie beschikbaar",
"addon_running": "Add-on wordt uitgevoerd", "addon_running": "Add-on wordt uitgevoerd",
"addon_stopped": "Add-on is gestopt", "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!" "no_addons": "Je hebt nog geen add-ons geïnstalleerd. Ga naar de add-on store om te beginnen!"
}, },
"dialog": { "dialog": {
@ -396,14 +396,15 @@
}, },
"folders": "Mappen", "folders": "Mappen",
"full_snapshot": "Volledige snapshot", "full_snapshot": "Volledige snapshot",
"name": "Naam", "name": "Snapshot naam",
"no_snapshots": "Je hebt nog geen snapshots.", "no_snapshots": "Je hebt nog geen snapshots.",
"partial_snapshot": "Gedeeltelijke snapshot", "partial_snapshot": "Gedeeltelijke snapshot",
"password": "Wachtwoord", "password": "Snapshot wachtwoord",
"password_protected": "beveiligd met wachtwoord", "password_protected": "beveiligd met wachtwoord",
"password_protection": "Wachtwoord bescherming", "password_protection": "Wachtwoord bescherming",
"security": "Beveiliging", "security": "Beveiliging",
"type": "Type", "select_type": "Selecteer wat u wilt herstellen",
"type": "Snapshot type",
"upload_snapshot": "Upload snapshot" "upload_snapshot": "Upload snapshot"
}, },
"store": { "store": {
@ -720,6 +721,9 @@
"no_match": "Geen overeenkomende gebieden gevonden", "no_match": "Geen overeenkomende gebieden gevonden",
"show_areas": "Toon gebieden" "show_areas": "Toon gebieden"
}, },
"attributes": {
"expansion_header": "Attributen"
},
"blueprint-picker": { "blueprint-picker": {
"add_user": "Gebruiker toevoegen", "add_user": "Gebruiker toevoegen",
"remove_user": "Gebruiker verwijderen", "remove_user": "Gebruiker verwijderen",
@ -1719,6 +1723,7 @@
"title": "Alexa" "title": "Alexa"
}, },
"connected": "Verbonden", "connected": "Verbonden",
"connecting": "Verbinden...",
"connection_status": "Cloud verbindingsstatus", "connection_status": "Cloud verbindingsstatus",
"fetching_subscription": "Abonnement ophalen...", "fetching_subscription": "Abonnement ophalen...",
"google": { "google": {
@ -2959,6 +2964,7 @@
}, },
"logs": { "logs": {
"log_level": "Log niveau", "log_level": "Log niveau",
"log_level_changed": "Logboekniveau gewijzigd in: {level}",
"subscribed_to_logs": "Geabonneerd op Z-Wave JS log berichten ...", "subscribed_to_logs": "Geabonneerd op Z-Wave JS log berichten ...",
"title": "Z-Wave JS Logs" "title": "Z-Wave JS Logs"
}, },

View File

@ -396,14 +396,15 @@
}, },
"folders": "Foldery", "folders": "Foldery",
"full_snapshot": "Pełny snapshot", "full_snapshot": "Pełny snapshot",
"name": "Nazwa", "name": "Nazwa snapshota",
"no_snapshots": "Nie masz jeszcze żadnych snapshotów.", "no_snapshots": "Nie masz jeszcze żadnych snapshotów.",
"partial_snapshot": "Częściowy snapshot", "partial_snapshot": "Częściowy snapshot",
"password": "Hasło", "password": "Hasło snapshota",
"password_protected": "chroniony hasłem", "password_protected": "chroniony hasłem",
"password_protection": "Ochrona hasłem", "password_protection": "Ochrona hasłem",
"security": "Bezpieczeństwo", "security": "Bezpieczeństwo",
"type": "Typ", "select_type": "Wybierz, co przywrócić",
"type": "Typ snapshota",
"upload_snapshot": "Prześlij snapshota" "upload_snapshot": "Prześlij snapshota"
}, },
"store": { "store": {
@ -1722,6 +1723,7 @@
"title": "Alexa" "title": "Alexa"
}, },
"connected": "połączono", "connected": "połączono",
"connecting": "Łączenie...",
"connection_status": "Status połączenia z chmurą", "connection_status": "Status połączenia z chmurą",
"fetching_subscription": "Pobieranie subskrypcji…", "fetching_subscription": "Pobieranie subskrypcji…",
"google": { "google": {
@ -2962,6 +2964,7 @@
}, },
"logs": { "logs": {
"log_level": "Poziom loga", "log_level": "Poziom loga",
"log_level_changed": "Poziom dziennika zmieniony na: {level}",
"subscribed_to_logs": "Zasubskrybowano komunikaty dziennika Z-Wave JS...", "subscribed_to_logs": "Zasubskrybowano komunikaty dziennika Z-Wave JS...",
"title": "Logi Z-Wave JS" "title": "Logi Z-Wave JS"
}, },

View File

@ -112,8 +112,10 @@
"output": "Saída" "output": "Saída"
}, },
"network": { "network": {
"container": "Container",
"disabled": "Desativado", "disabled": "Desativado",
"header": "Rede" "header": "Rede",
"host": "Servidor"
}, },
"options": { "options": {
"edit_in_ui": "Editar em UI", "edit_in_ui": "Editar em UI",
@ -148,7 +150,14 @@
"title": "Acesso completo ao hardware" "title": "Acesso completo ao hardware"
}, },
"hassio_api": { "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": { "ingress": {
"title": "Ingress" "title": "Ingress"
@ -179,8 +188,10 @@
}, },
"changelog": "Changelog", "changelog": "Changelog",
"cpu_usage": "Utilização de CPU do add-on", "cpu_usage": "Utilização de CPU do add-on",
"hostname": "Nome do servidor",
"install": "Instalar", "install": "Instalar",
"new_update_available": "{name} {version} está disponível", "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", "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", "open_web_ui": "Abrir o interface web",
"option": { "option": {
@ -210,6 +221,7 @@
"title": "Aviso: o modo de proteção está desativado!" "title": "Aviso: o modo de proteção está desativado!"
}, },
"ram_usage": "Utilização de RAM do add-on", "ram_usage": "Utilização de RAM do add-on",
"rebuild": "reconstruir",
"restart": "Reiniciar", "restart": "Reiniciar",
"start": "Iniciar", "start": "Iniciar",
"stop": "Parar", "stop": "Parar",
@ -334,6 +346,7 @@
}, },
"my": { "my": {
"error": "Ocorreu um erro desconhecido", "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", "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." "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_protected": "Protegido por Palavra-passe",
"password_protection": "Proteção por palavra-passe", "password_protection": "Proteção por palavra-passe",
"security": "Segurança", "security": "Segurança",
"select_type": "Selecione o que restaurar",
"type": "Tipo", "type": "Tipo",
"upload_snapshot": "Upload snapshot" "upload_snapshot": "Upload snapshot"
}, },
@ -529,8 +543,11 @@
}, },
"light": { "light": {
"brightness": "Brilho", "brightness": "Brilho",
"cold_white_value": "Brilho branco frio",
"color_brightness": "Brilho",
"color_temperature": "Temperatura de cor", "color_temperature": "Temperatura de cor",
"effect": "Efeito", "effect": "Efeito",
"warm_white_value": "Brilho branco quente",
"white_value": "Brilho" "white_value": "Brilho"
}, },
"lock": { "lock": {
@ -657,6 +674,10 @@
"addon-picker": { "addon-picker": {
"addon": "Add-on", "addon": "Add-on",
"error": { "error": {
"fetch_addons": {
"description": "A busca de add-ons retornou um erro.",
"title": "Erro ao obter add-ons."
},
"no_supervisor": { "no_supervisor": {
"title": "Sem Supervisor" "title": "Sem Supervisor"
} }
@ -677,6 +698,9 @@
"no_match": "Nenhuma área correspondente encontrada", "no_match": "Nenhuma área correspondente encontrada",
"show_areas": "Mostrar áreas" "show_areas": "Mostrar áreas"
}, },
"attributes": {
"expansion_header": "Atributos"
},
"blueprint-picker": { "blueprint-picker": {
"add_user": "Adicionar um utilizador", "add_user": "Adicionar um utilizador",
"remove_user": "Remover utilizador", "remove_user": "Remover utilizador",
@ -803,6 +827,13 @@
"label": "Imagem", "label": "Imagem",
"unsupported_format": "Formato não suportado, por favor escolha uma imagem JPEG, PNG ou GIF." "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": { "related-items": {
"area": "Área", "area": "Área",
"automation": "Parte das seguintes automações", "automation": "Parte das seguintes automações",
@ -840,6 +871,7 @@
} }
}, },
"service-control": { "service-control": {
"integration_doc": "Documentação da integração",
"required": "Este campo é obrigatório", "required": "Este campo é obrigatório",
"service_data": "Dados do serviço", "service_data": "Dados do serviço",
"target": "Alvos", "target": "Alvos",
@ -1150,8 +1182,11 @@
"bind_header": "Associação", "bind_header": "Associação",
"button_hide": "Ocultar detalhes", "button_hide": "Ocultar detalhes",
"button_show": "Mostrar Detalhes", "button_show": "Mostrar Detalhes",
"cluster_header": "Grupo",
"configuration_complete": "Reconfiguração do dispositivo concluída.",
"configuring_alt": "A configurar", "configuring_alt": "A configurar",
"min_max_change": "min/max/alterar", "min_max_change": "min/max/alterar",
"reporting_header": "Relatórios",
"start_reconfiguration": "Iniciar reconfiguração" "start_reconfiguration": "Iniciar reconfiguração"
} }
}, },
@ -1643,6 +1678,7 @@
"title": "Alexa" "title": "Alexa"
}, },
"connected": "Ligado", "connected": "Ligado",
"connecting": "A conectar...",
"connection_status": "Estado da ligação na cloud", "connection_status": "Estado da ligação na cloud",
"fetching_subscription": "A buscar assinatura...", "fetching_subscription": "A buscar assinatura...",
"google": { "google": {
@ -2009,6 +2045,9 @@
"filtering_by": "A filtrar por", "filtering_by": "A filtrar por",
"show": "Mostrar" "show": "Mostrar"
}, },
"hassio": {
"button": "Configurar"
},
"header": "Configurar o Home Assistant", "header": "Configurar o Home Assistant",
"helpers": { "helpers": {
"caption": "Auxiliares", "caption": "Auxiliares",
@ -2099,10 +2138,12 @@
"entity_unavailable": "Entidade indisponível", "entity_unavailable": "Entidade indisponível",
"firmware": "Firmware: {version}", "firmware": "Firmware: {version}",
"hub": "Conectado via", "hub": "Conectado via",
"logs": "Logs",
"manuf": "por {manufacturer}", "manuf": "por {manufacturer}",
"no_area": "Nenhuma Área", "no_area": "Nenhuma Área",
"not_loaded": "Não carregado", "not_loaded": "Não carregado",
"options": "Opções", "options": "Opções",
"provided_by_custom_integration": "Fornecido por uma integração personalizada",
"reload": "Recarregar", "reload": "Recarregar",
"reload_confirm": "A integração foi recarregada", "reload_confirm": "A integração foi recarregada",
"reload_restart_confirm": "Reinicie o Home Assistant para terminar de carregar esta integração", "reload_restart_confirm": "Reinicie o Home Assistant para terminar de carregar esta integração",
@ -2113,7 +2154,8 @@
"loaded": "Carregado", "loaded": "Carregado",
"migration_error": "Erro de migração", "migration_error": "Erro de migração",
"not_loaded": "Não carregado", "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", "system_options": "Opções do sistema",
"unnamed_entry": "Entrada sem nome" "unnamed_entry": "Entrada sem nome"
@ -2134,6 +2176,9 @@
"loading_first_time": "Por favor, aguarde enquanto a integração está a ser instalada", "loading_first_time": "Por favor, aguarde enquanto a integração está a ser instalada",
"next": "Próximo", "next": "Próximo",
"not_all_required_fields": "Nem todos os campos obrigatórios estão preenchidos.", "not_all_required_fields": "Nem todos os campos obrigatórios estão preenchidos.",
"pick_flow_step": {
"title": "Descobrimos estes, quer configurá-los?"
},
"submit": "Enviar" "submit": "Enviar"
}, },
"configure": "Configurar", "configure": "Configurar",
@ -2180,6 +2225,13 @@
"clear": "Limpar", "clear": "Limpar",
"description": "Ver os registos do Home Assistant", "description": "Ver os registos do Home Assistant",
"details": "Detalhes do log ( {level} )", "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", "load_full_log": "Carregar log completo do Home Assistant",
"loading_log": "A carregar o log de erros...", "loading_log": "A carregar o log de erros...",
"multiple_messages": "mensagem ocorreu primeiro em {time} e repetiu-se {counter} vezes", "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", "manufacturer_code_override": "Substituição do código do fabricante",
"value": "Valor" "value": "Valor"
}, },
"configuration_page": {
"shortcuts_title": "Atalhos",
"zha_options": {
"title": "Opções Globais"
}
},
"device_pairing_card": { "device_pairing_card": {
"CONFIGURED": "Configuração Completa", "CONFIGURED": "Configuração Completa",
"CONFIGURED_status_text": "A inicializar", "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", "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_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.", "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.", "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.", "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", "start_inclusion": "Iniciar Inclusão",
@ -2814,6 +2873,8 @@
}, },
"logs": { "logs": {
"log_level": "Nível de log", "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" "title": "Z-Wave JS Logs"
}, },
"navigation": { "navigation": {
@ -2827,7 +2888,10 @@
}, },
"node_config": { "node_config": {
"error_device_not_found": "Dispositivo não encontrado", "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": { "node_status": {
"alive": "Ativo", "alive": "Ativo",
@ -2836,6 +2900,12 @@
"dead": "Inativo", "dead": "Inativo",
"unknown": "Desconhecido" "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": { "remove_node": {
"cancel_exclusion": "Cancelar Exclusão", "cancel_exclusion": "Cancelar Exclusão",
"controller_in_exclusion_mode": "O seu controlador Z-Wave está agora em modo de exclusão.", "controller_in_exclusion_mode": "O seu controlador Z-Wave está agora em modo de exclusão.",
@ -3666,6 +3736,9 @@
} }
}, },
"page-onboarding": { "page-onboarding": {
"analytics": {
"finish": "Próximo"
},
"core-config": { "core-config": {
"button_detect": "Detetar", "button_detect": "Detetar",
"finish": "Próxima", "finish": "Próxima",
@ -3675,12 +3748,14 @@
"location_name": "Nome da instalação do Home Assistant", "location_name": "Nome da instalação do Home Assistant",
"location_name_default": "Início" "location_name_default": "Início"
}, },
"finish": "Terminar",
"integration": { "integration": {
"finish": "Terminar", "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.", "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" "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?", "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": { "restore": {
"description": "Em alternativa, pode restaurar a partir de um snapshot anterior.", "description": "Em alternativa, pode restaurar a partir de um snapshot anterior.",
"hide_log": "Ocultar log completo", "hide_log": "Ocultar log completo",
@ -3825,6 +3900,17 @@
"primary_color": "Cor primária", "primary_color": "Cor primária",
"reset": "Redefinir" "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": { "vibrate": {
"description": "Ative ou desative a vibração neste dispositivo ao controlar dispositivos.", "description": "Ative ou desative a vibração neste dispositivo ao controlar dispositivos.",
"header": "Vibrar" "header": "Vibrar"

View File

@ -383,7 +383,7 @@
"could_not_create": "Не удалось создать снимок", "could_not_create": "Не удалось создать снимок",
"create": "Создать", "create": "Создать",
"create_blocked_not_running": "Создание снимка сейчас невозможно, потому что система находится в состоянии {state}.", "create_blocked_not_running": "Создание снимка сейчас невозможно, потому что система находится в состоянии {state}.",
"create_snapshot": "Снимки файловой системы", "create_snapshot": "Создать снимок",
"created": "Создан", "created": "Создан",
"description": "Снимок файловой системы (snapshot) позволяет легко создавать и восстанавливать резервную копию всех данных Вашего Home Assistant.", "description": "Снимок файловой системы (snapshot) позволяет легко создавать и восстанавливать резервную копию всех данных Вашего Home Assistant.",
"enter_password": "Пожалуйста, введите пароль.", "enter_password": "Пожалуйста, введите пароль.",

View File

@ -396,14 +396,15 @@
}, },
"folders": "資料夾", "folders": "資料夾",
"full_snapshot": "全系統備份", "full_snapshot": "全系統備份",
"name": "名稱", "name": "系統備份名稱",
"no_snapshots": "目前沒有任何系統備份", "no_snapshots": "目前沒有任何系統備份",
"partial_snapshot": "部分系統備份", "partial_snapshot": "部分系統備份",
"password": "密碼", "password": "系統備份密碼",
"password_protected": "密碼保護未顯示", "password_protected": "密碼保護未顯示",
"password_protection": "密碼保護", "password_protection": "密碼保護",
"security": "加密", "security": "加密",
"type": "類型", "select_type": "選擇所要回復內容",
"type": "系統備份類型",
"upload_snapshot": "上傳系統備份" "upload_snapshot": "上傳系統備份"
}, },
"store": { "store": {
@ -720,6 +721,9 @@
"no_match": "找不到相符分區", "no_match": "找不到相符分區",
"show_areas": "顯示分區" "show_areas": "顯示分區"
}, },
"attributes": {
"expansion_header": "屬性"
},
"blueprint-picker": { "blueprint-picker": {
"add_user": "新增使用者", "add_user": "新增使用者",
"remove_user": "移除使用者", "remove_user": "移除使用者",
@ -1719,6 +1723,7 @@
"title": "Alexa" "title": "Alexa"
}, },
"connected": "已連接", "connected": "已連接",
"connecting": "連線中...",
"connection_status": "雲服務連線狀態", "connection_status": "雲服務連線狀態",
"fetching_subscription": "取得訂閱狀態中...", "fetching_subscription": "取得訂閱狀態中...",
"google": { "google": {
@ -2959,6 +2964,7 @@
}, },
"logs": { "logs": {
"log_level": "日誌記錄等級", "log_level": "日誌記錄等級",
"log_level_changed": "日誌等級變更為:{level}",
"subscribed_to_logs": "訂閱 Z-Wave JS 日誌訊息...", "subscribed_to_logs": "訂閱 Z-Wave JS 日誌訊息...",
"title": "Z-Wave JS 日誌" "title": "Z-Wave JS 日誌"
}, },

View File

@ -5676,9 +5676,9 @@ dns-equal@^1.0.0:
integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
dns-packet@^1.3.1: dns-packet@^1.3.1:
version "1.3.1" version "1.3.4"
resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f"
integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==
dependencies: dependencies:
ip "^1.1.0" ip "^1.1.0"
safe-buffer "^5.0.1" safe-buffer "^5.0.1"