Compare commits

..

2 Commits

28 changed files with 271 additions and 661 deletions

2
.gitignore vendored
View File

@@ -23,8 +23,6 @@ dist
# vscode
.vscode/*
!.vscode/extensions.json
!.vscode/launch.json
!.vscode/tasks.json
# Cast dev settings
src/cast/dev_const.ts

44
.vscode/launch.json vendored
View File

@@ -1,44 +0,0 @@
{
// https://github.com/microsoft/vscode-js-debug/blob/master/OPTIONS.md
"configurations": [
{
"name": "Debug Frontend",
"request": "launch",
"type": "pwa-chrome",
"url": "http://localhost:8123/",
"webRoot": "${workspaceFolder}/hass_frontend",
"disableNetworkCache": true,
"preLaunchTask": "Develop Frontend",
"outFiles": [
"${workspaceFolder}/hass_frontend/frontend_latest/*.js"
]
},
{
"name": "Debug Gallery",
"request": "launch",
"type": "pwa-chrome",
"url": "http://localhost:8100/",
"webRoot": "${workspaceFolder}/gallery/dist",
"disableNetworkCache": true,
"preLaunchTask": "Develop Gallery"
},
{
"name": "Debug Demo",
"request": "launch",
"type": "pwa-chrome",
"url": "http://localhost:8090/",
"webRoot": "${workspaceFolder}/demo/dist",
"disableNetworkCache": true,
"preLaunchTask": "Develop Demo"
},
{
"name": "Debug Cast",
"request": "launch",
"type": "pwa-chrome",
"url": "http://localhost:8080/",
"webRoot": "${workspaceFolder}/cast/dist",
"disableNetworkCache": true,
"preLaunchTask": "Develop Cast"
},
]
}

137
.vscode/tasks.json vendored
View File

@@ -1,137 +0,0 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Develop Frontend",
"type": "gulp",
"task": "develop-app",
// Sync changes here to other tasks until issue resolved
// https://github.com/Microsoft/vscode/issues/61497
"problemMatcher": {
"owner": "ha-build",
"source": "ha-build",
"fileLocation": "absolute",
"severity": "error",
"pattern": [
{
"regexp": "(SyntaxError): (.+): (.+) \\((\\d+):(\\d+)\\)",
"severity": 1,
"file": 2,
"message": 3,
"line": 4,
"column": 5
}
],
"background": {
"activeOnStart": true,
"beginsPattern": "Changes detected. Starting compilation",
"endsPattern": "Build done @"
}
},
"isBackground": true,
"group": {
"kind": "build",
"isDefault": true
},
"runOptions": {
"instanceLimit": 1
}
},
{
"label": "Develop Gallery",
"type": "gulp",
"task": "develop-gallery",
"problemMatcher": {
"owner": "ha-build",
"source": "ha-build",
"fileLocation": "absolute",
"severity": "error",
"pattern": [
{
"regexp": "(SyntaxError): (.+): (.+) \\((\\d+):(\\d+)\\)",
"severity": 1,
"file": 2,
"message": 3,
"line": 4,
"column": 5
}
],
"background": {
"activeOnStart": true,
"beginsPattern": "Changes detected. Starting compilation",
"endsPattern": "Build done @"
}
},
"isBackground": true,
"group": "build",
"runOptions": {
"instanceLimit": 1
}
},
{
"label": "Develop Demo",
"type": "gulp",
"task": "develop-demo",
"problemMatcher": {
"owner": "ha-build",
"source": "ha-build",
"fileLocation": "absolute",
"severity": "error",
"pattern": [
{
"regexp": "(SyntaxError): (.+): (.+) \\((\\d+):(\\d+)\\)",
"severity": 1,
"file": 2,
"message": 3,
"line": 4,
"column": 5
}
],
"background": {
"activeOnStart": true,
"beginsPattern": "Changes detected. Starting compilation",
"endsPattern": "Build done @"
}
},
"isBackground": true,
"group": "build",
"runOptions": {
"instanceLimit": 1
}
},
{
"label": "Develop Cast",
"type": "gulp",
"task": "develop-cast",
"problemMatcher": {
"owner": "ha-build",
"source": "ha-build",
"fileLocation": "absolute",
"severity": "error",
"pattern": [
{
"regexp": "(SyntaxError): (.+): (.+) \\((\\d+):(\\d+)\\)",
"severity": 1,
"file": 2,
"message": 3,
"line": 4,
"column": 5
}
],
"background": {
"activeOnStart": true,
"beginsPattern": "Changes detected. Starting compilation",
"endsPattern": "Build done @"
}
},
"isBackground": true,
"group": "build",
"runOptions": {
"instanceLimit": 1
}
},
]
}

View File

@@ -18,14 +18,6 @@ const bothBuilds = (createConfigFunc, params) => [
createConfigFunc({ ...params, latestBuild: false }),
];
/**
* @param {{
* compiler: import("webpack").Compiler,
* contentBase: string,
* port: number,
* listenHost?: string
* }}
*/
const runDevServer = ({
compiler,
contentBase,
@@ -41,10 +33,7 @@ const runDevServer = ({
throw err;
}
// Server listening
log(
"[webpack-dev-server]",
`Project is running at http://localhost:${port}`
);
log("[webpack-dev-server]", `http://localhost:${port}`);
});
const handler = (done) => (err, stats) => {
@@ -56,12 +45,12 @@ const handler = (done) => (err, stats) => {
return;
}
if (stats.hasErrors() || stats.hasWarnings()) {
console.log(stats.toString("minimal"));
}
log(`Build done @ ${new Date().toLocaleTimeString()}`);
if (stats.hasErrors() || stats.hasWarnings()) {
log.warn(stats.toString("minimal"));
}
if (done) {
done();
}

View File

@@ -1,4 +1,4 @@
const path = require("path");
var path = require("path");
module.exports = {
polymer_dir: path.resolve(__dirname, ".."),

View File

@@ -4,21 +4,6 @@ const TerserPlugin = require("terser-webpack-plugin");
const ManifestPlugin = require("webpack-manifest-plugin");
const paths = require("./paths.js");
const bundle = require("./bundle");
const log = require("fancy-log");
class LogStartCompilePlugin {
ignoredFirst = false;
apply(compiler) {
compiler.hooks.beforeCompile.tap("LogStartCompilePlugin", () => {
if (!this.ignoredFirst) {
this.ignoredFirst = true;
return;
}
log("Changes detected. Starting compilation");
});
}
}
const createWebpackConfig = ({
entry,
@@ -119,8 +104,7 @@ const createWebpackConfig = ({
),
path.resolve(paths.polymer_dir, "src/resources/EventTarget-ponyfill.js")
),
!isProdBuild && new LogStartCompilePlugin(),
].filter(Boolean),
],
resolve: {
extensions: [".ts", ".js", ".json"],
},

View File

@@ -42,7 +42,7 @@ export const fuzzySequentialMatch = (filter: string, ...words: string[]) => {
export interface ScorableTextItem {
score?: number;
text: string;
filterText: string;
altText?: string;
}
@@ -55,8 +55,8 @@ export const fuzzyFilterSort: FuzzyFilterSort = (filter, items) => {
return items
.map((item) => {
item.score = item.altText
? fuzzySequentialMatch(filter, item.text, item.altText)
: fuzzySequentialMatch(filter, item.text);
? fuzzySequentialMatch(filter, item.filterText, item.altText)
: fuzzySequentialMatch(filter, item.filterText);
return item;
})
.filter((item) => item.score !== undefined && item.score > 0)

View File

@@ -1,4 +1,3 @@
import "@material/mwc-icon-button/mwc-icon-button";
import { mdiClose, mdiMenuDown, mdiMenuUp } from "@mdi/js";
import "@polymer/paper-input/paper-input";
import "@polymer/paper-item/paper-item";
@@ -15,14 +14,13 @@ import {
query,
TemplateResult,
} from "lit-element";
import memoizeOne from "memoize-one";
import { fireEvent } from "../../common/dom/fire_event";
import { computeDomain } from "../../common/entity/compute_domain";
import { PolymerChangedEvent } from "../../polymer-types";
import { HomeAssistant } from "../../types";
import { formatAttributeName } from "../../util/hass-attributes-util";
import "../ha-svg-icon";
import "./state-badge";
import { formatAttributeName } from "../../util/hass-attributes-util";
import "@material/mwc-icon-button/mwc-icon-button";
export type HaEntityPickerEntityFilterFunc = (entityId: HassEntity) => boolean;
@@ -43,41 +41,6 @@ const rowRenderer = (root: HTMLElement, _owner, model: { item: string }) => {
);
};
const SELECTABLE_ATTRIBUTES: { [key: string]: string[] } = {
light: ["brightness"],
climate: [
"current_temperature",
"fan_mode",
"preset_mode",
"swing_mode",
"temperature",
"current_hundity",
"humidity",
"hvac_action",
],
fan: ["speed"],
air_quality: [
"nitrogen_oxide",
"particulate_matter_10",
"particulate_matter_2_5",
],
cover: ["current_position", "current_tilt_position"],
device_tracker: ["battery"],
humidifier: ["humidty"],
media_player: ["media_title"],
vacuum: ["battery_level", "status"],
water_heater: ["current_temperature", "temperature", "operation_mode"],
weather: [
"temperature",
"humidity",
"ozone",
"pressure",
"wind_bearing",
"wind_speed",
"visibility",
],
};
@customElement("ha-entity-attribute-picker")
class HaEntityAttributePicker extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@@ -105,8 +68,9 @@ class HaEntityAttributePicker extends LitElement {
protected updated(changedProps: PropertyValues) {
if (changedProps.has("_opened") && this._opened) {
(this._comboBox as any).items = this.entityId
? this._selectableAttributes(this.entityId)
const state = this.entityId ? this.hass.states[this.entityId] : undefined;
(this._comboBox as any).items = state
? Object.keys(state.attributes)
: [];
}
}
@@ -121,6 +85,7 @@ class HaEntityAttributePicker extends LitElement {
.value=${this._value}
.allowCustomValue=${this.allowCustomValue}
.renderer=${rowRenderer}
attr-for-value="bind-value"
@opened-changed=${this._openedChanged}
@value-changed=${this._valueChanged}
>
@@ -172,17 +137,6 @@ class HaEntityAttributePicker extends LitElement {
`;
}
private _selectableAttributes = memoizeOne((entity: string) => {
const stateObj = this.hass.states[entity];
if (!stateObj) {
return [];
}
return Object.keys(stateObj.attributes).filter((attr) =>
SELECTABLE_ATTRIBUTES[computeDomain(entity)].includes(attr)
);
});
private _clearValue(ev: Event) {
ev.stopPropagation();
this._setValue("");

View File

@@ -45,30 +45,43 @@ import { navigate } from "../../common/navigate";
import { configSections } from "../../panels/config/ha-panel-config";
import { PageNavigation } from "../../layouts/hass-tabs-subpage";
import { canShowPage } from "../../common/config/can_show_page";
import { getPanelIcon, getPanelNameTranslationKey } from "../../data/panel";
import { getPanelNameTranslationKey } from "../../data/panel";
const DEFAULT_NAVIGATION_ICON = "hass:arrow-right-circle";
const DEFAULT_SERVER_ICON = "hass:server";
interface QuickBarItem extends ScorableTextItem {
primaryText: string;
icon?: string;
iconPath?: string;
action(data?: any): void;
}
interface QuickBarNavigationItem extends QuickBarItem {
export interface CommandItem extends QuickBarItem {
categoryKey: "reload" | "navigation" | "server_control";
categoryText: string;
}
const isCommandItem = (
item: QuickBarItem | CommandItem
): item is CommandItem => {
return (item as CommandItem).categoryKey !== undefined;
};
interface QuickBarNavigationItem extends CommandItem {
path: string;
}
interface NavigationInfo extends PageNavigation {
text: string;
}
type NavigationInfo = PageNavigation & Pick<QuickBarItem, "primaryText">;
type BaseNavigationCommand = Pick<
QuickBarNavigationItem,
"primaryText" | "path"
>;
@customElement("ha-quick-bar")
export class QuickBar extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@internalProperty() private _commandItems?: QuickBarItem[];
@internalProperty() private _commandItems?: CommandItem[];
@internalProperty() private _entityItems?: QuickBarItem[];
@@ -82,6 +95,8 @@ export class QuickBar extends LitElement {
@internalProperty() private _commandMode = false;
@internalProperty() private _commandType?: CommandItem["categoryKey"];
@internalProperty() private _done = false;
@query("search-input", false) private _filterInputField?: HTMLElement;
@@ -90,6 +105,10 @@ export class QuickBar extends LitElement {
public async showDialog(params: QuickBarParams) {
this._commandMode = params.commandMode || this._toggleIfAlreadyOpened();
this._commandType = params.commandType;
this._search = this._commandType
? `${this._getCommandCategoryLabel(this._commandType).toLowerCase()} `
: "";
this._initializeItemsIfNeeded();
this._opened = true;
}
@@ -201,6 +220,12 @@ export class QuickBar extends LitElement {
}
private _renderItem(item: QuickBarItem, index?: number) {
return isCommandItem(item)
? this._renderCommandItem(item, index)
: this._renderEntityItem(item, index);
}
private _renderEntityItem(item: QuickBarItem, index?: number) {
return html`
<mwc-list-item
.twoline=${Boolean(item.altText)}
@@ -214,7 +239,30 @@ export class QuickBar extends LitElement {
slot="graphic"
></ha-svg-icon>`
: html`<ha-icon .icon=${item.icon} slot="graphic"></ha-icon>`}
${item.text}
<span>${item.primaryText}</span>
${item.altText
? html`
<span slot="secondary" class="item-text secondary"
>${item.altText}</span
>
`
: null}
</mwc-list-item>
`;
}
private _renderCommandItem(item: CommandItem, index?: number) {
return html`
<mwc-list-item
.twoline=${Boolean(item.altText)}
.item=${item}
index=${ifDefined(index)}
>
<span class="command-category ${item.categoryKey}"
>${item.categoryText}
</span>
<span>${item.primaryText}</span>
${item.altText
? html`
<span slot="secondary" class="item-text secondary"
@@ -313,92 +361,107 @@ export class QuickBar extends LitElement {
private _generateEntityItems(): QuickBarItem[] {
return Object.keys(this.hass.states)
.map((entityId) => ({
text: computeStateName(this.hass.states[entityId]),
altText: entityId,
icon: domainIcon(computeDomain(entityId), this.hass.states[entityId]),
action: () => fireEvent(this, "hass-more-info", { entityId }),
}))
.sort((a, b) => compare(a.text.toLowerCase(), b.text.toLowerCase()));
.map((entityId) => {
const primaryText = computeStateName(this.hass.states[entityId]);
return {
primaryText,
filterText: primaryText,
altText: entityId,
icon: domainIcon(computeDomain(entityId), this.hass.states[entityId]),
action: () => fireEvent(this, "hass-more-info", { entityId }),
};
})
.sort((a, b) =>
compare(a.primaryText.toLowerCase(), b.primaryText.toLowerCase())
);
}
private _generateCommandItems(): QuickBarItem[] {
private _generateCommandItems(): CommandItem[] {
return [
...this._generateReloadCommands(),
...this._generateServerControlCommands(),
...this._generateNavigationCommands(),
].sort((a, b) => compare(a.text.toLowerCase(), b.text.toLowerCase()));
].sort((a, b) =>
compare(a.filterText.toLowerCase(), b.filterText.toLowerCase())
);
}
private _generateReloadCommands(): QuickBarItem[] {
private _generateReloadCommands(): CommandItem[] {
const reloadableDomains = componentsWithService(this.hass, "reload").sort();
return reloadableDomains.map((domain) => ({
text:
return reloadableDomains.map((domain) => {
const categoryKey = "reload";
const categoryText = this._getCommandCategoryLabel(categoryKey);
const primaryText =
this.hass.localize(`ui.dialogs.quick-bar.commands.reload.${domain}`) ||
this.hass.localize(
"ui.dialogs.quick-bar.commands.reload.reload",
"domain",
domainToName(this.hass.localize, domain)
),
icon: domainIcon(domain),
action: () => this.hass.callService(domain, "reload"),
}));
);
return {
primaryText,
filterText: `${categoryText} ${primaryText}`,
icon: domainIcon(domain),
action: () => this.hass.callService(domain, "reload"),
categoryKey,
categoryText,
};
});
}
private _generateServerControlCommands(): QuickBarItem[] {
private _generateServerControlCommands(): CommandItem[] {
const serverActions = ["restart", "stop"];
return serverActions.map((action) =>
this._generateConfirmationCommand(
return serverActions.map((action) => {
const categoryKey = "server_control";
const categoryText = this._getCommandCategoryLabel(categoryKey);
const primaryText = this.hass.localize(
"ui.dialogs.quick-bar.commands.server_control.perform_action",
"action",
this.hass.localize(
`ui.dialogs.quick-bar.commands.server_control.${action}`
)
);
return this._generateConfirmationCommand(
{
text: this.hass.localize(
"ui.dialogs.quick-bar.commands.server_control.perform_action",
"action",
this.hass.localize(
`ui.dialogs.quick-bar.commands.server_control.${action}`
)
),
primaryText,
filterText: `${categoryText} ${primaryText}`,
categoryKey,
categoryText,
icon: DEFAULT_SERVER_ICON,
action: () => this.hass.callService("homeassistant", action),
},
this.hass.localize("ui.dialogs.generic.ok")
)
);
);
});
}
private _generateNavigationCommands(): QuickBarItem[] {
private _generateNavigationCommands(): CommandItem[] {
const panelItems = this._generateNavigationPanelCommands();
const sectionItems = this._generateNavigationConfigSectionCommands();
return this._withNavigationActions([...panelItems, ...sectionItems]);
return this._finalizeNavigationCommands([...panelItems, ...sectionItems]);
}
private _generateNavigationPanelCommands(): Omit<
QuickBarNavigationItem,
"action"
>[] {
private _generateNavigationPanelCommands(): BaseNavigationCommand[] {
return Object.keys(this.hass.panels).map((panelKey) => {
const panel = this.hass.panels[panelKey];
const translationKey = getPanelNameTranslationKey(panel);
const text = this.hass.localize(
"ui.dialogs.quick-bar.commands.navigation.navigate_to",
"panel",
this.hass.localize(translationKey) || panel.title || panel.url_path
);
const primaryText =
this.hass.localize(translationKey) || panel.title || panel.url_path;
return {
text,
icon: getPanelIcon(panel) || DEFAULT_NAVIGATION_ICON,
primaryText,
path: `/${panel.url_path}`,
};
});
}
private _generateNavigationConfigSectionCommands(): Partial<
QuickBarNavigationItem
>[] {
private _generateNavigationConfigSectionCommands(): BaseNavigationCommand[] {
const items: NavigationInfo[] = [];
for (const sectionKey of Object.keys(configSections)) {
@@ -422,28 +485,20 @@ export class QuickBar extends LitElement {
page: PageNavigation
): NavigationInfo | undefined {
if (page.component) {
const shortCaption = this.hass.localize(
const caption = this.hass.localize(
`ui.dialogs.quick-bar.commands.navigation.${page.component}`
);
if (page.translationKey) {
const caption = this.hass.localize(
"ui.dialogs.quick-bar.commands.navigation.navigate_to_config",
"panel",
shortCaption
);
return { ...page, text: caption };
}
return { ...page, primaryText: caption };
}
return undefined;
}
private _generateConfirmationCommand(
item: QuickBarItem,
item: CommandItem,
confirmText: ConfirmationDialogParams["confirmText"]
): QuickBarItem {
): CommandItem {
return {
...item,
action: () =>
@@ -454,13 +509,21 @@ export class QuickBar extends LitElement {
};
}
private _withNavigationActions(items) {
return items.map(({ text, icon, iconPath, path }) => ({
text,
icon,
iconPath,
action: () => navigate(this, path),
}));
private _finalizeNavigationCommands(
items: BaseNavigationCommand[]
): CommandItem[] {
return items.map((item) => {
const categoryKey = "navigation";
const categoryText = this._getCommandCategoryLabel(categoryKey);
return {
...item,
categoryKey,
categoryText,
filterText: `${categoryText} ${item.primaryText}`,
action: () => navigate(this, item.path),
};
});
}
private _toggleIfAlreadyOpened() {
@@ -479,6 +542,10 @@ export class QuickBar extends LitElement {
fuzzyFilterSort<QuickBarItem>(filter.trimLeft(), items)
);
private _getCommandCategoryLabel = (
categoryKey: CommandItem["categoryKey"]
) => this.hass.localize(`ui.dialogs.quick-bar.commands.types.${categoryKey}`);
static get styles() {
return [
haStyleDialog,
@@ -512,6 +579,27 @@ export class QuickBar extends LitElement {
color: var(--primary-text-color);
}
span.command-category {
font-weight: bold;
padding: 3px;
display: inline-flex;
border-radius: 6px;
color: black;
}
span.command-category.reload {
background: pink;
}
span.command-category.navigation {
background: lightblue;
}
span.command-category.server_control {
background: orange;
color: white;
}
.uni-virtualizer-host {
display: block;
position: relative;
@@ -526,7 +614,6 @@ export class QuickBar extends LitElement {
mwc-list-item {
width: 100%;
text-transform: capitalize;
}
`,
];

View File

@@ -1,8 +1,10 @@
import { fireEvent } from "../../common/dom/fire_event";
import { CommandItem } from "./ha-quick-bar";
export interface QuickBarParams {
entityFilter?: string;
commandMode?: boolean;
commandType?: CommandItem["categoryKey"];
}
export const loadQuickBar = () =>

View File

@@ -115,7 +115,6 @@ export class HuiEntityCardEditor extends LitElement
</div>
<div class="side-by-side">
<ha-entity-attribute-picker
allow-custom-value
.hass=${this.hass}
.entityId=${this._entity}
.label="${this.hass.localize(

View File

@@ -7,6 +7,7 @@ import {
} from "../dialogs/quick-bar/show-dialog-quick-bar";
import { HomeAssistant } from "../types";
import { storeState } from "../util/ha-pref-storage";
import { CommandItem } from "../dialogs/quick-bar/ha-quick-bar";
declare global {
interface HASSDomEvents {
@@ -32,15 +33,22 @@ export default <T extends Constructor<HassElement>>(superClass: T) =>
tinykeys(window, {
e: (ev) => this._showQuickBar(ev),
c: (ev) => this._showQuickBar(ev, true),
g: (ev) => this._showQuickBar(ev, true, "navigation"),
r: (ev) => this._showQuickBar(ev, true, "reload"),
s: (ev) => this._showQuickBar(ev, true, "server_control"),
});
}
private _showQuickBar(e: KeyboardEvent, commandMode = false) {
private _showQuickBar(
e: KeyboardEvent,
commandMode = false,
commandType?: CommandItem["categoryKey"]
) {
if (!this._canShowQuickBar(e)) {
return;
}
showQuickBar(this, { commandMode });
showQuickBar(this, { commandMode, commandType });
}
private _canShowQuickBar(e: KeyboardEvent) {

View File

@@ -288,7 +288,6 @@
"overflow_menu": "Overflow menu",
"successfully_saved": "Successfully saved",
"successfully_deleted": "Successfully deleted",
"error_required": "Required",
"copied": "Copied"
},
@@ -496,13 +495,16 @@
"rpi_gpio": "[%key:ui::panel::config::server_control::section::reloading::rpi_gpio%]"
},
"server_control": {
"perform_action": "{action} Server",
"perform_action": "{action} server",
"restart": "[%key:ui::panel::config::server_control::section::server_management::restart%]",
"stop": "[%key:ui::panel::config::server_control::section::server_management::stop%]"
},
"types": {
"reload": "Reload",
"navigation": "Go to",
"server_control": "Server"
},
"navigation": {
"navigate_to": "Navigate to {panel}",
"navigate_to_config": "Navigate to {panel} configuration",
"logs": "[%key:ui::panel::config::logs::caption%]",
"automation": "[%key:ui::panel::config::automation::caption%]",
"script": "[%key:ui::panel::config::script::caption%]",
@@ -1026,36 +1028,36 @@
"heading": "YAML configuration reloading",
"introduction": "Some parts of Home Assistant can reload without requiring a restart. Hitting reload will unload their current YAML configuration and load the new one.",
"reload": "Reload {domain}",
"core": "Reload location & customizations",
"group": "Reload groups, group entities, and notify services",
"automation": "Reload automations",
"script": "Reload scripts",
"scene": "Reload scenes",
"person": "Reload people",
"zone": "Reload zones",
"input_boolean": "Reload input booleans",
"input_text": "Reload input texts",
"input_number": "Reload input numbers",
"input_datetime": "Reload input date times",
"input_select": "Reload input selects",
"template": "Reload template entities",
"universal": "Reload universal media player entities",
"rest": "Reload rest entities and notify services",
"command_line": "Reload command line entities",
"filter": "Reload filter entities",
"statistics": "Reload statistics entities",
"generic": "Reload generic IP camera entities",
"generic_thermostat": "Reload generic thermostat entities",
"homekit": "Reload HomeKit",
"min_max": "Reload min/max entities",
"history_stats": "Reload history stats entities",
"trend": "Reload trend entities",
"ping": "Reload ping binary sensor entities",
"filesize": "Reload file size entities",
"telegram": "Reload telegram notify services",
"smtp": "Reload SMTP notify services",
"mqtt": "Reload manually configured MQTT entities",
"rpi_gpio": "Reload Raspberry Pi GPIO entities"
"core": "Location & customizations",
"group": "Groups, group entities, and notify services",
"automation": "Automations",
"script": "Scripts",
"scene": "Scenes",
"person": "People",
"zone": "Zones",
"input_boolean": "Input booleans",
"input_text": "Input texts",
"input_number": "Input numbers",
"input_datetime": "Input date times",
"input_select": "Input selects",
"template": "Template entities",
"universal": "Universal media player entities",
"rest": "Rest entities and notify services",
"command_line": "Command line entities",
"filter": "Filter entities",
"statistics": "Statistics entities",
"generic": "Generic IP camera entities",
"generic_thermostat": "Generic thermostat entities",
"homekit": "HomeKit",
"min_max": "Min/max entities",
"history_stats": "History stats entities",
"trend": "Trend entities",
"ping": "Ping binary sensor entities",
"filesize": "File size entities",
"telegram": "Telegram notify services",
"smtp": "SMTP notify services",
"mqtt": "Manually configured MQTT entities",
"rpi_gpio": "Raspberry Pi GPIO entities"
},
"server_management": {
"heading": "Server management",

View File

@@ -805,9 +805,7 @@
"more_info_control": {
"controls": "Controls",
"cover": {
"close_cover": "Tanca la coberta",
"close_tile_cover": "Inclinació de la coberta tancada",
"open_cover": "Obre la coberta",
"open_tilt_cover": "Inclinació de la coberta oberta",
"stop_cover": "Atura el moviment de la coberta"
},
@@ -1743,8 +1741,6 @@
"info": {
"built_using": "Creat utilitzant",
"caption": "Informació",
"copy_github": "Per GitHub",
"copy_raw": "Text en brut",
"custom_uis": "Interfícies d'usuari personalitzades:",
"description": "Consulta informació de la teva instal·lació de Home Assistant",
"developed_by": "Desenvolupat per un munt de gent fantàstica.",

View File

@@ -805,9 +805,7 @@
"more_info_control": {
"controls": "Ovládací prvky",
"cover": {
"close_cover": "Zavřít",
"close_tile_cover": "Snížit náklon",
"open_cover": "Otevřít",
"open_tilt_cover": "Zvýšit náklon",
"stop_cover": "Zastavit pohyb"
},
@@ -892,7 +890,7 @@
"scene": "Scény",
"script": "Skripty",
"server_control": "Ovládání serveru",
"tags": "Štítky",
"tags": "Značky",
"users": "Uživatelé",
"zone": "Zóny"
},
@@ -1298,7 +1296,7 @@
"sunset": "Západ slunce"
},
"tag": {
"label": "Štítek"
"label": "Značka"
},
"template": {
"label": "Šablona",
@@ -1743,8 +1741,6 @@
"info": {
"built_using": "Sestaveno pomocí",
"caption": "Informace",
"copy_github": "Pro GitHub",
"copy_raw": "Nezpracovaný text",
"custom_uis": "Vlastní uživatelská rozhraní:",
"description": "Informace o instalaci Home Assistant",
"developed_by": "Vyvinuto partou úžasných lidí.",
@@ -2285,13 +2281,13 @@
}
},
"tags": {
"add_tag": "Přidat štítek",
"automation_title": "Štítek {name} je naskenován",
"caption": "Štítky",
"confirm_remove": "Opravdu chcete odebrat štítek {tag}?",
"confirm_remove_title": "Odebrat štítek?",
"create_automation": "Vytvořit automatizaci se štítkem",
"description": "Správa štítků",
"add_tag": "Přidat značku",
"automation_title": "Značka {name} je naskenována",
"caption": "Značky",
"confirm_remove": "Opravdu chcete odebrat značku {tag}?",
"confirm_remove_title": "Odebrat značku?",
"create_automation": "Vytvořit automatizaci se značkou",
"description": "Správa značek",
"detail": {
"companion_apps": "doprovodné aplikace",
"create": "Vytvořit",
@@ -2299,20 +2295,20 @@
"delete": "Smazat",
"description": "Popis",
"name": "Název",
"new_tag": "Nový štítek",
"tag_id": "ID štítku",
"new_tag": "Nová značka",
"tag_id": "ID značky",
"tag_id_placeholder": "Automaticky vygenerováno, pokud zůstane prázdné",
"update": "Aktualizovat",
"usage": "Štítek může po naskenování spustit automatizaci. Můžete použít NFC tagy, QR kódy nebo jakýkoli jiný druh štítku. Použijte naše {companion_link} k zapsání tohoto štítku na programovatelný NFC tag nebo vytvořte QR kód níže."
"usage": "Značka může po naskenování spustit automatizaci. Můžete použít NFC značky, QR kódy nebo jakýkoli jiný druh značky. Použijte naše {companion_link} k zapsání této značky na programovatelnou NFC značku nebo vytvořte QR kód níže."
},
"edit": "Upravit",
"headers": {
"last_scanned": "Naposledy naskenováno",
"name": "Název"
},
"learn_more": "Další informace o štítcích",
"never_scanned": "Nikdy neskenováno",
"no_tags": "Žádné štítky",
"learn_more": "Další informace o značkách",
"never_scanned": "Nikdy naskenováno",
"no_tags": "Žádné značky",
"write": "Zapsat"
},
"users": {

View File

@@ -804,10 +804,6 @@
},
"more_info_control": {
"controls": "Steuerelemente",
"cover": {
"close_cover": "Abdeckung schließen",
"open_cover": "Abdeckung öffnen"
},
"details": "Details",
"dismiss": "Dialog ausblenden",
"edit": "Entität bearbeiten",
@@ -871,27 +867,6 @@
},
"quick-bar": {
"commands": {
"navigation": {
"areas": "Bereiche",
"automation": "Automatisierungen",
"core": "Allgemein",
"customize": "Anpassungen",
"devices": "Geräte",
"entities": "Entitäten",
"helpers": "Helfer",
"info": "Info",
"integrations": "Integrationen",
"logs": "Logs",
"navigate_to": "Navigiere zu {panel}",
"navigate_to_config": "Navigiere zur {panel} Konfiguration",
"person": "Personen",
"scene": "Szenen",
"script": "Skripte",
"server_control": "Serversteuerung",
"tags": "Tags",
"users": "Benutzer",
"zone": "Zonen"
},
"reload": {
"automation": "Automationen neu laden",
"command_line": "Komandozeilen Entätien neu laden",
@@ -1661,12 +1636,12 @@
"disable_selected": {
"button": "Ausgewählte deaktivieren",
"confirm_text": "Deaktivierte Entitäten werden zu Home Assistant nicht hinzugefügt.",
"confirm_title": "Möchtest du {number} {number, plural,\n one {{entity}}\n other {{entities}}\n} deaktivieren?"
"confirm_title": "Möchtest du {number} Entitäten deaktivieren?"
},
"enable_selected": {
"button": "Ausgewählte aktivieren",
"confirm_text": "Dadurch stehen sie in Home Assistant wieder zur Verfügung, wenn sie jetzt deaktiviert sind.",
"confirm_title": "Möchtest du {number} {number, plural,\n one {{entity}}\n other {{entities}}\n} aktivieren?"
"confirm_title": "Möchtest du {number} Entitäten aktivieren?"
},
"filter": {
"filter": "Filter",
@@ -1690,7 +1665,7 @@
"confirm_partly_text": "Du kannst nur {removable} der ausgewählten {selected} Entitäten entfernen. Entitäten können nur entfernt werden, wenn die Integration die Entitäten nicht mehr bereitstellt. Manchmal musst du Home Assistant neu starten, bevor du die Entitäten einer entfernten Integration entfernen kannst. Möchtest du die entfernbaren Entitäten wirklich entfernen?",
"confirm_partly_title": "Es können nur {number} ausgewählte Objekte entfernt werden.",
"confirm_text": "Du solltest sie aus deiner Lovelace-Konfiguration und deinen Automatisierungen entfernen, wenn sie diese Entitäten enthalten.",
"confirm_title": "Möchtest du {number} {number, plural,\n one {{entity}}\n other {{entities}}\n} entfernen?"
"confirm_title": "Möchtest du {number} Entitäten entfernen?"
},
"search": "Entitäten suchen",
"selected": "{number} ausgewählt",
@@ -1739,8 +1714,6 @@
"info": {
"built_using": "Gebaut mit",
"caption": "Info",
"copy_github": "Für GitHub",
"copy_raw": "Roher Text",
"custom_uis": "Benutzerdefinierte UIs:",
"description": "Informationen über deine Home Assistant Installation",
"developed_by": "Entwickelt von einem Haufen toller Leute.",
@@ -1760,9 +1733,6 @@
"checks": {
"cloud": {
"alexa_enabled": "Alexa aktiviert",
"can_reach_cert_server": "Zertifikatsserver erreichbar",
"can_reach_cloud": "Home Assistant Cloud erreichbar",
"can_reach_cloud_auth": "Authentifizierungsserver erreichbar",
"google_enabled": "Google aktiviert",
"logged_in": "Eingeloggt",
"remote_connected": "Remote verbunden",
@@ -2019,8 +1989,7 @@
"offline": "OZWDaemon offline",
"ready": "Bereit zum Verbinden",
"started": "Verbunden mit MQTT",
"starting": "Verbinde zu MQTT",
"stopped": "OpenZWave gestoppt"
"starting": "Verbinde zu MQTT"
},
"offline": "Offline",
"online": "Online",
@@ -2234,7 +2203,7 @@
"min_max": "Min/Max-Entitäten neu laden",
"mqtt": "Lade manuell konfigurierte MQTT-Entitäten neu",
"person": "Personen neu laden",
"reload": "{domain} neu laden",
"reload": "Neu laden {domain}",
"rest": "Rest Entitäten und Benachrichtigungsdienste neu laden",
"rpi_gpio": "Raspberry Pi GPIO Entitäten neu laden",
"scene": "Szenen neu laden",
@@ -2609,8 +2578,6 @@
"filter_attributes": "Attribute filtern",
"filter_entities": "Entitäten filtern",
"filter_states": "Zustände filtern",
"last_changed": "Letzte Änderung",
"last_updated": "Letzte Aktualisierung",
"more_info": "Mehr Info",
"no_entities": "Keine Entitäten",
"set_state": "Status setzen",
@@ -2709,7 +2676,7 @@
"navigate": "Navigieren",
"none": "Keine Aktion",
"toggle": "Umschalten",
"url": "URL"
"url": "Url"
},
"editor_service_data": "Servicedaten können nur im Code-Editor eingegeben werden",
"navigation_path": "Navigationspfad",
@@ -2806,7 +2773,7 @@
"camera_image": "Kamera-Entität",
"camera_view": "Kameraansicht",
"double_tap_action": "Doppeltipp-Aktion",
"entities": "Entitäten",
"entities": "Ungenutzte Elemente",
"entity": "Entität",
"hold_action": "Halte-Aktion",
"hours_to_show": "Stunden",
@@ -2831,7 +2798,7 @@
"theme": "Aussehen",
"title": "Titel",
"unit": "Einheit",
"url": "URL"
"url": "Url"
},
"glance": {
"columns": "Spalten",
@@ -2862,10 +2829,6 @@
"description": "Mit der Licht-Karte kannst du die Helligkeit des Lichts ändern.",
"name": "Licht"
},
"logbook": {
"description": "Die Logbuchkarte zeigt eine Liste von Ereignissen für Entitäten.",
"name": "Logbuch"
},
"map": {
"dark_mode": "Dunkler Modus?",
"default_zoom": "Standard-Zoom",
@@ -3064,7 +3027,7 @@
},
"view": {
"panel_mode": {
"description": "Dadurch wird die erste Karte in voller Breite angezeigt. Andere Karten und Marker in dieser Ansicht werden nicht angezeigt.",
"description": "Dadurch wird die erste Karte in voller Breite gerendert. Andere Karten in dieser Ansicht werden nicht gerendert.",
"title": "Panel-Modus?",
"warning_multiple_cards": "Diese Ansicht enthält mehr als eine Karte, in einer Bedienfeldansicht kann jedoch nur eine Karte angezeigt werden."
}

View File

@@ -1743,8 +1743,6 @@
"info": {
"built_using": "Built using",
"caption": "Info",
"copy_github": "For GitHub",
"copy_raw": "Raw Text",
"custom_uis": "Custom UIs:",
"description": "View info about your Home Assistant installation",
"developed_by": "Developed by a bunch of awesome people.",

View File

@@ -805,9 +805,7 @@
"more_info_control": {
"controls": "Controles",
"cover": {
"close_cover": "Cerrar persiana",
"close_tile_cover": "Cerrar la inclinación de la persiana",
"open_cover": "Abrir persiana",
"open_tilt_cover": "Inclinación de la persiana abierta",
"stop_cover": "Detener el movimiento de la persiana"
},
@@ -1743,8 +1741,6 @@
"info": {
"built_using": "Construido usando",
"caption": "Información",
"copy_github": "Para GitHub",
"copy_raw": "Texto sin procesar",
"custom_uis": "IU personalizadas:",
"description": "Ver información sobre tu instalación de Home Assistant",
"developed_by": "Desarrollado por un montón de gente impresionante.",

View File

@@ -805,9 +805,7 @@
"more_info_control": {
"controls": "Juhtelemendid",
"cover": {
"close_cover": "Sulge kate",
"close_tile_cover": "Sulge katte ribid",
"open_cover": "Ava kate",
"open_tilt_cover": "Ava katte ribid",
"stop_cover": "Peata katte liikumine"
},
@@ -1743,8 +1741,6 @@
"info": {
"built_using": "Ehitatud kasutades",
"caption": "Info",
"copy_github": "GitHubi jaoks",
"copy_raw": "Ainult tekst",
"custom_uis": "Kohandatud kasutajaliidesed:",
"description": "Kuva Home Assistant'i info",
"developed_by": "Tehtud paljude lahedate inimeste poolt.",

View File

@@ -1741,7 +1741,6 @@
"info": {
"built_using": "Buildelve:",
"caption": "Infó",
"copy_raw": "Nyers szöveg",
"custom_uis": "Egyéni felhasználói felületek:",
"description": "Telepítési információ megtekintése a Home Assistant-ról",
"developed_by": "Egy csomó fantasztikus ember által kifejlesztve.",

View File

@@ -712,7 +712,7 @@
},
"dialogs": {
"config_entry_system_options": {
"enable_new_entities_description": "Se disabilitato, le entità appena rilevate per {integration} non verranno automaticamente aggiunte a Home Assistant.",
"enable_new_entities_description": "Se disabilitato, le entità appena individuate per {integration} non verranno automaticamente aggiunte a Home Assistant.",
"enable_new_entities_label": "Abilita nuove entità aggiunte.",
"title": "Opzioni di sistema per {integration}",
"update": "Aggiornamento"
@@ -805,9 +805,7 @@
"more_info_control": {
"controls": "Controlli",
"cover": {
"close_cover": "Chiudere gli scuri",
"close_tile_cover": "Chiudere l'inclinazione della copertura",
"open_cover": "Aprire gli scuri",
"open_tilt_cover": "Aprire l'inclinazione della copertura",
"stop_cover": "Fermare il movimento della copertura"
},
@@ -874,28 +872,6 @@
},
"quick-bar": {
"commands": {
"navigation": {
"areas": "Aree",
"automation": "Automazioni",
"core": "Generale",
"customize": "Personalizzazioni",
"devices": "Dispositivi",
"entities": "Entità",
"helpers": "Aiutanti",
"info": "Informazioni",
"integrations": "Integrazioni",
"logs": "Registri",
"lovelace": "Plance di Lovelace",
"navigate_to": "Navigare verso {panel}",
"navigate_to_config": "Navigare fino a {panel} configurazione",
"person": "Persone",
"scene": "Scene",
"script": "Script",
"server_control": "Controlli del Server",
"tags": "Tag",
"users": "Utenti",
"zone": "Zone"
},
"reload": {
"automation": "Ricarica le Automazioni",
"command_line": "Ricarica le entità di riga di comando",
@@ -1743,8 +1719,6 @@
"info": {
"built_using": "Costruito usando",
"caption": "Informazioni",
"copy_github": "Per GitHub",
"copy_raw": "Testo non elaborato",
"custom_uis": "Interfacce Utente personalizzate:",
"description": "Visualizza le informazioni sull'installazione di Home Assistant",
"developed_by": "Sviluppato da un gruppo di persone fantastiche.",
@@ -1854,13 +1828,13 @@
"configured": "Configurato",
"description": "Gestisci le integrazioni",
"details": "Dettagli dell'integrazione",
"discovered": "Rilevato",
"discovered": "Scoperto",
"home_assistant_website": "Sito Web di Home Assistant",
"ignore": {
"confirm_delete_ignore": "Questo farà apparire di nuovo l'integrazione tra quelle rilevate quando verrà individuata. Questo potrebbe richiedere un riavvio o impiegare un po' di tempo.",
"confirm_delete_ignore": "Questo farà apparire di nuovo l'integrazione nelle vostre integrazioni scoperte quando verrà scoperta. Questo potrebbe richiedere un riavvio o richiedere un po' di tempo.",
"confirm_delete_ignore_title": "Smettere di ignorare {name}?",
"confirm_ignore": "Sei sicuro di non voler configurare questa integrazione? È possibile annullare questa operazione facendo clic su 'Mostra integrazioni ignorate' nel menu di overflow in alto a destra.",
"confirm_ignore_title": "Ignorare a rilevazione di {name}?",
"confirm_ignore_title": "Ignorare l'individuazione di {name}?",
"hide_ignored": "Nascondi integrazioni ignorate",
"ignore": "Ignora",
"ignored": "Ignorato",
@@ -1883,7 +1857,7 @@
},
"introduction": "In questa vista è possibile configurare i componenti e l'Home Assistant. Non tutto è ancora configurabile dall'interfaccia utente, ma ci stiamo lavorando.",
"logs": {
"caption": "Registri",
"caption": "Logs",
"clear": "Pulisci",
"description": "Vedi i logs di Home Assistant",
"details": "Dettagli registro ({level})",
@@ -2287,7 +2261,7 @@
"tags": {
"add_tag": "Aggiungi Etichetta",
"automation_title": "L'etichetta {name} è scansionata",
"caption": "Tag",
"caption": "Etichette",
"confirm_remove": "Sei sicuro di voler rimuovere il tag {tag}?",
"confirm_remove_title": "Rimuovere il tag?",
"create_automation": "Creare un'automazione con l'etichetta",
@@ -2349,7 +2323,6 @@
"update_user": "Aggiorna"
},
"picker": {
"add_user": "Aggiungi utente",
"headers": {
"group": "Gruppo",
"name": "Nome",
@@ -2360,7 +2333,7 @@
},
"zha": {
"add_device_page": {
"discovered_text": "I dispositivi verranno visualizzati qui una volta rilevati.",
"discovered_text": "I dispositivi verranno visualizzati qui una volta scoperti.",
"discovery_text": "I dispositivi rilevati verranno visualizzati qui. Seguire le istruzioni per il / i dispositivo / i e posizionare il / i dispositivo / i in modalità accoppiamento.",
"header": "Zigbee Home Automation - Aggiungi dispositivi",
"no_devices_found": "Nessun dispositivo trovato, assicurati che siano in modalità di associazione e tienili attivi mentre la scansione è in esecuzione.",
@@ -2630,8 +2603,6 @@
"filter_attributes": "Filtra attributi",
"filter_entities": "Filtra entità",
"filter_states": "Filtra stati",
"last_changed": "Ultima modifica",
"last_updated": "Ultimo aggiornamento",
"more_info": "Ulteriori informazioni",
"no_entities": "Nessuna entità",
"set_state": "Imposta Stato",
@@ -2883,10 +2854,6 @@
"description": "La scheda Luce consente di modificare la luminosità della luce.",
"name": "Luce"
},
"logbook": {
"description": "La scheda del Diario di bordo mostra un elenco di eventi per le entità.",
"name": "Diario di bordo"
},
"map": {
"dark_mode": "Modalità scura?",
"default_zoom": "Ingrandimento predefinito",

View File

@@ -497,8 +497,6 @@
"continue": "続行",
"copied": "コピー",
"delete": "削除",
"disable": "無効",
"enable": "有効",
"error_required": "必須",
"leave": "離れる",
"loading": "読込中",
@@ -509,10 +507,7 @@
"overflow_menu": "オーバーフローメニュー",
"previous": "前",
"refresh": "更新",
"remove": "削除",
"rename": "リネーム",
"save": "保存",
"skip": "スキップ",
"stay": "滞在",
"successfully_deleted": "正常に削除されました",
"successfully_saved": "正常に保存されました",
@@ -791,9 +786,7 @@
"more_info_control": {
"controls": "コントロール",
"cover": {
"close_cover": "カバーを閉じる",
"close_tile_cover": "カバーの傾きを閉じる",
"open_cover": "カバーを開く",
"open_tilt_cover": "オープンカバーの傾き",
"stop_cover": "カバーの動きを止めます"
},
@@ -860,28 +853,6 @@
},
"quick-bar": {
"commands": {
"navigation": {
"areas": "エリア",
"automation": "オートメーション",
"core": "一般",
"customize": "カスタマイズ",
"devices": "デバイス",
"entities": "エンティティ",
"helpers": "ヘルパー",
"info": "詳細",
"integrations": "インテグレーション",
"logs": "ログ",
"lovelace": "Lovelaceダッシュボード",
"navigate_to": "{panel}に移動します",
"navigate_to_config": "{panel}構成に移動します",
"person": "人々",
"scene": "シーン",
"script": "スクリプト",
"server_control": "サーバーコントロール",
"tags": "タグ",
"users": "ユーザー",
"zone": "場所"
},
"reload": {
"automation": "オートメーションの再読込",
"command_line": "コマンドラインエンティティをリロードする",
@@ -1336,22 +1307,6 @@
"only_editable": "automations.yaml で定義されたオートメーションのみが編集可能です。",
"pick_automation": "編集するオートメーションを選択",
"show_info_automation": "オートメーションに関する情報を表示"
},
"thingtalk": {
"create": "オートメーションを作成",
"link_devices": {
"ambiguous_entities": "1 つ以上のデバイスに複数の一致するエンティティがあります。",
"header": "すごい!今、我々はいくつかのデバイスをリンクする必要があります",
"unknown_placeholder": "不明なプレースホルダ"
},
"task_selection": {
"error_empty": "コマンドを入力するか、スキップをタップします。",
"error_unsupported": "私たちは自動化を作成できませんでした(まだ?",
"for_example": "例えば:",
"header": "新しいオートメーションを作成する",
"introduction": "このオートメーションの実行内容の下に入力すると、ホーム アシスタントのオートメーションに変換されます。",
"language_note": "注: 現在は英語のみがサポートされています。"
}
}
},
"cloud": {
@@ -2333,7 +2288,6 @@
"update_user": "更新"
},
"picker": {
"add_user": "ユーザーを追加する",
"headers": {
"group": "グループ",
"name": "名前",
@@ -2614,8 +2568,6 @@
"filter_attributes": "フィルター属性",
"filter_entities": "エンティティのフィルター処理",
"filter_states": "状態のフィルター処理",
"last_changed": "最終変更",
"last_updated": "最終更新",
"more_info": "もっと見る",
"no_entities": "エンティティなし",
"set_state": "状態を設定",
@@ -2843,10 +2795,6 @@
"description": "Glance カードは、複数のセンサーをコンパクトな概要でグループ化するのに便利です。",
"name": "一覧"
},
"grid": {
"description": "グリッド カードを使用すると、グリッドに複数のカードを表示できます。",
"name": "グリッド"
},
"history-graph": {
"description": "履歴グラフ カードを使用すると、一覧表示された各エンティティのグラフを表示できます。",
"name": "履歴グラフ"
@@ -2867,10 +2815,6 @@
"description": "ライトカードを使用すると、ライトの明るさを変更できます。",
"name": "照明"
},
"logbook": {
"description": "ログブックカードには、エンティティのイベントの一覧が表示されます。",
"name": "ログブック"
},
"map": {
"dark_mode": "ダークモード?",
"default_zoom": "デフォルトのズーム",
@@ -3058,8 +3002,7 @@
"sub-element-editor": {
"types": {
"footer": "フッタ エディタ",
"header": "ヘッダーエディター",
"row": "エンティティエディタ"
"header": "ヘッダーエディター"
}
},
"suggest_card": {
@@ -3328,7 +3271,6 @@
"header": "ダッシュボード"
},
"enable_shortcuts": {
"description": "UI でさまざまな操作を実行するためのキーボード ショートカットを有効または無効にします。",
"header": "キーボード ショートカット"
},
"force_narrow": {
@@ -3420,9 +3362,6 @@
"header": "バイブレーション機能"
}
},
"shopping_list": {
"start_conversation": "会話を開始する"
},
"shopping-list": {
"add_item": "アイテムを追加",
"clear_completed": "完了したアイテムを削除",

View File

@@ -805,9 +805,7 @@
"more_info_control": {
"controls": "Kontroller",
"cover": {
"close_cover": "Lukk dekselet",
"close_tile_cover": "Lukk dekkevinkel",
"open_cover": "Åpne dekselet",
"open_tilt_cover": "Åpne dekkevinkel",
"stop_cover": "Stopp dekke fra å bevege seg"
},

View File

@@ -588,7 +588,7 @@
"cleared_device_class": "niets gedetecteerd (geen {device_class} gedetecteerd)",
"detected_device_class": "gedetecteerd {device_class}",
"rose": "opkomst",
"set": "ondergang",
"set": "stel in",
"turned_off": "is uitgeschakeld",
"turned_on": "is ingeschakeld",
"was_at_home": "was thuis",
@@ -804,13 +804,6 @@
},
"more_info_control": {
"controls": "Besturing",
"cover": {
"close_cover": "Sluit zonnewering",
"close_tile_cover": "Sluit klep",
"open_cover": "Open zonnewering",
"open_tilt_cover": "Open klep",
"stop_cover": "Stop beweging van zonnewering"
},
"details": "Details",
"dismiss": "Dialoogvenster sluiten",
"edit": "Entiteit bewerken",
@@ -991,7 +984,7 @@
"notification_drawer": {
"click_to_configure": "Klik op de knop om {entity} te configureren",
"close": "Sluiten",
"dismiss_all": "Alles verbergen",
"dismiss_all": "Alles afkeuren",
"empty": "Geen notificaties",
"title": "Notificaties"
},
@@ -1352,7 +1345,7 @@
"show_info_automation": "Informatie weergeven over automatisering"
},
"thingtalk": {
"create": "Automatisering maken",
"create": "Creëer automatisering",
"link_devices": {
"ambiguous_entities": "Een of meer apparaten hebben meer dan één overeenkomende entiteit. Kies het apparaat dat u wilt gebruiken.",
"header": "Geweldig! Nu moeten we enkele apparaten koppelen",
@@ -1362,7 +1355,7 @@
"error_empty": "Voer een commando in of druk op overslaan.",
"error_unsupported": "Daar konden we (nog) geen automatisering voor maken.",
"for_example": "Bijvoorbeeld:",
"header": "Een nieuwe automatisering maken",
"header": "Creëer een nieuwe automatisering",
"introduction": "Typ hieronder wat deze automatisering zou moeten doen, en we zullen proberen om het om te zetten in een Home Assistant automatisering.",
"language_note": "Opmerking: voorlopig wordt alleen Engels ondersteund."
}
@@ -1762,12 +1755,11 @@
"checks": {
"cloud": {
"alexa_enabled": "Alexa ingeschakeld",
"can_reach_cert_server": "Bereik de certificaat server",
"can_reach_cert_server": "Bereik de certificaatserver",
"can_reach_cloud": "Bereik Home Assistant Cloud",
"can_reach_cloud_auth": "Bereik authenticatieserver",
"google_enabled": "Google ingeschakeld",
"logged_in": "Ingelogd",
"relayer_connected": "Relayer verbonden",
"remote_connected": "Op afstand verbonden",
"remote_enabled": "Op afstand ingeschakeld",
"subscription_expiration": "Abonnement vervalt"
@@ -2347,7 +2339,7 @@
"update_user": "Bijwerken"
},
"picker": {
"add_user": "Gebruiker toevoegen",
"add_user": "Voeg gebruiker toe",
"headers": {
"group": "Groep",
"name": "Naam",
@@ -2968,7 +2960,7 @@
},
"edit_card": {
"add": "Kaart toevoegen",
"clear": "Leegmaken",
"clear": "Wis",
"confirm_cancel": "Weet u zeker dat u wilt afbreken?",
"delete": "Verwijder kaart",
"duplicate": "Dupliceer kaart",
@@ -3012,7 +3004,7 @@
"header-footer": {
"choose_header_footer": "Kies een {type}",
"footer": "Voettekst",
"header": "Koptekst",
"header": "Header",
"types": {
"buttons": {
"name": "Knoppen"
@@ -3072,7 +3064,7 @@
"sub-element-editor": {
"types": {
"footer": "Voettekst Editor",
"header": "Koptekst Editor",
"header": "Header Editor",
"row": "Entiteitsrij Editor"
}
},
@@ -3390,7 +3382,7 @@
},
"push_notifications": {
"add_device_prompt": {
"input_label": "Naam van het apparaat",
"input_label": "Apparaatnaam",
"title": "Hoe moet dit apparaat genoemd worden?"
},
"description": "Verstuur meldingen naar dit apparaat.",

View File

@@ -805,9 +805,7 @@
"more_info_control": {
"controls": "Sterowanie",
"cover": {
"close_cover": "Zamknij roletę",
"close_tile_cover": "Przechylenie zamkniętej rolety",
"open_cover": "Otwórz roletę",
"open_tilt_cover": "Przechylenie otwartej rolety",
"stop_cover": "Wstrzymanie rolety"
},
@@ -1774,7 +1772,7 @@
},
"homeassistant": {
"arch": "Architektura procesora",
"dev": "Wersja deweloperska",
"dev": "Wersja rozwojowa",
"docker": "Docker",
"hassio": "HassOS",
"installation_type": "Typ instalacji",

View File

@@ -377,7 +377,7 @@
"low": "низкий",
"on_off": "Вкл / Выкл",
"operation": "Режим работы",
"preset_mode": "Пресет",
"preset_mode": "Предустановка",
"swing_mode": "Режим качания воздушных шторок",
"target_humidity": "Заданная влажность",
"target_temperature": "Заданная температура",
@@ -1736,8 +1736,6 @@
"info": {
"built_using": "Создано с использованием",
"caption": "О системе",
"copy_github": "Для GitHub",
"copy_raw": "Необработанный текст",
"custom_uis": "Кастомные интерфейсы:",
"description": "Информация о системе",
"developed_by": "Разработано множеством замечательных людей.",

View File

@@ -804,10 +804,6 @@
},
"more_info_control": {
"controls": "控制项",
"cover": {
"close_cover": "关闭卷帘",
"open_cover": "打开卷帘"
},
"details": "详情",
"dismiss": "关闭对话框",
"edit": "编辑实体",
@@ -871,28 +867,6 @@
},
"quick-bar": {
"commands": {
"navigation": {
"areas": "区域注册表",
"automation": "自动化",
"core": "通用",
"customize": "自定义",
"devices": "设备",
"entities": "实体注册表",
"helpers": "辅助元素",
"info": "信息",
"integrations": "集成",
"logs": "日志",
"lovelace": "Lovelace 仪表盘",
"navigate_to": "导航到{panel}",
"navigate_to_config": "导航到{panel}配置",
"person": "人员",
"scene": "场景",
"script": "脚本",
"server_control": "服务控制",
"tags": "标签",
"users": "用户",
"zone": "地点"
},
"reload": {
"automation": "重载自动化",
"command_line": "重载命令行实体",
@@ -910,7 +884,7 @@
"input_select": "重载多项选择器",
"input_text": "重载文字输入",
"min_max": "重载最小值/最大值实体",
"mqtt": "重载手动配置的 MQTT 实体",
"mqtt": "重载手动配置的 mqtt 实体",
"person": "重载人员",
"ping": "重载 ping 二元传感器实体",
"reload": "重载{domain}",
@@ -918,7 +892,7 @@
"rpi_gpio": "重载树莓派 GPIO 实体",
"scene": "重载场景",
"script": "重载脚本",
"smtp": "重载 SMTP 通知服务",
"smtp": "重载 smtp 通知服务",
"statistics": "重载 statistics 实体",
"telegram": "重载 telegram 通知服务",
"template": "重载模板实体",
@@ -1740,8 +1714,6 @@
"info": {
"built_using": "建于",
"caption": "信息",
"copy_github": "用于 GitHub",
"copy_raw": "原始文本",
"custom_uis": "自定义用户界面:",
"description": "查看关于此 Home Assistant 安装的信息",
"developed_by": "由一帮很 Awesome~~~ 的人开发。",
@@ -2210,8 +2182,6 @@
},
"picker": {
"add_script": "添加脚本",
"duplicate": "制作副本",
"duplicate_script": "复制脚本",
"edit_script": "编辑脚本",
"header": "脚本编辑器",
"headers": {
@@ -2248,7 +2218,7 @@
"input_text": "重载文字输入",
"introduction": "Home Assistant 中的部分配置可以直接重载,而无需重启服务。点击重载按钮将重新载入新的配置。",
"min_max": "重载最小值/最大值实体",
"mqtt": "重载手动配置的 MQTT 实体",
"mqtt": "重载手动配置的 mqtt 实体",
"person": "重载人员",
"ping": "重载 ping 二元传感器实体",
"reload": "重载{domain}",
@@ -2256,7 +2226,7 @@
"rpi_gpio": "重载树莓派 GPIO 实体",
"scene": "重载场景",
"script": "重载脚本",
"smtp": "重载 SMTP 通知服务",
"smtp": "重载 smtp 通知服务",
"statistics": "重载 statistics 实体",
"telegram": "重载 telegram 通知服务",
"template": "重载模板实体",
@@ -2346,7 +2316,6 @@
"update_user": "更新"
},
"picker": {
"add_user": "添加用户",
"headers": {
"group": "群组",
"name": "名称",
@@ -2627,8 +2596,6 @@
"filter_attributes": "输入筛选属性",
"filter_entities": "输入筛选实体",
"filter_states": "输入筛选状态",
"last_changed": "上次变化",
"last_updated": "上次更新",
"more_info": "更多信息",
"no_entities": "没有可用实体",
"set_state": "设置状态",
@@ -2880,10 +2847,6 @@
"description": "“灯光”卡片用于调整灯的亮度。",
"name": "灯光"
},
"logbook": {
"description": "“日志”卡片可显示实体的事件列表。",
"name": "日志"
},
"map": {
"dark_mode": "夜间模式?",
"default_zoom": "默认缩放",

View File

@@ -805,9 +805,7 @@
"more_info_control": {
"controls": "控制",
"cover": {
"close_cover": "關閉窗簾",
"close_tile_cover": "開啟窗簾",
"open_cover": "開啟窗簾",
"open_tilt_cover": "開啟窗簾",
"stop_cover": "停止窗簾"
},
@@ -874,28 +872,6 @@
},
"quick-bar": {
"commands": {
"navigation": {
"areas": "分區",
"automation": "自動化",
"core": "一般設定",
"customize": "自訂化",
"devices": "設備",
"entities": "實體",
"helpers": "助手",
"info": "更多資訊",
"integrations": "整合",
"logs": "記錄",
"lovelace": "Lovelace 主面板",
"navigate_to": "導航至 {panel}",
"navigate_to_config": "導航至 {panel} 設定",
"person": "人員",
"scene": "場景",
"script": "腳本",
"server_control": "伺服器控制",
"tags": "標籤",
"users": "用戶",
"zone": "區域"
},
"reload": {
"automation": "重新載入自動化",
"command_line": "重新載入命令列實體",
@@ -2347,7 +2323,6 @@
"update_user": "更新"
},
"picker": {
"add_user": "新增用戶",
"headers": {
"group": "群組",
"name": "名稱",
@@ -2628,8 +2603,6 @@
"filter_attributes": "屬性過濾器",
"filter_entities": "實體過濾器",
"filter_states": "狀態過濾器",
"last_changed": "上次變更",
"last_updated": "最後更新",
"more_info": "更多資訊",
"no_entities": "無實體",
"set_state": "設定狀態",
@@ -2881,10 +2854,6 @@
"description": "燈光面板可供變更燈光的亮度與開關。",
"name": "燈光面板"
},
"logbook": {
"description": "日誌面板顯示實體事件列表。",
"name": "日誌面板"
},
"map": {
"dark_mode": "深色模式?",
"default_zoom": "預設大小",