Compare commits

..

1 Commits

Author SHA1 Message Date
Ludeeus
2a4cebf724 Block update on error and not running state 2021-03-01 23:12:13 +00:00
112 changed files with 1547 additions and 11263 deletions

View File

@@ -7,7 +7,7 @@ on:
branches:
- dev
paths:
- src/translations/en.json
- translations/en.json
env:
NODE_VERSION: 12

View File

@@ -85,11 +85,6 @@ gulp.task("copy-translations-app", async () => {
copyTranslations(staticDir);
});
gulp.task("copy-translations-supervisor", async () => {
const staticDir = paths.hassio_output_static;
copyTranslations(staticDir);
});
gulp.task("copy-static-app", async () => {
const staticDir = paths.app_output_static;
// Basic static files

View File

@@ -10,8 +10,6 @@ require("./gen-icons-json.js");
require("./webpack.js");
require("./compress.js");
require("./rollup.js");
require("./gather-static.js");
require("./translations.js");
gulp.task(
"develop-hassio",
@@ -22,8 +20,6 @@ gulp.task(
"clean-hassio",
"gen-icons-json",
"gen-index-hassio-dev",
"build-supervisor-translations",
"copy-translations-supervisor",
env.useRollup() ? "rollup-watch-hassio" : "webpack-watch-hassio"
)
);
@@ -36,8 +32,6 @@ gulp.task(
},
"clean-hassio",
"gen-icons-json",
"build-supervisor-translations",
"copy-translations-supervisor",
env.useRollup() ? "rollup-prod-hassio" : "webpack-prod-hassio",
"gen-index-hassio-prod",
...// Don't compress running tests

View File

@@ -266,7 +266,6 @@ gulp.task(taskName, function () {
TRANSLATION_FRAGMENTS.forEach((fragment) => {
delete data.ui.panel[fragment];
});
delete data.supervisor;
return data;
})
)
@@ -343,62 +342,6 @@ gulp.task(
}
);
gulp.task("build-translation-fragment-supervisor", function () {
return gulp
.src(fullDir + "/*.json")
.pipe(transform((data) => data.supervisor))
.pipe(gulp.dest(workDir + "/supervisor"));
});
gulp.task("build-translation-flatten-supervisor", function () {
return gulp
.src(workDir + "/supervisor/*.json")
.pipe(
transform(function (data) {
// Polymer.AppLocalizeBehavior requires flattened json
return flatten(data);
})
)
.pipe(gulp.dest(outDir));
});
gulp.task("build-translation-write-metadata", function writeMetadata() {
return gulp
.src(
[
path.join(paths.translations_src, "translationMetadata.json"),
workDir + "/testMetadata.json",
workDir + "/translationFingerprints.json",
],
{ allowEmpty: true }
)
.pipe(merge({}))
.pipe(
transform(function (data) {
const newData = {};
Object.entries(data).forEach(([key, value]) => {
// Filter out translations without native name.
if (value.nativeName) {
newData[key] = value;
} else {
console.warn(
`Skipping language ${key}. Native name was not translated.`
);
}
});
return newData;
})
)
.pipe(
transform((data) => ({
fragments: TRANSLATION_FRAGMENTS,
translations: data,
}))
)
.pipe(rename("translationMetadata.json"))
.pipe(gulp.dest(workDir));
});
gulp.task(
"build-translations",
gulp.series(
@@ -410,20 +353,41 @@ gulp.task(
gulp.parallel(...splitTasks),
"build-flattened-translations",
"build-translation-fingerprints",
"build-translation-write-metadata"
)
);
gulp.task(
"build-supervisor-translations",
gulp.series(
"clean-translations",
"ensure-translations-build-dir",
"build-master-translation",
"build-merged-translations",
"build-translation-fragment-supervisor",
"build-translation-flatten-supervisor",
"build-translation-fingerprints",
"build-translation-write-metadata"
function writeMetadata() {
return gulp
.src(
[
path.join(paths.translations_src, "translationMetadata.json"),
workDir + "/testMetadata.json",
workDir + "/translationFingerprints.json",
],
{ allowEmpty: true }
)
.pipe(merge({}))
.pipe(
transform(function (data) {
const newData = {};
Object.entries(data).forEach(([key, value]) => {
// Filter out translations without native name.
if (value.nativeName) {
newData[key] = value;
} else {
console.warn(
`Skipping language ${key}. Native name was not translated.`
);
}
});
return newData;
})
)
.pipe(
transform((data) => ({
fragments: TRANSLATION_FRAGMENTS,
translations: data,
}))
)
.pipe(rename("translationMetadata.json"))
.pipe(gulp.dest(workDir));
}
)
);

View File

@@ -137,12 +137,7 @@ gulp.task("webpack-watch-hassio", () => {
isProdBuild: false,
latestBuild: true,
})
).watch({ ignored: /build-translations/ }, doneHandler());
gulp.watch(
path.join(paths.translations_src, "en.json"),
gulp.series("build-supervisor-translations", "copy-translations-supervisor")
);
).watch({}, doneHandler());
});
gulp.task("webpack-prod-hassio", () =>

View File

@@ -34,7 +34,6 @@ module.exports = {
hassio_dir: path.resolve(__dirname, "../hassio"),
hassio_output_root: path.resolve(__dirname, "../hassio/build"),
hassio_output_static: path.resolve(__dirname, "../hassio/build/static"),
hassio_output_latest: path.resolve(
__dirname,
"../hassio/build/frontend_latest"

View File

@@ -100,7 +100,7 @@ class HcLayout extends LitElement {
display: block;
margin: 0;
}
.hero {
border-radius: 4px 4px 0 0;
}

View File

@@ -15,7 +15,6 @@ import {
HassioAddonInfo,
HassioAddonRepository,
} from "../../../src/data/hassio/addon";
import { Supervisor } from "../../../src/data/supervisor/supervisor";
import { HomeAssistant } from "../../../src/types";
import "../components/hassio-card-content";
import { filterAndSort } from "../components/hassio-filter-addons";
@@ -24,8 +23,6 @@ import { hassioStyle } from "../resources/hassio-style";
class HassioAddonRepositoryEl extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public supervisor!: Supervisor;
@property({ attribute: false }) public repo!: HassioAddonRepository;
@property({ attribute: false }) public addons!: HassioAddonInfo[];
@@ -57,11 +54,7 @@ class HassioAddonRepositoryEl extends LitElement {
return html`
<div class="content">
<p class="description">
${this.supervisor.localize(
"store.no_results_found",
"repository",
repo.name
)}
No results found in "${repo.name}."
</p>
</div>
`;
@@ -90,13 +83,11 @@ class HassioAddonRepositoryEl extends LitElement {
: mdiPuzzle}
.iconTitle=${addon.installed
? addon.update_available
? this.supervisor.localize(
"common.new_version_available"
)
: this.supervisor.localize("addon.installed")
? "New version available"
: "Add-on is installed"
: addon.available
? this.supervisor.localize("addon.not_installed")
: this.supervisor.localize("addon.not_available")}
? "Add-on is not installed"
: "Add-on is not available on your system"}
.iconClass=${addon.installed
? addon.update_available
? "update"

View File

@@ -1,4 +1,3 @@
import "../components/supervisor-connectivity";
import "@material/mwc-icon-button/mwc-icon-button";
import { ActionDetail } from "@material/mwc-list/mwc-list-foundation";
import "@material/mwc-list/mwc-list-item";
@@ -15,9 +14,7 @@ import { html, TemplateResult } from "lit-html";
import memoizeOne from "memoize-one";
import { atLeastVersion } from "../../../src/common/config/version";
import { fireEvent } from "../../../src/common/dom/fire_event";
import { navigate } from "../../../src/common/navigate";
import "../../../src/common/search/search-input";
import { extractSearchParam } from "../../../src/common/url/search-params";
import "../../../src/components/ha-button-menu";
import "../../../src/components/ha-svg-icon";
import {
@@ -80,16 +77,13 @@ class HassioAddonStore extends LitElement {
return html`
<hass-tabs-subpage
.hass=${this.hass}
.localizeFunc=${this.supervisor.localize}
.narrow=${this.narrow}
.route=${this.route}
.tabs=${supervisorTabs}
hassio
main-page
supervisor
.tabs=${supervisorTabs}
>
<span slot="header">
${this.supervisor.localize("panel.store")}
</span>
<span slot="header">Add-on Store</span>
<ha-button-menu
corner="BOTTOM_START"
slot="toolbar-icon"
@@ -99,15 +93,15 @@ class HassioAddonStore extends LitElement {
<ha-svg-icon .path=${mdiDotsVertical}></ha-svg-icon>
</mwc-icon-button>
<mwc-list-item>
${this.supervisor.localize("store.repositories")}
Repositories
</mwc-list-item>
<mwc-list-item>
${this.supervisor.localize("common.reload")}
Reload
</mwc-list-item>
${this.hass.userData?.showAdvanced &&
atLeastVersion(this.hass.config.version, 0, 117)
? html`<mwc-list-item>
${this.supervisor.localize("store.registries")}
Registries
</mwc-list-item>`
: ""}
</ha-button-menu>
@@ -128,26 +122,20 @@ class HassioAddonStore extends LitElement {
${!this.hass.userData?.showAdvanced
? html`
<div class="advanced">
Missing add-ons? Enable advanced mode on
<a href="/profile" target="_top">
${this.supervisor.localize("store.missing_addons")}
your profile page
</a>
.
</div>
`
: ""}
<supervisor-connectivity .supervisor=${this.supervisor}>
</supervisor-connectivity>
</hass-tabs-subpage>
`;
}
protected firstUpdated(changedProps: PropertyValues) {
super.firstUpdated(changedProps);
const repositoryUrl = extractSearchParam("repository_url");
navigate(this, "/hassio/store", true);
if (repositoryUrl) {
this._manageRepositories(repositoryUrl);
}
this.addEventListener("hass-api-called", (ev) => this.apiCalled(ev));
this._loadData();
}
@@ -170,7 +158,6 @@ class HassioAddonStore extends LitElement {
.repo=${repo}
.addons=${filteredAddons}
.filter=${filter!}
.supervisor=${this.supervisor}
></hassio-addon-repository>
`
: html``;
@@ -181,7 +168,7 @@ class HassioAddonStore extends LitElement {
private _handleAction(ev: CustomEvent<ActionDetail>) {
switch (ev.detail.index) {
case 0:
this._manageRepositoriesClicked();
this._manageRepositories();
break;
case 1:
this.refreshData();
@@ -198,25 +185,21 @@ class HassioAddonStore extends LitElement {
}
}
private _manageRepositoriesClicked() {
this._manageRepositories();
}
private async _manageRepositories(url?: string) {
private async _manageRepositories() {
showRepositoriesDialog(this, {
supervisor: this.supervisor,
url,
repos: this.supervisor.addon.repositories,
loadData: () => this._loadData(),
});
}
private async _manageRegistries() {
showRegistriesDialog(this, { supervisor: this.supervisor });
showRegistriesDialog(this);
}
private async _loadData() {
fireEvent(this, "supervisor-collection-refresh", { collection: "addon" });
fireEvent(this, "supervisor-collection-refresh", {
collection: "supervisor",
fireEvent(this, "supervisor-colllection-refresh", { colllection: "addon" });
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "supervisor",
});
}

View File

@@ -25,7 +25,6 @@ import {
fetchHassioHardwareAudio,
HassioHardwareAudioDevice,
} from "../../../../src/data/hassio/hardware";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { haStyle } from "../../../../src/resources/styles";
import { HomeAssistant } from "../../../../src/types";
import { suggestAddonRestart } from "../../dialogs/suggestAddonRestart";
@@ -35,8 +34,6 @@ import { hassioStyle } from "../../resources/hassio-style";
class HassioAddonAudio extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public supervisor!: Supervisor;
@property({ attribute: false }) public addon!: HassioAddonDetails;
@internalProperty() private _error?: string;
@@ -51,16 +48,12 @@ class HassioAddonAudio extends LitElement {
protected render(): TemplateResult {
return html`
<ha-card
.header=${this.supervisor.localize("addon.configuration.audio.header")}
>
<ha-card header="Audio">
<div class="card-content">
${this._error ? html` <div class="errors">${this._error}</div> ` : ""}
<paper-dropdown-menu
.label=${this.supervisor.localize(
"addon.configuration.audio.input"
)}
label="Input"
@iron-select=${this._setInputDevice}
>
<paper-listbox
@@ -71,17 +64,15 @@ class HassioAddonAudio extends LitElement {
${this._inputDevices &&
this._inputDevices.map((item) => {
return html`
<paper-item device=${item.device || ""}>
${item.name}
</paper-item>
<paper-item device=${item.device || ""}
>${item.name}</paper-item
>
`;
})}
</paper-listbox>
</paper-dropdown-menu>
<paper-dropdown-menu
.label=${this.supervisor.localize(
"addon.configuration.audio.output"
)}
label="Output"
@iron-select=${this._setOutputDevice}
>
<paper-listbox
@@ -102,7 +93,7 @@ class HassioAddonAudio extends LitElement {
</div>
<div class="card-actions">
<ha-progress-button @click=${this._saveSettings}>
${this.supervisor.localize("common.save")}
Save
</ha-progress-button>
</div>
</ha-card>
@@ -161,7 +152,7 @@ class HassioAddonAudio extends LitElement {
const noDevice: HassioHardwareAudioDevice = {
device: "default",
name: this.supervisor.localize("addon.configuration.audio.default"),
name: "Default",
};
try {
@@ -198,7 +189,7 @@ class HassioAddonAudio extends LitElement {
try {
await setHassioAddonOption(this.hass, this.addon.slug, data);
if (this.addon?.state === "started") {
await suggestAddonRestart(this, this.hass, this.supervisor, this.addon);
await suggestAddonRestart(this, this.hass, this.addon);
}
} catch {
this._error = "Failed to set addon audio device";

View File

@@ -9,7 +9,6 @@ import {
} from "lit-element";
import "../../../../src/components/ha-circular-progress";
import { HassioAddonDetails } from "../../../../src/data/hassio/addon";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { haStyle } from "../../../../src/resources/styles";
import { HomeAssistant } from "../../../../src/types";
import { hassioStyle } from "../../resources/hassio-style";
@@ -21,8 +20,6 @@ import "./hassio-addon-network";
class HassioAddonConfigDashboard extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public supervisor!: Supervisor;
@property({ attribute: false }) public addon?: HassioAddonDetails;
protected render(): TemplateResult {
@@ -42,7 +39,6 @@ class HassioAddonConfigDashboard extends LitElement {
<hassio-addon-config
.hass=${this.hass}
.addon=${this.addon}
.supervisor=${this.supervisor}
></hassio-addon-config>
`
: ""}
@@ -51,7 +47,6 @@ class HassioAddonConfigDashboard extends LitElement {
<hassio-addon-network
.hass=${this.hass}
.addon=${this.addon}
.supervisor=${this.supervisor}
></hassio-addon-network>
`
: ""}
@@ -60,12 +55,11 @@ class HassioAddonConfigDashboard extends LitElement {
<hassio-addon-audio
.hass=${this.hass}
.addon=${this.addon}
.supervisor=${this.supervisor}
></hassio-addon-audio>
`
: ""}
`
: this.supervisor.localize("addon.configuration.no_configuration")}
: "This add-on does not expose configuration for you to mess with.... 👋"}
</div>
`;
}

View File

@@ -32,7 +32,6 @@ import {
setHassioAddonOption,
} from "../../../../src/data/hassio/addon";
import { extractApiErrorMessage } from "../../../../src/data/hassio/common";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { showConfirmationDialog } from "../../../../src/dialogs/generic/show-dialog-box";
import { haStyle } from "../../../../src/resources/styles";
import type { HomeAssistant } from "../../../../src/types";
@@ -47,8 +46,6 @@ class HassioAddonConfig extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public supervisor!: Supervisor;
@property({ type: Boolean }) private _configHasChanged = false;
@property({ type: Boolean }) private _valid = true;
@@ -65,15 +62,6 @@ class HassioAddonConfig extends LitElement {
@query("ha-yaml-editor") private _editor?: HaYamlEditor;
public computeLabel = (entry: HaFormSchema): string => {
return (
this.addon.translations[this.hass.language]?.configuration?.[entry.name]
?.name ||
this.addon.translations.en?.configuration?.[entry.name].name ||
entry.name
);
};
private _filteredShchema = memoizeOne(
(options: Record<string, unknown>, schema: HaFormSchema[]) => {
return schema.filter((entry) => entry.name in options || entry.required);
@@ -93,25 +81,17 @@ class HassioAddonConfig extends LitElement {
<h1>${this.addon.name}</h1>
<ha-card>
<div class="header">
<h2>
${this.supervisor.localize("addon.configuration.options.header")}
</h2>
<h2>Configuration</h2>
<div class="card-menu">
<ha-button-menu corner="BOTTOM_START" @action=${this._handleAction}>
<mwc-icon-button slot="trigger">
<ha-svg-icon .path=${mdiDotsVertical}></ha-svg-icon>
</mwc-icon-button>
<mwc-list-item .disabled=${!this._canShowSchema}>
${this._yamlMode
? this.supervisor.localize(
"addon.configuration.options.edit_in_ui"
)
: this.supervisor.localize(
"addon.configuration.options.edit_in_yaml"
)}
${this._yamlMode ? "Edit in UI" : "Edit in YAML"}
</mwc-list-item>
<mwc-list-item class="warning">
${this.supervisor.localize("common.reset_defaults")}
Reset to defaults
</mwc-list-item>
</ha-button-menu>
</div>
@@ -122,7 +102,6 @@ class HassioAddonConfig extends LitElement {
? html`<ha-form
.data=${this._options!}
@value-changed=${this._configChanged}
.computeLabel=${this.computeLabel}
.schema=${this._showOptional
? this.addon.schema!
: this._filteredShchema(
@@ -138,20 +117,12 @@ class HassioAddonConfig extends LitElement {
(this._canShowSchema && this.addon.schema) ||
this._valid
? ""
: html`
<div class="errors">
${this.supervisor.localize(
"addon.configuration.options.invalid_yaml"
)}
</div>
`}
: html` <div class="errors">Invalid YAML</div> `}
</div>
${hasHiddenOptions
? html`<ha-formfield
class="show-additional"
.label=${this.supervisor.localize(
"addon.configuration.options.show_unused_optional"
)}
label="Show unused optional configuration options"
>
<ha-switch
@change=${this._toggleOptional}
@@ -165,7 +136,7 @@ class HassioAddonConfig extends LitElement {
@click=${this._saveTapped}
.disabled=${!this._configHasChanged || !this._valid}
>
${this.supervisor.localize("common.save")}
Save
</ha-progress-button>
</div>
</ha-card>
@@ -230,10 +201,10 @@ class HassioAddonConfig extends LitElement {
button.progress = true;
const confirmed = await showConfirmationDialog(this, {
title: this.supervisor.localize("confirm.reset_options.title"),
text: this.supervisor.localize("confirm.reset_options.text"),
confirmText: this.supervisor.localize("common.reset_options"),
dismissText: this.supervisor.localize("common.cancel"),
title: this.addon.name,
text: "Are you sure you want to reset all your options?",
confirmText: "reset options",
dismissText: "no",
});
if (!confirmed) {
@@ -255,11 +226,9 @@ class HassioAddonConfig extends LitElement {
};
fireEvent(this, "hass-api-called", eventdata);
} catch (err) {
this._error = this.supervisor.localize(
"addon.common.update_available",
"error",
extractApiErrorMessage(err)
);
this._error = `Failed to reset addon configuration, ${extractApiErrorMessage(
err
)}`;
}
button.progress = false;
}
@@ -283,14 +252,12 @@ class HassioAddonConfig extends LitElement {
};
fireEvent(this, "hass-api-called", eventdata);
if (this.addon?.state === "started") {
await suggestAddonRestart(this, this.hass, this.supervisor, this.addon);
await suggestAddonRestart(this, this.hass, this.addon);
}
} catch (err) {
this._error = this.supervisor.localize(
"addon.configuration.options.failed_to_save",
"error",
extractApiErrorMessage(err)
);
this._error = `Failed to save addon configuration, ${extractApiErrorMessage(
err
)}`;
}
button.progress = false;
}

View File

@@ -19,7 +19,6 @@ import {
setHassioAddonOption,
} from "../../../../src/data/hassio/addon";
import { extractApiErrorMessage } from "../../../../src/data/hassio/common";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { haStyle } from "../../../../src/resources/styles";
import { HomeAssistant } from "../../../../src/types";
import { suggestAddonRestart } from "../../dialogs/suggestAddonRestart";
@@ -39,8 +38,6 @@ interface NetworkItemInput extends PaperInputElement {
class HassioAddonNetwork extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public supervisor!: Supervisor;
@property({ attribute: false }) public addon!: HassioAddonDetails;
@internalProperty() private _error?: string;
@@ -58,30 +55,16 @@ class HassioAddonNetwork extends LitElement {
}
return html`
<ha-card
.header=${this.supervisor.localize(
"addon.configuration.network.header"
)}
>
<ha-card header="Network">
<div class="card-content">
${this._error ? html` <div class="errors">${this._error}</div> ` : ""}
<table>
<tbody>
<tr>
<th>
${this.supervisor.localize(
"addon.configuration.network.container"
)}
</th>
<th>
${this.supervisor.localize(
"addon.configuration.network.host"
)}
</th>
<th>
${this.supervisor.localize("common.description")}
</th>
<th>Container</th>
<th>Host</th>
<th>Description</th>
</tr>
${this._config!.map((item) => {
return html`
@@ -90,15 +73,13 @@ class HassioAddonNetwork extends LitElement {
<td>
<paper-input
@value-changed=${this._configChanged}
placeholder="${this.supervisor.localize(
"addon.configuration.network.disabled"
)}"
placeholder="disabled"
.value=${item.host ? String(item.host) : ""}
.container=${item.container}
no-label-float
></paper-input>
</td>
<td>${this._computeDescription(item)}</td>
<td>${item.description}</td>
</tr>
`;
})}
@@ -107,10 +88,10 @@ class HassioAddonNetwork extends LitElement {
</div>
<div class="card-actions">
<ha-progress-button class="warning" @click=${this._resetTapped}>
${this.supervisor.localize("common.reset_defaults")}
Reset to defaults
</ha-progress-button>
<ha-progress-button @click=${this._saveTapped}>
${this.supervisor.localize("common.save")}
Save
</ha-progress-button>
</div>
</ha-card>
@@ -124,15 +105,6 @@ class HassioAddonNetwork extends LitElement {
}
}
private _computeDescription = (item: NetworkItem): string => {
return (
this.addon.translations[this.hass.language]?.network?.[item.container]
?.description ||
this.addon.translations.en?.network?.[item.container]?.description ||
item.description
);
};
private _setNetworkConfig(): void {
const network = this.addon.network || {};
const description = this.addon.network_description || {};
@@ -175,14 +147,12 @@ class HassioAddonNetwork extends LitElement {
};
fireEvent(this, "hass-api-called", eventdata);
if (this.addon?.state === "started") {
await suggestAddonRestart(this, this.hass, this.supervisor, this.addon);
await suggestAddonRestart(this, this.hass, this.addon);
}
} catch (err) {
this._error = this.supervisor.localize(
"addon.failed_to_reset",
"error",
extractApiErrorMessage(err)
);
this._error = `Failed to set addon network configuration, ${extractApiErrorMessage(
err
)}`;
}
button.progress = false;
@@ -211,14 +181,12 @@ class HassioAddonNetwork extends LitElement {
};
fireEvent(this, "hass-api-called", eventdata);
if (this.addon?.state === "started") {
await suggestAddonRestart(this, this.hass, this.supervisor, this.addon);
await suggestAddonRestart(this, this.hass, this.addon);
}
} catch (err) {
this._error = this.supervisor.localize(
"addon.failed_to_save",
"error",
extractApiErrorMessage(err)
);
this._error = `Failed to set addon network configuration, ${extractApiErrorMessage(
err
)}`;
}
button.progress = false;
}

View File

@@ -1,4 +1,3 @@
import "../../../../src/components/ha-card";
import {
css,
CSSResult,
@@ -20,14 +19,11 @@ import "../../../../src/layouts/hass-loading-screen";
import { haStyle } from "../../../../src/resources/styles";
import { HomeAssistant } from "../../../../src/types";
import { hassioStyle } from "../../resources/hassio-style";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
@customElement("hassio-addon-documentation-tab")
class HassioAddonDocumentationDashboard extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public supervisor!: Supervisor;
@property({ attribute: false }) public addon?: HassioAddonDetails;
@internalProperty() private _error?: string;
@@ -85,11 +81,9 @@ class HassioAddonDocumentationDashboard extends LitElement {
this.addon!.slug
);
} catch (err) {
this._error = this.supervisor.localize(
"addon.documentation.get_logs",
"error",
extractApiErrorMessage(err)
);
this._error = `Failed to get addon documentation, ${extractApiErrorMessage(
err
)}`;
}
}
}

View File

@@ -1,4 +1,3 @@
import "../components/supervisor-connectivity";
import {
mdiCogs,
mdiFileDocument,
@@ -22,7 +21,6 @@ import { extractSearchParam } from "../../../src/common/url/search-params";
import "../../../src/components/ha-circular-progress";
import {
fetchHassioAddonInfo,
fetchHassioAddonsInfo,
HassioAddonDetails,
} from "../../../src/data/hassio/addon";
import { extractApiErrorMessage } from "../../../src/data/hassio/common";
@@ -81,7 +79,7 @@ class HassioAddonDashboard extends LitElement {
const addonTabs: PageNavigation[] = [
{
translationKey: "addon.panel.info",
name: "Info",
path: `/hassio/addon/${this.addon.slug}/info`,
iconPath: mdiInformationVariant,
},
@@ -89,7 +87,7 @@ class HassioAddonDashboard extends LitElement {
if (this.addon.documentation) {
addonTabs.push({
translationKey: "addon.panel.documentation",
name: "Documentation",
path: `/hassio/addon/${this.addon.slug}/documentation`,
iconPath: mdiFileDocument,
});
@@ -98,12 +96,12 @@ class HassioAddonDashboard extends LitElement {
if (this.addon.version) {
addonTabs.push(
{
translationKey: "addon.panel.configuration",
name: "Configuration",
path: `/hassio/addon/${this.addon.slug}/config`,
iconPath: mdiCogs,
},
{
translationKey: "addon.panel.log",
name: "Log",
path: `/hassio/addon/${this.addon.slug}/logs`,
iconPath: mdiMathLog,
}
@@ -115,12 +113,11 @@ class HassioAddonDashboard extends LitElement {
return html`
<hass-tabs-subpage
.hass=${this.hass}
.localizeFunc=${this.supervisor.localize}
.narrow=${this.narrow}
.backPath=${this.addon.version ? "/hassio/dashboard" : "/hassio/store"}
.route=${route}
hassio
.tabs=${addonTabs}
supervisor
>
<span slot="header">${this.addon.name}</span>
<hassio-addon-router
@@ -130,8 +127,6 @@ class HassioAddonDashboard extends LitElement {
.supervisor=${this.supervisor}
.addon=${this.addon}
></hassio-addon-router>
<supervisor-connectivity .supervisor=${this.supervisor}>
</supervisor-connectivity>
</hass-tabs-subpage>
`;
}
@@ -177,17 +172,9 @@ class HassioAddonDashboard extends LitElement {
protected async firstUpdated(): Promise<void> {
if (this.route.path === "") {
const requestedAddon = extractSearchParam("addon");
if (requestedAddon) {
const addonsInfo = await fetchHassioAddonsInfo(this.hass);
const validAddon = addonsInfo.addons.some(
(addon) => addon.slug === requestedAddon
);
if (!validAddon) {
this._error = this.supervisor.localize("my.error_addon_not_found");
} else {
navigate(this, `/hassio/addon/${requestedAddon}`, true);
}
const addon = extractSearchParam("addon");
if (addon) {
navigate(this, `/hassio/addon/${addon}`, true);
}
}
this.addEventListener("hass-api-called", (ev) => this._apiCalled(ev));
@@ -203,8 +190,8 @@ class HassioAddonDashboard extends LitElement {
const path: string = pathSplit[pathSplit.length - 1];
if (["uninstall", "install", "update", "start", "stop"].includes(path)) {
fireEvent(this, "supervisor-collection-refresh", {
collection: "supervisor",
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "supervisor",
});
}

View File

@@ -50,7 +50,6 @@ import {
startHassioAddon,
stopHassioAddon,
uninstallHassioAddon,
updateHassioAddon,
validateHassioAddonOption,
} from "../../../../src/data/hassio/addon";
import {
@@ -69,8 +68,8 @@ import { HomeAssistant } from "../../../../src/types";
import { bytesToString } from "../../../../src/util/bytes-to-string";
import "../../components/hassio-card-content";
import "../../components/supervisor-metric";
import { showDialogSupervisorAddonUpdate } from "../../dialogs/addon/show-dialog-addon-update";
import { showHassioMarkdownDialog } from "../../dialogs/markdown/show-dialog-hassio-markdown";
import { showDialogSupervisorUpdate } from "../../dialogs/update/show-dialog-update";
import { hassioStyle } from "../../resources/hassio-style";
import { addonArchIsSupported } from "../../util/addon";
@@ -80,6 +79,63 @@ const STAGE_ICON = {
deprecated: mdiExclamationThick,
};
const PERMIS_DESC = {
stage: {
title: "Add-on Stage",
description: `Add-ons can have one of three stages:\n\n<ha-svg-icon path="${STAGE_ICON.stable}"></ha-svg-icon> **Stable**: These are add-ons ready to be used in production.\n\n<ha-svg-icon path="${STAGE_ICON.experimental}"></ha-svg-icon> **Experimental**: These may contain bugs, and may be unfinished.\n\n<ha-svg-icon path="${STAGE_ICON.deprecated}"></ha-svg-icon> **Deprecated**: These add-ons will no longer receive any updates.`,
},
rating: {
title: "Add-on Security Rating",
description:
"Home Assistant provides a security rating to each of the add-ons, which indicates the risks involved when using this add-on. The more access an add-on requires on your system, the lower the score, thus raising the possible security risks.\n\nA score is on a scale from 1 to 6. Where 1 is the lowest score (considered the most insecure and highest risk) and a score of 6 is the highest score (considered the most secure and lowest risk).",
},
host_network: {
title: "Host Network",
description:
"Add-ons usually run in their own isolated network layer, which prevents them from accessing the network of the host operating system. In some cases, this network isolation can limit add-ons in providing their services and therefore, the isolation can be lifted by the add-on author, giving the add-on full access to the network capabilities of the host machine. This gives the add-on more networking capabilities but lowers the security, hence, the security rating of the add-on will be lowered when this option is used by the add-on.",
},
homeassistant_api: {
title: "Home Assistant API Access",
description:
"This add-on is allowed to access your running Home Assistant instance directly via the Home Assistant API. This mode handles authentication for the add-on as well, which enables an add-on to interact with Home Assistant without the need for additional authentication tokens.",
},
full_access: {
title: "Full Hardware Access",
description:
"This add-on is given full access to the hardware of your system, by request of the add-on author. Access is comparable to the privileged mode in Docker. Since this opens up possible security risks, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on.",
},
hassio_api: {
title: "Supervisor API Access",
description:
"The add-on was given access to the Supervisor API, by request of the add-on author. By default, the add-on can access general version information of your system. When the add-on requests 'manager' or 'admin' level access to the API, it will gain access to control multiple parts of your Home Assistant system. This permission is indicated by this badge and will impact the security score of the addon negatively.",
},
docker_api: {
title: "Full Docker Access",
description:
"The add-on author has requested the add-on to have management access to the Docker instance running on your system. This mode gives the add-on full access and control to your entire Home Assistant system, which adds security risks, and could damage your system when misused. Therefore, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on.",
},
host_pid: {
title: "Host Processes Namespace",
description:
"Usually, the processes the add-on runs, are isolated from all other system processes. The add-on author has requested the add-on to have access to the system processes running on the host system instance, and allow the add-on to spawn processes on the host system as well. This mode gives the add-on full access and control to your entire Home Assistant system, which adds security risks, and could damage your system when misused. Therefore, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on.",
},
apparmor: {
title: "AppArmor",
description:
"AppArmor ('Application Armor') is a Linux kernel security module that restricts add-ons capabilities like network access, raw socket access, and permission to read, write, or execute specific files.\n\nAdd-on authors can provide their security profiles, optimized for the add-on, or request it to be disabled. If AppArmor is disabled, it will raise security risks and therefore, has a negative impact on the security score of the add-on.",
},
auth_api: {
title: "Home Assistant Authentication",
description:
"An add-on can authenticate users against Home Assistant, allowing add-ons to give users the possibility to log into applications running inside add-ons, using their Home Assistant username/password. This badge indicates if the add-on author requests this capability.",
},
ingress: {
title: "Ingress",
description:
"This add-on is using Ingress to embed its interface securely into Home Assistant.",
},
};
@customElement("hassio-addon-info")
class HassioAddonInfo extends LitElement {
@property({ type: Boolean }) public narrow!: boolean;
@@ -106,11 +162,11 @@ class HassioAddonInfo extends LitElement {
: undefined;
const metrics = [
{
description: this.supervisor.localize("addon.dashboard.cpu_usage"),
description: "Add-on CPU Usage",
value: this._metrics?.cpu_percent,
},
{
description: this.supervisor.localize("addon.dashboard.ram_usage"),
description: "Add-on RAM Usage",
value: this._metrics?.memory_percent,
tooltip: `${bytesToString(this._metrics?.memory_usage)}/${bytesToString(
this._metrics?.memory_limit
@@ -120,28 +176,14 @@ class HassioAddonInfo extends LitElement {
return html`
${this.addon.update_available
? html`
<ha-card
.header="${this.supervisor.localize(
"common.update_available",
"count",
1
)}🎉"
>
<ha-card header="Update available! 🎉">
<div class="card-content">
<hassio-card-content
.hass=${this.hass}
.title="${this.supervisor.localize(
"addon.dashboard.new_update_available",
"name",
this.addon.name,
"version",
this.addon.version_latest
)}"
.description="${this.supervisor.localize(
"common.running_version",
"version",
this.addon.version
)}"
.title="${this.addon.name} ${this.addon
.version_latest} is available"
.description="You are currently running version ${this.addon
.version}"
icon=${mdiArrowUpBoldCircle}
iconClass="update"
></hassio-card-content>
@@ -152,32 +194,29 @@ class HassioAddonInfo extends LitElement {
)
? html`
<p class="warning">
${this.supervisor.localize(
"addon.dashboard.not_available_arch"
)}
This add-on is not compatible with the processor of
your device or the operating system you have installed
on your device.
</p>
`
: html`
<p class="warning">
${this.supervisor.localize(
"addon.dashboard.not_available_arch",
"core_version_installed",
this.supervisor.core.version,
"core_version_needed",
addonStoreInfo.homeassistant
)}
You are running Home Assistant
${this.supervisor.core.version}, to update to this
version of the add-on you need at least version
${addonStoreInfo.homeassistant} of Home Assistant
</p>
`
: ""}
</div>
<div class="card-actions">
<mwc-button @click=${this._updateClicked}>
${this.supervisor.localize("common.update")}
Update
</mwc-button>
${this.addon.changelog
? html`
<mwc-button @click=${this._openChangelog}>
${this.supervisor.localize("addon.dashboard.changelog")}
Changelog
</mwc-button>
`
: ""}
@@ -188,19 +227,12 @@ class HassioAddonInfo extends LitElement {
${!this.addon.protected
? html`
<ha-card class="warning">
<h1 class="card-header">${this.supervisor.localize(
"addon.dashboard.protection_mode.title"
)}
</h1>
<h1 class="card-header">Warning: Protection mode is disabled!</h1>
<div class="card-content">
${this.supervisor.localize("addon.dashboard.protection_mode.content")}
Protection mode on this add-on is disabled! This gives the add-on full access to the entire system, which adds security risks, and could damage your system when used incorrectly. Only disable the protection mode if you know, need AND trust the source of this add-on.
</div>
<div class="card-actions protection-enable">
<mwc-button @click=${this._protectionToggled}>
${this.supervisor.localize(
"addon.dashboard.protection_mode.enable"
)}
</mwc-button>
<mwc-button @click=${this._protectionToggled}>Enable Protection mode</mwc-button>
</div>
</div>
</ha-card>
@@ -217,18 +249,14 @@ class HassioAddonInfo extends LitElement {
${this._computeIsRunning
? html`
<ha-svg-icon
.title=${this.supervisor.localize(
"dashboard.addon_running"
)}
title="Add-on is running"
class="running"
.path=${mdiCircle}
></ha-svg-icon>
`
: html`
<ha-svg-icon
.title=${this.supervisor.localize(
"dashboard.addon_stopped"
)}
title="Add-on is stopped"
class="stopped"
.path=${mdiCircle}
></ha-svg-icon>
@@ -242,29 +270,21 @@ class HassioAddonInfo extends LitElement {
? html`
Current version: ${this.addon.version}
<div class="changelog" @click=${this._openChangelog}>
(<span class="changelog-link">
${this.supervisor.localize("addon.dashboard.changelog")} </span
>)
(<span class="changelog-link">changelog</span>)
</div>
`
: html`<span class="changelog-link" @click=${this._openChangelog}>
${this.supervisor.localize("addon.dashboard.changelog")}
</span>`}
: html`<span class="changelog-link" @click=${this._openChangelog}
>Changelog</span
>`}
</div>
<div class="description light-color">
${this.addon.description}.<br />
${this.supervisor.localize(
"addon.dashboard.visit_addon_page",
"name",
html`<a
href="${this.addon.url!}"
target="_blank"
rel="noreferrer"
>
${this.addon.name}
</a>`
)}
Visit
<a href="${this.addon.url!}" target="_blank" rel="noreferrer">
${this.addon.name} page</a
>
for details.
</div>
<div class="addon-container">
<div>
@@ -285,9 +305,7 @@ class HassioAddonInfo extends LitElement {
})}
@click=${this._showMoreInfo}
id="stage"
.label=${this.supervisor.localize(
"addon.dashboard.capability.label.stage"
)}
label="stage"
description=""
>
<ha-svg-icon
@@ -313,9 +331,7 @@ class HassioAddonInfo extends LitElement {
<ha-label-badge
@click=${this._showMoreInfo}
id="host_network"
.label=${this.supervisor.localize(
"addon.dashboard.capability.label.host"
)}
label="host"
description=""
>
<ha-svg-icon .path=${mdiNetwork}></ha-svg-icon>
@@ -327,9 +343,7 @@ class HassioAddonInfo extends LitElement {
<ha-label-badge
@click=${this._showMoreInfo}
id="full_access"
.label=${this.supervisor.localize(
"addon.dashboard.capability.label.hardware"
)}
label="hardware"
description=""
>
<ha-svg-icon .path=${mdiChip}></ha-svg-icon>
@@ -341,9 +355,7 @@ class HassioAddonInfo extends LitElement {
<ha-label-badge
@click=${this._showMoreInfo}
id="homeassistant_api"
.label=${this.supervisor.localize(
"addon.dashboard.capability.label.hass"
)}
label="hass"
description=""
>
<ha-svg-icon .path=${mdiHomeAssistant}></ha-svg-icon>
@@ -355,12 +367,8 @@ class HassioAddonInfo extends LitElement {
<ha-label-badge
@click=${this._showMoreInfo}
id="hassio_api"
.label=${this.supervisor.localize(
"addon.dashboard.capability.label.hassio"
)}
.description=${this.supervisor.localize(
`addon.dashboard.capability.role.${this.addon.hassio_role}`
) || this.addon.hassio_role}
label="hassio"
.description=${this.addon.hassio_role}
>
<ha-svg-icon .path=${mdiHomeAssistant}></ha-svg-icon>
</ha-label-badge>
@@ -371,9 +379,7 @@ class HassioAddonInfo extends LitElement {
<ha-label-badge
@click=${this._showMoreInfo}
id="docker_api"
.label=".${this.supervisor.localize(
"addon.dashboard.capability.label.docker"
)}"
label="docker"
description=""
>
<ha-svg-icon .path=${mdiDocker}></ha-svg-icon>
@@ -385,9 +391,7 @@ class HassioAddonInfo extends LitElement {
<ha-label-badge
@click=${this._showMoreInfo}
id="host_pid"
.label=${this.supervisor.localize(
"addon.dashboard.capability.label.host_pid"
)}
label="host pid"
description=""
>
<ha-svg-icon .path=${mdiPound}></ha-svg-icon>
@@ -400,9 +404,7 @@ class HassioAddonInfo extends LitElement {
@click=${this._showMoreInfo}
class=${this._computeApparmorClassName}
id="apparmor"
.label=${this.supervisor.localize(
"addon.dashboard.capability.label.apparmor"
)}
label="apparmor"
description=""
>
<ha-svg-icon .path=${mdiShield}></ha-svg-icon>
@@ -414,9 +416,7 @@ class HassioAddonInfo extends LitElement {
<ha-label-badge
@click=${this._showMoreInfo}
id="auth_api"
.label=${this.supervisor.localize(
"addon.dashboard.capability.label.auth"
)}
label="auth"
description=""
>
<ha-svg-icon .path=${mdiKey}></ha-svg-icon>
@@ -428,9 +428,7 @@ class HassioAddonInfo extends LitElement {
<ha-label-badge
@click=${this._showMoreInfo}
id="ingress"
.label=${this.supervisor.localize(
"addon.dashboard.capability.label.ingress"
)}
label="ingress"
description=""
>
<ha-svg-icon
@@ -451,14 +449,10 @@ class HassioAddonInfo extends LitElement {
>
<ha-settings-row ?three-line=${this.narrow}>
<span slot="heading">
${this.supervisor.localize(
"addon.dashboard.option.boot.title"
)}
Start on boot
</span>
<span slot="description">
${this.supervisor.localize(
"addon.dashboard.option.boot.description"
)}
Make the add-on start during a system boot
</span>
<ha-switch
@change=${this._startOnBootToggled}
@@ -471,14 +465,10 @@ class HassioAddonInfo extends LitElement {
? html`
<ha-settings-row ?three-line=${this.narrow}>
<span slot="heading">
${this.supervisor.localize(
"addon.dashboard.option.watchdog.title"
)}
Watchdog
</span>
<span slot="description">
${this.supervisor.localize(
"addon.dashboard.option.watchdog.description"
)}
This will start the add-on if it crashes
</span>
<ha-switch
@change=${this._watchdogToggled}
@@ -493,14 +483,11 @@ class HassioAddonInfo extends LitElement {
? html`
<ha-settings-row ?three-line=${this.narrow}>
<span slot="heading">
${this.supervisor.localize(
"addon.dashboard.option.auto_update.title"
)}
Auto update
</span>
<span slot="description">
${this.supervisor.localize(
"addon.dashboard.option.auto_update.description"
)}
Auto update the add-on when there is a new
version available
</span>
<ha-switch
@change=${this._autoUpdateToggled}
@@ -510,22 +497,21 @@ class HassioAddonInfo extends LitElement {
</ha-settings-row>
`
: ""}
${!this._computeCannotIngressSidebar && this.addon.ingress
${this.addon.ingress
? html`
<ha-settings-row ?three-line=${this.narrow}>
<span slot="heading">
${this.supervisor.localize(
"addon.dashboard.option.ingress_panel.title"
)}
Show in sidebar
</span>
<span slot="description">
${this.supervisor.localize(
"addon.dashboard.option.ingress_panel.description"
)}
${this._computeCannotIngressSidebar
? "This option requires Home Assistant 0.92 or later."
: "Add this add-on to your sidebar"}
</span>
<ha-switch
@change=${this._panelToggled}
.checked=${this.addon.ingress_panel}
.disabled=${this._computeCannotIngressSidebar}
haptic
></ha-switch>
</ha-settings-row>
@@ -535,14 +521,10 @@ class HassioAddonInfo extends LitElement {
? html`
<ha-settings-row ?three-line=${this.narrow}>
<span slot="heading">
${this.supervisor.localize(
"addon.dashboard.option.protected.title"
)}
Protection mode
</span>
<span slot="description">
${this.supervisor.localize(
"addon.dashboard.option.protected.description"
)}
Blocks elevated system access from the add-on
</span>
<ha-switch
@change=${this._protectionToggled}
@@ -560,7 +542,7 @@ class HassioAddonInfo extends LitElement {
${this.addon.state === "started"
? html`<ha-settings-row ?three-line=${this.narrow}>
<span slot="heading">
${this.supervisor.localize("addon.dashboard.hostname")}
Hostname
</span>
<code slot="description">
${this.addon.hostname}
@@ -587,20 +569,17 @@ class HassioAddonInfo extends LitElement {
)
? html`
<p class="warning">
${this.supervisor.localize(
"addon.dashboard.not_available_arch"
)}
This add-on is not compatible with the processor of your
device or the operating system you have installed on your
device.
</p>
`
: html`
<p class="warning">
${this.supervisor.localize(
"addon.dashboard.not_available_version",
"core_version_installed",
this.supervisor.core.version,
"core_version_needed",
addonStoreInfo!.homeassistant
)}
You are running Home Assistant
${this.supervisor.core.version}, to install this add-on you
need at least version ${addonStoreInfo!.homeassistant} of
Home Assistant
</p>
`
: ""}
@@ -614,18 +593,18 @@ class HassioAddonInfo extends LitElement {
class="warning"
@click=${this._stopClicked}
>
${this.supervisor.localize("addon.dashboard.stop")}
Stop
</ha-progress-button>
<ha-progress-button
class="warning"
@click=${this._restartClicked}
>
${this.supervisor.localize("addon.dashboard.restart")}
Restart
</ha-progress-button>
`
: html`
<ha-progress-button @click=${this._startClicked}>
${this.supervisor.localize("addon.dashboard.start")}
Start
</ha-progress-button>
`
: html`
@@ -633,7 +612,7 @@ class HassioAddonInfo extends LitElement {
.disabled=${!this.addon.available}
@click=${this._installClicked}
>
${this.supervisor.localize("addon.dashboard.install")}
Install
</ha-progress-button>
`}
</div>
@@ -648,9 +627,7 @@ class HassioAddonInfo extends LitElement {
rel="noopener"
>
<mwc-button>
${this.supervisor.localize(
"addon.dashboard.open_web_ui"
)}
Open web UI
</mwc-button>
</a>
`
@@ -658,9 +635,7 @@ class HassioAddonInfo extends LitElement {
${this._computeShowIngressUI
? html`
<mwc-button @click=${this._openIngress}>
${this.supervisor.localize(
"addon.dashboard.open_web_ui"
)}
Open web UI
</mwc-button>
`
: ""}
@@ -668,7 +643,7 @@ class HassioAddonInfo extends LitElement {
class="warning"
@click=${this._uninstallClicked}
>
${this.supervisor.localize("addon.dashboard.uninstall")}
Uninstall
</ha-progress-button>
${this.addon.build
? html`
@@ -677,7 +652,7 @@ class HassioAddonInfo extends LitElement {
.hass=${this.hass}
.path="hassio/addons/${this.addon.slug}/rebuild"
>
${this.supervisor.localize("addon.dashboard.rebuild")}
Rebuild
</ha-call-api-button>
`
: ""}`
@@ -737,21 +712,8 @@ class HassioAddonInfo extends LitElement {
private _showMoreInfo(ev): void {
const id = ev.currentTarget.id;
showHassioMarkdownDialog(this, {
title: this.supervisor.localize(`addon.dashboard.capability.${id}.title`),
content:
id === "stage"
? this.supervisor.localize(
`addon.dashboard.capability.${id}.description`,
"icon_stable",
`<ha-svg-icon path="${STAGE_ICON.stable}"></ha-svg-icon>`,
"icon_experimental",
`<ha-svg-icon path="${STAGE_ICON.experimental}"></ha-svg-icon>`,
"icon_deprecated",
`<ha-svg-icon path="${STAGE_ICON.deprecated}"></ha-svg-icon>`
)
: this.supervisor.localize(
`addon.dashboard.capability.${id}.description`
),
title: PERMIS_DESC[id].title,
content: PERMIS_DESC[id].description,
});
}
@@ -804,11 +766,9 @@ class HassioAddonInfo extends LitElement {
};
fireEvent(this, "hass-api-called", eventdata);
} catch (err) {
this._error = this.supervisor.localize(
"addon.failed_to_save",
"error",
extractApiErrorMessage(err)
);
this._error = `Failed to set addon option, ${extractApiErrorMessage(
err
)}`;
}
}
@@ -826,11 +786,9 @@ class HassioAddonInfo extends LitElement {
};
fireEvent(this, "hass-api-called", eventdata);
} catch (err) {
this._error = this.supervisor.localize(
"addon.failed_to_save",
"error",
extractApiErrorMessage(err)
);
this._error = `Failed to set addon option, ${extractApiErrorMessage(
err
)}`;
}
}
@@ -848,11 +806,9 @@ class HassioAddonInfo extends LitElement {
};
fireEvent(this, "hass-api-called", eventdata);
} catch (err) {
this._error = this.supervisor.localize(
"addon.failed_to_save",
"error",
extractApiErrorMessage(err)
);
this._error = `Failed to set addon option, ${extractApiErrorMessage(
err
)}`;
}
}
@@ -870,11 +826,9 @@ class HassioAddonInfo extends LitElement {
};
fireEvent(this, "hass-api-called", eventdata);
} catch (err) {
this._error = this.supervisor.localize(
"addon.failed_to_save",
"error",
extractApiErrorMessage(err)
);
this._error = `Failed to set addon security option, ${extractApiErrorMessage(
err
)}`;
}
}
@@ -892,11 +846,9 @@ class HassioAddonInfo extends LitElement {
};
fireEvent(this, "hass-api-called", eventdata);
} catch (err) {
this._error = this.supervisor.localize(
"addon.failed_to_save",
"error",
extractApiErrorMessage(err)
);
this._error = `Failed to set addon option, ${extractApiErrorMessage(
err
)}`;
}
}
@@ -907,14 +859,12 @@ class HassioAddonInfo extends LitElement {
this.addon.slug
);
showHassioMarkdownDialog(this, {
title: this.supervisor.localize("addon.dashboard.changelog"),
title: "Changelog",
content,
});
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize(
"addon.dashboard.action_error.get_changelog"
),
title: "Failed to get addon changelog",
text: extractApiErrorMessage(err),
});
}
@@ -934,7 +884,7 @@ class HassioAddonInfo extends LitElement {
fireEvent(this, "hass-api-called", eventdata);
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize("addon.dashboard.action_error.install"),
title: "Failed to install addon",
text: extractApiErrorMessage(err),
});
}
@@ -955,7 +905,7 @@ class HassioAddonInfo extends LitElement {
fireEvent(this, "hass-api-called", eventdata);
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize("addon.dashboard.action_error.stop"),
title: "Failed to stop addon",
text: extractApiErrorMessage(err),
});
}
@@ -976,7 +926,7 @@ class HassioAddonInfo extends LitElement {
fireEvent(this, "hass-api-called", eventdata);
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize("addon.dashboard.action_error.restart"),
title: "Failed to restart addon",
text: extractApiErrorMessage(err),
});
}
@@ -984,32 +934,12 @@ class HassioAddonInfo extends LitElement {
}
private async _updateClicked(): Promise<void> {
showDialogSupervisorUpdate(this, {
showDialogSupervisorAddonUpdate(this, {
addon: this.addon,
supervisor: this.supervisor,
name: this.addon.name,
version: this.addon.version_latest,
snapshotParams: {
name: `addon_${this.addon.slug}_${this.addon.version}`,
addons: [this.addon.slug],
homeassistant: false,
},
updateHandler: async () => await this._updateAddon(),
});
}
private async _updateAddon(): Promise<void> {
await updateHassioAddon(this.hass, this.addon.slug);
fireEvent(this, "supervisor-collection-refresh", {
collection: "addon",
});
const eventdata = {
success: true,
response: undefined,
path: "update",
};
fireEvent(this, "hass-api-called", eventdata);
}
private async _startClicked(ev: CustomEvent): Promise<void> {
const button = ev.currentTarget as any;
button.progress = true;
@@ -1020,15 +950,11 @@ class HassioAddonInfo extends LitElement {
);
if (!validate.valid) {
await showConfirmationDialog(this, {
title: this.supervisor.localize(
"addon.dashboard.action_error.start_invalid_config"
),
title: "Failed to start addon - configuration validation failed!",
text: validate.message.split(" Got ")[0],
confirm: () => this._openConfiguration(),
confirmText: this.supervisor.localize(
"addon.dashboard.action_error.go_to_config"
),
dismissText: this.supervisor.localize("common.cancel"),
confirmText: "Go to configuration",
dismissText: "Cancel",
});
button.progress = false;
return;
@@ -1053,7 +979,7 @@ class HassioAddonInfo extends LitElement {
fireEvent(this, "hass-api-called", eventdata);
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize("addon.dashboard.action_error.start"),
title: "Failed to start addon",
text: extractApiErrorMessage(err),
});
}
@@ -1091,9 +1017,7 @@ class HassioAddonInfo extends LitElement {
fireEvent(this, "hass-api-called", eventdata);
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize(
"addon.dashboard.action_error.uninstall"
),
title: "Failed to uninstall addon",
text: extractApiErrorMessage(err),
});
}

View File

@@ -9,7 +9,6 @@ import {
} from "lit-element";
import "../../../../src/components/ha-circular-progress";
import { HassioAddonDetails } from "../../../../src/data/hassio/addon";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { haStyle } from "../../../../src/resources/styles";
import { HomeAssistant } from "../../../../src/types";
import { hassioStyle } from "../../resources/hassio-style";
@@ -19,8 +18,6 @@ import "./hassio-addon-logs";
class HassioAddonLogDashboard extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public supervisor!: Supervisor;
@property({ attribute: false }) public addon?: HassioAddonDetails;
protected render(): TemplateResult {
@@ -31,7 +28,6 @@ class HassioAddonLogDashboard extends LitElement {
<div class="content">
<hassio-addon-logs
.hass=${this.hass}
.supervisor=${this.supervisor}
.addon=${this.addon}
></hassio-addon-logs>
</div>

View File

@@ -15,7 +15,6 @@ import {
HassioAddonDetails,
} from "../../../../src/data/hassio/addon";
import { extractApiErrorMessage } from "../../../../src/data/hassio/common";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { haStyle } from "../../../../src/resources/styles";
import { HomeAssistant } from "../../../../src/types";
import "../../components/hassio-ansi-to-html";
@@ -25,8 +24,6 @@ import { hassioStyle } from "../../resources/hassio-style";
class HassioAddonLogs extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public supervisor!: Supervisor;
@property({ attribute: false }) public addon!: HassioAddonDetails;
@internalProperty() private _error?: string;
@@ -51,9 +48,7 @@ class HassioAddonLogs extends LitElement {
: ""}
</div>
<div class="card-actions">
<mwc-button @click=${this._refresh}>
${this.supervisor.localize("common.refresh")}
</mwc-button>
<mwc-button @click=${this._refresh}>Refresh</mwc-button>
</div>
</ha-card>
`;
@@ -81,11 +76,7 @@ class HassioAddonLogs extends LitElement {
try {
this._content = await fetchHassioAddonLogs(this.hass, this.addon.slug);
} catch (err) {
this._error = this.supervisor.localize(
"addon.logs.get_logs",
"error",
extractApiErrorMessage(err)
);
this._error = `Failed to get addon logs, ${extractApiErrorMessage(err)}`;
}
}

View File

@@ -44,7 +44,7 @@ class HassioCardContent extends LitElement {
${this.iconImage
? html`
<div class="icon_image ${this.iconClass}">
<img src="${this.iconImage}" .title=${this.iconTitle} />
<img src="${this.iconImage}" title="${this.iconTitle}" />
<div></div>
</div>
`

View File

@@ -1,54 +0,0 @@
import {
css,
CSSResult,
customElement,
html,
LitElement,
property,
TemplateResult,
} from "lit-element";
import { Supervisor } from "../../../src/data/supervisor/supervisor";
import { haStyle } from "../../../src/resources/styles";
@customElement("supervisor-connectivity")
class SupervisorConnectivity extends LitElement {
@property({ attribute: false }) public supervisor!: Supervisor;
protected render(): TemplateResult {
if (this.supervisor.network.supervisor_internet) {
return html``;
}
return html`<div class="connectivity">
<span>${this.supervisor.localize("common.error.lost_connectivity")}</span>
</div>`;
}
static get styles(): CSSResult[] {
return [
haStyle,
css`
.connectivity {
position: fixed;
bottom: 0;
height: 32px;
width: 100vw;
background-color: var(--error-color);
color: var(--primary-text-color);
font-weight: 500;
display: flex;
align-items: center;
}
span {
padding-left: 16px;
}
`,
];
}
}
declare global {
interface HTMLElementTagNameMap {
"supervisor-connectivity": SupervisorConnectivity;
}
}

View File

@@ -26,7 +26,7 @@ class SupervisorMetric extends LitElement {
<span slot="heading">
${this.description}
</span>
<div slot="description" .title=${this.tooltip ?? ""}>
<div slot="description" title="${this.tooltip ?? ""}">
<span class="value">
${roundedValue}%
</span>

View File

@@ -27,15 +27,17 @@ class HassioAddons extends LitElement {
protected render(): TemplateResult {
return html`
<div class="content">
<h1>${this.supervisor.localize("dashboard.addons")}</h1>
<h1>Add-ons</h1>
<div class="card-group">
${!this.supervisor.supervisor.addons?.length
? html`
<ha-card>
<div class="card-content">
You don't have any add-ons installed yet. Head over to
<button class="link" @click=${this._openStore}>
${this.supervisor.localize("dashboard.no_addons")}
the add-on store
</button>
to get started!
</div>
</ha-card>
`
@@ -56,16 +58,10 @@ class HassioAddons extends LitElement {
? mdiArrowUpBoldCircle
: mdiPuzzle}
.iconTitle=${addon.state !== "started"
? this.supervisor.localize(
"dashboard.addon_stopped"
)
? "Add-on is stopped"
: addon.update_available!
? this.supervisor.localize(
"dashboard.addon_new_version"
)
: this.supervisor.localize(
"dashboard.addon_running"
)}
? "New version available"
: "Add-on is running"}
.iconClass=${addon.update_available
? addon.state === "started"
? "update"

View File

@@ -1,4 +1,3 @@
import "../components/supervisor-connectivity";
import {
css,
CSSResult,
@@ -30,16 +29,13 @@ class HassioDashboard extends LitElement {
return html`
<hass-tabs-subpage
.hass=${this.hass}
.localizeFunc=${this.supervisor.localize}
.narrow=${this.narrow}
hassio
main-page
.route=${this.route}
.tabs=${supervisorTabs}
main-page
supervisor
>
<span slot="header">
${this.supervisor.localize("panel.dashboard")}
</span>
<span slot="header">Dashboard</span>
<div class="content">
<hassio-update
.hass=${this.hass}
@@ -50,8 +46,6 @@ class HassioDashboard extends LitElement {
.supervisor=${this.supervisor}
></hassio-addons>
</div>
<supervisor-connectivity .supervisor=${this.supervisor}>
</supervisor-connectivity>
</hass-tabs-subpage>
`;
}

View File

@@ -10,40 +10,30 @@ import {
TemplateResult,
} from "lit-element";
import memoizeOne from "memoize-one";
import { atLeastVersion } from "../../../src/common/config/version";
import { fireEvent } from "../../../src/common/dom/fire_event";
import "../../../src/components/buttons/ha-progress-button";
import "../../../src/components/ha-card";
import "../../../src/components/ha-settings-row";
import "../../../src/components/ha-svg-icon";
import {
extractApiErrorMessage,
HassioResponse,
ignoreSupervisorError,
ignoredStatusCodes,
} from "../../../src/data/hassio/common";
import { HassioHassOSInfo } from "../../../src/data/hassio/host";
import {
HassioHomeAssistantInfo,
HassioSupervisorInfo,
} from "../../../src/data/hassio/supervisor";
import { updateCore } from "../../../src/data/supervisor/core";
import {
Supervisor,
supervisorApiWsRequest,
} from "../../../src/data/supervisor/supervisor";
import { Supervisor } from "../../../src/data/supervisor/supervisor";
import {
showAlertDialog,
showConfirmationDialog,
} from "../../../src/dialogs/generic/show-dialog-box";
import { haStyle } from "../../../src/resources/styles";
import { HomeAssistant } from "../../../src/types";
import { showDialogSupervisorUpdate } from "../dialogs/update/show-dialog-update";
import { showDialogSupervisorCoreUpdate } from "../dialogs/core/show-dialog-core-update";
import { hassioStyle } from "../resources/hassio-style";
const computeVersion = (key: string, version: string): string => {
return key === "os" ? version : `${key}-${version}`;
};
@customElement("hassio-update")
export class HassioUpdate extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@@ -69,12 +59,9 @@ export class HassioUpdate extends LitElement {
return html`
<div class="content">
<h1>
${this.supervisor.localize(
"common.update_available",
"count",
updatesAvailable
)}
🎉
${updatesAvailable > 1
? "Updates Available 🎉"
: "Update Available 🎉"}
</h1>
<div class="card-group">
${this._renderUpdateCard(
@@ -123,30 +110,14 @@ export class HassioUpdate extends LitElement {
<div class="icon">
<ha-svg-icon .path=${mdiHomeAssistant}></ha-svg-icon>
</div>
<div class="update-heading">${name}</div>
<ha-settings-row two-line>
<span slot="heading">
${this.supervisor.localize("common.version")}
</span>
<span slot="description">
${computeVersion(key, object.version!)}
</span>
</ha-settings-row>
<ha-settings-row two-line>
<span slot="heading">
${this.supervisor.localize("common.newest_version")}
</span>
<span slot="description">
${computeVersion(key, object.version_latest!)}
</span>
</ha-settings-row>
<div class="update-heading">${name} ${object.version_latest}</div>
<div class="warning">
You are currently running version ${object.version}
</div>
</div>
<div class="card-actions">
<a href="${releaseNotesUrl}" target="_blank" rel="noreferrer">
<mwc-button>
${this.supervisor.localize("common.release_notes")}
</mwc-button>
<mwc-button>Release notes</mwc-button>
</a>
<ha-progress-button
.apiPath=${apiPath}
@@ -155,7 +126,7 @@ export class HassioUpdate extends LitElement {
.version=${object.version_latest}
@click=${this._confirmUpdate}
>
${this.supervisor.localize("common.update")}
Update
</ha-progress-button>
</div>
</ha-card>
@@ -165,35 +136,15 @@ export class HassioUpdate extends LitElement {
private async _confirmUpdate(ev): Promise<void> {
const item = ev.currentTarget;
if (item.key === "core") {
showDialogSupervisorUpdate(this, {
supervisor: this.supervisor,
name: "Home Assistant Core",
version: this.supervisor.core.version_latest,
snapshotParams: {
name: `core_${this.supervisor.core.version}`,
folders: ["homeassistant"],
homeassistant: true,
},
updateHandler: async () => this._updateCore(),
});
showDialogSupervisorCoreUpdate(this, { supervisor: this.supervisor });
return;
}
item.progress = true;
const confirmed = await showConfirmationDialog(this, {
title: this.supervisor.localize(
"confirm.update.title",
"name",
item.name
),
text: this.supervisor.localize(
"confirm.update.text",
"name",
item.name,
"version",
computeVersion(item.key, item.version)
),
confirmText: this.supervisor.localize("common.update"),
dismissText: this.supervisor.localize("common.cancel"),
title: `Update ${item.name}`,
text: `Are you sure you want to update ${item.name} to version ${item.version}?`,
confirmText: "update",
dismissText: "cancel",
});
if (!confirmed) {
@@ -201,24 +152,20 @@ export class HassioUpdate extends LitElement {
return;
}
try {
if (atLeastVersion(this.hass.config.version, 2021, 2, 4)) {
await supervisorApiWsRequest(this.hass.connection, {
method: "post",
endpoint: item.apiPath.replace("hassio", ""),
timeout: null,
});
} else {
await this.hass.callApi<HassioResponse<void>>("POST", item.apiPath);
}
fireEvent(this, "supervisor-collection-refresh", {
collection: item.key,
await this.hass.callApi<HassioResponse<void>>("POST", item.apiPath);
fireEvent(this, "supervisor-colllection-refresh", {
colllection: item.key,
});
} catch (err) {
// Only show an error if the status code was not expected (user behind proxy)
// or no status at all(connection terminated)
if (this.hass.connection.connected && !ignoreSupervisorError(err)) {
if (
this.hass.connection.connected &&
err.status_code &&
!ignoredStatusCodes.has(err.status_code)
) {
showAlertDialog(this, {
title: this.supervisor.localize("common.error.update_failed"),
title: "Update failed",
text: extractApiErrorMessage(err),
});
}
@@ -226,13 +173,6 @@ export class HassioUpdate extends LitElement {
item.progress = false;
}
private async _updateCore(): Promise<void> {
await updateCore(this.hass);
fireEvent(this, "supervisor-collection-refresh", {
collection: "core",
});
}
static get styles(): CSSResult[] {
return [
haStyle,
@@ -250,6 +190,9 @@ export class HassioUpdate extends LitElement {
margin-bottom: 0.5em;
color: var(--primary-text-color);
}
.warning {
color: var(--secondary-text-color);
}
.card-content {
height: calc(100% - 47px);
box-sizing: border-box;
@@ -257,13 +200,13 @@ export class HassioUpdate extends LitElement {
.card-actions {
text-align: right;
}
.errors {
color: var(--error-color);
padding: 16px;
}
a {
text-decoration: none;
}
ha-settings-row {
padding: 0;
--paper-item-body-two-line-min-height: 32px;
}
`,
];
}

View File

@@ -6,6 +6,7 @@ import {
html,
internalProperty,
LitElement,
property,
TemplateResult,
} from "lit-element";
import { fireEvent } from "../../../../src/common/dom/fire_event";
@@ -15,18 +16,24 @@ import "../../../../src/components/ha-settings-row";
import "../../../../src/components/ha-svg-icon";
import "../../../../src/components/ha-switch";
import {
extractApiErrorMessage,
ignoreSupervisorError,
} from "../../../../src/data/hassio/common";
HassioAddonDetails,
updateHassioAddon,
} from "../../../../src/data/hassio/addon";
import { extractApiErrorMessage } from "../../../../src/data/hassio/common";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { createHassioPartialSnapshot } from "../../../../src/data/hassio/snapshot";
import { haStyle, haStyleDialog } from "../../../../src/resources/styles";
import type { HomeAssistant } from "../../../../src/types";
import { SupervisorDialogSupervisorUpdateParams } from "./show-dialog-update";
import { SupervisorDialogSupervisorAddonUpdateParams } from "./show-dialog-addon-update";
@customElement("dialog-supervisor-addon-update")
class DialogSupervisorAddonUpdate extends LitElement {
@property({ attribute: false }) public supervisor!: Supervisor;
@customElement("dialog-supervisor-update")
class DialogSupervisorUpdate extends LitElement {
public hass!: HomeAssistant;
public addon!: HassioAddonDetails;
@internalProperty() private _opened = false;
@internalProperty() private _createSnapshot = true;
@@ -35,22 +42,20 @@ class DialogSupervisorUpdate extends LitElement {
@internalProperty() private _error?: string;
@internalProperty()
private _dialogParams?: SupervisorDialogSupervisorUpdateParams;
public async showDialog(
params: SupervisorDialogSupervisorUpdateParams
params: SupervisorDialogSupervisorAddonUpdateParams
): Promise<void> {
this._opened = true;
this._dialogParams = params;
this.addon = params.addon;
this.supervisor = params.supervisor;
await this.updateComplete;
}
public closeDialog(): void {
this._action = null;
this._createSnapshot = true;
this._opened = false;
this._error = undefined;
this._dialogParams = undefined;
fireEvent(this, "dialog-closed", { dialog: this.localName });
}
@@ -63,77 +68,52 @@ class DialogSupervisorUpdate extends LitElement {
}
protected render(): TemplateResult {
if (!this._dialogParams) {
return html``;
}
return html`
<ha-dialog .open=${this._opened} scrimClickAction escapeKeyAction>
${this._action === null
? html`<slot name="heading">
<h2 id="title" class="header_title">
${this._dialogParams.supervisor.localize(
"confirm.update.title",
"name",
this._dialogParams.name
)}
Update ${this.addon.name}
</h2>
</slot>
<div>
${this._dialogParams.supervisor.localize(
"confirm.update.text",
"name",
this._dialogParams.name,
"version",
this._dialogParams.version
)}
Are you sure you want to update the ${this.addon.name} add-on to
version ${this.addon.version_latest}?
</div>
<ha-settings-row>
<span slot="heading">
${this._dialogParams.supervisor.localize(
"dialog.update.snapshot"
)}
Snapshot
</span>
<span slot="description">
${this._dialogParams.supervisor.localize(
"dialog.update.create_snapshot",
"name",
this._dialogParams.name
)}
Create a snapshot of the ${this.addon.name} add-on before
updating
</span>
<ha-switch
.checked=${this._createSnapshot}
haptic
title="Create snapshot"
@click=${this._toggleSnapshot}
>
</ha-switch>
</ha-settings-row>
<mwc-button @click=${this.closeDialog} slot="secondaryAction">
${this._dialogParams.supervisor.localize("common.cancel")}
Cancel
</mwc-button>
<mwc-button
.disabled=${this._error !== undefined}
.disabled=${this._error !== undefined ||
this.supervisor.info.state !== "running"}
@click=${this._update}
slot="primaryAction"
>
${this._dialogParams.supervisor.localize("common.update")}
Update
</mwc-button>`
: html`<ha-circular-progress alt="Updating" size="large" active>
</ha-circular-progress>
<p class="progress-text">
${this._action === "update"
? this._dialogParams.supervisor.localize(
"dialog.update.updating",
"name",
this._dialogParams.name,
"version",
this._dialogParams.version
)
: this._dialogParams.supervisor.localize(
"dialog.update.snapshotting",
"name",
this._dialogParams.name
)}
? `Updating ${this.addon.name} to version ${this.addon.version_latest}`
: "Creating snapshot of Home Assistant Core"}
</p>`}
${this._error ? html`<p class="error">${this._error}</p>` : ""}
</ha-dialog>
@@ -148,10 +128,11 @@ class DialogSupervisorUpdate extends LitElement {
if (this._createSnapshot) {
this._action = "snapshot";
try {
await createHassioPartialSnapshot(
this.hass,
this._dialogParams!.snapshotParams
);
await createHassioPartialSnapshot(this.hass, {
name: `addon_${this.addon.slug}_${this.addon.version}`,
addons: [this.addon.slug],
homeassistant: false,
});
} catch (err) {
this._error = extractApiErrorMessage(err);
this._action = null;
@@ -161,15 +142,16 @@ class DialogSupervisorUpdate extends LitElement {
this._action = "update";
try {
await this._dialogParams!.updateHandler!();
await updateHassioAddon(this.hass, this.addon.slug);
} catch (err) {
if (this.hass.connection.connected && !ignoreSupervisorError(err)) {
this._error = extractApiErrorMessage(err);
}
this._error = extractApiErrorMessage(err);
this._action = null;
return;
}
fireEvent(this, "supervisor-colllection-refresh", { colllection: "addon" });
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "supervisor",
});
this.closeDialog();
}
@@ -203,6 +185,6 @@ class DialogSupervisorUpdate extends LitElement {
declare global {
interface HTMLElementTagNameMap {
"dialog-supervisor-update": DialogSupervisorUpdate;
"dialog-supervisor-addon-update": DialogSupervisorAddonUpdate;
}
}

View File

@@ -0,0 +1,19 @@
import { fireEvent } from "../../../../src/common/dom/fire_event";
import { HassioAddonDetails } from "../../../../src/data/hassio/addon";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
export interface SupervisorDialogSupervisorAddonUpdateParams {
addon: HassioAddonDetails;
supervisor: Supervisor;
}
export const showDialogSupervisorAddonUpdate = (
element: HTMLElement,
dialogParams: SupervisorDialogSupervisorAddonUpdateParams
): void => {
fireEvent(element, "show-dialog", {
dialogTag: "dialog-supervisor-addon-update",
dialogImport: () => import("./dialog-supervisor-addon-update"),
dialogParams,
});
};

View File

@@ -0,0 +1,182 @@
import "@material/mwc-button/mwc-button";
import {
css,
CSSResult,
customElement,
html,
internalProperty,
LitElement,
property,
TemplateResult,
} from "lit-element";
import { fireEvent } from "../../../../src/common/dom/fire_event";
import "../../../../src/components/ha-circular-progress";
import "../../../../src/components/ha-dialog";
import "../../../../src/components/ha-settings-row";
import "../../../../src/components/ha-svg-icon";
import "../../../../src/components/ha-switch";
import { extractApiErrorMessage } from "../../../../src/data/hassio/common";
import { createHassioPartialSnapshot } from "../../../../src/data/hassio/snapshot";
import { updateCore } from "../../../../src/data/supervisor/core";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { haStyle, haStyleDialog } from "../../../../src/resources/styles";
import type { HomeAssistant } from "../../../../src/types";
import { SupervisorDialogSupervisorCoreUpdateParams } from "./show-dialog-core-update";
@customElement("dialog-supervisor-core-update")
class DialogSupervisorCoreUpdate extends LitElement {
@property({ attribute: false }) public supervisor!: Supervisor;
public hass!: HomeAssistant;
@internalProperty() private _opened = false;
@internalProperty() private _createSnapshot = true;
@internalProperty() private _action: "snapshot" | "update" | null = null;
@internalProperty() private _error?: string;
public async showDialog(
params: SupervisorDialogSupervisorCoreUpdateParams
): Promise<void> {
this._opened = true;
this.supervisor = params.supervisor;
await this.updateComplete;
}
public closeDialog(): void {
this._action = null;
this._createSnapshot = true;
this._opened = false;
this._error = undefined;
fireEvent(this, "dialog-closed", { dialog: this.localName });
}
public focus(): void {
this.updateComplete.then(() =>
(this.shadowRoot?.querySelector(
"[dialogInitialFocus]"
) as HTMLElement)?.focus()
);
}
protected render(): TemplateResult {
return html`
<ha-dialog .open=${this._opened} scrimClickAction escapeKeyAction>
${this._action === null
? html`<slot name="heading">
<h2 id="title" class="header_title">
Update Home Assistant Core
</h2>
</slot>
<div>
Are you sure you want to update Home Assistant Core to version
${this.supervisor.core.version_latest}?
</div>
<ha-settings-row three-rows>
<span slot="heading">
Snapshot
</span>
<span slot="description">
Create a snapshot of Home Assistant Core before updating
</span>
<ha-switch
.checked=${this._createSnapshot}
haptic
title="Create snapshot"
@click=${this._toggleSnapshot}
>
</ha-switch>
</ha-settings-row>
<mwc-button @click=${this.closeDialog} slot="secondaryAction">
Cancel
</mwc-button>
<mwc-button
.disabled=${this._error !== undefined ||
this.supervisor.info.state !== "running"}
@click=${this._update}
slot="primaryAction"
>
Update
</mwc-button>`
: html`<ha-circular-progress alt="Updating" size="large" active>
</ha-circular-progress>
<p class="progress-text">
${this._action === "update"
? `Updating Home Assistant Core to version ${this.supervisor.core.version_latest}`
: "Creating snapshot of Home Assistant Core"}
</p>`}
${this._error ? html`<p class="error">${this._error}</p>` : ""}
</ha-dialog>
`;
}
private _toggleSnapshot() {
this._createSnapshot = !this._createSnapshot;
}
private async _update() {
if (this._createSnapshot) {
this._action = "snapshot";
try {
await createHassioPartialSnapshot(this.hass, {
name: `core_${this.supervisor.core.version}`,
folders: ["homeassistant"],
homeassistant: true,
});
} catch (err) {
this._error = extractApiErrorMessage(err);
this._action = null;
return;
}
}
this._action = "update";
try {
await updateCore(this.hass);
} catch (err) {
if (this.hass.connection.connected) {
this._error = extractApiErrorMessage(err);
this._action = null;
return;
}
}
fireEvent(this, "supervisor-colllection-refresh", { colllection: "core" });
this.closeDialog();
}
static get styles(): CSSResult[] {
return [
haStyle,
haStyleDialog,
css`
.form {
color: var(--primary-text-color);
}
ha-settings-row {
margin-top: 32px;
padding: 0;
}
ha-circular-progress {
display: block;
margin: 32px;
text-align: center;
}
.progress-text {
text-align: center;
}
`,
];
}
}
declare global {
interface HTMLElementTagNameMap {
"dialog-supervisor-core-update": DialogSupervisorCoreUpdate;
}
}

View File

@@ -0,0 +1,17 @@
import { fireEvent } from "../../../../src/common/dom/fire_event";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
export interface SupervisorDialogSupervisorCoreUpdateParams {
supervisor: Supervisor;
}
export const showDialogSupervisorCoreUpdate = (
element: HTMLElement,
dialogParams: SupervisorDialogSupervisorCoreUpdateParams
): void => {
fireEvent(element, "show-dialog", {
dialogTag: "dialog-supervisor-core-update",
dialogImport: () => import("./dialog-supervisor-core-update"),
dialogParams,
});
};

View File

@@ -35,7 +35,6 @@ import {
updateNetworkInterface,
WifiConfiguration,
} from "../../../../src/data/hassio/network";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import {
showAlertDialog,
showConfirmationDialog,
@@ -52,8 +51,6 @@ export class DialogHassioNetwork extends LitElement
implements HassDialog<HassioNetworkDialogParams> {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public supervisor!: Supervisor;
@internalProperty() private _accessPoints?: AccessPoints;
@internalProperty() private _curTabIndex = 0;
@@ -76,8 +73,7 @@ export class DialogHassioNetwork extends LitElement
this._params = params;
this._dirty = false;
this._curTabIndex = 0;
this.supervisor = params.supervisor;
this._interfaces = params.supervisor.network.interfaces.sort((a, b) => {
this._interfaces = params.network.interfaces.sort((a, b) => {
return a.primary > b.primary ? -1 : 1;
});
this._interface = { ...this._interfaces[this._curTabIndex] };
@@ -108,7 +104,7 @@ export class DialogHassioNetwork extends LitElement
<div slot="heading">
<ha-header-bar>
<span slot="title">
${this.supervisor.localize("dialog.network.title")}
Network settings
</span>
<mwc-icon-button slot="actionItems" dialogAction="cancel">
<ha-svg-icon .path=${mdiClose}></ha-svg-icon>
@@ -143,13 +139,7 @@ export class DialogHassioNetwork extends LitElement
? html`
<ha-expansion-panel header="Wi-Fi" outlined>
${this._interface?.wifi?.ssid
? html`<p>
${this.supervisor.localize(
"dialog.network.connected_to",
"ssid",
this._interface?.wifi?.ssid
)}
</p>`
? html`<p>Connected to: ${this._interface?.wifi?.ssid}</p>`
: ""}
<mwc-button
class="scan"
@@ -159,7 +149,7 @@ export class DialogHassioNetwork extends LitElement
${this._scanning
? html`<ha-circular-progress active size="small">
</ha-circular-progress>`
: this.supervisor.localize("dialog.network.scan_ap")}
: "Scan for accesspoints"}
</mwc-button>
${this._accessPoints &&
this._accessPoints.accesspoints &&
@@ -191,11 +181,7 @@ export class DialogHassioNetwork extends LitElement
${this._wifiConfiguration
? html`
<div class="radio-row">
<ha-formfield
.label=${this.supervisor.localize(
"dialog.network.open"
)}
>
<ha-formfield label="open">
<ha-radio
@change=${this._handleRadioValueChangedAp}
.ap=${this._wifiConfiguration}
@@ -207,11 +193,7 @@ export class DialogHassioNetwork extends LitElement
>
</ha-radio>
</ha-formfield>
<ha-formfield
.label=${this.supervisor.localize(
"dialog.network.wep"
)}
>
<ha-formfield label="wep">
<ha-radio
@change=${this._handleRadioValueChangedAp}
.ap=${this._wifiConfiguration}
@@ -221,11 +203,7 @@ export class DialogHassioNetwork extends LitElement
>
</ha-radio>
</ha-formfield>
<ha-formfield
.label=${this.supervisor.localize(
"dialog.network.wpa"
)}
>
<ha-formfield label="wpa-psk">
<ha-radio
@change=${this._handleRadioValueChangedAp}
.ap=${this._wifiConfiguration}
@@ -259,21 +237,18 @@ export class DialogHassioNetwork extends LitElement
: ""}
${this._dirty
? html`<div class="warning">
${this.supervisor.localize("dialog.network.warning")}
If you are changing the Wi-Fi, IP or gateway addresses, you might
lose the connection!
</div>`
: ""}
</div>
<div class="buttons">
<mwc-button
.label=${this.supervisor.localize("common.cancel")}
@click=${this.closeDialog}
>
</mwc-button>
<mwc-button label="close" @click=${this.closeDialog}> </mwc-button>
<mwc-button @click=${this._updateNetwork} .disabled=${!this._dirty}>
${this._processing
? html`<ha-circular-progress active size="small">
</ha-circular-progress>`
: this.supervisor.localize("common.save")}
: "Save"}
</mwc-button>
</div>`;
}
@@ -310,9 +285,7 @@ export class DialogHassioNetwork extends LitElement
outlined
>
<div class="radio-row">
<ha-formfield
.label=${this.supervisor.localize("dialog.network.dhcp")}
>
<ha-formfield label="DHCP">
<ha-radio
@change=${this._handleRadioValueChanged}
.version=${version}
@@ -322,9 +295,7 @@ export class DialogHassioNetwork extends LitElement
>
</ha-radio>
</ha-formfield>
<ha-formfield
.label=${this.supervisor.localize("dialog.network.static")}
>
<ha-formfield label="Static">
<ha-radio
@change=${this._handleRadioValueChanged}
.version=${version}
@@ -334,10 +305,7 @@ export class DialogHassioNetwork extends LitElement
>
</ha-radio>
</ha-formfield>
<ha-formfield
.label=${this.supervisor.localize("dialog.network.disabled")}
class="warning"
>
<ha-formfield label="Disabled" class="warning">
<ha-radio
@change=${this._handleRadioValueChanged}
.version=${version}
@@ -353,7 +321,7 @@ export class DialogHassioNetwork extends LitElement
<paper-input
class="flex-auto"
id="address"
.label=${this.supervisor.localize("dialog.network.ip_netmask")}
label="IP address/Netmask"
.version=${version}
.value=${this._toString(this._interface![version].address)}
@value-changed=${this._handleInputValueChanged}
@@ -362,7 +330,7 @@ export class DialogHassioNetwork extends LitElement
<paper-input
class="flex-auto"
id="gateway"
.label=${this.supervisor.localize("dialog.network.gateway")}
label="Gateway address"
.version=${version}
.value=${this._interface![version].gateway}
@value-changed=${this._handleInputValueChanged}
@@ -371,7 +339,7 @@ export class DialogHassioNetwork extends LitElement
<paper-input
class="flex-auto"
id="nameservers"
.label=${this.supervisor.localize("dialog.network.dns_servers")}
label="DNS servers"
.version=${version}
.value=${this._toString(this._interface![version].nameservers)}
@value-changed=${this._handleInputValueChanged}
@@ -456,7 +424,7 @@ export class DialogHassioNetwork extends LitElement
);
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize("dialog.network.failed_to_change"),
title: "Failed to change network settings",
text: extractApiErrorMessage(err),
});
this._processing = false;
@@ -469,9 +437,10 @@ export class DialogHassioNetwork extends LitElement
private async _handleTabActivated(ev: CustomEvent): Promise<void> {
if (this._dirty) {
const confirm = await showConfirmationDialog(this, {
text: this.supervisor.localize("dialog.network.unsaved"),
confirmText: this.supervisor.localize("common.yes"),
dismissText: this.supervisor.localize("common.no"),
text:
"You have unsaved changes, these will get lost if you change tabs, do you want to continue?",
confirmText: "yes",
dismissText: "no",
});
if (!confirm) {
this.requestUpdate("_interface");

View File

@@ -1,9 +1,9 @@
import { fireEvent } from "../../../../src/common/dom/fire_event";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { NetworkInfo } from "../../../../src/data/hassio/network";
import "./dialog-hassio-network";
export interface HassioNetworkDialogParams {
supervisor: Supervisor;
network: NetworkInfo;
loadData: () => Promise<void>;
}

View File

@@ -22,18 +22,14 @@ import {
fetchHassioDockerRegistries,
removeHassioDockerRegistry,
} from "../../../../src/data/hassio/docker";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { showAlertDialog } from "../../../../src/dialogs/generic/show-dialog-box";
import { haStyle, haStyleDialog } from "../../../../src/resources/styles";
import type { HomeAssistant } from "../../../../src/types";
import { RegistriesDialogParams } from "./show-dialog-registries";
@customElement("dialog-hassio-registries")
class HassioRegistriesDialog extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public supervisor!: Supervisor;
@property({ attribute: false }) private _registries?: {
registry: string;
username: string;
@@ -59,8 +55,8 @@ class HassioRegistriesDialog extends LitElement {
.heading=${createCloseHeading(
this.hass,
this._addingRegistry
? this.supervisor.localize("dialog.registries.title_add")
: this.supervisor.localize("dialog.registries.title_manage")
? "Add New Docker Registry"
: "Manage Docker Registries"
)}
>
<div class="form">
@@ -70,9 +66,7 @@ class HassioRegistriesDialog extends LitElement {
@value-changed=${this._inputChanged}
class="flex-auto"
name="registry"
.label=${this.supervisor.localize(
"dialog.registries.registry"
)}
label="Registry"
required
auto-validate
></paper-input>
@@ -80,9 +74,7 @@ class HassioRegistriesDialog extends LitElement {
@value-changed=${this._inputChanged}
class="flex-auto"
name="username"
.label=${this.supervisor.localize(
"dialog.registries.username"
)}
label="Username"
required
auto-validate
></paper-input>
@@ -90,9 +82,7 @@ class HassioRegistriesDialog extends LitElement {
@value-changed=${this._inputChanged}
class="flex-auto"
name="password"
.label=${this.supervisor.localize(
"dialog.registries.password"
)}
label="Password"
type="password"
required
auto-validate
@@ -104,7 +94,7 @@ class HassioRegistriesDialog extends LitElement {
)}
@click=${this._addNewRegistry}
>
${this.supervisor.localize("dialog.registries.add_registry")}
Add registry
</mwc-button>
`
: html`${this._registries?.length
@@ -113,16 +103,11 @@ class HassioRegistriesDialog extends LitElement {
<mwc-list-item class="option" hasMeta twoline>
<span>${entry.registry}</span>
<span slot="secondary"
>${this.supervisor.localize(
"dialog.registries.username"
)}:
${entry.username}</span
>Username: ${entry.username}</span
>
<mwc-icon-button
.entry=${entry}
.title=${this.supervisor.localize(
"dialog.registries.remove"
)}
title="Remove"
slot="meta"
@click=${this._removeRegistry}
>
@@ -133,17 +118,11 @@ class HassioRegistriesDialog extends LitElement {
})
: html`
<mwc-list-item>
<span
>${this.supervisor.localize(
"dialog.registries.no_registries"
)}</span
>
<span>No registries configured</span>
</mwc-list-item>
`}
<mwc-button @click=${this._addRegistry}>
${this.supervisor.localize(
"dialog.registries.add_new_registry"
)}
Add new registry
</mwc-button> `}
</div>
</ha-dialog>
@@ -155,9 +134,8 @@ class HassioRegistriesDialog extends LitElement {
this[`_${target.name}`] = target.value;
}
public async showDialog(dialogParams: RegistriesDialogParams): Promise<void> {
public async showDialog(_dialogParams: any): Promise<void> {
this._opened = true;
this.supervisor = dialogParams.supervisor;
await this._loadRegistries();
await this.updateComplete;
}
@@ -200,7 +178,7 @@ class HassioRegistriesDialog extends LitElement {
this._addingRegistry = false;
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize("dialog.registries.failed_to_add"),
title: "Failed to add registry",
text: extractApiErrorMessage(err),
});
}
@@ -214,7 +192,7 @@ class HassioRegistriesDialog extends LitElement {
await this._loadRegistries();
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize("dialog.registries.failed_to_remove"),
title: "Failed to remove registry",
text: extractApiErrorMessage(err),
});
}

View File

@@ -1,18 +1,10 @@
import { fireEvent } from "../../../../src/common/dom/fire_event";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import "./dialog-hassio-registries";
export interface RegistriesDialogParams {
supervisor: Supervisor;
}
export const showRegistriesDialog = (
element: HTMLElement,
dialogParams: RegistriesDialogParams
): void => {
export const showRegistriesDialog = (element: HTMLElement): void => {
fireEvent(element, "show-dialog", {
dialogTag: "dialog-hassio-registries",
dialogImport: () => import("./dialog-hassio-registries"),
dialogParams,
dialogParams: {},
});
};

View File

@@ -17,9 +17,8 @@ import {
TemplateResult,
} from "lit-element";
import memoizeOne from "memoize-one";
import { fireEvent } from "../../../../src/common/dom/fire_event";
import "../../../../src/components/ha-circular-progress";
import { createCloseHeading } from "../../../../src/components/ha-dialog";
import "../../../../src/components/ha-dialog";
import "../../../../src/components/ha-svg-icon";
import {
fetchHassioAddonsInfo,
@@ -35,29 +34,27 @@ import { HassioRepositoryDialogParams } from "./show-dialog-repositories";
class HassioRepositoriesDialog extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) private _repos: HassioAddonRepository[] = [];
@property({ attribute: false })
private _dialogParams?: HassioRepositoryDialogParams;
@query("#repository_input", true) private _optionInput?: PaperInputElement;
@internalProperty() private _repositories?: HassioAddonRepository[];
@internalProperty() private _dialogParams?: HassioRepositoryDialogParams;
@internalProperty() private _opened = false;
@internalProperty() private _prosessing = false;
@internalProperty() private _error?: string;
public async showDialog(
dialogParams: HassioRepositoryDialogParams
): Promise<void> {
this._dialogParams = dialogParams;
public async showDialog(_dialogParams: any): Promise<void> {
this._dialogParams = _dialogParams;
this._repos = _dialogParams.repos;
this._opened = true;
await this._loadData();
await this.updateComplete;
}
public closeDialog(): void {
this._dialogParams = undefined;
this._opened = false;
this._error = "";
}
@@ -69,20 +66,14 @@ class HassioRepositoriesDialog extends LitElement {
);
protected render(): TemplateResult {
if (!this._dialogParams?.supervisor || this._repositories === undefined) {
return html``;
}
const repositories = this._filteredRepositories(this._repositories);
const repositories = this._filteredRepositories(this._repos);
return html`
<ha-dialog
.open=${this._opened}
@closing=${this.closeDialog}
scrimClickAction
escapeKeyAction
.heading=${createCloseHeading(
this.hass,
this._dialogParams!.supervisor.localize("dialog.repositories.title")
)}
heading="Manage add-on repositories"
>
${this._error ? html`<div class="error">${this._error}</div>` : ""}
<div class="form">
@@ -97,9 +88,7 @@ class HassioRepositoriesDialog extends LitElement {
</paper-item-body>
<mwc-icon-button
.slug=${repo.slug}
.title=${this._dialogParams!.supervisor.localize(
"dialog.repositories.remove"
)}
title="Remove"
@click=${this._removeRepository}
>
<ha-svg-icon .path=${mdiDelete}></ha-svg-icon>
@@ -116,23 +105,18 @@ class HassioRepositoriesDialog extends LitElement {
<paper-input
class="flex-auto"
id="repository_input"
.value=${this._dialogParams!.url || ""}
.label=${this._dialogParams!.supervisor.localize(
"dialog.repositories.add"
)}
label="Add repository"
@keydown=${this._handleKeyAdd}
></paper-input>
<mwc-button @click=${this._addRepository}>
${this._prosessing
? html`<ha-circular-progress active></ha-circular-progress>`
: this._dialogParams!.supervisor.localize(
"dialog.repositories.add"
)}
: "Add"}
</mwc-button>
</div>
</div>
<mwc-button slot="primaryAction" @click=${this.closeDialog}>
${this._dialogParams?.supervisor.localize("common.close")}
<mwc-button slot="primaryAction" @click="${this.closeDialog}">
Close
</mwc-button>
</ha-dialog>
`;
@@ -163,11 +147,6 @@ class HassioRepositoriesDialog extends LitElement {
ha-paper-dropdown-menu {
display: block;
}
ha-circular-progress {
display: block;
margin: 32px;
text-align: center;
}
`,
];
}
@@ -188,25 +167,13 @@ class HassioRepositoriesDialog extends LitElement {
this._addRepository();
}
private async _loadData(): Promise<void> {
try {
const addonsinfo = await fetchHassioAddonsInfo(this.hass);
this._repositories = addonsinfo.repositories;
fireEvent(this, "supervisor-collection-refresh", { collection: "addon" });
} catch (err) {
this._error = extractApiErrorMessage(err);
}
}
private async _addRepository() {
const input = this._optionInput;
if (!input || !input.value) {
return;
}
this._prosessing = true;
const repositories = this._filteredRepositories(this._repositories!);
const repositories = this._filteredRepositories(this._repos);
const newRepositories = repositories.map((repo) => {
return repo.source;
});
@@ -216,7 +183,11 @@ class HassioRepositoriesDialog extends LitElement {
await setSupervisorOption(this.hass, {
addons_repositories: newRepositories,
});
await this._loadData();
const addonsInfo = await fetchHassioAddonsInfo(this.hass);
this._repos = addonsInfo.repositories;
await this._dialogParams!.loadData();
input.value = "";
} catch (err) {
@@ -227,7 +198,7 @@ class HassioRepositoriesDialog extends LitElement {
private async _removeRepository(ev: Event) {
const slug = (ev.currentTarget as any).slug;
const repositories = this._filteredRepositories(this._repositories!);
const repositories = this._filteredRepositories(this._repos);
const repository = repositories.find((repo) => {
return repo.slug === slug;
});
@@ -246,7 +217,11 @@ class HassioRepositoriesDialog extends LitElement {
await setSupervisorOption(this.hass, {
addons_repositories: newRepositories,
});
await this._loadData();
const addonsInfo = await fetchHassioAddonsInfo(this.hass);
this._repos = addonsInfo.repositories;
await this._dialogParams!.loadData();
} catch (err) {
this._error = extractApiErrorMessage(err);
}

View File

@@ -1,10 +1,10 @@
import { fireEvent } from "../../../../src/common/dom/fire_event";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { HassioAddonRepository } from "../../../../src/data/hassio/addon";
import "./dialog-hassio-repositories";
export interface HassioRepositoryDialogParams {
supervisor: Supervisor;
url?: string;
repos: HassioAddonRepository[];
loadData: () => Promise<void>;
}
export const showRepositoriesDialog = (

View File

@@ -4,7 +4,6 @@ import {
restartHassioAddon,
} from "../../../src/data/hassio/addon";
import { extractApiErrorMessage } from "../../../src/data/hassio/common";
import { Supervisor } from "../../../src/data/supervisor/supervisor";
import {
showAlertDialog,
showConfirmationDialog,
@@ -14,25 +13,20 @@ import { HomeAssistant } from "../../../src/types";
export const suggestAddonRestart = async (
element: LitElement,
hass: HomeAssistant,
supervisor: Supervisor,
addon: HassioAddonDetails
): Promise<void> => {
const confirmed = await showConfirmationDialog(element, {
title: supervisor.localize("common.restart_name", "name", addon.name),
text: supervisor.localize("dialog.restart_addon.text"),
confirmText: supervisor.localize("dialog.restart_addon.confirm_text"),
dismissText: supervisor.localize("common.cancel"),
title: addon.name,
text: "Do you want to restart the add-on with your changes?",
confirmText: "restart add-on",
dismissText: "no",
});
if (confirmed) {
try {
await restartHassioAddon(hass, addon.slug);
} catch (err) {
showAlertDialog(element, {
title: supervisor.localize(
"common.failed_to_restart_name",
"name",
addon.name
),
title: "Failed to restart",
text: extractApiErrorMessage(err),
});
}

View File

@@ -1,21 +0,0 @@
import { fireEvent } from "../../../../src/common/dom/fire_event";
import { Supervisor } from "../../../../src/data/supervisor/supervisor";
export interface SupervisorDialogSupervisorUpdateParams {
supervisor: Supervisor;
name: string;
version: string;
snapshotParams: any;
updateHandler: () => Promise<void>;
}
export const showDialogSupervisorUpdate = (
element: HTMLElement,
dialogParams: SupervisorDialogSupervisorUpdateParams
): void => {
fireEvent(element, "show-dialog", {
dialogTag: "dialog-supervisor-update",
dialogImport: () => import("./dialog-supervisor-update"),
dialogParams,
});
};

View File

@@ -3,7 +3,7 @@ import { atLeastVersion } from "../../src/common/config/version";
import { applyThemesOnElement } from "../../src/common/dom/apply_themes_on_element";
import { fireEvent } from "../../src/common/dom/fire_event";
import { HassioPanelInfo } from "../../src/data/hassio/supervisor";
import { Supervisor } from "../../src/data/supervisor/supervisor";
import { supervisorCollection } from "../../src/data/supervisor/supervisor";
import { makeDialogManager } from "../../src/dialogs/make-dialog-manager";
import "../../src/layouts/hass-loading-screen";
import { HomeAssistant, Route } from "../../src/types";
@@ -14,8 +14,6 @@ import { SupervisorBaseElement } from "./supervisor-base-element";
export class HassioMain extends SupervisorBaseElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public supervisor!: Supervisor;
@property({ attribute: false }) public panel!: HassioPanelInfo;
@property({ type: Boolean }) public narrow!: boolean;
@@ -74,6 +72,18 @@ export class HassioMain extends SupervisorBaseElement {
}
protected render() {
if (!this.supervisor || !this.hass) {
return html`<hass-loading-screen></hass-loading-screen>`;
}
if (
Object.keys(supervisorCollection).some(
(colllection) => !this.supervisor![colllection]
)
) {
return html`<hass-loading-screen></hass-loading-screen>`;
}
return html`
<hassio-router
.hass=${this.hass}

View File

@@ -19,12 +19,8 @@ import {
} from "../../src/panels/my/ha-panel-my";
import { navigate } from "../../src/common/navigate";
import { HomeAssistant, Route } from "../../src/types";
import { Supervisor } from "../../src/data/supervisor/supervisor";
const REDIRECTS: Redirects = {
supervisor: {
redirect: "/hassio/dashboard",
},
supervisor_logs: {
redirect: "/hassio/system",
},
@@ -37,27 +33,22 @@ const REDIRECTS: Redirects = {
supervisor_store: {
redirect: "/hassio/store",
},
supervisor: {
redirect: "/hassio/dashboard",
},
supervisor_addon: {
redirect: "/hassio/addon",
params: {
addon: "string",
},
},
supervisor_add_addon_repository: {
redirect: "/hassio/store",
params: {
repository_url: "url",
},
},
};
@customElement("hassio-my-redirect")
class HassioMyRedirect extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public supervisor!: Supervisor;
@property({ attribute: false }) public route!: Route;
@property() public route!: Route;
@internalProperty() public _error?: TemplateResult | string;
@@ -67,17 +58,15 @@ class HassioMyRedirect extends LitElement {
const redirect = REDIRECTS[path];
if (!redirect) {
this._error = this.supervisor.localize(
"my.not_supported",
"link",
html`<a
this._error = html`This redirect is not supported by your Home Assistant
instance. Check the
<a
target="_blank"
rel="noreferrer noopener"
href="https://my.home-assistant.io/faq.html#supported-pages"
>My Home Assistant FAQ</a
>
${this.supervisor.localize("my.faq_link")}
</a>`
);
for the supported redirects and the version they where introduced.`;
return;
}
@@ -85,7 +74,7 @@ class HassioMyRedirect extends LitElement {
try {
url = this._createRedirectUrl(redirect);
} catch (err) {
this._error = this.supervisor.localize("my.error");
this._error = "An unknown error occured";
return;
}

View File

@@ -7,10 +7,7 @@ import {
property,
TemplateResult,
} from "lit-element";
import {
Supervisor,
supervisorCollection,
} from "../../src/data/supervisor/supervisor";
import { Supervisor } from "../../src/data/supervisor/supervisor";
import { HomeAssistant, Route } from "../../src/types";
import "./hassio-panel-router";
@@ -25,17 +22,6 @@ class HassioPanel extends LitElement {
@property({ attribute: false }) public route!: Route;
protected render(): TemplateResult {
if (!this.hass) {
return html`<hass-loading-screen></hass-loading-screen>`;
}
if (
Object.keys(supervisorCollection).some(
(collection) => !this.supervisor[collection]
)
) {
return html`<hass-loading-screen></hass-loading-screen>`;
}
return html`
<hassio-panel-router
.hass=${this.hass}

View File

@@ -3,22 +3,22 @@ import type { PageNavigation } from "../../src/layouts/hass-tabs-subpage";
export const supervisorTabs: PageNavigation[] = [
{
translationKey: "panel.dashboard",
name: "Dashboard",
path: `/hassio/dashboard`,
iconPath: mdiViewDashboard,
},
{
translationKey: "panel.store",
name: "Add-on Store",
path: `/hassio/store`,
iconPath: mdiStore,
},
{
translationKey: "panel.snapshots",
name: "Snapshots",
path: `/hassio/snapshots`,
iconPath: mdiBackupRestore,
},
{
translationKey: "panel.system",
name: "System",
path: `/hassio/system`,
iconPath: mdiCogs,
},

View File

@@ -1,4 +1,3 @@
import "../components/supervisor-connectivity";
import "@material/mwc-button";
import "@material/mwc-icon-button";
import { ActionDetail } from "@material/mwc-list/mwc-list-foundation";
@@ -56,8 +55,8 @@ import { hassioStyle } from "../resources/hassio-style";
interface CheckboxItem {
slug: string;
name: string;
checked: boolean;
name?: string;
}
@customElement("hassio-snapshots")
@@ -85,12 +84,13 @@ class HassioSnapshots extends LitElement {
@internalProperty() private _folderList: CheckboxItem[] = [
{
slug: "homeassistant",
name: "Home Assistant configuration",
checked: true,
},
{ slug: "ssl", checked: true },
{ slug: "share", checked: true },
{ slug: "media", checked: true },
{ slug: "addons/local", checked: true },
{ slug: "ssl", name: "SSL", checked: true },
{ slug: "share", name: "Share", checked: true },
{ slug: "media", name: "Media", checked: true },
{ slug: "addons/local", name: "Local add-ons", checked: true },
];
@internalProperty() private _error = "";
@@ -104,16 +104,13 @@ class HassioSnapshots extends LitElement {
return html`
<hass-tabs-subpage
.hass=${this.hass}
.localizeFunc=${this.supervisor.localize}
.narrow=${this.narrow}
hassio
main-page
.route=${this.route}
.tabs=${supervisorTabs}
main-page
supervisor
>
<span slot="header">
${this.supervisor.localize("panel.snapshots")}
</span>
<span slot="header">Snapshots</span>
<ha-button-menu
corner="BOTTOM_START"
slot="toolbar-icon"
@@ -123,50 +120,50 @@ class HassioSnapshots extends LitElement {
<ha-svg-icon .path=${mdiDotsVertical}></ha-svg-icon>
</mwc-icon-button>
<mwc-list-item>
${this.supervisor.localize("common.reload")}
Reload
</mwc-list-item>
${atLeastVersion(this.hass.config.version, 0, 116)
? html`<mwc-list-item>
${this.supervisor.localize("snapshot.upload_snapshot")}
Upload snapshot
</mwc-list-item>`
: ""}
</ha-button-menu>
<div class="content">
<h1>
${this.supervisor.localize("snapshot.create_snapshot")}
Create Snapshot
</h1>
<p class="description">
${this.supervisor.localize("snapshot.description")}
Snapshots allow you to easily backup and restore all data of your
Home Assistant instance.
</p>
<div class="card-group">
<ha-card>
<div class="card-content">
<paper-input
autofocus
.label=${this.supervisor.localize("snapshot.name")}
label="Name"
name="snapshotName"
.value=${this._snapshotName}
@value-changed=${this._handleTextValueChanged}
></paper-input>
${this.supervisor.localize("snapshot.type")}:
Type:
<paper-radio-group
name="snapshotType"
type="${this.supervisor.localize("snapshot.type")}"
.selected=${this._snapshotType}
@selected-changed=${this._handleRadioValueChanged}
>
<paper-radio-button name="full">
${this.supervisor.localize("snapshot.full_snapshot")}
Full snapshot
</paper-radio-button>
<paper-radio-button name="partial">
${this.supervisor.localize("snapshot.partial_snapshot")}
Partial snapshot
</paper-radio-button>
</paper-radio-group>
${this._snapshotType === "full"
? undefined
: html`
${this.supervisor.localize("snapshot.folders")}:
Folders:
${this._folderList.map(
(folder, idx) => html`
<paper-checkbox
@@ -174,13 +171,11 @@ class HassioSnapshots extends LitElement {
.checked=${folder.checked}
@checked-changed=${this._folderChecked}
>
${this.supervisor.localize(
`snapshot.folder.${folder.slug}`
)}
${folder.name}
</paper-checkbox>
`
)}
${this.supervisor.localize("snapshot.addons")}:
Add-ons:
${this._addonList.map(
(addon, idx) => html`
<paper-checkbox
@@ -193,18 +188,18 @@ class HassioSnapshots extends LitElement {
`
)}
`}
${this.supervisor.localize("snapshot.security")}:
Security:
<paper-checkbox
name="snapshotHasPassword"
.checked=${this._snapshotHasPassword}
@checked-changed=${this._handleCheckboxValueChanged}
>
${this.supervisor.localize("snapshot.password_protection")}
Password protection
</paper-checkbox>
${this._snapshotHasPassword
? html`
<paper-input
.label=${this.supervisor.localize("snapshot.password")}
label="Password"
type="password"
name="snapshotPassword"
.value=${this._snapshotPassword}
@@ -219,22 +214,18 @@ class HassioSnapshots extends LitElement {
<div class="card-actions">
<ha-progress-button
@click=${this._createSnapshot}
.title=${this.supervisor.info.state !== "running"
? this.supervisor.localize(
"snapshot.create_blocked_not_running",
"state",
this.supervisor.info.state
)
: ""}
title="${this.supervisor.info.state !== "running"
? `Creating a snapshot is not possible right now because the system is in ${this.supervisor.info.state} state.`
: ""}"
.disabled=${this.supervisor.info.state !== "running"}
>
${this.supervisor.localize("snapshot.create")}
Create
</ha-progress-button>
</div>
</ha-card>
</div>
<h1>${this.supervisor.localize("snapshot.available_snapshots")}</h1>
<h1>Available Snapshots</h1>
<div class="card-group">
${this._snapshots === undefined
? undefined
@@ -242,7 +233,7 @@ class HassioSnapshots extends LitElement {
? html`
<ha-card>
<div class="card-content">
${this.supervisor.localize("snapshot.no_snapshots")}
You don't have any snapshots yet.
</div>
</ha-card>
`
@@ -270,8 +261,6 @@ class HassioSnapshots extends LitElement {
)}
</div>
</div>
<supervisor-connectivity .supervisor=${this.supervisor}>
</supervisor-connectivity>
</hass-tabs-subpage>
`;
}
@@ -345,12 +334,8 @@ class HassioSnapshots extends LitElement {
private async _createSnapshot(ev: CustomEvent): Promise<void> {
if (this.supervisor.info.state !== "running") {
await showAlertDialog(this, {
title: this.supervisor.localize("snapshot.could_not_create"),
text: this.supervisor.localize(
"snapshot.create_blocked_not_running",
"state",
this.supervisor.info.state
),
title: "Could not create snapshot",
text: `Creating a snapshot is not possible right now because the system is in ${this.supervisor.info.state} state.`,
});
}
const button = ev.currentTarget as any;
@@ -358,7 +343,7 @@ class HassioSnapshots extends LitElement {
this._error = "";
if (this._snapshotHasPassword && !this._snapshotPassword.length) {
this._error = this.supervisor.localize("snapshot.enter_password");
this._error = "Please enter a password.";
button.progress = false;
return;
}
@@ -407,9 +392,7 @@ class HassioSnapshots extends LitElement {
private _computeDetails(snapshot: HassioSnapshot) {
const type =
snapshot.type === "full"
? this.supervisor.localize("snapshot.full_snapshot")
: this.supervisor.localize("snapshot.partial_snapshot");
snapshot.type === "full" ? "Full snapshot" : "Partial snapshot";
return snapshot.protected ? `${type}, password protected` : type;
}

View File

@@ -6,7 +6,6 @@ import {
PropertyValues,
} from "lit-element";
import { atLeastVersion } from "../../src/common/config/version";
import { computeLocalize } from "../../src/common/translations/localize";
import { fetchHassioAddonsInfo } from "../../src/data/hassio/addon";
import { HassioResponse } from "../../src/data/hassio/common";
import {
@@ -23,28 +22,25 @@ import {
import { fetchSupervisorStore } from "../../src/data/supervisor/store";
import {
getSupervisorEventCollection,
subscribeSupervisorEvents,
Supervisor,
SupervisorObject,
supervisorCollection,
} from "../../src/data/supervisor/supervisor";
import { ProvideHassLitMixin } from "../../src/mixins/provide-hass-lit-mixin";
import { urlSyncMixin } from "../../src/state/url-sync-mixin";
import { HomeAssistant } from "../../src/types";
import { getTranslation } from "../../src/util/common-translation";
declare global {
interface HASSDomEvents {
"supervisor-update": Partial<Supervisor>;
"supervisor-collection-refresh": { collection: SupervisorObject };
"supervisor-colllection-refresh": { colllection: SupervisorObject };
}
}
export class SupervisorBaseElement extends urlSyncMixin(
ProvideHassLitMixin(LitElement)
) {
@property({ attribute: false }) public supervisor: Partial<Supervisor> = {
localize: () => "",
};
@property({ attribute: false }) public supervisor?: Supervisor;
@internalProperty() private _unsubs: Record<string, UnsubscribeFunc> = {};
@@ -53,13 +49,6 @@ export class SupervisorBaseElement extends urlSyncMixin(
Collection<unknown>
> = {};
@internalProperty() private _language = "en";
public connectedCallback(): void {
super.connectedCallback();
this._initializeLocalize();
}
public disconnectedCallback() {
super.disconnectedCallback();
Object.keys(this._unsubs).forEach((unsub) => {
@@ -67,155 +56,100 @@ export class SupervisorBaseElement extends urlSyncMixin(
});
}
protected updated(changedProperties: PropertyValues) {
super.updated(changedProperties);
if (changedProperties.has("hass")) {
const oldHass = changedProperties.get("hass") as
| HomeAssistant
| undefined;
if (
oldHass !== undefined &&
oldHass.language !== undefined &&
oldHass.language !== this.hass.language
) {
this._language = this.hass.language;
}
}
if (changedProperties.has("_language")) {
if (changedProperties.get("_language") !== this._language) {
this._initializeLocalize();
}
}
if (changedProperties.has("_collections")) {
if (this._collections) {
const unsubs = Object.keys(this._unsubs);
for (const collection of Object.keys(this._collections)) {
if (!unsubs.includes(collection)) {
this._unsubs[collection] = this._collections[
collection
].subscribe((data) =>
this._updateSupervisor({ [collection]: data })
);
}
}
}
}
}
protected _updateSupervisor(obj: Partial<Supervisor>): void {
this.supervisor = { ...this.supervisor, ...obj };
this.supervisor = { ...this.supervisor!, ...obj };
}
protected firstUpdated(changedProps: PropertyValues): void {
super.firstUpdated(changedProps);
if (
this._language !== this.hass.language &&
this.hass.language !== undefined
) {
this._language = this.hass.language;
}
this._initializeLocalize();
this._initSupervisor();
}
private async _initializeLocalize() {
const { language, data } = await getTranslation(
null,
this._language,
"/api/hassio/app/static/translations"
);
this.supervisor = {
...this.supervisor,
localize: await computeLocalize(this.constructor.prototype, language, {
[language]: data,
}),
};
}
private async _handleSupervisorStoreRefreshEvent(ev) {
const collection = ev.detail.collection;
const colllection = ev.detail.colllection;
if (atLeastVersion(this.hass.config.version, 2021, 2, 4)) {
this._collections[collection].refresh();
this._collections[colllection].refresh();
return;
}
const response = await this.hass.callApi<HassioResponse<any>>(
"GET",
`hassio${supervisorCollection[collection]}`
`hassio${supervisorCollection[colllection]}`
);
this._updateSupervisor({ [collection]: response.data });
this._updateSupervisor({ [colllection]: response.data });
}
private async _initSupervisor(): Promise<void> {
this.addEventListener(
"supervisor-collection-refresh",
"supervisor-colllection-refresh",
this._handleSupervisorStoreRefreshEvent
);
if (atLeastVersion(this.hass.config.version, 2021, 2, 4)) {
Object.keys(supervisorCollection).forEach((collection) => {
if (collection in this._collections) {
this._collections[collection].refresh();
Object.keys(supervisorCollection).forEach((colllection) => {
this._unsubs[colllection] = subscribeSupervisorEvents(
this.hass,
(data) => this._updateSupervisor({ [colllection]: data }),
colllection,
supervisorCollection[colllection]
);
if (this._collections[colllection]) {
this._collections[colllection].refresh();
} else {
this._collections[collection] = getSupervisorEventCollection(
this._collections[colllection] = getSupervisorEventCollection(
this.hass.connection,
collection,
supervisorCollection[collection]
colllection,
supervisorCollection[colllection]
);
}
});
Object.keys(this._collections).forEach((collection) => {
if (
this.supervisor === undefined ||
this.supervisor[collection] === undefined
) {
if (this.supervisor === undefined) {
Object.keys(this._collections).forEach((collection) =>
this._updateSupervisor({
[collection]: this._collections[collection].state,
});
}
});
} else {
const [
addon,
supervisor,
host,
core,
info,
os,
network,
resolution,
store,
] = await Promise.all([
fetchHassioAddonsInfo(this.hass),
fetchHassioSupervisorInfo(this.hass),
fetchHassioHostInfo(this.hass),
fetchHassioHomeAssistantInfo(this.hass),
fetchHassioInfo(this.hass),
fetchHassioHassOsInfo(this.hass),
fetchNetworkInfo(this.hass),
fetchHassioResolution(this.hass),
fetchSupervisorStore(this.hass),
]);
this._updateSupervisor({
addon,
supervisor,
host,
core,
info,
os,
network,
resolution,
store,
});
this.addEventListener("supervisor-update", (ev) =>
this._updateSupervisor(ev.detail)
);
})
);
}
return;
}
const [
addon,
supervisor,
host,
core,
info,
os,
network,
resolution,
store,
] = await Promise.all([
fetchHassioAddonsInfo(this.hass),
fetchHassioSupervisorInfo(this.hass),
fetchHassioHostInfo(this.hass),
fetchHassioHomeAssistantInfo(this.hass),
fetchHassioInfo(this.hass),
fetchHassioHassOsInfo(this.hass),
fetchNetworkInfo(this.hass),
fetchHassioResolution(this.hass),
fetchSupervisorStore(this.hass),
]);
this.supervisor = {
addon,
supervisor,
host,
core,
info,
os,
network,
resolution,
store,
};
this.addEventListener("supervisor-update", (ev) =>
this._updateSupervisor(ev.detail)
);
}
}

View File

@@ -10,7 +10,6 @@ import {
property,
TemplateResult,
} from "lit-element";
import { fireEvent } from "../../../src/common/dom/fire_event";
import "../../../src/components/buttons/ha-progress-button";
import "../../../src/components/ha-button-menu";
import "../../../src/components/ha-card";
@@ -20,7 +19,7 @@ import {
fetchHassioStats,
HassioStats,
} from "../../../src/data/hassio/common";
import { restartCore, updateCore } from "../../../src/data/supervisor/core";
import { restartCore } from "../../../src/data/supervisor/core";
import { Supervisor } from "../../../src/data/supervisor/supervisor";
import {
showAlertDialog,
@@ -30,7 +29,7 @@ import { haStyle } from "../../../src/resources/styles";
import { HomeAssistant } from "../../../src/types";
import { bytesToString } from "../../../src/util/bytes-to-string";
import "../components/supervisor-metric";
import { showDialogSupervisorUpdate } from "../dialogs/update/show-dialog-update";
import { showDialogSupervisorCoreUpdate } from "../dialogs/core/show-dialog-core-update";
import { hassioStyle } from "../resources/hassio-style";
@customElement("hassio-core-info")
@@ -44,11 +43,11 @@ class HassioCoreInfo extends LitElement {
protected render(): TemplateResult | void {
const metrics = [
{
description: this.supervisor.localize("system.core.cpu_usage"),
description: "Core CPU Usage",
value: this._metrics?.cpu_percent,
},
{
description: this.supervisor.localize("system.core.ram_usage"),
description: "Core RAM Usage",
value: this._metrics?.memory_percent,
tooltip: `${bytesToString(this._metrics?.memory_usage)}/${bytesToString(
this._metrics?.memory_limit
@@ -62,7 +61,7 @@ class HassioCoreInfo extends LitElement {
<div>
<ha-settings-row>
<span slot="heading">
${this.supervisor.localize("common.version")}
Version
</span>
<span slot="description">
core-${this.supervisor.core.version}
@@ -70,7 +69,7 @@ class HassioCoreInfo extends LitElement {
</ha-settings-row>
<ha-settings-row>
<span slot="heading">
${this.supervisor.localize("common.newest_version")}
Newest Version
</span>
<span slot="description">
core-${this.supervisor.core.version_latest}
@@ -78,10 +77,10 @@ class HassioCoreInfo extends LitElement {
${this.supervisor.core.update_available
? html`
<ha-progress-button
.title=${this.supervisor.localize("common.update")}
title="Update the core"
@click=${this._coreUpdate}
>
${this.supervisor.localize("common.update")}
Update
</ha-progress-button>
`
: ""}
@@ -105,13 +104,9 @@ class HassioCoreInfo extends LitElement {
slot="primaryAction"
class="warning"
@click=${this._coreRestart}
.title=${this.supervisor.localize(
"common.restart_name",
"name",
"Core"
)}
title="Restart Home Assistant Core"
>
${this.supervisor.localize("common.restart_name", "name", "Core")}
Restart Core
</ha-progress-button>
</div>
</ha-card>
@@ -131,18 +126,10 @@ class HassioCoreInfo extends LitElement {
button.progress = true;
const confirmed = await showConfirmationDialog(this, {
title: this.supervisor.localize(
"confirm.restart.title",
"name",
"Home Assistant Core"
),
text: this.supervisor.localize(
"confirm.restart.text",
"name",
"Home Assistant Core"
),
confirmText: this.supervisor.localize("common.restart"),
dismissText: this.supervisor.localize("common.cancel"),
title: "Restart Home Assistant Core",
text: "Are you sure you want to restart Home Assistant Core",
confirmText: "restart",
dismissText: "cancel",
});
if (!confirmed) {
@@ -155,11 +142,7 @@ class HassioCoreInfo extends LitElement {
} catch (err) {
if (this.hass.connection.connected) {
showAlertDialog(this, {
title: this.supervisor.localize(
"common.failed_to_restart_name",
"name",
"Home AssistantCore"
),
title: "Failed to restart Home Assistant Core",
text: extractApiErrorMessage(err),
});
}
@@ -169,24 +152,7 @@ class HassioCoreInfo extends LitElement {
}
private async _coreUpdate(): Promise<void> {
showDialogSupervisorUpdate(this, {
supervisor: this.supervisor,
name: "Home Assistant Core",
version: this.supervisor.core.version_latest,
snapshotParams: {
name: `core_${this.supervisor.core.version}`,
folders: ["homeassistant"],
homeassistant: true,
},
updateHandler: async () => await this._updateCore(),
});
}
private async _updateCore(): Promise<void> {
await updateCore(this.hass);
fireEvent(this, "supervisor-collection-refresh", {
collection: "core",
});
showDialogSupervisorCoreUpdate(this, { supervisor: this.supervisor });
}
static get styles(): CSSResult[] {

View File

@@ -21,7 +21,7 @@ import "../../../src/components/ha-card";
import "../../../src/components/ha-settings-row";
import {
extractApiErrorMessage,
ignoreSupervisorError,
ignoredStatusCodes,
} from "../../../src/data/hassio/common";
import { fetchHassioHardwareInfo } from "../../../src/data/hassio/hardware";
import {
@@ -65,7 +65,7 @@ class HassioHostInfo extends LitElement {
const metrics = [
{
description: this.supervisor.localize("system.host.used_space"),
description: "Used Space",
value: this._getUsedSpace(
this.supervisor.host.disk_used,
this.supervisor.host.disk_total
@@ -80,13 +80,14 @@ class HassioHostInfo extends LitElement {
${this.supervisor.host.features.includes("hostname")
? html`<ha-settings-row>
<span slot="heading">
${this.supervisor.localize("system.host.hostname")}
Hostname
</span>
<span slot="description">
${this.supervisor.host.hostname}
</span>
<mwc-button
.label=${this.supervisor.localize("system.host.change")}
title="Change the hostname"
label="Change"
@click=${this._changeHostnameClicked}
>
</mwc-button>
@@ -95,13 +96,14 @@ class HassioHostInfo extends LitElement {
${this.supervisor.host.features.includes("network")
? html` <ha-settings-row>
<span slot="heading">
${this.supervisor.localize("system.host.ip_address")}
IP Address
</span>
<span slot="description">
${primaryIpAddress}
</span>
<mwc-button
.label=${this.supervisor.localize("system.host.change")}
title="Change the network"
label="Change"
@click=${this._changeNetworkClicked}
>
</mwc-button>
@@ -110,15 +112,18 @@ class HassioHostInfo extends LitElement {
<ha-settings-row>
<span slot="heading">
${this.supervisor.localize("system.host.operating_system")}
Operating System
</span>
<span slot="description">
${this.supervisor.host.operating_system}
</span>
${this.supervisor.os.update_available
? html`
<ha-progress-button @click=${this._osUpdate}>
${this.supervisor.localize("commmon.update")}
<ha-progress-button
title="Update the host OS"
@click=${this._osUpdate}
>
Update
</ha-progress-button>
`
: ""}
@@ -126,7 +131,7 @@ class HassioHostInfo extends LitElement {
${!this.supervisor.host.features.includes("hassos")
? html`<ha-settings-row>
<span slot="heading">
${this.supervisor.localize("system.host.docker_version")}
Docker version
</span>
<span slot="description">
${this.supervisor.info.docker}
@@ -136,7 +141,7 @@ class HassioHostInfo extends LitElement {
${this.supervisor.host.deployment
? html`<ha-settings-row>
<span slot="heading">
${this.supervisor.localize("system.host.deployment")}
Deployment
</span>
<span slot="description">
${this.supervisor.host.deployment}
@@ -149,9 +154,7 @@ class HassioHostInfo extends LitElement {
this.supervisor.host.disk_life_time >= 10
? html` <ha-settings-row>
<span slot="heading">
${this.supervisor.localize(
"system.host.emmc_lifetime_used"
)}
eMMC Lifetime Used
</span>
<span slot="description">
${this.supervisor.host.disk_life_time - 10}% -
@@ -174,18 +177,23 @@ class HassioHostInfo extends LitElement {
<div class="card-actions">
${this.supervisor.host.features.includes("reboot")
? html`
<ha-progress-button class="warning" @click=${this._hostReboot}>
${this.supervisor.localize("system.host.reboot_host")}
<ha-progress-button
title="Reboot the host OS"
class="warning"
@click=${this._hostReboot}
>
Reboot Host
</ha-progress-button>
`
: ""}
${this.supervisor.host.features.includes("shutdown")
? html`
<ha-progress-button
title="Shutdown the host OS"
class="warning"
@click=${this._hostShutdown}
>
${this.supervisor.localize("system.host.shutdown_host")}
Shutdown Host
</ha-progress-button>
`
: ""}
@@ -197,12 +205,14 @@ class HassioHostInfo extends LitElement {
<mwc-icon-button slot="trigger">
<ha-svg-icon .path=${mdiDotsVertical}></ha-svg-icon>
</mwc-icon-button>
<mwc-list-item>
${this.supervisor.localize("system.host.hardware")}
<mwc-list-item title="Show a list of hardware">
Hardware
</mwc-list-item>
${this.supervisor.host.features.includes("hassos")
? html`<mwc-list-item>
${this.supervisor.localize("system.host.import_from_usb")}
? html`<mwc-list-item
title="Load HassOS configs or updates from USB"
>
Import from USB
</mwc-list-item>`
: ""}
</ha-button-menu>
@@ -241,14 +251,12 @@ class HassioHostInfo extends LitElement {
try {
const content = await fetchHassioHardwareInfo(this.hass);
showHassioMarkdownDialog(this, {
title: this.supervisor.localize("system.host.hardware"),
title: "Hardware",
content: `<pre>${safeDump(content, { indent: 2 })}</pre>`,
});
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize(
"system.host.failed_to_get_hardware_list"
),
title: "Failed to get hardware list",
text: extractApiErrorMessage(err),
});
}
@@ -259,10 +267,10 @@ class HassioHostInfo extends LitElement {
button.progress = true;
const confirmed = await showConfirmationDialog(this, {
title: this.supervisor.localize("system.host.reboot_host"),
text: this.supervisor.localize("system.host.confirm_reboot"),
confirmText: this.supervisor.localize("system.host.reboot_host"),
dismissText: this.supervisor.localize("common.cancel"),
title: "Reboot",
text: "Are you sure you want to reboot the host?",
confirmText: "reboot host",
dismissText: "no",
});
if (!confirmed) {
@@ -274,9 +282,9 @@ class HassioHostInfo extends LitElement {
await rebootHost(this.hass);
} catch (err) {
// Ignore connection errors, these are all expected
if (this.hass.connection.connected && !ignoreSupervisorError(err)) {
if (err.status_code && !ignoredStatusCodes.has(err.status_code)) {
showAlertDialog(this, {
title: this.supervisor.localize("system.host.failed_to_reboot"),
title: "Failed to reboot",
text: extractApiErrorMessage(err),
});
}
@@ -289,10 +297,10 @@ class HassioHostInfo extends LitElement {
button.progress = true;
const confirmed = await showConfirmationDialog(this, {
title: this.supervisor.localize("system.host.shutdown_host"),
text: this.supervisor.localize("system.host.confirm_shutdown"),
confirmText: this.supervisor.localize("system.host.shutdown_host"),
dismissText: this.supervisor.localize("common.cancel"),
title: "Shutdown",
text: "Are you sure you want to shutdown the host?",
confirmText: "shutdown host",
dismissText: "no",
});
if (!confirmed) {
@@ -304,9 +312,9 @@ class HassioHostInfo extends LitElement {
await shutdownHost(this.hass);
} catch (err) {
// Ignore connection errors, these are all expected
if (this.hass.connection.connected && !ignoreSupervisorError(err)) {
if (err.status_code && !ignoredStatusCodes.has(err.status_code)) {
showAlertDialog(this, {
title: this.supervisor.localize("system.host.failed_to_shutdown"),
title: "Failed to shutdown",
text: extractApiErrorMessage(err),
});
}
@@ -319,19 +327,9 @@ class HassioHostInfo extends LitElement {
button.progress = true;
const confirmed = await showConfirmationDialog(this, {
title: this.supervisor.localize(
"confirm.update.title",
"name",
"Home Assistant Operating System"
),
text: this.supervisor.localize(
"confirm.update.text",
"name",
"Home Assistant Operating System",
"version",
this.supervisor.os.version_latest
),
confirmText: this.supervisor.localize("common.update"),
title: "Update",
text: "Are you sure you want to update the OS?",
confirmText: "update os",
dismissText: "no",
});
@@ -342,15 +340,11 @@ class HassioHostInfo extends LitElement {
try {
await updateOS(this.hass);
fireEvent(this, "supervisor-collection-refresh", { collection: "os" });
fireEvent(this, "supervisor-colllection-refresh", { colllection: "os" });
} catch (err) {
if (this.hass.connection.connected) {
showAlertDialog(this, {
title: this.supervisor.localize(
"common.failed_to_update_name",
"name",
"Home Assistant Operating System"
),
title: "Failed to update",
text: extractApiErrorMessage(err),
});
}
@@ -360,7 +354,7 @@ class HassioHostInfo extends LitElement {
private async _changeNetworkClicked(): Promise<void> {
showNetworkDialog(this, {
supervisor: this.supervisor,
network: this.supervisor.network!,
loadData: () => this._loadData(),
});
}
@@ -368,22 +362,21 @@ class HassioHostInfo extends LitElement {
private async _changeHostnameClicked(): Promise<void> {
const curHostname: string = this.supervisor.host.hostname;
const hostname = await showPromptDialog(this, {
title: this.supervisor.localize("system.host.change_hostname"),
inputLabel: this.supervisor.localize("system.host.new_hostname"),
title: "Change Hostname",
inputLabel: "Please enter a new hostname:",
inputType: "string",
defaultValue: curHostname,
confirmText: this.supervisor.localize("common.update"),
});
if (hostname && hostname !== curHostname) {
try {
await changeHostOptions(this.hass, { hostname });
fireEvent(this, "supervisor-collection-refresh", {
collection: "host",
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "host",
});
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize("system.host.failed_to_set_hostname"),
title: "Setting hostname failed",
text: extractApiErrorMessage(err),
});
}
@@ -393,14 +386,12 @@ class HassioHostInfo extends LitElement {
private async _importFromUSB(): Promise<void> {
try {
await configSyncOS(this.hass);
fireEvent(this, "supervisor-collection-refresh", {
collection: "host",
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "host",
});
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize(
"system.host.failed_to_import_from_usb"
),
title: "Failed to import from USB",
text: extractApiErrorMessage(err),
});
}
@@ -408,8 +399,8 @@ class HassioHostInfo extends LitElement {
private async _loadData(): Promise<void> {
if (atLeastVersion(this.hass.config.version, 2021, 2, 4)) {
fireEvent(this, "supervisor-collection-refresh", {
collection: "network",
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "network",
});
} else {
const network = await fetchNetworkInfo(this.hass);

View File

@@ -37,24 +37,54 @@ import { documentationUrl } from "../../../src/util/documentation-url";
import "../components/supervisor-metric";
import { hassioStyle } from "../resources/hassio-style";
const UNSUPPORTED_REASON_URL = {
container: "/more-info/unsupported/container",
dbus: "/more-info/unsupported/dbus",
docker_configuration: "/more-info/unsupported/docker_configuration",
docker_version: "/more-info/unsupported/docker_version",
job_conditions: "/more-info/unsupported/job_conditions",
lxc: "/more-info/unsupported/lxc",
network_manager: "/more-info/unsupported/network_manager",
os: "/more-info/unsupported/os",
privileged: "/more-info/unsupported/privileged",
systemd: "/more-info/unsupported/systemd",
const UNSUPPORTED_REASON = {
container: {
title: "Containers known to cause issues",
url: "/more-info/unsupported/container",
},
dbus: { title: "DBUS", url: "/more-info/unsupported/dbus" },
docker_configuration: {
title: "Docker Configuration",
url: "/more-info/unsupported/docker_configuration",
},
docker_version: {
title: "Docker Version",
url: "/more-info/unsupported/docker_version",
},
job_conditions: {
title: "Ignored job conditions",
url: "/more-info/unsupported/job_conditions",
},
lxc: { title: "LXC", url: "/more-info/unsupported/lxc" },
network_manager: {
title: "Network Manager",
url: "/more-info/unsupported/network_manager",
},
os: { title: "Operating System", url: "/more-info/unsupported/os" },
privileged: {
title: "Supervisor is not privileged",
url: "/more-info/unsupported/privileged",
},
systemd: { title: "Systemd", url: "/more-info/unsupported/systemd" },
};
const UNHEALTHY_REASON_URL = {
privileged: "/more-info/unsupported/privileged",
supervisor: "/more-info/unhealthy/supervisor",
setup: "/more-info/unhealthy/setup",
docker: "/more-info/unhealthy/docker",
const UNHEALTHY_REASON = {
privileged: {
title: "Supervisor is not privileged",
url: "/more-info/unsupported/privileged",
},
supervisor: {
title: "Supervisor was not able to update",
url: "/more-info/unhealthy/supervisor",
},
setup: {
title: "Setup of the Supervisor failed",
url: "/more-info/unhealthy/setup",
},
docker: {
title: "The Docker environment is not working properly",
url: "/more-info/unhealthy/docker",
},
};
@customElement("hassio-supervisor-info")
@@ -68,11 +98,11 @@ class HassioSupervisorInfo extends LitElement {
protected render(): TemplateResult | void {
const metrics = [
{
description: this.supervisor.localize("system.supervisor.cpu_usage"),
description: "Supervisor CPU Usage",
value: this._metrics?.cpu_percent,
},
{
description: this.supervisor.localize("system.supervisor.ram_usage"),
description: "Supervisor RAM Usage",
value: this._metrics?.memory_percent,
tooltip: `${bytesToString(this._metrics?.memory_usage)}/${bytesToString(
this._metrics?.memory_limit
@@ -85,7 +115,7 @@ class HassioSupervisorInfo extends LitElement {
<div>
<ha-settings-row>
<span slot="heading">
${this.supervisor.localize("common.version")}
Version
</span>
<span slot="description">
supervisor-${this.supervisor.supervisor.version}
@@ -93,7 +123,7 @@ class HassioSupervisorInfo extends LitElement {
</ha-settings-row>
<ha-settings-row>
<span slot="heading">
${this.supervisor.localize("common.newest_version")}
Newest Version
</span>
<span slot="description">
supervisor-${this.supervisor.supervisor.version_latest}
@@ -101,19 +131,17 @@ class HassioSupervisorInfo extends LitElement {
${this.supervisor.supervisor.update_available
? html`
<ha-progress-button
.title=${this.supervisor.localize(
"system.supervisor.update_supervisor"
)}
title="Update the supervisor"
@click=${this._supervisorUpdate}
>
${this.supervisor.localize("common.update")}
Update
</ha-progress-button>
`
: ""}
</ha-settings-row>
<ha-settings-row>
<span slot="heading">
${this.supervisor.localize("system.supervisor.channel")}
Channel
</span>
<span slot="description">
${this.supervisor.supervisor.channel}
@@ -122,26 +150,18 @@ class HassioSupervisorInfo extends LitElement {
? html`
<ha-progress-button
@click=${this._toggleBeta}
.title=${this.supervisor.localize(
"system.supervisor.leave_beta_description"
)}
title="Get stable updates for Home Assistant, supervisor and host"
>
${this.supervisor.localize(
"system.supervisor.leave_beta_action"
)}
Leave beta channel
</ha-progress-button>
`
: this.supervisor.supervisor.channel === "stable"
? html`
<ha-progress-button
@click=${this._toggleBeta}
.title=${this.supervisor.localize(
"system.supervisor.join_beta_description"
)}
title="Get beta updates for Home Assistant (RCs), supervisor and host"
>
${this.supervisor.localize(
"system.supervisor.join_beta_action"
)}
Join beta channel
</ha-progress-button>
`
: ""}
@@ -150,20 +170,16 @@ class HassioSupervisorInfo extends LitElement {
${this.supervisor.supervisor.supported
? html` <ha-settings-row three-line>
<span slot="heading">
${this.supervisor.localize(
"system.supervisor.share_diagnostics"
)}
Share Diagnostics
</span>
<div slot="description" class="diagnostics-description">
${this.supervisor.localize(
"system.supervisor.share_diagnostics_description"
)}
Share crash reports and diagnostic information.
<button
class="link"
.title=${this.supervisor.localize("common.show_more")}
title="Show more information about this"
@click=${this._diagnosticsInformationDialog}
>
${this.supervisor.localize("common.learn_more")}
Learn more
</button>
</div>
<ha-switch
@@ -173,12 +189,10 @@ class HassioSupervisorInfo extends LitElement {
></ha-switch>
</ha-settings-row>`
: html`<div class="error">
${this.supervisor.localize(
"system.supervisor.unsupported_title"
)}
You are running an unsupported installation.
<button
class="link"
.title=${this.supervisor.localize("common.learn_more")}
title="Learn more about how you can make your system compliant"
@click=${this._unsupportedDialog}
>
Learn more
@@ -186,12 +200,10 @@ class HassioSupervisorInfo extends LitElement {
</div>`}
${!this.supervisor.supervisor.healthy
? html`<div class="error">
${this.supervisor.localize(
"system.supervisor.unhealthy_title"
)}
Your installation is running in an unhealthy state.
<button
class="link"
.title=${this.supervisor.localize("common.learn_more")}
title="Learn more about why your system is marked as unhealthy"
@click=${this._unhealthyDialog}
>
Learn more
@@ -215,26 +227,16 @@ class HassioSupervisorInfo extends LitElement {
<div class="card-actions">
<ha-progress-button
@click=${this._supervisorReload}
.title=${this.supervisor.localize(
"system.supervisor.reload_supervisor"
)}
title="Reload parts of the Supervisor"
>
${this.supervisor.localize("system.supervisor.reload_supervisor")}
Reload Supervisor
</ha-progress-button>
<ha-progress-button
class="warning"
@click=${this._supervisorRestart}
.title=${this.supervisor.localize(
"common.restart_name",
"name",
"Supervisor"
)}
title="Restart the Supervisor"
>
${this.supervisor.localize(
"common.restart_name",
"name",
"Supervisor"
)}
Restart Supervisor
</ha-progress-button>
</div>
</ha-card>
@@ -255,23 +257,23 @@ class HassioSupervisorInfo extends LitElement {
if (this.supervisor.supervisor.channel === "stable") {
const confirmed = await showConfirmationDialog(this, {
title: this.supervisor.localize("system.supervisor.warning"),
text: html`${this.supervisor.localize("system.supervisor.beta_warning")}
title: "WARNING",
text: html` Beta releases are for testers and early adopters and can
contain unstable code changes.
<br />
<b>
${this.supervisor.localize("system.supervisor.beta_backup")}
Make sure you have backups of your data before you activate this
feature.
</b>
<br /><br />
${this.supervisor.localize("system.supervisor.beta_release_items")}
This includes beta releases for:
<li>Home Assistant Core</li>
<li>Home Assistant Supervisor</li>
<li>Home Assistant Operating System</li>
<br />
${this.supervisor.localize("system.supervisor.join_beta_action")}`,
confirmText: this.supervisor.localize(
"system.supervisor.beta_join_confirm"
),
dismissText: this.supervisor.localize("common.cancel"),
Do you want to join the beta channel?`,
confirmText: "join beta",
dismissText: "no",
});
if (!confirmed) {
@@ -289,9 +291,7 @@ class HassioSupervisorInfo extends LitElement {
await this._reloadSupervisor();
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize(
"system.supervisor.failed_to_set_option"
),
title: "Failed to set supervisor option",
text: extractApiErrorMessage(err),
});
} finally {
@@ -307,7 +307,7 @@ class HassioSupervisorInfo extends LitElement {
await this._reloadSupervisor();
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize("system.supervisor.failed_to_reload"),
title: "Failed to reload the supervisor",
text: extractApiErrorMessage(err),
});
} finally {
@@ -317,8 +317,8 @@ class HassioSupervisorInfo extends LitElement {
private async _reloadSupervisor(): Promise<void> {
await reloadSupervisor(this.hass);
fireEvent(this, "supervisor-collection-refresh", {
collection: "supervisor",
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "supervisor",
});
}
@@ -327,18 +327,10 @@ class HassioSupervisorInfo extends LitElement {
button.progress = true;
const confirmed = await showConfirmationDialog(this, {
title: this.supervisor.localize(
"confirm.restart.title",
"name",
"Supervisor"
),
text: this.supervisor.localize(
"confirm.restart.text",
"name",
"Supervisor"
),
confirmText: this.supervisor.localize("common.restart"),
dismissText: this.supervisor.localize("common.cancel"),
title: "Restart the Supervisor",
text: "Are you sure you want to restart the Supervisor",
confirmText: "restart",
dismissText: "cancel",
});
if (!confirmed) {
@@ -350,11 +342,7 @@ class HassioSupervisorInfo extends LitElement {
await restartSupervisor(this.hass);
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize(
"common.failed_to_restart_name",
"name",
"Supervisor"
),
title: "Failed to restart the supervisor",
text: extractApiErrorMessage(err),
});
} finally {
@@ -367,20 +355,10 @@ class HassioSupervisorInfo extends LitElement {
button.progress = true;
const confirmed = await showConfirmationDialog(this, {
title: this.supervisor.localize(
"confirm.update.title",
"name",
"Supervisor"
),
text: this.supervisor.localize(
"confirm.update.text",
"name",
"Supervisor",
"version",
this.supervisor.supervisor.version_latest
),
confirmText: this.supervisor.localize("common.update"),
dismissText: this.supervisor.localize("common.cancel"),
title: "Update Supervisor",
text: `Are you sure you want to update supervisor to version ${this.supervisor.supervisor.version_latest}?`,
confirmText: "update",
dismissText: "cancel",
});
if (!confirmed) {
@@ -390,16 +368,12 @@ class HassioSupervisorInfo extends LitElement {
try {
await updateSupervisor(this.hass);
fireEvent(this, "supervisor-collection-refresh", {
collection: "supervisor",
fireEvent(this, "supervisor-colllection-refresh", {
colllection: "supervisor",
});
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize(
"common.failed_to_update_name",
"name",
"Supervisor"
),
title: "Failed to update the supervisor",
text: extractApiErrorMessage(err),
});
} finally {
@@ -409,41 +383,40 @@ class HassioSupervisorInfo extends LitElement {
private async _diagnosticsInformationDialog(): Promise<void> {
await showAlertDialog(this, {
title: this.supervisor.localize(
"system.supervisor.share_diagonstics_title"
),
text: this.supervisor.localize(
"system.supervisor.share_diagonstics_description",
"line_break",
html`<br /><br />`
),
title: "Help Improve Home Assistant",
text: html`Would you want to automatically share crash reports and
diagnostic information when the supervisor encounters unexpected errors?
<br /><br />
This will allow us to fix the problems, the information is only
accessible to the Home Assistant Core team and will not be shared with
others.
<br /><br />
The data does not include any private/sensitive information and you can
disable this in settings at any time you want.`,
});
}
private async _unsupportedDialog(): Promise<void> {
await showAlertDialog(this, {
title: this.supervisor.localize("system.supervisor.unsupported_title"),
text: html`${this.supervisor.localize(
"system.supervisor.unsupported_description"
)} <br /><br />
title: "You are running an unsupported installation",
text: html`Below is a list of issues found with your installation, click
on the links to learn how you can resolve the issues. <br /><br />
<ul>
${this.supervisor.resolution.unsupported.map(
(reason) => html`
(issue) => html`
<li>
${UNSUPPORTED_REASON_URL[reason]
${UNSUPPORTED_REASON[issue]
? html`<a
href="${documentationUrl(
this.hass,
UNSUPPORTED_REASON_URL[reason]
UNSUPPORTED_REASON[issue].url
)}"
target="_blank"
rel="noreferrer"
>
${this.supervisor.localize(
`system.supervisor.unsupported_reason.${reason}`
) || reason}
${UNSUPPORTED_REASON[issue].title}
</a>`
: reason}
: issue}
</li>
`
)}
@@ -453,28 +426,26 @@ class HassioSupervisorInfo extends LitElement {
private async _unhealthyDialog(): Promise<void> {
await showAlertDialog(this, {
title: this.supervisor.localize("system.supervisor.unhealthy_title"),
text: html`${this.supervisor.localize(
"system.supervisor.unhealthy_description"
)} <br /><br />
title: "Your installation is unhealthy",
text: html`Running an unhealthy installation will cause issues. Below is a
list of issues found with your installation, click on the links to learn
how you can resolve the issues. <br /><br />
<ul>
${this.supervisor.resolution.unhealthy.map(
(reason) => html`
(issue) => html`
<li>
${UNHEALTHY_REASON_URL[reason]
${UNHEALTHY_REASON[issue]
? html`<a
href="${documentationUrl(
this.hass,
UNHEALTHY_REASON_URL[reason]
UNHEALTHY_REASON[issue].url
)}"
target="_blank"
rel="noreferrer"
>
${this.supervisor.localize(
`system.supervisor.unhealthy_reason.${reason}`
) || reason}
${UNHEALTHY_REASON[issue].title}
</a>`
: reason}
: issue}
</li>
`
)}
@@ -490,9 +461,7 @@ class HassioSupervisorInfo extends LitElement {
await setSupervisorOption(this.hass, data);
} catch (err) {
showAlertDialog(this, {
title: this.supervisor.localize(
"system.supervisor.failed_to_set_option"
),
title: "Failed to set supervisor option",
text: extractApiErrorMessage(err),
});
}

View File

@@ -16,7 +16,6 @@ import "../../../src/components/buttons/ha-progress-button";
import "../../../src/components/ha-card";
import { extractApiErrorMessage } from "../../../src/data/hassio/common";
import { fetchHassioLogs } from "../../../src/data/hassio/supervisor";
import { Supervisor } from "../../../src/data/supervisor/supervisor";
import "../../../src/layouts/hass-loading-screen";
import { haStyle } from "../../../src/resources/styles";
import { HomeAssistant } from "../../../src/types";
@@ -59,8 +58,6 @@ const logProviders: LogProvider[] = [
class HassioSupervisorLog extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ attribute: false }) public supervisor!: Supervisor;
@internalProperty() private _error?: string;
@internalProperty() private _selectedLogProvider = "supervisor";
@@ -79,7 +76,7 @@ class HassioSupervisorLog extends LitElement {
${this.hass.userData?.showAdvanced
? html`
<paper-dropdown-menu
.label=${this.supervisor.localize("system.log.log_provider")}
label="Log Provider"
@iron-select=${this._setLogProvider}
>
<paper-listbox
@@ -89,9 +86,9 @@ class HassioSupervisorLog extends LitElement {
>
${logProviders.map((provider) => {
return html`
<paper-item provider=${provider.key}>
${provider.name}
</paper-item>
<paper-item provider=${provider.key}
>${provider.name}</paper-item
>
`;
})}
</paper-listbox>
@@ -101,13 +98,14 @@ class HassioSupervisorLog extends LitElement {
<div class="card-content" id="content">
${this._content
? html`<hassio-ansi-to-html .content=${this._content}>
</hassio-ansi-to-html>`
? html`<hassio-ansi-to-html
.content=${this._content}
></hassio-ansi-to-html>`
: html`<hass-loading-screen no-toolbar></hass-loading-screen>`}
</div>
<div class="card-actions">
<ha-progress-button @click=${this._refresh}>
${this.supervisor.localize("common.refresh")}
Refresh
</ha-progress-button>
</div>
</ha-card>
@@ -136,13 +134,9 @@ class HassioSupervisorLog extends LitElement {
this._selectedLogProvider
);
} catch (err) {
this._error = this.supervisor.localize(
"system.log.get_logs",
"provider",
this._selectedLogProvider,
"error",
extractApiErrorMessage(err)
);
this._error = `Failed to get supervisor logs, ${extractApiErrorMessage(
err
)}`;
}
}

View File

@@ -1,4 +1,3 @@
import "../components/supervisor-connectivity";
import {
css,
CSSResult,
@@ -33,16 +32,13 @@ class HassioSystem extends LitElement {
return html`
<hass-tabs-subpage
.hass=${this.hass}
.localizeFunc=${this.supervisor.localize}
.narrow=${this.narrow}
hassio
main-page
.route=${this.route}
.tabs=${supervisorTabs}
main-page
supervisor
>
<span slot="header">
${this.supervisor.localize("panel.system")}
</span>
<span slot="header">System</span>
<div class="content">
<div class="card-group">
<hassio-core-info
@@ -58,13 +54,8 @@ class HassioSystem extends LitElement {
.supervisor=${this.supervisor}
></hassio-host-info>
</div>
<hassio-supervisor-log
.hass=${this.hass}
.supervisor=${this.supervisor}
></hassio-supervisor-log>
<hassio-supervisor-log .hass=${this.hass}></hassio-supervisor-log>
</div>
<supervisor-connectivity .supervisor=${this.supervisor}>
</supervisor-connectivity>
</hass-tabs-subpage>
`;
}

View File

@@ -23,17 +23,16 @@
"license": "Apache-2.0",
"dependencies": {
"@braintree/sanitize-url": "^5.0.0",
"@codemirror/commands": "^0.18.0",
"@codemirror/gutter": "^0.18.0",
"@codemirror/highlight": "^0.18.1",
"@codemirror/history": "^0.18.0",
"@codemirror/legacy-modes": "^0.18.0",
"@codemirror/rectangular-selection": "^0.18.0",
"@codemirror/search": "^0.18.0",
"@codemirror/state": "^0.18.0",
"@codemirror/stream-parser": "^0.18.0",
"@codemirror/text": "^0.18.0",
"@codemirror/view": "^0.18.0",
"@codemirror/commands": "^0.17.0",
"@codemirror/gutter": "^0.17.0",
"@codemirror/highlight": "^0.17.0",
"@codemirror/history": "^0.17.0",
"@codemirror/legacy-modes": "^0.17.0",
"@codemirror/search": "^0.17.0",
"@codemirror/state": "^0.17.0",
"@codemirror/stream-parser": "^0.17.0",
"@codemirror/text": "^0.17.0",
"@codemirror/view": "^0.17.0",
"@formatjs/intl-getcanonicallocales": "^1.4.6",
"@formatjs/intl-pluralrules": "^3.4.10",
"@fullcalendar/common": "5.1.0",
@@ -91,6 +90,8 @@
"@polymer/paper-tooltip": "^3.0.1",
"@polymer/polymer": "3.1.0",
"@thomasloven/round-slider": "0.5.2",
"@types/chromecast-caf-sender": "^1.0.3",
"@types/sortablejs": "^1.10.6",
"@vaadin/vaadin-combo-box": "^5.0.10",
"@vaadin/vaadin-date-picker": "^4.0.7",
"@vibrant/color": "^3.2.1-alpha.1",
@@ -165,7 +166,6 @@
"@rollup/plugin-replace": "^2.3.2",
"@types/chai": "^4.1.7",
"@types/chromecast-caf-receiver": "^5.0.11",
"@types/chromecast-caf-sender": "^1.0.3",
"@types/codemirror": "^0.0.97",
"@types/hls.js": "^0.12.3",
"@types/js-yaml": "^3.12.1",
@@ -175,7 +175,6 @@
"@types/memoize-one": "4.1.0",
"@types/mocha": "^7.0.2",
"@types/resize-observer-browser": "^0.1.3",
"@types/sortablejs": "^1.10.6",
"@types/webspeechapi": "^0.0.29",
"@typescript-eslint/eslint-plugin": "^4.4.0",
"@typescript-eslint/parser": "^4.4.0",

View File

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

View File

@@ -8,10 +8,9 @@ export const atLeastVersion = (
return (
Number(haMajor) > major ||
(Number(haMajor) === major &&
(patch === undefined
? Number(haMinor) >= minor
: Number(haMinor) > minor)) ||
(Number(haMajor) === major && (patch === undefined
? Number(haMinor) >= minor
: Number(haMinor) > minor)) ||
(patch !== undefined &&
Number(haMajor) === major &&
Number(haMinor) === minor &&

View File

@@ -103,7 +103,6 @@ export const DOMAINS_WITH_MORE_INFO = [
"lock",
"media_player",
"person",
"remote",
"script",
"sun",
"timer",

View File

@@ -1,3 +1,4 @@
import type { StreamLanguage } from "@codemirror/stream-parser";
import type { EditorView, KeyBinding, ViewUpdate } from "@codemirror/view";
import {
customElement,
@@ -15,6 +16,10 @@ declare global {
}
}
const modeTag = Symbol("mode");
const readOnlyTag = Symbol("readOnly");
const saveKeyBinding: KeyBinding = {
key: "Mod-s",
run: (view: EditorView) => {
@@ -37,7 +42,7 @@ export class HaCodeEditor extends UpdatingElement {
@internalProperty() private _value = "";
private _loadedCodeMirror?: typeof import("../resources/codemirror");
@internalProperty() private _langs?: Record<string, StreamLanguage<unknown>>;
public set value(value: string) {
this._value = value;
@@ -66,16 +71,16 @@ export class HaCodeEditor extends UpdatingElement {
if (changedProps.has("mode")) {
this.codemirror.dispatch({
effects: this._loadedCodeMirror!.langCompartment!.reconfigure(
this._mode
),
reconfigure: {
[modeTag]: this._mode,
},
});
}
if (changedProps.has("readOnly")) {
this.codemirror.dispatch({
effects: this._loadedCodeMirror!.readonlyCompartment!.reconfigure(
this._loadedCodeMirror!.EditorView!.editable.of(!this.readOnly)
),
reconfigure: {
[readOnlyTag]: !this.readOnly,
},
});
}
if (changedProps.has("_value") && this._value !== this.value) {
@@ -99,11 +104,13 @@ export class HaCodeEditor extends UpdatingElement {
}
private get _mode() {
return this._loadedCodeMirror!.langs[this.mode];
return this._langs![this.mode];
}
private async _load(): Promise<void> {
this._loadedCodeMirror = await loadCodeMirror();
const loaded = await loadCodeMirror();
this._langs = loaded.langs;
const shadowRoot = this.attachShadow({ mode: "open" });
@@ -117,33 +124,28 @@ export class HaCodeEditor extends UpdatingElement {
shadowRoot.appendChild(container);
this.codemirror = new this._loadedCodeMirror.EditorView({
state: this._loadedCodeMirror.EditorState.create({
this.codemirror = new loaded.EditorView({
state: loaded.EditorState.create({
doc: this._value,
extensions: [
this._loadedCodeMirror.lineNumbers(),
this._loadedCodeMirror.EditorState.allowMultipleSelections.of(true),
this._loadedCodeMirror.history(),
this._loadedCodeMirror.highlightSelectionMatches(),
this._loadedCodeMirror.highlightActiveLine(),
this._loadedCodeMirror.drawSelection(),
this._loadedCodeMirror.rectangularSelection(),
this._loadedCodeMirror.keymap.of([
...this._loadedCodeMirror.defaultKeymap,
...this._loadedCodeMirror.searchKeymap,
...this._loadedCodeMirror.historyKeymap,
...this._loadedCodeMirror.tabKeyBindings,
loaded.lineNumbers(),
loaded.history(),
loaded.highlightSelectionMatches(),
loaded.keymap.of([
...loaded.defaultKeymap,
...loaded.searchKeymap,
...loaded.historyKeymap,
...loaded.tabKeyBindings,
saveKeyBinding,
] as KeyBinding[]),
this._loadedCodeMirror.langCompartment.of(this._mode),
this._loadedCodeMirror.theme,
this._loadedCodeMirror.Prec.fallback(
this._loadedCodeMirror.highlightStyle
loaded.tagExtension(modeTag, this._mode),
loaded.theme,
loaded.Prec.fallback(loaded.highlightStyle),
loaded.tagExtension(
readOnlyTag,
loaded.EditorView.editable.of(!this.readOnly)
),
this._loadedCodeMirror.readonlyCompartment.of(
this._loadedCodeMirror.EditorView.editable.of(!this.readOnly)
),
this._loadedCodeMirror.EditorView.updateListener.of((update) =>
loaded.EditorView.updateListener.of((update) =>
this._onUpdate(update)
),
],

View File

@@ -16,10 +16,6 @@ export type AddonStartup =
export type AddonState = "started" | "stopped" | null;
export type AddonRepository = "core" | "local" | string;
interface AddonTranslations {
[key: string]: Record<string, Record<string, Record<string, string>>>;
}
export interface HassioAddonInfo {
advanced: boolean;
available: boolean;
@@ -86,7 +82,6 @@ export interface HassioAddonDetails extends HassioAddonInfo {
slug: string;
startup: AddonStartup;
stdin: boolean;
translations: AddonTranslations;
watchdog: null | boolean;
webui: null | string;
}
@@ -309,12 +304,13 @@ export const updateHassioAddon = async (
method: "post",
timeout: null,
});
} else {
await hass.callApi<HassioResponse<void>>(
"POST",
`hassio/addons/${slug}/update`
);
return;
}
await hass.callApi<HassioResponse<void>>(
"POST",
`hassio/addons/${slug}/update`
);
};
export const restartHassioAddon = async (

View File

@@ -28,22 +28,7 @@ export const extractApiErrorMessage = (error: any): string => {
: error;
};
const ignoredStatusCodes = new Set([502, 503, 504]);
export const ignoreSupervisorError = (error): boolean => {
if (error && error.status_code && ignoredStatusCodes.has(error.status_code)) {
return true;
}
if (
error &&
error.message &&
(error.message.includes("ERR_CONNECTION_CLOSED") ||
error.message.includes("ERR_CONNECTION_RESET"))
) {
return true;
}
return false;
};
export const ignoredStatusCodes = new Set([502, 503, 504]);
export const fetchHassioStats = async (
hass: HomeAssistant,

View File

@@ -50,8 +50,6 @@ export interface WifiConfiguration {
export interface NetworkInfo {
interfaces: NetworkInterface[];
docker: DockerNetwork;
supervisor_internet: boolean;
host_internet: boolean | null;
}
export const fetchNetworkInfo = async (

View File

@@ -105,7 +105,6 @@ export const createHassioFullSnapshot = async (
endpoint: "/snapshots/new/full",
method: "post",
timeout: null,
data,
});
return;
}

View File

@@ -1,16 +0,0 @@
import {
HassEntityAttributeBase,
HassEntityBase,
} from "home-assistant-js-websocket";
export const REMOTE_SUPPORT_LEARN_COMMAND = 1;
export const REMOTE_SUPPORT_DELETE_COMMAND = 2;
export const REMOTE_SUPPORT_ACTIVITY = 4;
export type RemoteEntity = HassEntityBase & {
attributes: HassEntityAttributeBase & {
current_activity: string | null;
activity_list: string[] | null;
[key: string]: any;
};
};

View File

@@ -14,7 +14,8 @@ export const updateCore = async (hass: HomeAssistant) => {
method: "post",
timeout: null,
});
} else {
await hass.callApi<HassioResponse<void>>("POST", `hassio/core/update`);
return;
}
await hass.callApi<HassioResponse<void>>("POST", `hassio/core/update`);
};

View File

@@ -1,6 +1,5 @@
import { Connection, getCollection } from "home-assistant-js-websocket";
import { Store } from "home-assistant-js-websocket/dist/store";
import { LocalizeFunc } from "../../common/translations/localize";
import { HomeAssistant } from "../../types";
import { HassioAddonsInfo } from "../hassio/addon";
import { HassioHassOSInfo, HassioHostInfo } from "../hassio/host";
@@ -47,7 +46,6 @@ interface supervisorApiRequest {
method?: "get" | "post" | "delete" | "put";
force_rest?: boolean;
data?: any;
timeout?: number | null;
}
export interface SupervisorEvent {
@@ -67,7 +65,6 @@ export interface Supervisor {
os: HassioHassOSInfo;
addon: HassioAddonsInfo;
store: SupervisorStore;
localize: LocalizeFunc;
}
export const supervisorApiWsRequest = <T>(

View File

@@ -5,7 +5,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag";
/* eslint-plugin-disable lit */
import { PolymerElement } from "@polymer/polymer/polymer-element";
import { fireEvent } from "../../../common/dom/fire_event";
import { FORMAT_NUMBER } from "../../../data/alarm_control_panel";
import LocalizeMixin from "../../../mixins/localize-mixin";
class MoreInfoAlarmControlPanel extends LocalizeMixin(PolymerElement) {
@@ -27,7 +26,6 @@ class MoreInfoAlarmControlPanel extends LocalizeMixin(PolymerElement) {
flex-direction: column;
}
.pad mwc-button {
padding: 8px;
width: 80px;
}
.actions mwc-button {
@@ -45,7 +43,6 @@ class MoreInfoAlarmControlPanel extends LocalizeMixin(PolymerElement) {
label="[[localize('ui.card.alarm_control_panel.code')]]"
value="{{_enteredCode}}"
type="password"
inputmode="[[_inputMode]]"
disabled="[[!_inputEnabled]]"
></paper-input>
@@ -56,21 +53,21 @@ class MoreInfoAlarmControlPanel extends LocalizeMixin(PolymerElement) {
on-click="_digitClicked"
disabled="[[!_inputEnabled]]"
data-digit="1"
outlined
raised
>1</mwc-button
>
<mwc-button
on-click="_digitClicked"
disabled="[[!_inputEnabled]]"
data-digit="4"
outlined
raised
>4</mwc-button
>
<mwc-button
on-click="_digitClicked"
disabled="[[!_inputEnabled]]"
data-digit="7"
outlined
raised
>7</mwc-button
>
</div>
@@ -79,28 +76,28 @@ class MoreInfoAlarmControlPanel extends LocalizeMixin(PolymerElement) {
on-click="_digitClicked"
disabled="[[!_inputEnabled]]"
data-digit="2"
outlined
raised
>2</mwc-button
>
<mwc-button
on-click="_digitClicked"
disabled="[[!_inputEnabled]]"
data-digit="5"
outlined
raised
>5</mwc-button
>
<mwc-button
on-click="_digitClicked"
disabled="[[!_inputEnabled]]"
data-digit="8"
outlined
raised
>8</mwc-button
>
<mwc-button
on-click="_digitClicked"
disabled="[[!_inputEnabled]]"
data-digit="0"
outlined
raised
>0</mwc-button
>
</div>
@@ -109,27 +106,27 @@ class MoreInfoAlarmControlPanel extends LocalizeMixin(PolymerElement) {
on-click="_digitClicked"
disabled="[[!_inputEnabled]]"
data-digit="3"
outlined
raised
>3</mwc-button
>
<mwc-button
on-click="_digitClicked"
disabled="[[!_inputEnabled]]"
data-digit="6"
outlined
raised
>6</mwc-button
>
<mwc-button
on-click="_digitClicked"
disabled="[[!_inputEnabled]]"
data-digit="9"
outlined
raised
>9</mwc-button
>
<mwc-button
on-click="_clearEnteredCode"
disabled="[[!_inputEnabled]]"
outlined
raised
>
[[localize('ui.card.alarm_control_panel.clear_code')]]
</mwc-button>
@@ -204,10 +201,6 @@ class MoreInfoAlarmControlPanel extends LocalizeMixin(PolymerElement) {
type: Boolean,
value: false,
},
_inputMode: {
type: String,
computed: "_getInputMode(_codeFormat)",
},
};
}
@@ -244,12 +237,8 @@ class MoreInfoAlarmControlPanel extends LocalizeMixin(PolymerElement) {
}
}
_getInputMode(format) {
return this._isNumber(format) ? "numeric" : "text";
}
_isNumber(format) {
return format === FORMAT_NUMBER;
return format === "Number";
}
_validateCode(code, format, armVisible, codeArmRequired) {

View File

@@ -1,93 +0,0 @@
import "@polymer/paper-item/paper-item";
import "@polymer/paper-listbox/paper-listbox";
import {
css,
CSSResult,
customElement,
html,
LitElement,
property,
TemplateResult,
} from "lit-element";
import { supportsFeature } from "../../../common/entity/supports-feature";
import "../../../components/ha-attributes";
import "../../../components/ha-paper-dropdown-menu";
import { RemoteEntity, REMOTE_SUPPORT_ACTIVITY } from "../../../data/remote";
import { HomeAssistant } from "../../../types";
const filterExtraAttributes = "activity_list,current_activity";
@customElement("more-info-remote")
class MoreInfoRemote extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property() public stateObj?: RemoteEntity;
protected render(): TemplateResult {
if (!this.hass || !this.stateObj) {
return html``;
}
const stateObj = this.stateObj;
return html`
${supportsFeature(stateObj, REMOTE_SUPPORT_ACTIVITY)
? html`
<ha-paper-dropdown-menu
.label=${this.hass!.localize(
"ui.dialogs.more_info_control.remote.activity"
)}
>
<paper-listbox
slot="dropdown-content"
.selected=${stateObj.attributes.current_activity}
@iron-select=${this.handleActivityChanged}
attr-for-selected="item-name"
>
${stateObj.attributes.activity_list!.map(
(activity) => html`
<paper-item .itemName=${activity}>
${activity}
</paper-item>
`
)}
</paper-listbox>
</ha-paper-dropdown-menu>
`
: ""}
<ha-attributes
.stateObj=${this.stateObj}
.extraFilters=${filterExtraAttributes}
></ha-attributes>
`;
}
private handleActivityChanged(ev: CustomEvent) {
const oldVal = this.stateObj!.attributes.current_activity;
const newVal = ev.detail.item.itemName;
if (!newVal || oldVal === newVal) {
return;
}
this.hass.callService("remote", "turn_on", {
entity_id: this.stateObj!.entity_id,
activity: newVal,
});
}
static get styles(): CSSResult {
return css`
paper-item {
cursor: pointer;
}
`;
}
}
declare global {
interface HTMLElementTagNameMap {
"more-info-remote": MoreInfoRemote;
}
}

View File

@@ -21,7 +21,6 @@ const LAZY_LOADED_MORE_INFO_CONTROL = {
lock: () => import("./controls/more-info-lock"),
media_player: () => import("./controls/more-info-media_player"),
person: () => import("./controls/more-info-person"),
remote: () => import("./controls/more-info-remote"),
script: () => import("./controls/more-info-script"),
sun: () => import("./controls/more-info-sun"),
timer: () => import("./controls/more-info-timer"),

View File

@@ -7,7 +7,7 @@ import { computeLocalize } from "../common/translations/localize";
import { DEFAULT_PANEL } from "../data/panel";
import { translationMetadata } from "../resources/translations-metadata";
import { HomeAssistant } from "../types";
import { getTranslation, getLocalLanguage } from "../util/hass-translation";
import { getLocalLanguage, getTranslation } from "../util/hass-translation";
import { demoConfig } from "./demo_config";
import { demoPanels } from "./demo_panels";
import { demoServices } from "./demo_services";

View File

@@ -16,7 +16,6 @@ import memoizeOne from "memoize-one";
import { isComponentLoaded } from "../common/config/is_component_loaded";
import { restoreScroll } from "../common/decorators/restore-scroll";
import { navigate } from "../common/navigate";
import { LocalizeFunc } from "../common/translations/localize";
import { computeRTL } from "../common/util/compute_rtl";
import "../components/ha-icon";
import "../components/ha-icon-button-arrow-prev";
@@ -41,9 +40,7 @@ export interface PageNavigation {
class HassTabsSubpage extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@property({ type: Boolean }) public supervisor = false;
@property({ attribute: false }) public localizeFunc?: LocalizeFunc;
@property({ type: Boolean }) public hassio = false;
@property({ type: String, attribute: "back-path" }) public backPath?: string;
@@ -51,9 +48,9 @@ class HassTabsSubpage extends LitElement {
@property({ type: Boolean, attribute: "main-page" }) public mainPage = false;
@property({ attribute: false }) public route!: Route;
@property() public route!: Route;
@property({ attribute: false }) public tabs!: PageNavigation[];
@property() public tabs!: PageNavigation[];
@property({ type: Boolean, reflect: true }) public narrow = false;
@@ -74,8 +71,7 @@ class HassTabsSubpage extends LitElement {
showAdvanced: boolean | undefined,
_components,
_language,
_narrow,
localizeFunc
_narrow
) => {
const shownTabs = tabs.filter(
(page) =>
@@ -95,7 +91,7 @@ class HassTabsSubpage extends LitElement {
.active=${page === activeTab}
.narrow=${this.narrow}
.name=${page.translationKey
? localizeFunc(page.translationKey)
? this.hass.localize(page.translationKey)
: page.name}
>
${page.iconPath
@@ -134,8 +130,7 @@ class HassTabsSubpage extends LitElement {
this.hass.userData?.showAdvanced,
this.hass.config.components,
this.hass.language,
this.narrow,
this.localizeFunc || this.hass.localize
this.narrow
);
const showTabs = tabs.length > 1 || !this.narrow;
return html`
@@ -143,7 +138,7 @@ class HassTabsSubpage extends LitElement {
${this.mainPage
? html`
<ha-menu-button
.hassio=${this.supervisor}
.hassio=${this.hassio}
.hass=${this.hass}
.narrow=${this.narrow}
></ha-menu-button>

View File

@@ -1,7 +1,7 @@
import { LitElement, property, PropertyValues } from "lit-element";
import { computeLocalize, LocalizeFunc } from "../common/translations/localize";
import { Constructor, Resources } from "../types";
import { getTranslation, getLocalLanguage } from "../util/hass-translation";
import { getLocalLanguage, getTranslation } from "../util/hass-translation";
const empty = () => "";

View File

@@ -161,8 +161,8 @@ export class HaConfigDevicePage extends LitElement {
const batteryState = batteryEntity
? this.hass.states[batteryEntity.entity_id]
: undefined;
const batteryIsBinary =
batteryState && computeStateDomain(batteryState) === "binary_sensor";
const batteryIsBinary = batteryState
&& computeStateDomain(batteryState) === "binary_sensor";
const batteryChargingState = batteryChargingEntity
? this.hass.states[batteryChargingEntity.entity_id]
: undefined;

View File

@@ -1,7 +1,7 @@
import "@material/mwc-button";
import {
mdiInformationOutline,
mdiClipboardTextMultipleOutline,
mdiClipboardTextMultipleOutline
} from "@mdi/js";
import "@polymer/paper-checkbox/paper-checkbox";
import "@polymer/paper-input/paper-input";
@@ -169,10 +169,7 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) {
<th>[[localize('ui.panel.developer-tools.tabs.states.state')]]</th>
<th hidden$="[[narrow]]">
[[localize('ui.panel.developer-tools.tabs.states.attributes')]]
<paper-checkbox
checked="{{_showAttributes}}"
on-change="{{saveAttributeCheckboxState}}"
></paper-checkbox>
<paper-checkbox checked="{{_showAttributes}}" on-change="{{saveAttributeCheckboxState}}"></paper-checkbox>
</th>
</tr>
<tr>
@@ -288,9 +285,7 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) {
_showAttributes: {
type: Boolean,
value: JSON.parse(
localStorage.getItem("devToolsShowAttributes") || true
),
value: JSON.parse(localStorage.getItem("devToolsShowAttributes") || true),
},
_entities: {

View File

@@ -191,9 +191,6 @@ class HuiAlarmPanelCard extends LitElement implements LovelaceCard {
id="alarmCode"
.label=${this.hass.localize("ui.card.alarm_control_panel.code")}
type="password"
.inputmode=${stateObj.attributes.code_format === FORMAT_NUMBER
? "numeric"
: "text"}
></paper-input>
`}
${stateObj.attributes.code_format !== FORMAT_NUMBER

View File

@@ -199,10 +199,7 @@ class HuiPictureEntityCard extends LitElement implements LovelaceCard {
left: 0;
right: 0;
bottom: 0;
background-color: var(
--ha-picture-card-background-color,
rgba(0, 0, 0, 0.3)
);
background-color: var(--ha-picture-card-background-color, rgba(0, 0, 0, 0.3));
padding: 16px;
font-size: 16px;
line-height: 16px;

View File

@@ -314,10 +314,7 @@ class HuiPictureGlanceCard extends LitElement implements LovelaceCard {
left: 0;
right: 0;
bottom: 0;
background-color: var(
--ha-picture-card-background-color,
rgba(0, 0, 0, 0.3)
);
background-color: var(--ha-picture-card-background-color, rgba(0, 0, 0, 0.3));
padding: 4px 8px;
font-size: 16px;
line-height: 40px;

View File

@@ -359,9 +359,6 @@ export abstract class HuiElementEditor<T> extends LitElement {
.yaml-editor {
padding: 8px 0px;
}
ha-code-editor {
--code-mirror-max-height: calc(100vh - 245px);
}
.error,
.warning,
.info {

View File

@@ -81,7 +81,7 @@ class LovelaceFullConfigEditor extends LitElement {
</div>
<mwc-button
raised
@click=${this._handleSave}
@click="${this._handleSave}"
.disabled=${!this._changed}
>${this.hass!.localize(
"ui.panel.lovelace.editor.raw_editor.save"
@@ -95,8 +95,8 @@ class LovelaceFullConfigEditor extends LitElement {
autofocus
.rtl=${computeRTL(this.hass)}
.hass=${this.hass}
@value-changed=${this._yamlChanged}
@editor-save=${this._handleSave}
@value-changed="${this._yamlChanged}"
@editor-save="${this._handleSave}"
>
</ha-code-editor>
</div>
@@ -112,7 +112,6 @@ class LovelaceFullConfigEditor extends LitElement {
protected updated(changedProps: PropertyValues) {
const oldLovelace = changedProps.get("lovelace") as Lovelace | undefined;
if (
!this._saving &&
oldLovelace &&
this.lovelace &&
oldLovelace.config !== this.lovelace.config &&
@@ -306,8 +305,8 @@ class LovelaceFullConfigEditor extends LitElement {
});
}
window.onbeforeunload = null;
this._changed = false;
this._saving = false;
this._changed = false;
}
private get yamlEditor(): HaCodeEditor {

View File

@@ -4,25 +4,20 @@ import { StreamLanguage } from "@codemirror/stream-parser";
import { jinja2 } from "@codemirror/legacy-modes/mode/jinja2";
import { yaml } from "@codemirror/legacy-modes/mode/yaml";
import { indentLess, indentMore } from "@codemirror/commands";
import { Compartment } from "@codemirror/state";
export { keymap, highlightActiveLine, drawSelection } from "@codemirror/view";
export { keymap } from "@codemirror/view";
export { CMEditorView as EditorView };
export { EditorState, Prec } from "@codemirror/state";
export { EditorState, Prec, tagExtension } from "@codemirror/state";
export { defaultKeymap } from "@codemirror/commands";
export { lineNumbers } from "@codemirror/gutter";
export { searchKeymap, highlightSelectionMatches } from "@codemirror/search";
export { history, historyKeymap } from "@codemirror/history";
export { rectangularSelection } from "@codemirror/rectangular-selection";
export const langs = {
jinja2: StreamLanguage.define(jinja2),
yaml: StreamLanguage.define(yaml),
};
export const langCompartment = new Compartment();
export const readonlyCompartment = new Compartment();
export const tabKeyBindings: KeyBinding[] = [
{ key: "Tab", run: indentMore },
{
@@ -32,41 +27,35 @@ export const tabKeyBindings: KeyBinding[] = [
];
export const theme = CMEditorView.theme({
"&": {
$: {
color: "var(--primary-text-color)",
backgroundColor:
"var(--code-editor-background-color, var(--card-background-color))",
"& ::selection": { backgroundColor: "rgba(var(--rgb-primary-color), 0.3)" },
height: "var(--code-mirror-height, auto)",
maxHeight: "var(--code-mirror-max-height, unset)",
},
"&.cm-focused": { outline: "none" },
"&.cm-focused .cm-cursor": {
borderLeftColor: "#var(--secondary-text-color)",
},
"&.cm-focused .cm-selectionBackground, .cm-selectionBackground": {
$scroller: { outline: "none" },
$content: { caretColor: "var(--secondary-text-color)" },
$$focused: { outline: "none" },
"$$focused $cursor": { borderLeftColor: "#var(--secondary-text-color)" },
"$$focused $selectionBackground, $selectionBackground": {
backgroundColor: "rgba(var(--rgb-primary-color), 0.3)",
},
".cm-activeLine": {
backgroundColor: "rgba(var(--rgb-secondary-text-color), 0.1)",
},
".cm-scroller": { outline: "none" },
".cm-content": { caretColor: "var(--secondary-text-color)" },
".cm-panels": {
$panels: {
backgroundColor: "var(--primary-background-color)",
color: "var(--primary-text-color)",
},
".cm-panels.top": { borderBottom: "1px solid var(--divider-color)" },
".cm-panels.bottom": { borderTop: "1px solid var(--divider-color)" },
"$panels.top": { borderBottom: "1px solid var(--divider-color)" },
"$panels.bottom": { borderTop: "1px solid var(--divider-color)" },
".cm-panel.search input": { margin: "4px 4px 0" },
"$panel.search input": { margin: "4px 4px 0" },
".cm-button": {
$button: {
border: "1px solid var(--primary-color)",
padding: "0px 16px",
textTransform: "uppercase",
@@ -82,7 +71,7 @@ export const theme = CMEditorView.theme({
letterSpacing: "var(--mdc-typography-button-letter-spacing, 0.0892857em)",
},
".cm-textfield": {
$textfield: {
padding: "4px 0px 5px",
borderRadius: "0",
fontSize: "16px",
@@ -103,20 +92,20 @@ export const theme = CMEditorView.theme({
},
},
".cm-selectionMatch": {
$selectionMatch: {
backgroundColor: "rgba(var(--rgb-primary-color), 0.1)",
},
".cm-searchMatch": {
$searchMatch: {
backgroundColor: "rgba(var(--rgb-accent-color), .2)",
outline: "1px solid rgba(var(--rgb-accent-color), .4)",
},
".cm-searchMatch.selected": {
"$searchMatch.selected": {
backgroundColor: "rgba(var(--rgb-accent-color), .4)",
outline: "1px solid var(--accent-color)",
},
".cm-gutters": {
$gutters: {
backgroundColor:
"var(--paper-dialog-background-color, var(--primary-background-color))",
color: "var(--paper-dialog-color, var(--secondary-text-color))",
@@ -125,15 +114,15 @@ export const theme = CMEditorView.theme({
"1px solid var(--paper-input-container-color, var(--secondary-text-color))",
paddingRight: "1px",
},
"&.cm-focused cm-gutters": {
"$$focused $gutters": {
borderRight:
"2px solid var(--paper-input-container-focus-color, var(--primary-color))",
paddingRight: "0",
},
".cm-gutterElementags.lineNumber": { color: "inherit" },
"$gutterElementags.lineNumber": { color: "inherit" },
});
export const highlightStyle = HighlightStyle.define([
export const highlightStyle = HighlightStyle.define(
{ tag: tags.keyword, color: "var(--codemirror-keyword, #6262FF)" },
{
tag: [
@@ -204,5 +193,5 @@ export const highlightStyle = HighlightStyle.define([
{ tag: tags.processingInstruction, color: "var(--secondary-text-color)" },
{ tag: tags.string, color: "var(--codemirror-string, #07a)" },
{ tag: tags.inserted, color: "var(--codemirror-string2, #07a)" },
{ tag: tags.invalid, color: "var(--error-color)" },
]);
{ tag: tags.invalid, color: "var(--error-color)" }
);

View File

@@ -12,8 +12,8 @@ import { translationMetadata } from "../resources/translations-metadata";
import { Constructor, HomeAssistant } from "../types";
import { storeState } from "../util/ha-pref-storage";
import {
getTranslation,
getLocalLanguage,
getTranslation,
getUserLanguage,
} from "../util/hass-translation";
import { HassBaseEl } from "./hass-base-mixin";

View File

@@ -611,9 +611,6 @@
"updater": {
"title": "Update Instructions"
},
"remote": {
"activity": "Current activity"
},
"restored": {
"not_provided": "This entity is currently unavailable and is an orphan to a removed, changed or dysfunctional integration or device.",
"remove_intro": "If the entity is no longer in use, you can clean it up by removing it.",
@@ -3420,400 +3417,5 @@
}
}
}
},
"supervisor": {
"addon": {
"failed_to_reset": "Failed to reset add-on configuration, {error}",
"failed_to_save": "Failed to save add-on configuration, {error}",
"state": {
"installed": "Add-on is installed",
"not_installed": "Add-on is not installed",
"not_available": "Add-on is not available on your system"
},
"panel": {
"configuration": "Configuration",
"documentation": "Documentation",
"info": "Info",
"log": "Log"
},
"configuration": {
"no_configuration": "This add-on does not expose configuration for you to mess with...",
"audio": {
"header": "Audio",
"default": "Default",
"input": "Input",
"output": "Output"
},
"options": {
"header": "Options",
"edit_in_ui": "Edit in UI",
"edit_in_yaml": "Edit in YAML",
"invalid_yaml": "Invalid YAML",
"show_unused_optional": "Show unused optional configuration options"
},
"network": {
"container": "Container",
"disabled": "Disabled",
"header": "Network",
"host": "Host"
}
},
"dashboard": {
"changelog": "Changelog",
"cpu_usage": "Add-on CPU Usage",
"ram_usage": "Add-on RAM Usage",
"hostname": "Hostname",
"new_update_available": "{name} {version} is available",
"not_available_arch": "This add-on is not compatible with the processor of your device or the operating system you have installed on your device.",
"not_available_version": "You are unning Home Assistant {core_version_installed}, to update to this version of the add-on you need at least version {core_version_needed} of Home Assistan",
"visit_addon_page": "Visit the {name} page for more detals",
"restart": "restart",
"start": "start",
"stop": "stop",
"install": "install",
"uninstall": "uninstall",
"rebuild": "rebuild",
"open_web_ui": "Open web UI",
"protection_mode": {
"title": "Warning: Protection mode is disabled!",
"content": "Protection mode on this add-on is disabled! This gives the add-on full access to the entire system, which adds security risks, and could damage your system when used incorrectly. Only disable the protection mode if you know, need AND trust the source of this add-on.",
"enable": "Enable Protection mode"
},
"capability": {
"stage": {
"title": "Add-on Stage",
"description": "Add-ons can have one of three stages:\n\n{icon_stable} **Stable**: These are add-ons ready to be used in production.\n\n{icon_experimental} **Experimental**: These may contain bugs, and may be unfinished.\n\n{icon_deprecated} **Deprecated**: These add-ons will no longer receive any updates."
},
"rating": {
"title": "Add-on Security Rating",
"description": "Home Assistant provides a security rating to each of the add-ons, which indicates the risks involved when using this add-on. The more access an add-on requires on your system, the lower the score, thus raising the possible security risks.\n\nA score is on a scale from 1 to 6. Where 1 is the lowest score (considered the most insecure and highest risk) and a score of 6 is the highest score (considered the most secure and lowest risk)."
},
"host_network": {
"title": "Host Network",
"description": "Add-ons usually run in their own isolated network layer, which prevents them from accessing the network of the host operating system. In some cases, this network isolation can limit add-ons in providing their services and therefore, the isolation can be lifted by the add-on author, giving the add-on full access to the network capabilities of the host machine. This gives the add-on more networking capabilities but lowers the security, hence, the security rating of the add-on will be lowered when this option is used by the add-on."
},
"homeassistant_api": {
"title": "Home Assistant API Access",
"description": "This add-on is allowed to access your running Home Assistant instance directly via the Home Assistant API. This mode handles authentication for the add-on as well, which enables an add-on to interact with Home Assistant without the need for additional authentication tokens."
},
"full_access": {
"title": "Full Hardware Access",
"description": "This add-on is given full access to the hardware of your system, by request of the add-on author. Access is comparable to the privileged mode in Docker. Since this opens up possible security risks, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on."
},
"hassio_api": {
"title": "Supervisor API Access",
"description": "The add-on was given access to the Supervisor API, by request of the add-on author. By default, the add-on can access general version information of your system. When the add-on requests 'manager' or 'admin' level access to the API, it will gain access to control multiple parts of your Home Assistant system. This permission is indicated by this badge and will impact the security score of the add-on negatively."
},
"docker_api": {
"title": "Full Docker Access",
"description": "The add-on author has requested the add-on to have management access to the Docker instance running on your system. This mode gives the add-on full access and control to your entire Home Assistant system, which adds security risks, and could damage your system when misused. Therefore, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on."
},
"host_pid": {
"title": "Host Processes Namespace",
"description": "Usually, the processes the add-on runs, are isolated from all other system processes. The add-on author has requested the add-on to have access to the system processes running on the host system instance, and allow the add-on to spawn processes on the host system as well. This mode gives the add-on full access and control to your entire Home Assistant system, which adds security risks, and could damage your system when misused. Therefore, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on."
},
"apparmor": {
"title": "AppArmor",
"description": "AppArmor ('Application Armor') is a Linux kernel security module that restricts add-ons capabilities like network access, raw socket access, and permission to read, write, or execute specific files.\n\nAdd-on authors can provide their security profiles, optimized for the add-on, or request it to be disabled. If AppArmor is disabled, it will raise security risks and therefore, has a negative impact on the security score of the add-on."
},
"auth_api": {
"title": "Home Assistant Authentication",
"description": "An add-on can authenticate users against Home Assistant, allowing add-ons to give users the possibility to log into applications running inside add-ons, using their Home Assistant username/password. This badge indicates if the add-on author requests this capability."
},
"ingress": {
"title": "Ingress",
"description": "This add-on is using Ingress to embed its interface securely into Home Assistant."
},
"label": {
"stage": "stage",
"rating": "rating",
"hardware": "hardware",
"host": "host",
"hass": "hass",
"hassio": "hassio",
"docker": "docker",
"host_pid": "host pid",
"apparmor": "apparmor",
"auth": "auth",
"ingress": "ingress"
},
"role": {
"manager": "manager",
"default": "default",
"homeassistant": "homeassistant",
"backup": "backup",
"admin": "admin"
}
},
"option": {
"boot": {
"title": "Start on boot",
"description": "Make the add-on start during a system boot"
},
"watchdog": {
"title": "Watchdog",
"description": "This will start the add-on if it crashes"
},
"auto_update": {
"title": "Auto update",
"description": "Auto update the add-on when there is a new version available"
},
"ingress_panel": {
"title": "Show in sidebar",
"description": "Add this add-on to your sidebar"
},
"protected": {
"title": "Protection mode",
"description": "Blocks elevated system access from the add-on"
}
},
"action_error": {
"uninstall": "Failed to uninstall add-on",
"install": "Failed to install add-on",
"stop": "Failed to stop add-on",
"restart": "Failed to restart add-on",
"start": "Failed to start add-on",
"go_to_config": "Failed to start add-on - configuration validation failed!",
"start_invalid_config": "Go to configuration",
"validate_config": "Failed to validate add-on configuration",
"get_changelog": "Failed to get add-on changelog"
}
},
"documentation": {
"get_documentation": "Failed to get add-on documentation, {error}"
},
"logs": {
"get_logs": "Failed to get add-on logs, {error}"
}
},
"common": {
"cancel": "[%key:ui::common::cancel%]",
"yes": "[%key:ui::common::yes%]",
"no": "[%key:ui::common::no%]",
"description": "Description",
"failed_to_restart_name": "Failed to restart {name}",
"failed_to_update_name": "Failed to update {name}",
"learn_more": "Learn more",
"new_version_available": "New version available",
"newest_version": "Newest Version",
"refresh": "[%key:ui::common::refresh%]",
"release_notes": "Release notes",
"reload": "Reload",
"reset_defaults": "Reset to defaults",
"reset_options": "Reset options",
"restart_name": "Restart {name}",
"restart": "Restart",
"running_version": "You are currently running version {version}",
"save": "[%key:ui::common::save%]",
"close": "[%key:ui::common::close%]",
"show_more": "Show more information about this",
"update_available": "{count, plural,\n one {Update}\n other {{count} Updates}\n} pending",
"update": "Update",
"version": "Version",
"error": {
"unknown": "Unknown error",
"update_failed": "Update failed",
"lost_connectivity": "The Supervisor has lost connectivity, check the Supervisor logs and your network settings."
}
},
"confirm": {
"update": {
"title": "Update {name}",
"text": "Are you sure you want to update {name} to version {version}?"
},
"restart": {
"title": "[%key:supervisor::common::restart_name%]",
"text": "Are you sure you want to restart {name}?"
},
"reset_options": {
"title": "Reset options",
"text": "Are you sure you want to reset all your options?"
}
},
"dashboard": {
"addon_new_version": "New version available",
"addon_running": "Add-on is running",
"addon_stopped": "Add-on is stopped",
"addons": "Add-ons",
"no_addons": "You don't have any add-ons installed yet. Head over to the add-on store to get started!"
},
"store": {
"missing_addons": "Missing add-ons? Enable advanced mode in your user profile page",
"no_results_found": "No results found in {repository}.",
"registries": "Registries",
"repositories": "Repositories"
},
"panel": {
"dashboard": "Dashboard",
"snapshots": "Snapshots",
"store": "Add-on Store",
"system": "System"
},
"my": {
"not_supported": "[%key:ui::panel::my::not_supported%]",
"faq_link": "[%key:ui::panel::my::faq_link%]",
"error": "[%key:ui::panel::my::error%]",
"error_addon_not_found": "Add-on not found"
},
"system": {
"log": {
"log_provider": "Log Provider",
"get_logs": "Failed to get {provider} logs, {error}"
},
"supervisor": {
"cpu_usage": "Supervisor CPU Usage",
"ram_usage": "Supervisor RAM Usage",
"failed_to_set_option": "Failed to set Supervisor option",
"failed_to_reload": "Failed to reload the Supervisor",
"failed_to_update": "Failed to update the Supervisor",
"unsupported_title": "You are running an unsupported installation",
"unsupported_description": "Below is a list of issues found with your installation, click on the links to learn how you can resolve the issues.",
"unhealthy_title": "Your installation is unhealthy",
"unhealthy_description": "Running an unhealthy installation will cause issues. Below is a list of issues found with your installation, click on the links to learn how you can resolve the issues.",
"update_supervisor": "Update the Supervisor",
"channel": "Channel",
"leave_beta_action": "Leave beta channel",
"leave_beta_description": "Get stable updates for Home Assistant, Supervisor and host",
"join_beta_action": "Join beta channel",
"join_beta_description": "Get beta updates for Home Assistant (RCs), Supervisor and host",
"share_diagnostics": "Share Diagnostics",
"share_diagnostics_description": "Share crash reports and diagnostic information.",
"reload_supervisor": "Reload Supervisor",
"warning": "WARNING",
"beta_warning": "Beta releases are for testers and early adopters and can contain unstable code changes",
"beta_backup": "Make sure you have backups of your data before you activate this feature.",
"beta_release_items": "This includes beta releases for:",
"beta_join_confirm": "Do you want to join the beta channel?",
"share_diagonstics_title": "Help Improve Home Assistant",
"share_diagonstics_description": "Would you want to automatically share crash reports and diagnostic information when the Supervisor encounters unexpected errors? {line_break} This will allow us to fix the problems, the information is only accessible to the Home Assistant Core team and will not be shared with others.{line_break} The data does not include any private/sensitive information and you can disable this in settings at any time you want.",
"unsupported_reason": {
"container": "Containers known to cause issues",
"dbus": "DBUS",
"docker_configuration": "Docker Configuration",
"docker_version": "Docker Version",
"job_conditions": "Ignored job conditions",
"lxc": "LXC",
"network_manager": "Network Manager",
"os": "Operating System",
"privileged": "Supervisor is not privileged",
"systemd": "Systemd"
},
"unhealthy_reason": {
"privileged": "Supervisor is not privileged",
"supervisor": "Supervisor was not able to update",
"setup": "Setup of the Supervisor failed",
"docker": "The Docker environment is not working properly"
}
},
"host": {
"failed_to_get_hardware_list": "Failed to get hardware list",
"failed_to_reboot": "Failed to reboot the host",
"failed_to_shutdown": "Failed to shutdown the host",
"failed_to_set_hostname": "Setting hostname failed",
"failed_to_import_from_usb": "Failed to import from USB",
"used_space": "Used space",
"hostname": "Hostname",
"change_hostname": "Change Hostname",
"new_hostname": "Please enter a new hostname:",
"ip_address": "IP Address",
"change": "Change",
"operating_system": "Operating System",
"docker_version": "Docker version",
"deployment": "Deployment",
"emmc_lifetime_used": "eMMC Lifetime Used",
"reboot_host": "Reboot host",
"confirm_reboot": "Are you sure you want to reboot the host?",
"confirm_shutdown": "Are you sure you want to shutdown the host?",
"shutdown_host": "Shutdown host",
"hardware": "Hardware",
"import_from_usb": "Import from USB"
},
"core": {
"cpu_usage": "Core CPU Usage",
"ram_usage": "Core RAM Usage"
}
},
"snapshot": {
"description": "Snapshots allow you to easily backup and restore all data of your Home Assistant instance.",
"available_snapshots": "Available Snapshots",
"no_snapshots": "You don't have any snapshots yet.",
"create_blocked_not_running": "Creating a snapshot is not possible right now because the system is in {state} state.",
"could_not_create": "Could not create snapshot",
"upload_snapshot": "Upload snapshot",
"create_snapshot": "Create snapshot",
"create": "Create",
"name": "Name",
"type": "Type",
"security": "Security",
"full_snapshot": "Full snapshot",
"partial_snapshot": "Partial snapshot",
"addons": "Add-ons",
"folders": "Folders",
"password": "Password",
"password_protection": "Password protection",
"password_protected": "password protected",
"enter_password": "Please enter a password.",
"folder": {
"homeassistant": "Home Assistant configuration",
"ssl": "SSL",
"share": "Share",
"media": "Media",
"addons/local": "Local add-ons"
}
},
"dialog": {
"network": {
"title": "Network settings",
"connected_to": "Connected to {ssid}",
"scan_ap": "Scan for accesspoints",
"open": "Open",
"wep": "WEP",
"wpa": "wpa-psk",
"warning": "If you are changing the Wi-Fi, IP or gateway addresses, you might lose the connection!",
"static": "Static",
"dhcp": "DHCP",
"disabled": "Disabled",
"ip_netmask": "IP address/Netmask",
"gateway": "Gateway address",
"dns_servers": "DNS Servers",
"unsaved": "You have unsaved changes, these will get lost if you change tabs, do you want to continue?",
"failed_to_change": "Failed to change network settings"
},
"registries": {
"title_add": "Add New Container Registry",
"title_manage": "Manage Container Registries",
"registry": "Registry",
"username": "Username",
"password": "Password",
"no_registries": "No registries configured",
"add_registry": "Add registry",
"add_new_registry": "Add new registry",
"remove": "Remove",
"failed_to_add": "Failed to add registry",
"failed_to_remove": "Failed to remove registry"
},
"repositories": {
"title": "Manage add-on repositories",
"add": "Add",
"remove": "Remove"
},
"restart_addon": {
"confirm_text": "Restart add-on",
"text": "Do you want to restart the add-on with your changes?"
},
"update": {
"snapshot": "Snapshot",
"create_snapshot": "Create a snapshot of {name} before updating",
"updating": "Updating {name} to version {version}",
"snapshotting": "Creating snapshot of {name}"
}
}
}
}

View File

@@ -1,56 +0,0 @@
import { translationMetadata } from "../resources/translations-metadata";
const DEFAULT_BASE_URL = "/static/translations";
// Store loaded translations in memory so translations are available immediately
// when DOM is created in Polymer. Even a cache lookup creates noticeable latency.
const translations = {};
async function fetchTranslation(fingerprint: string, base_url: string) {
const response = await fetch(`${base_url}/${fingerprint}`, {
credentials: "same-origin",
});
if (!response.ok) {
throw new Error(
`Fail to fetch translation ${fingerprint}: HTTP response status is ${response.status}`
);
}
return response.json();
}
export async function getTranslation(
fragment: string | null,
language: string,
base_url?: string
) {
const metadata = translationMetadata.translations[language];
if (!metadata) {
if (language !== "en") {
return getTranslation(fragment, "en", base_url);
}
throw new Error("Language en is not found in metadata");
}
// nl-abcd.jon or logbook/nl-abcd.json
const fingerprint = `${fragment ? fragment + "/" : ""}${language}-${
metadata.hash
}.json`;
// Fetch translation from the server
if (!translations[fingerprint]) {
translations[fingerprint] = fetchTranslation(
fingerprint,
base_url || DEFAULT_BASE_URL
)
.then((data) => ({ language, data }))
.catch((error) => {
delete translations[fingerprint];
if (language !== "en") {
// Couldn't load selected translation. Try a fall back to en before failing.
return getTranslation(fragment, "en", base_url);
}
return Promise.reject(error);
});
}
return translations[fingerprint];
}

View File

@@ -1,7 +1,6 @@
import { fetchTranslationPreferences } from "../data/translation";
import { translationMetadata } from "../resources/translations-metadata";
import { HomeAssistant } from "../types";
import { getTranslation as commonGetTranslation } from "./common-translation";
const STORAGE = window.localStorage || {};
@@ -94,13 +93,55 @@ export function getLocalLanguage() {
return "en";
}
// Store loaded translations in memory so translations are available immediately
// when DOM is created in Polymer. Even a cache lookup creates noticeable latency.
const translations = {};
async function fetchTranslation(fingerprint) {
const response = await fetch(`/static/translations/${fingerprint}`, {
credentials: "same-origin",
});
if (!response.ok) {
throw new Error(
`Fail to fetch translation ${fingerprint}: HTTP response status is ${response.status}`
);
}
return response.json();
}
export async function getTranslation(
fragment: string | null,
language: string
) {
return commonGetTranslation(fragment, language);
const metadata = translationMetadata.translations[language];
if (!metadata) {
if (language !== "en") {
return getTranslation(fragment, "en");
}
throw new Error("Language en is not found in metadata");
}
// nl-abcd.jon or logbook/nl-abcd.json
const fingerprint = `${fragment ? fragment + "/" : ""}${language}-${
metadata.hash
}.json`;
// Fetch translation from the server
if (!translations[fingerprint]) {
translations[fingerprint] = fetchTranslation(fingerprint)
.then((data) => ({ language, data }))
.catch((error) => {
delete translations[fingerprint];
if (language !== "en") {
// Couldn't load selected translation. Try a fall back to en before failing.
return getTranslation(fragment, "en");
}
return Promise.reject(error);
});
}
return translations[fingerprint];
}
// Load selected translation into memory immediately so it is ready when Polymer
// initializes.
commonGetTranslation(null, getLocalLanguage());
getTranslation(null, getLocalLanguage());

View File

@@ -518,7 +518,6 @@
"trigger": "نوع المشغل"
},
"event": {
"context_user_pick": "Vælg bruger",
"event_data": "بيانات الحدث",
"event_type": "نوع الحدث",
"label": "الحدث"

View File

@@ -102,383 +102,6 @@
"unknown": "Desconegut"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"default": "Per defecte",
"header": "Àudio",
"input": "Entrada",
"output": "Sortida"
},
"network": {
"container": "Contenidor",
"disabled": "Desactivada",
"header": "Xarxa",
"host": "Amfitrió"
},
"no_configuration": "Aquest complement no exposa cap configuració amb la que t'hi puguis manegar...",
"options": {
"edit_in_ui": "Edita a la IU",
"edit_in_yaml": "Edita com a YAML",
"header": "Opcions",
"invalid_yaml": "YAML invàlid",
"show_unused_optional": "Mostra les opcions de configuració opcionals no utilitzades"
}
},
"dashboard": {
"action_error": {
"get_changelog": "No s'ha pogut obtenir el registre de canvis del complement",
"go_to_config": "No s'ha pogut iniciar el complement, ha fallat la validació de la configuració!",
"install": "No s'ha pogut instal·lar el complement",
"restart": "No s'ha pogut reiniciar el complement",
"start": "No s'ha pogut iniciar el complement",
"start_invalid_config": "Vés a configuració",
"stop": "No s'ha pogut aturar el complement",
"uninstall": "No s'ha pogut desinstal·lar el complement",
"validate_config": "No s'ha pogut validar la configuració del complement"
},
"capability": {
"apparmor": {
"description": "AppArmor ('Application Armor') és un mòdul de seguretat del nucli Linux que restringeix certes capacitats dels complements com l'accés a la xarxa, l'accés complet a sockets o els permisos per llegir, escriure o executar fitxers específics.\n\nEls autors del complement poden proporcionar els seus perfils de seguretat optimitzats per al complement, o demanar que es desactivi. Si AppArmor està desactivat, augmenten els riscos de seguretat i, per tant, el nivell de seguretat del complement se'n veurà ressentit.",
"title": "AppArmor"
},
"auth_api": {
"description": "Un complement pot autenticar usuaris amb Home Assistant, cosa que permet que els usuaris puguin iniciar sessió a aplicacions que s'estan executant dins de complements mitjançant el seu nom d'usuari/contrasenya de Home Assistant. Aquesta insígnia indica si l'autor del complement ha demanat aquesta funcionalitat.",
"title": "Autenticació de Home Assistant"
},
"docker_api": {
"title": "Accés complet a Docker"
},
"full_access": {
"description": "Aquest complement té accés complet al maquinari del teu sistema per petició del seu autor. Aquest accés és similar al mode privilegiat de Docker. Com que això genera possibles riscos de seguretat, aquesta funció afecta negativament al nivell de seguretat del complement. \n\nAquest accés no s'atorga automàticament i cal que ho confirms. Per fer-ho, has de desactivar manualment el mode de protecció del complement. Desactiva el mode de protecció només si coneixes i confies en l'origen del complement.",
"title": "Accés complet al maquinari"
},
"hassio_api": {
"title": "Accés a l'API del Supervisor"
},
"homeassistant_api": {
"description": "Aquest complement té permís per accedir a la teva instància de Home Assistant directament mitjançant l'API de Home Assistant. Aquest mode també gestiona l'autenticació del complement, cosa que li permet interactuar amb Home Assistant sense necessitat de tokens d'autenticació addicionals.",
"title": "Accés a l'API de Home Assistant"
},
"host_network": {
"description": "Els complements normalment s'executen dins la seva pròpia capa de xarxa aïllada, cosa que els impedeix accedir a la xarxa del sistema operatiu amfitrió. En alguns casos, aquest aïllament pot limitar la prestació dels serveis del complement. Per tant, l'aïllament pot ser eliminat per l'autor del complement; en aquest cas, el complement té un accés complet a les capacitats de xarxa del dispositiu amfitrió. Això li porporciona més capacitats però en redueix la seguretat, per tant, el nivell de seguretat del complement es reduirà quan aquesta opció s'utilitzi.",
"title": "Xarxa amfitrió"
},
"ingress": {
"description": "Aquest complement utilitza Ingress per poder incrustar la seva interfície de manera segura a Home Assistant.",
"title": "Ingress"
},
"label": {
"apparmor": "apparmor",
"auth": "autenticació",
"docker": "docker",
"hardware": "maquinari",
"hass": "hass",
"hassio": "hassio",
"host": "amfitrió",
"host_pid": "PID d'amfitrió",
"ingress": "ingress",
"rating": "nivell",
"stage": "fase"
},
"rating": {
"description": "Home Assistant proporciona un nivell de seguretat a cadascun dels complements que n'indica els riscos que comporta el seu ús. Com més accés tingui el complement al teu sistema, menor serà la puntuació, ja que els possibles riscos de seguretat augmenten. \n\nEl nivell es troba en una escala de l'1 al 6. On l'1 és la puntuació més baixa (menys segur i risc més alt) i la puntuació 6 és la puntuació més alta (més segur i risc més baix).",
"title": "Nivell de seguretat del complement"
},
"role": {
"admin": "administrador",
"backup": "còpia de seguretat",
"default": "per defecte",
"homeassistant": "homeasistant",
"manager": "gestor"
},
"stage": {
"description": "Els complements poden estar en una de les tres fases següents: \n\n{icon_stable} **Estable**: complements llestos per a ser utilitzats a producció. \n\n{icon_experimental} **Experimental**: poden contenir errors i pot ser que encara no estiguin acabats. \n\n{icon_deprecated} **Obsolet**: complements que ja no rebran més actualitzacions.",
"title": "Fase del complement"
}
},
"changelog": "Registre de canvis",
"cpu_usage": "Ús de CPU del complement",
"hostname": "Nom d'amfitrió",
"install": "instal·la",
"new_update_available": "{name} {version} està disponible",
"not_available_arch": "Aquest complement no és compatible amb el processador del dispositiu o amb el sistema operatiu que està instal·lat al dispositiu.",
"not_available_version": "Estàs utilitzant Home Assistant {core_version_installed}, per actualitzar el complement a aquesta versió, necessites com mínim la versió {core_version_needed} de Home Assistant",
"open_web_ui": "Obre la IU web",
"option": {
"auto_update": {
"description": "Actualitza el complement automàticament quan hi hagi una nova versió disponible",
"title": "Actualització automàtica"
},
"boot": {
"description": "Fa que el complement s'iniciï durant l'arrencada del sistema",
"title": "Inici a l'arrencada"
},
"ingress_panel": {
"description": "Afegeix aquest complement a la barra lateral",
"title": "Mostra a la barra lateral"
},
"protected": {
"title": "Mode de protecció"
},
"watchdog": {
"description": "Això farà que s'iniciï el complement en cas de que falli",
"title": "Gos vigilant"
}
},
"protection_mode": {
"content": "El mode de protecció en aquest complement està desactivat. Això fa que el complement tingui accés complet a tot el sistema, cosa que afegeix riscos de seguretat i pot fer malbé el sistema si s'utilitza incorrectament. Desactiva el mode de protecció només si coneixes i confies en l'origen del complement.",
"enable": "Activa el mode de protecció",
"title": "Alerta: el mode de protecció està desactivat!"
},
"ram_usage": "Ús de RAM del complement",
"rebuild": "reconstrueix",
"restart": "reinicia",
"start": "inicia",
"stop": "atura",
"uninstall": "desinstal·la",
"visit_addon_page": "Vés a la pàgina {name} per a més detalls"
},
"documentation": {
"get_documentation": "No s'ha pogut obtenir la documentació del complement, {error}"
},
"failed_to_reset": "No s'ha pogut reiniciar la configuració del complement, {error}",
"failed_to_save": "No s'ha pogut desar la configuració del complement, {error}",
"logs": {
"get_logs": "No s'han pogut obtenir els registres del complement, {error}"
},
"panel": {
"configuration": "Configuració",
"documentation": "Documentació",
"info": "Informació",
"log": "Registre"
},
"state": {
"installed": "El complement està instal·lat",
"not_available": "El complement no està disponible pel teu sistema",
"not_installed": "El complement no està instal·lat"
}
},
"common": {
"cancel": "Cancel·la",
"close": "Tanca",
"description": "Descripció",
"error": {
"unknown": "Error desconegut",
"update_failed": "Ha fallat l'actualització"
},
"failed_to_restart_name": "No s'han pogut reiniciar {name}",
"failed_to_update_name": "No s'han pogut actualitzar {name}",
"learn_more": "Més informació",
"new_version_available": "Nova versió disponible",
"newest_version": "Última versió",
"no": "No",
"refresh": "Actualitza",
"release_notes": "Notes de la versió",
"reload": "Torna a carregar",
"reset_defaults": "Restableix als valors per defecte",
"reset_options": "Opcions de reinici",
"restart": "Reinicia",
"restart_name": "Reinicia {name}",
"running_version": "Estàs utilitzant la versió {version}",
"save": "Desa",
"show_more": "Mostra més informació al respecte",
"update": "Actualitza",
"update_available": "{count, plural,\n one {Actualització pendent}\n other {{count} Actualitzacions pendents}\n}",
"version": "Versió",
"yes": "Sí"
},
"confirm": {
"reset_options": {
"text": "Estàs segur que vols restablir totes les opcions?",
"title": "Restableix opcions"
},
"restart": {
"text": "Estàs segur que vols reiniciar {name}?",
"title": "Reinicia {name}"
},
"update": {
"text": "Estàs segur que vols actualitzar {name} a la versió {version}?",
"title": "Actualitza {name}"
}
},
"dashboard": {
"addon_new_version": "Nova versió disponible",
"addon_running": "El complement s'està executant",
"addon_stopped": "El complement està aturat",
"addons": "Complements",
"no_addons": "Encara no tens cap complement instal·lat. Vés al directori de complements per començar!"
},
"dialog": {
"network": {
"connected_to": "Connectat a {ssid}",
"dhcp": "DHCP",
"disabled": "Desactivada",
"dns_servers": "Servidors DNS",
"failed_to_change": "No s'ha pogut canviar la configuració de xarxa",
"gateway": "Adreça de la passarel·la",
"ip_netmask": "Adreça IP/màscara de xarxa",
"open": "Oberta",
"scan_ap": "Busca punts d'accés",
"static": "Estàtica",
"title": "Configuració de xarxa",
"unsaved": "Tens canvis sense desar, es perdran si canvies de pestanya, vols continuar?",
"warning": "Si canvies l'adreça Wi-Fi, IP o de la passarel·la, és possible que perdis la connexió!",
"wep": "WEP",
"wpa": "wpa-psk"
},
"registries": {
"add_new_registry": "Afegeix nou registre",
"add_registry": "Afegeix registre",
"failed_to_add": "No s'ha pogut afegir el registre",
"failed_to_remove": "No s'ha pogut eliminar el registre",
"no_registries": "No hi ha registres configurats",
"password": "Contrasenya",
"registry": "Registre",
"remove": "Elimina",
"title_add": "Afegeix nou registre de contenidors",
"title_manage": "Gestiona els registres de contenidors",
"username": "Nom d'usuari"
},
"repositories": {
"add": "Afegeix",
"remove": "Elimina",
"title": "Gestiona els repositoris de complements"
},
"restart_addon": {
"confirm_text": "Reinicia el complement",
"text": "Vols reiniciar el complement amb els teus canvis?"
},
"update": {
"create_snapshot": "Crea una instantània de {name} abans d'actualitzar",
"snapshot": "Instantània",
"snapshotting": "Creant instantània de {name}",
"updating": "S'està actualitzant {name} a la versió {version}"
}
},
"my": {
"error": "S'ha produït un error desconegut",
"error_addon_not_found": "No s'ha trobat el complement",
"faq_link": "Preguntes freqüents de My Home Assistant",
"not_supported": "La instància de Home Assistant no admet aquesta redirecció. Consulta {link} per veure les redireccions compatibles i en quina versió es van introduir."
},
"panel": {
"dashboard": "Panell",
"snapshots": "Instantànies",
"store": "Directori de complements",
"system": "Sistema"
},
"snapshot": {
"addons": "Complements",
"available_snapshots": "Instantànies disponibles",
"could_not_create": "No s'ha pogut crear la instantània",
"create": "Crea",
"create_blocked_not_running": "Ara mateix no és possible crear una instantània perquè el sistema es troba en estat {state}.",
"create_snapshot": "Crea instantània",
"description": "Les instantànies et permeten fer una còpia de seguretat i recuperar les dades de la teva instància de Home Assistant.",
"enter_password": "Introdueix una contrasenya.",
"folder": {
"addons/local": "Complements locals",
"homeassistant": "Configuració de Home Assistant",
"media": "Mitjans",
"share": "Share",
"ssl": "SSL"
},
"folders": "Carpetes",
"full_snapshot": "Instantània completa",
"name": "Nom",
"no_snapshots": "Encara no tens instantànies.",
"partial_snapshot": "Instantània parcial",
"password": "Contrasenya",
"password_protected": "protegit amb contrasenya",
"password_protection": "Protecció amb contrasenya",
"security": "Seguretat",
"type": "Tipus",
"upload_snapshot": "Puja instantània"
},
"store": {
"missing_addons": "Falten complements? Activa el mode avançat a la pàgina de perfil d'usuari",
"no_results_found": "No s'han trobat resultats a {repository}.",
"registries": "Registres",
"repositories": "Repositoris"
},
"system": {
"core": {
"cpu_usage": "Ús de CPU del nucli",
"ram_usage": "Ús de RAM del nucli"
},
"host": {
"change": "Canvia",
"change_hostname": "Canvia el nom d'amfitrió",
"confirm_reboot": "Segur que vols reiniciar l'amfitrió?",
"confirm_shutdown": "Segur que vols apagar l'amfitrió?",
"deployment": "Desplegament",
"docker_version": "Versió de Docker",
"emmc_lifetime_used": "Vida de l'eMMC utilitzada",
"failed_to_get_hardware_list": "No s'ha pogut obtenir la llista del maquinari",
"failed_to_import_from_usb": "No s'ha pogut importar des d'USB",
"failed_to_reboot": "No s'ha pogut reiniciar l'amfitrió",
"failed_to_set_hostname": "No s'ha pogut establir el nom d'amfitrió",
"failed_to_shutdown": "No s'ha pogut apagar l'amfitrió",
"hardware": "Maquinari",
"hostname": "Nom d'amfitrió",
"import_from_usb": "Importa des d'USB",
"ip_address": "Adreça IP",
"new_hostname": "Introdueix un nom d'amfitrió nou:",
"operating_system": "Sistema operatiu",
"reboot_host": "Reinicia amfitrió",
"shutdown_host": "Apaga amfitrió",
"used_space": "Espai utilitzat"
},
"log": {
"get_logs": "No s'han pogut obtenir els registres de {provider}, {error}",
"log_provider": "Proveïdor de registres"
},
"supervisor": {
"beta_backup": "Assegura't que tens còpies de seguretat de les teves dades abans d'activar aquesta funció.",
"beta_join_confirm": "Vols unir-te al canal beta?",
"beta_release_items": "Això inclou les versions beta de:",
"channel": "Canal",
"cpu_usage": "Ús de CPU del Supervisor",
"failed_to_reload": "No s'ha pogut tornar a carregar el Supervisor",
"failed_to_set_option": "No s'ha pogut configurar l'opció del Supervisor",
"failed_to_update": "No s'ha pogut actualitzar el Supervisor",
"join_beta_action": "Uneix-te al canal beta",
"join_beta_description": "Obtén actualitzacions beta de Home Assistant (RCs), del Supervisor i de l'amfitrió",
"leave_beta_action": "Deixa el canal beta",
"leave_beta_description": "Obtén actualitzacions estables de Home Assistant, del Supervisor i de l'amfitrió",
"ram_usage": "Ús de RAM del Supervisor",
"reload_supervisor": "Torna a carregar el Supervisor",
"share_diagnostics": "Comparteix diagnòstics",
"share_diagnostics_description": "Comparteix informes d'errors i informació de diagnòstic.",
"share_diagonstics_description": "Vols compartir automàticament informes d'error i informació de diagnòstic quan el Supervisor trobi amb errors inesperats?{line_break} Això ens permetrà solucionar problemes, la informació només és accessible per a l'equip de Home Assistant Core i no es compartirà amb altres persones.{line_break} Les dades no inclouen informació privada/confidencial, ho pots desactivar en qualsevol moment a la configuració.",
"share_diagonstics_title": "Ajuda a millorar Home Assistant",
"unhealthy_description": "Si utilitzes una instal·lació que no és bona, es produiran problemes. A continuació es mostra una llista de problemes relacionats amb la instal·lació, fes clic als enllaços per obtenir informació sobre com resoldre'ls.",
"unhealthy_reason": {
"docker": "L'entorn Docker no està funcionant correctament",
"privileged": "El Supervisor no és privilegiat",
"setup": "Ha fallat la configuració del Supervisor",
"supervisor": "El Supervisor no s'ha pogut actualitzar"
},
"unhealthy_title": "La teva instal·lació no és bona",
"unsupported_description": "A continuació es mostra una llista de problemes relacionats amb la instal·lació, fes clic als enllaços per obtenir informació sobre com resoldre'ls.",
"unsupported_reason": {
"dbus": "DBUS",
"docker_configuration": "Configuració de Docker",
"docker_version": "Versió de Docker",
"lxc": "LXC",
"network_manager": "Gestor de xarxa",
"os": "Sistema operatiu",
"privileged": "El Supervisor no és privilegiat",
"systemd": "Systemd"
},
"unsupported_title": "Estàs executant una instal·lació no suportada",
"update_supervisor": "Actualitza el Supervisor",
"warning": "ATENCIÓ"
}
}
},
"ui": {
"auth_store": {
"ask": "Vols desar aquest inici de sessió?",
@@ -754,8 +377,6 @@
"changed_to_state": "ha canviat a {state}",
"cleared_device_class": "s'ha esborrat (no s'ha detectat cap {device_class})",
"detected_device_class": "s'ha detectat {device_class}",
"is_closing": "s'està tancant",
"is_opening": "s'està obrint",
"rose": "rosa",
"set": "establert",
"turned_off": "s'ha apagat",
@@ -1003,9 +624,6 @@
"person": {
"create_zone": "Crea una zona a partir de la ubicació actual"
},
"remote": {
"activity": "Activitat actual"
},
"restored": {
"confirm_remove_text": "Estàs segur que vols eliminar aquesta entitat?",
"confirm_remove_title": "Eliminar l'entitat?",
@@ -1015,7 +633,7 @@
},
"script": {
"last_action": "Última acció",
"last_triggered": "Disparat per última vegada"
"last_triggered": "Disparada per última vegada"
},
"settings": "Configuració de l'entitat",
"sun": {
@@ -1076,9 +694,10 @@
"navigate_to": "Vés a {panel}",
"person": "Persones",
"scene": "Escenes",
"script": "Programes (scripts)",
"script": "Programació (scripts)",
"server_control": "Controls del servidor",
"tag": "Etiquetes",
"tags": "Etiquetes",
"users": "Usuaris",
"zone": "Zones"
},
@@ -1137,7 +756,6 @@
"clusters": "Gestiona clústers",
"reconfigure": "Reconfigurar dispositiu",
"remove": "Eliminar dispositiu",
"view_in_visualization": "Mostra a la visualització",
"zigbee_information": "Signatura Zigbee del dispositiu"
},
"confirmations": {
@@ -2272,7 +1890,7 @@
},
"device_info": {
"node_failed": "Ha fallat el node",
"stage": "Fase",
"stage": "Etapa",
"zwave_info": "Informació Z-Wave"
},
"navigation": {
@@ -2451,7 +2069,7 @@
}
},
"script": {
"caption": "Programes (scripts)",
"caption": "Programació (scripts)",
"description": "Executa una seqüència d'accions",
"editor": {
"alias": "Nom",
@@ -2715,7 +2333,6 @@
"caption": "Visualització",
"header": "Visualització de xarxa",
"highlight_label": "Ressalta els dispositius",
"refresh_topology": "Actualitza la topologia",
"zoom_label": "Amplia al dispositiu"
}
},
@@ -3393,8 +3010,6 @@
"error_remove": "No s'ha pogut eliminar la configuració: {error}",
"error_save_yaml": "No es pot desar YAML: {error}",
"header": "Edita la configuració",
"lovelace_changed": "La configuració Lovelace s'ha actualitzat, vols tornar a carregar la nova configuració a l'editor i perdre els canvis actuals?",
"reload": "Torna a carregar",
"resources_moved": "Els recursos ja no s'han d'afegir a la configuració de Lovelace, però es poden afegir al tauler de configuració de Lovelace.",
"save": "Desa",
"saved": "Desat",
@@ -3484,7 +3099,7 @@
"component_not_loaded": "La instància de Home Assistant no admet aquesta redirecció. Necessites la integració {integration} per poder fer aquesta redirecció.",
"documentation": "documentació",
"error": "S'ha produït un error desconegut",
"faq_link": "Preguntes freqüents de My Home Assistant",
"faq_link": "Preguntes freqüents de Home Assistant",
"no_supervisor": "La teva instal·lació de Home Assistant no admet aquesta redirecció. Necessites tenir instal·lat o bé el Sistema Operatiu Home Assistant o Home Assistant Supervisat. Per a més informació, consulta {docs_link}.",
"not_supported": "La instància de Home Assistant no admet aquesta redirecció. Consulta {link} per veure les redireccions compatibles i en quina versió es van introduir."
},

View File

@@ -102,231 +102,6 @@
"unknown": "Nezjištěno"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"default": "Výchozí",
"header": "Zvuk",
"input": "Vstup",
"output": "Výstup"
},
"network": {
"disabled": "Zakázáno",
"header": "Síť",
"host": "Hostitel"
},
"options": {
"edit_in_ui": "Upravit v uživatelském rozhraní",
"edit_in_yaml": "Upravit přímo YAML",
"header": "Možnosti",
"invalid_yaml": "Neplatný YAML"
}
},
"dashboard": {
"capability": {
"apparmor": {
"title": "AppArmor"
},
"label": {
"docker": "docker",
"hass": "hass",
"hassio": "hassio",
"host": "hostitel"
},
"role": {
"admin": "admin",
"backup": "záloha",
"default": "výchozí",
"homeassistant": "homeassistant",
"manager": "správce"
}
},
"changelog": "Seznam změn",
"hostname": "Název hostitele",
"open_web_ui": "Otevřít webové rozhraní",
"option": {
"boot": {
"title": "Spustit při spuštění"
},
"watchdog": {
"title": "Hlídací pes"
}
}
},
"panel": {
"configuration": "Nastavení",
"documentation": "Dokumentace",
"info": "Informace",
"log": "Log"
},
"state": {
"installed": "Doplněk je nainstalován",
"not_installed": "Doplněk není nainstalován"
}
},
"common": {
"cancel": "Zrušit",
"description": "Popis",
"error": {
"unknown": "Neznámá chyba"
},
"learn_more": "Další informace",
"new_version_available": "K dispozici je nová verze",
"newest_version": "Nejnovější verze",
"no": "Ne",
"refresh": "Obnovit",
"release_notes": "Poznámky k vydání",
"reload": "Nově načíst",
"restart": "Restartovat",
"restart_name": "Restartovat {name}",
"save": "Uložit",
"update": "Aktualizovat",
"update_available": "{count, plural,\n one {Aktualizace}\n few {{count} aktualizace}\n other {{count} aktualizací}\n}",
"version": "Verze",
"yes": "Ano"
},
"confirm": {
"reset_options": {
"text": "Opravdu chcete obnovit všechny možnosti?",
"title": "Obnovit možnosti"
},
"restart": {
"title": "Restartovat {name}"
},
"update": {
"text": "Opravdu chcete aktualizovat {name} na verzi {version}?",
"title": "Aktualizovat {název}"
}
},
"dashboard": {
"addon_new_version": "K dispozici je nová verze",
"addon_running": "Doplněk je spuštěn",
"addon_stopped": "Doplněk je zastaven",
"addons": "Doplňky"
},
"dialog": {
"network": {
"connected_to": "Připojeno k {ssid}",
"dhcp": "DHCP",
"disabled": "Zakázáno",
"dns_servers": "Servery DNS",
"gateway": "IP adresa brány",
"ip_netmask": "IP adresa/Maska sítě",
"open": "Otevřít",
"static": "Statická",
"title": "Nastavení sítě",
"wep": "WEP",
"wpa": "wpa-psk"
},
"registries": {
"add_new_registry": "Přidat nový registr",
"add_registry": "Přidat registr",
"failed_to_add": "Nepodařilo se přidat registr",
"failed_to_remove": "Odebrání registru se nezdařilo",
"no_registries": "Nejsou nastaveny žádné registry",
"password": "Heslo",
"registry": "Registr",
"remove": "Odebrat",
"username": "Uživatelské jméno"
},
"repositories": {
"add": "Přidat",
"remove": "Odebrat",
"title": "Správa úložišť doplňků"
},
"restart_addon": {
"confirm_text": "Restartovat doplněk",
"text": "Chcete doplněk restartovat se svými změnami?"
},
"update": {
"create_snapshot": "Vytvořit zálohu \"{name}\" před aktualizací",
"snapshot": "Záloha",
"snapshotting": "Vytváří se záloha \"{name}\"",
"updating": "Aktualizuje se \"{name}\" na verzi {version}"
}
},
"my": {
"error": "Nastala neznámá chyba",
"faq_link": "Časté dotazy týkající se My Home Assistant",
"not_supported": "Toto přesměrování není vaší instancí Home Assistant podporováno. Zkontrolujte {link} pro podporovaná přesměrování a verzi, ve které byla zavedena."
},
"panel": {
"dashboard": "Ovládací panel",
"snapshots": "Zálohy",
"store": "Obchod s doplňky",
"system": "Systém"
},
"snapshot": {
"addons": "Doplňky",
"available_snapshots": "Dostupné zálohy",
"could_not_create": "Nelze vytvořit zálohu",
"create": "Vytvořit",
"create_blocked_not_running": "Vytvoření zálohy není momentálně možné, protože systém je ve \"{state}\".",
"create_snapshot": "Vytvořit zálohu",
"enter_password": "Prosím zadejte heslo.",
"folder": {
"addons/local": "Místní doplňky",
"homeassistant": "Nastavení Home Asistent",
"media": "Média",
"share": "Sdílení",
"ssl": "SSL"
},
"folders": "Složky",
"full_snapshot": "Úplná záloha",
"name": "Název",
"no_snapshots": "Zatím nemáte žádné zálohy.",
"partial_snapshot": "Částečná záloha",
"password": "Heslo",
"password_protected": "chráněno heslem",
"password_protection": "Ochrana heslem",
"security": "Zabezpečení",
"type": "Typ",
"upload_snapshot": "Nahrát zálohu"
},
"store": {
"registries": "Registry",
"repositories": "Repozitáře"
},
"system": {
"host": {
"change": "Změnit",
"change_hostname": "Změnit název hostitele",
"docker_version": "Verze Dockeru",
"hardware": "Hardware",
"hostname": "Název hostitele",
"import_from_usb": "Importovat z USB",
"ip_address": "IP adresa",
"new_hostname": "Zadejte prosím nový název hostitele:",
"operating_system": "Operační systém",
"reboot_host": "Restartovat hostitele",
"shutdown_host": "Vypnout hostitele",
"used_space": "Použité místo"
},
"supervisor": {
"beta_backup": "Před aktivací této funkce se ujistěte, že máte zálohy svých dat.",
"beta_join_confirm": "Chcete se připojit k beta kanálu?",
"beta_release_items": "To zahrnuje beta verze pro:",
"channel": "Kanál",
"failed_to_reload": "Nové načtení Supervisora se nezdařilo",
"failed_to_update": "Aktualizace Supervisora se nezdařila",
"join_beta_action": "Připojit se k beta kanálu",
"leave_beta_action": "Opustit beta kanál",
"reload_supervisor": "Nově načíst Supervisor",
"share_diagnostics": "Sdílet diagnostické informace",
"share_diagonstics_title": "Pomozte vylepšit Home Asistent",
"unsupported_reason": {
"dbus": "DBUS",
"docker_version": "Verze Dockeru",
"network_manager": "Správce sítě",
"os": "Operační systém",
"systemd": "Systemd"
},
"update_supervisor": "Aktualizovat Supervisor",
"warning": "VAROVÁNÍ"
}
}
},
"ui": {
"auth_store": {
"ask": "Chcete toto přihlášení uložit?",
@@ -602,8 +377,6 @@
"changed_to_state": "změněno na {state}",
"cleared_device_class": "zrušeno (nebylo zjištěno {device_class})",
"detected_device_class": "zjištěno {device_class}",
"is_closing": "se zavírá",
"is_opening": "se otevírá",
"rose": "vyšlo",
"set": "zapadlo",
"turned_off": "vypnuto",
@@ -924,6 +697,7 @@
"script": "Skripty",
"server_control": "Ovládání serveru",
"tag": "Štítky",
"tags": "Štítky",
"users": "Uživatelé",
"zone": "Zóny"
},
@@ -3236,7 +3010,6 @@
"error_remove": "Nelze odstranit nastavení: {error}",
"error_save_yaml": "Nelze uložit YAML: {error}",
"header": "Upravit nastavení",
"reload": "Nově načíst",
"resources_moved": "Zdroje by již neměly být přidávány do konfigurace Lovelace, ale mohou být přidávány v panelu nastavení Lovelace.",
"save": "Uložit",
"saved": "Uloženo",

View File

@@ -102,123 +102,6 @@
"unknown": "Ukendt"
}
},
"supervisor": {
"common": {
"cancel": "Afbryd",
"restart": "Genstart",
"restart_name": "Genstart {name}",
"save": "Gem"
},
"confirm": {
"restart": {
"text": "Er du sikker på at du vil genstarte {name}?",
"title": "Genstart {name}"
},
"update": {
"title": "Opdater {name}"
}
},
"dialog": {
"network": {
"connected_to": "Forbundet til {ssid}",
"dhcp": "DHCP",
"disabled": "Deaktiveret",
"dns_servers": "DNS servere",
"gateway": "Gateway adresse",
"ip_netmask": "IP adresse/netmaske",
"open": "Åben",
"scan_ap": "Scan for adgangspunkter",
"static": "Statisk",
"title": "Netværksindstillinger",
"warning": "Hvis du ændrer på Wi-Fi, IP eller Gateway adresser, vil du måske miste forbindelsen!",
"wep": "WEP",
"wpa": "wpa-psk"
},
"registries": {
"add_new_registry": "Tilføj nyt registry",
"add_registry": "Tilføj registry",
"failed_to_add": "Fejl under tilføjelse af registry",
"failed_to_remove": "fejlede i at fjerne registret",
"no_registries": "Ingen registries er konfigurerede",
"password": "Kodeord",
"registry": "Registry",
"remove": "Fjern",
"title_manage": "Håndtér container registries",
"username": "Brugernavn"
},
"repositories": {
"add": "Tilføj",
"remove": "Fjern",
"title": "Administrer tilføjelsesregistre"
},
"restart_addon": {
"confirm_text": "Genstart add-on",
"text": "Vil du genstarte tilføjelsen med dine ændringer?"
},
"update": {
"create_snapshot": "Opret et snapshot af {name} før opdatering",
"snapshot": "Snapshot",
"snapshotting": "Opretter snapshot af {name}",
"updating": "Opdaterer {name} til version {version}"
}
},
"snapshot": {
"addons": "Tilføjelser",
"available_snapshots": "Tilgængelige snapshots",
"could_not_create": "Kunne ikke oprette snapshot",
"create": "Opret",
"create_blocked_not_running": "Det er ikke muligt at oprette et snapshot lige nu, fordi systemet er i tilstanden {state}.",
"create_snapshot": "Opret snapshot",
"description": "Snapshots giver dig mulighed for nemt at sikkerhedskopiere og gendanne alle data fra dit instans af Home Assistant.",
"enter_password": "Venligst indtast et kodeord.",
"folder": {
"addons/local": "Lokale tilføjelser",
"homeassistant": "Home Assistant konfiguration",
"media": "Medie",
"share": "Del",
"ssl": "SSL"
},
"folders": "Mapper",
"full_snapshot": "Fuldt snapshot",
"name": "Navn",
"no_snapshots": "Du har endnu ingen snapshots.",
"partial_snapshot": "Delvist snapshot",
"password": "Kodeord",
"password_protected": "beskyttet af kodeord",
"password_protection": "Adgangskodebeskyttelse",
"security": "Sikkerhed",
"type": "Type",
"upload_snapshot": "Opload snapshot"
},
"system": {
"core": {
"cpu_usage": "Core CPU forbrug",
"ram_usage": "Core RAM forbrug"
},
"host": {
"change_hostname": "Skift værtsnavn",
"confirm_reboot": "Er du sikker på, at du vil genstarte værten?",
"confirm_shutdown": "Er du sikker på, at du vil lukke værten ned?",
"docker_version": "Docker-version",
"hardware": "Hardware",
"hostname": "Værtsnavn",
"import_from_usb": "Importer fra USB",
"ip_address": "IP-adresse",
"new_hostname": "Indtast et nyt værtsnavn:",
"operating_system": "Operativsystem",
"reboot_host": "Genstart værten",
"shutdown_host": "Sluk vært",
"used_space": "Plads forbrug"
},
"supervisor": {
"share_diagonstics_description": "Ønsker du automatisk at dele rapporter og diagnosticeringsoplysninger når supervisoren oplever uventede fejl? {line_break} Dette vil lade os fikse problemerne, informationerene er kun tilgængelige for Home Assistant Core teamet og vil ikke blive delt med andre. {line_break} Dataene indeholder ikke private/følsomme informationer og du kan slå det fra i indstillingerne til hver en tid.",
"unsupported_reason": {
"docker_version": "Docker version",
"os": "Operativsystem"
}
}
}
},
"ui": {
"auth_store": {
"ask": "Ønsker du at forblive logget ind?",
@@ -237,7 +120,7 @@
},
"automation": {
"last_triggered": "Senest udløst",
"trigger": "Udfør"
"trigger": "Udløs"
},
"camera": {
"not_available": "Billedet er ikke tilgængeligt"
@@ -720,9 +603,6 @@
"person": {
"create_zone": "Opret zone fra den aktuelle lokalitet"
},
"remote": {
"activity": "Kørende aktivitet"
},
"restored": {
"confirm_remove_text": "Er du sikker på, at du vil fjerne denne entitet?",
"confirm_remove_title": "Fjern entitet?",
@@ -731,8 +611,8 @@
"remove_intro": "Hvis entiteten ikke længere er i brug, kan du rydde op ved at fjerne den."
},
"script": {
"last_action": "Senest udført",
"last_triggered": "Senest udført"
"last_action": "Senest udløst",
"last_triggered": "Senest udløst"
},
"settings": "Entitetsindstillinger",
"sun": {
@@ -795,6 +675,7 @@
"scene": "Scener",
"script": "Scripts",
"server_control": "Serveradministration",
"tags": "",
"users": "Brugere",
"zone": "Zoner"
},
@@ -891,7 +772,7 @@
"error_detected": "Der blev fundet konfigurationsfejl",
"key_missing": "Påkrævede nøgle \"{key}\" mangler.",
"key_not_expected": "Nøglen \"{key}\" er ikke forventet eller understøttes ikke af den visuelle editor.",
"key_wrong_type": "Den angivne værdi for \"{key}\" understøttes ikke af den visuelle editor. Vi understøtter ( {type_correct} ) men modtog ( {type_wrong} ).",
"key_wrong_type": "Den angivne værdi for \" {key} \" understøttes ikke af den visuelle editor. Vi understøtter ( {type_correct} ) men modtog ( {type_wrong} ).",
"no_type_provided": "Der er ikke angivet nogen type."
}
},
@@ -1510,7 +1391,7 @@
},
"core": {
"caption": "Generelt",
"description": "Ændre Home Assistants generelle konfiguration",
"description": "Ændr Home Assistants generelle konfiguration",
"section": {
"core": {
"core_config": {
@@ -2736,7 +2617,7 @@
"icon_height": "Ikonhøjde",
"image": "Sti til billede",
"manual": "Manuel",
"manual_description": "Har du brug for at tilføje et brugerdefineret kort eller bare manuelt skrive YAML?",
"manual_description": "Har du brug for at tilføje et brugerdefineret kort eller bare manuelt skrive yaml?",
"maximum": "Maksimum",
"minimum": "Minimum",
"name": "Navn",
@@ -3279,7 +3160,7 @@
"learn_auth_requests": "Lær, hvordan du laver godkendte forespørgsler.",
"name": "Navn",
"prompt_copy_token": "Kopier din adgangstoken. Den vil ikke blive vist igen.",
"prompt_name": "Giv tokenet et navn"
"prompt_name": "Navn?"
},
"mfa_setup": {
"close": "Luk",

View File

@@ -102,393 +102,6 @@
"unknown": "Unbekannt"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"default": "Standard",
"header": "Audio",
"input": "Audioeingang",
"output": "Audioausgang"
},
"network": {
"container": "Container",
"disabled": "Deaktiviert",
"header": "Netzwerk",
"host": "Host"
},
"no_configuration": "Für dieses Add-on gibt es keine Konfiguration. Also nichts mit dem du dich herumschlagen musst...",
"options": {
"edit_in_ui": "Mit der Benutzeroberfläche bearbeiten",
"edit_in_yaml": "Als YAML bearbeiten",
"header": "Optionen",
"invalid_yaml": "Ungültige YAML",
"show_unused_optional": "Nicht verwendete optionale Konfigurationsoptionen anzeigen"
}
},
"dashboard": {
"action_error": {
"get_changelog": "Add-on-Änderungsprotokoll konnte nicht abgerufen werden",
"go_to_config": "Starten des Add-on fehlgeschlagen - Validierung der Konfiguration nicht erfolgreich",
"install": "Add-on konnte nicht installiert werden",
"restart": "Neustart des Add-on fehlgeschlagen",
"start": "Starten des Add-on fehlgeschlagen",
"start_invalid_config": "Zur Konfiguration gehen",
"stop": "Stoppen des Add-on fehlgeschlagen",
"uninstall": "Add-on konnte nicht deinstalliert werden",
"validate_config": "Validierung der Add-on-Konfiguration fehlgeschlagen"
},
"capability": {
"apparmor": {
"description": "AppArmor ('Application Armor') ist ein Linux-Kernel-Sicherheitsmodul, das Add-on-Funktionen wie Netzwerkzugriff, Raw-Socket-Zugriff und die Berechtigung zum Lesen, Schreiben oder Ausführen bestimmter Dateien einschränkt. \n\nAdd-on-Autoren können ihre Sicherheitsprofile bereitstellen, die für das Add-on optimiert sind, oder die Deaktivierung anfordern. Wenn AppArmor deaktiviert ist, erhöht dies das Sicherheitsrisiko und wirkt sich daher negativ auf die Sicherheitsbewertung des Add-ons aus.",
"title": "AppArmor"
},
"auth_api": {
"description": "Ein Add-on kann Benutzer gegen Home Assistant authentifizieren, sodass Add-ons Benutzern die Möglichkeit bieten, sich mit ihrem Home Assistant-Benutzernamen/-Kennwort bei Anwendungen anzumelden, die in Add-ons ausgeführt werden. Dieses Abzeichen zeigt an, ob der Add-on-Autor diese Berechtigung anfordert.",
"title": "Home Assistant-Authentifizierung"
},
"docker_api": {
"description": "Der Add-on-Autor hat das Add-on angefordert, um Verwaltungszugriff auf die Docker-Instanz zu haben, die auf Deinem System ausgeführt wird. Dieser Modus gibt dem Add-on vollen Zugriff und Kontrolle auf dein gesamtes Home Assistant-System, was Sicherheitsrisiken erhöht und dein System beschädigen kann, wenn es missbraucht wird. Daher wirkt sich diese Funktion negativ auf den Add-on-Sicherheitsbewertung aus.\n\nDiese Zugriffsebene wird nicht automatisch gewährt und muss von dir bestätigt werden. Dazu musst du den Schutzmodus für das Add-on manuell deaktivieren. Deaktiviere den Schutzmodus nur, wenn du es wirklich musst UND der Quelle dieses Add-ons vertraust.",
"title": "Vollständiger Docker-Zugriff"
},
"full_access": {
"description": "Dieses Add-on erhält auf Wunsch des Add-on-Autors vollen Zugriff auf die Hardware Deines Systems. Der Zugriff ist mit dem privilegierten Modus in Docker vergleichbar. Da dies mögliche Sicherheitsrisiken eröffnet, wirkt sich diese Funktion negativ auf den Add-on-Sicherheitsbewertung aus.\n\nDiese Zugriffsebene wird nicht automatisch gewährt und muss von dir bestätigt werden. Dazu musst du den Schutzmodus für das Add-on manuell deaktivieren. Deaktiviere den Schutzmodus nur, wenn du es wirklich musst UND der Quelle dieses Add-ons vertraust.",
"title": "Voller Hardware-Zugriff"
},
"hassio_api": {
"description": "Dem Add-on wurde Zugriff auf die Supervisor-API gewährt, wie es der Add-on-Autors angefordert hat. Standardmäßig kann das Add-on auf allgemeine Versionsinformationen von deinem System zugreifen. Wenn das Add-on Zugriff auf die API mit \"Manager\"- oder \"Admin\"-Rechten anfordert, erhält es Zugriff auf mehrere Teile deines Home Assistant-Systems. Diese Berechtigung wird durch dieses Badge angezeigt und wirkt sich negativ auf die Sicherheitsbewertung des Add-ons aus.",
"title": "Supervisor-API-Zugriff"
},
"homeassistant_api": {
"description": "Dieses Add-on kann direkt über die Home Assistant-API auf deine laufende Home Assistant-Instanz zugreifen. Dieser Modus behandelt auch die Authentifizierung für das Add-on, wodurch ein Add-on mit Home Assistant interagieren kann, ohne dass zusätzliche Authentifizierungstoken erforderlich sind.",
"title": "Home Assistant API-Zugriff"
},
"host_network": {
"description": "Add-ons werden in der Regel auf ihrer eigenen isolierten Netzwerkschicht ausgeführt, wodurch sie daran gehindert werden, auf das Netzwerk des Hostbetriebssystems zuzugreifen. In einigen Fällen kann diese Netzwerkisolation, Add-ons bei der Bereitstellung ihrer Dienste einschränken. Daher kann die Isolierung vom Add-on-Autor aufgehoben werden, sodass das Add-on vollen Zugriff auf die Netzwerkfunktionen deines Hostcomputers hat. Dadurch erhält das Add-on mehr Netzwerkfunktionen, verringert jedoch die Sicherheit! Daher wird die Sicherheitsbewertung des Add-ons verringert, wenn diese Option vom Add-on verwendet wird.",
"title": "Host-Netzwerk"
},
"host_pid": {
"description": "In der Regel sind die Prozesse, die das Add-on ausführt, von allen anderen Systemprozessen isoliert. Der Add-on-Autor hat das Add-on aufgefordert, einen Zugriff auf die auf der Hostsysteminstanz ausgeführten Systemprozesse zu haben und dem Add-on auch das Erstellen von Prozessen auf dem Hostsystem zu ermöglichen. Dieser Modus gibt dem Add-on vollen Zugriff und Kontrolle auf Ihr gesamtes Home Assistant-System, was Sicherheitsrisiken erhöht und Ihr System beschädigen kann, wenn es missbraucht wird. Daher wirkt sich diese Funktion negativ auf den Add-on-Sicherheitsbewertung aus.\n\nDiese Zugriffsebene wird nicht automatisch gewährt und muss von dir bestätigt werden. Dazu musst du den Schutzmodus für das Add-on manuell deaktivieren. Deaktiviere den Schutzmodus nur, wenn du es wirklich musst UND der Quelle dieses Add-ons vertraust.",
"title": "Namespace für Host-Prozesse"
},
"ingress": {
"description": "Dieses Add-on verwendet Ingress, um seine Benutzeroberfläche sicher in Home Assistant einzubetten.",
"title": "Ingress"
},
"label": {
"apparmor": "AppArmor",
"auth": "genehmigen",
"docker": "Docker",
"hardware": "Hardware",
"hass": "hass",
"hassio": "hassio",
"host": "Host",
"host_pid": "Host-PID",
"ingress": "Ingress",
"rating": "Bewertung",
"stage": "Phase"
},
"rating": {
"description": "Home Assistant bietet eine Sicherheitsbewertung für jedes Add-on, welche die Risiken aufzeigen, die bei der Verwendung dieses Add-ons verbunden sind. Je mehr Zugriff ein Add-on auf dein System benötigt, desto niedriger ist die Punktzahl, wodurch die möglichen Sicherheitsrisiken steigen.\n\nDie Punktzahl ist auf einer Skala von 1 bis 6. Wobei 1 die niedrigste Punktzahl ist (ein sehr unsicheres Add-on mit dem höchsten Risiko) und eine Punktzahl von 6 die höchste Punktzahl ist (eines der sichersten Add-ons mit dem niedrigsten Risiko).",
"title": "Addon-Sicherheitsbewertung"
},
"role": {
"admin": "Administrator",
"backup": "Sicherung",
"default": "Standard",
"homeassistant": "homeassistant",
"manager": "Manager"
},
"stage": {
"description": "Add-ons können sich in einer von drei Phasen befinden:\n\n{icon_stable} **Stable**: Dies sind Add-ons, die bereits vollstandig sind und Updates erhalten.\n\n{icon_experimental} **Experimentell**: Diese können Fehler enthalten und unvollendet sein.\n\n{icon_deprecated} **Veraltet**: Diese Add-ons erhalten keine Updates mehr.",
"title": "Add-on Phase"
}
},
"changelog": "Änderungsprotokoll",
"cpu_usage": "CPU Auslastung des Add-on",
"hostname": "Hostname",
"install": "Installieren",
"new_update_available": "{name} {version} ist verfügbar",
"not_available_arch": "Dieses Add-on ist nicht mit dem Prozessor oder Betriebssystem deines Geräts kompatibel",
"not_available_version": "Du hast Home Assistant {core_version_installed} installiert, um auf diese Version des Add-ons zu aktualisieren, benötigst du mindestens die Home Assistant Version {core_version_needed}.",
"open_web_ui": "Benutzeroberfläche öffnen",
"option": {
"auto_update": {
"description": "Automatisches Aktualisieren des Add-on, wenn eine neue Version verfügbar ist",
"title": "Automatische Updates"
},
"boot": {
"description": "Das Add-on beim Systemstart starten",
"title": "Beim Booten starten"
},
"ingress_panel": {
"description": "Add-on zur Seitenleiste hinzufügen",
"title": "In der Seitenleiste anzeigen"
},
"protected": {
"description": "Blockiert den erhöhten Systemzugriff über das Add-on",
"title": "Gesicherter Modus"
},
"watchdog": {
"description": "Dadurch wird das Add-on gestartet, wenn es abstürzt",
"title": "Watchdog"
}
},
"protection_mode": {
"content": "Der Schutzmodus für dieses Add-on ist deaktiviert! Dadurch erhält das Add-on vollen Zugriff auf das gesamte System, was Sicherheitsrisiken mit sich bringt und dein System bei unsachgemäßer Verwendung beschädigen kann. Deaktiviere den Schutzmodus nur, wenn du die Quelle dieses Add-ons kennst, dieses benötigst UND vertraust.",
"enable": "Gesicherten Modus einschalten",
"title": "Warnung: Der gesicherte Modus ist deaktiviert!"
},
"ram_usage": "RAM Auslastung des Add-on",
"rebuild": "neu bauen",
"restart": "Neu starten",
"start": "Starten",
"stop": "Stoppen",
"uninstall": "Deinstallieren",
"visit_addon_page": "Weitere Informationen findest du auf der Seite {name}"
},
"documentation": {
"get_documentation": "Fehler beim Abrufen der Add-on-Dokumentation, {error}"
},
"failed_to_reset": "Fehler beim Zurücksetzen der Add-on-Konfiguration, {error}",
"failed_to_save": "Fehler beim Speichern der Add-on-Konfiguration, {error}",
"logs": {
"get_logs": "Fehler beim Abrufen der Add-on-Protokolle, {error}"
},
"panel": {
"configuration": "Konfiguration",
"documentation": "Dokumentation",
"info": "Informationen",
"log": "Protokoll"
},
"state": {
"installed": "Add-on ist installiert",
"not_available": "Das Add-on ist auf deinem System nicht verfügbar",
"not_installed": "Add-on ist nicht installiert"
}
},
"common": {
"cancel": "Abbrechen",
"close": "Schließen",
"description": "Beschreibung",
"error": {
"unknown": "Unbekannter Fehler",
"update_failed": "Update fehlgeschlagen"
},
"failed_to_restart_name": "Neustart von {name} fehlgeschlagen",
"failed_to_update_name": "Update von {name} fehlgeschlagen",
"learn_more": "Mehr Informationen",
"new_version_available": "Neue Version verfügbar",
"newest_version": "Neueste Version",
"no": "Nein",
"refresh": "Aktualisieren",
"release_notes": "Versionshinweise",
"reload": "Neu laden",
"reset_defaults": "Auf Werkseinstellungen zurücksetzen",
"reset_options": "Einstellungen zurücksetzen",
"restart": "Neustart",
"restart_name": "{name} neu starten",
"running_version": "Du hast aktuell Version {version}",
"save": "Speichern",
"show_more": "Zeige mehr Informationen",
"update": "Aktualisieren",
"update_available": "{count, plural,\n one {Aktualisierung}\n other {{count} Aktualisierungen}\n} ausstehend",
"version": "Version",
"yes": "Ja"
},
"confirm": {
"reset_options": {
"text": "Bist du dir sicher, alle Einstellungen zurückzusetzen?",
"title": "Optionen zum Zurücksetzen"
},
"restart": {
"text": "Bist du dir sicher, dass du {name} neu starten willst?",
"title": "{name} neu starten"
},
"update": {
"text": "Bist du sicher, dass du {name} auf Version {version} aktualisieren möchtest?",
"title": "Aktualisiere {name}"
}
},
"dashboard": {
"addon_new_version": "Neue Version verfügbar",
"addon_running": "Add-on wird ausgeführt",
"addon_stopped": "Add-on ist gestoppt",
"addons": "Add-ons",
"no_addons": "Du hast noch keine Add-ons installiert. Gehe zum Add-on-Shop, um loszulegen!"
},
"dialog": {
"network": {
"connected_to": "Verbunden mit {ssid}",
"dhcp": "DHCP",
"disabled": "Deaktiviert",
"dns_servers": "DNS-Server",
"failed_to_change": "Ändern der Netzwerkeinstellungen fehlgeschlagen",
"gateway": "Gateway-Adresse",
"ip_netmask": "IP-Adresse/Netzmaske",
"open": "Offen",
"scan_ap": "Nach Zugangspunkten suchen",
"static": "Statisch",
"title": "Netzwerkeinstellungen",
"unsaved": "Nicht gespeicherte Änderungen gehen beim Wechsel des Tabs verloren. Willst Du fortfahren?",
"warning": "Wenn du die WLAN-, IP- oder Gateway-Adressen änderst, verlierst du möglicherweise die Verbindung!",
"wep": "WEP",
"wpa": "WPA-PSK"
},
"registries": {
"add_new_registry": "Neue Registrierung hinzufügen",
"add_registry": "Registrierung hinzufügen",
"failed_to_add": "Fehler beim Hinzufügen der Registrierung",
"failed_to_remove": "Fehler beim Entfernen der Registrierung",
"no_registries": "Keine Registrierungen konfiguriert",
"password": "Passwort",
"registry": "Registrierung",
"remove": "Entfernen",
"title_add": "Neue Container-Registrierung hinzufügen",
"title_manage": "Verwalten von Container-Registrierungen",
"username": "Benutzername"
},
"repositories": {
"add": "Hinzufügen",
"remove": "Entfernen",
"title": "Add-on Repositorys verwalten"
},
"restart_addon": {
"confirm_text": "Add-on neu starten",
"text": "Möchtest du das Add-on mit deinen Änderungen neu starten?"
},
"update": {
"create_snapshot": "Erstelle eine Datensicherung von {name} vor der Aktualisierung",
"snapshot": "Datensicherung",
"snapshotting": "Erstelle Datensicherung für {name}",
"updating": "Aktualisiere {name} auf Version {version}"
}
},
"my": {
"error": "Ein unbekannter Fehler ist aufgetreten.",
"error_addon_not_found": "Add-on nicht gefunden",
"faq_link": "Häufig gestellten Fragen zu Home Assistant",
"not_supported": "Diese Weiterleitung wird von deiner Home Assistant-Instanz nicht unterstützt. Überprüfe den {link} auf die unterstützten Weiterleitungen und die Version, in der sie eingeführt wurden."
},
"panel": {
"dashboard": "Dashboard",
"snapshots": "Datensicherungen",
"store": "Add-on Shop",
"system": "System"
},
"snapshot": {
"addons": "Add-ons",
"available_snapshots": "Verfügbare Sicherungen",
"could_not_create": "Datensicherung konnte nicht erstellt werden",
"create": "Erstellen",
"create_blocked_not_running": "Das Erstellen eines Snapshots ist derzeit nicht möglich, da sich das System im Zustand {state} befindet.",
"create_snapshot": "Datensicherung erstellen",
"description": "Sicherungen ermöglichen dir das leichte Speichern und Wiederherstellen von allen Daten aus Home Assistant.",
"enter_password": "Bitte Passwort eingeben.",
"folder": {
"addons/local": "Lokale Add-ons",
"homeassistant": "Home Assistant-Konfiguration",
"media": "Medien",
"share": "Freigaben",
"ssl": "SSL"
},
"folders": "Ordner",
"full_snapshot": "Vollständige Datensicherung",
"name": "Name",
"no_snapshots": "Du hast bisher keine Sicherungen erstellt.",
"partial_snapshot": "Selektive Datensicherung",
"password": "Passwort",
"password_protected": "Passwort geschützt",
"password_protection": "Passwortschutz",
"security": "Sicherheit",
"type": "Typ",
"upload_snapshot": "Datensicherung hochladen"
},
"store": {
"missing_addons": "Fehlende Add-ons? Aktiviere den erweiterten Modus auf deiner Benutzerprofilseite",
"no_results_found": "Keine Ergebnisse in {repository} gefunden",
"registries": "Einträge",
"repositories": "Repositories"
},
"system": {
"core": {
"cpu_usage": "Core-CPU Auslastung",
"ram_usage": "Core-RAM Nutzung"
},
"host": {
"change": "Ändern",
"change_hostname": "Hostname ändern",
"confirm_reboot": "Bist du sicher, dass du den Host neu starten willst?",
"confirm_shutdown": "Bist du sicher, dass du den Host herunterfahren willst?",
"deployment": "Deployment",
"docker_version": "Docker-Version",
"emmc_lifetime_used": "eMMC Verschleiß",
"failed_to_get_hardware_list": "Fehler beim Abrufen der Hardwareliste",
"failed_to_import_from_usb": "Fehler beim Importieren von USB",
"failed_to_reboot": "Fehler beim Neustart des Hosts",
"failed_to_set_hostname": "Das Setzen des Hostnamens ist fehlgeschlagen",
"failed_to_shutdown": "Fehler beim Herunterfahren des Hosts",
"hardware": "Hardware",
"hostname": "Hostname",
"import_from_usb": "Von USB importieren",
"ip_address": "IP-Adresse",
"new_hostname": "Bitte einen neuen Hostnamen eingeben:",
"operating_system": "Betriebssystem",
"reboot_host": "Host neustarten",
"shutdown_host": "Host herunterfahren",
"used_space": "Belegter Speicherplatz"
},
"log": {
"get_logs": "Fehler beim Abrufen der {provider} -Protokolle, {error}",
"log_provider": "Protokollanbieter"
},
"supervisor": {
"beta_backup": "Stelle sicher dass du Backups gemacht hast, bevor du diese Funktion aktivierst.",
"beta_join_confirm": "Möchtest du dem Beta Kanal beitreten?",
"beta_release_items": "Dies beinhaltet Beta-Versionen für:",
"beta_warning": "Beta-Versionen sind für Tester und Early Adopters gedacht und können instabile Codeänderungen enthalten",
"channel": "Kanal",
"cpu_usage": "CPU Auslastung von Supervisor",
"failed_to_reload": "Fehler beim Aktualisieren des Supervisor",
"failed_to_set_option": "Fehler beim Setzen einer Supervisor Option",
"failed_to_update": "Der Supervisor konnte nicht aktualisiert werden",
"join_beta_action": "Beta-Kanal beitreten",
"join_beta_description": "Erhalte Beta-Updates für Home Assistant (RCs), Supervisor und Host",
"leave_beta_action": "Beta-Kanal verlassen",
"leave_beta_description": "Erhalte stabile Updates für Home Assistant, Supervisor und Host",
"ram_usage": "Arbeitsspeicherbedarf von Supervisor",
"reload_supervisor": "Supervisor neu starten",
"share_diagnostics": "Diagnose teilen",
"share_diagnostics_description": "Teile Absturzberichte und Diagnoseinformationen.",
"share_diagonstics_description": "Möchtest du Absturzberichte und Diagnoseinformationen automatisch freigeben, wenn der Supervisor auf unerwartete Fehler stößt? {line_break} Auf diese Weise können wir die Probleme beheben. Die Informationen sind nur für das Home Assistant Core Team zugänglich und werden nicht an andere weitergegeben. {line_break} Die Daten enthalten keine privaten/sensiblen Informationen und du kannst diese jederzeit in den Einstellungen deaktivieren.",
"share_diagonstics_title": "Hilf Home Assistant zu verbessern",
"unhealthy_description": "Das Ausführen einer fehlerhaften Installation führt zu Problemen. Unten findest du eine Liste der Probleme, die bei deiner Installation aufgetreten sind. Klicke auf die Links, um zu erfahren, wie Du diese Probleme beheben kannst.",
"unhealthy_reason": {
"docker": "Die Docker Umgebung arbeitet nicht fehlerfrei",
"privileged": "Der Supervisor ist nicht berechtigt",
"setup": "Die Einrichtung des Supervisors ist fehlgeschlagen",
"supervisor": "Supervisor konnte nicht aktualisiert werden"
},
"unhealthy_title": "Deine Installation ist fehlerhaft",
"unsupported_description": "Unten ist eine Liste der Probleme, die bei deiner Installation aufgetreten sind. Klicke auf die Links, um zu erfahren, wie du die Probleme beheben kannst.",
"unsupported_reason": {
"container": "Container, von denen bekannt ist, dass sie Probleme verursachen",
"dbus": "DBUS",
"docker_configuration": "Docker Konfiguration",
"docker_version": "Docker Version",
"job_conditions": "Ignorierte Jobbedingungen",
"lxc": "LXC",
"network_manager": "Netzwerk Einstellungen",
"os": "Betriebssystem",
"privileged": "Der Supervisor ist nicht berechtigt",
"systemd": "Systemd"
},
"unsupported_title": "Deine Installation wird nicht unterstützt",
"update_supervisor": "Supervisor aktualisieren",
"warning": "WARNUNG"
}
}
},
"ui": {
"auth_store": {
"ask": "Möchtest du angemeldet bleiben?",
@@ -764,8 +377,6 @@
"changed_to_state": "wechselte zu {state}",
"cleared_device_class": "zurückgesetzt (kein(e) {device_class} erkannt)",
"detected_device_class": "{device_class} erkannt",
"is_closing": "wird geschlossen",
"is_opening": "wird geöffnet",
"rose": "aufgegangen",
"set": "untergegangen",
"turned_off": "ausgeschaltet",
@@ -884,7 +495,7 @@
"add_device_id": "Gerät auswählen",
"add_entity_id": "Entität auswählen",
"expand_area_id": "Erweitere diesen Bereich in einzelne Geräte und Entitäten. Nach der Erweiterung werden die Geräte und Entitäten nicht aktualisiert, wenn sich der Bereich ändert.",
"expand_device_id": "Erweitere dieses Gerät in separate Entitäten. Nach dem Erweitern werden die Entitäten nicht aktualisiert, wenn sich das Gerät ändert.",
"expand_device_id": "Erweitern Sie dieses Gerät in separate Entitäten. Nach dem Erweitern werden die Entitäten nicht aktualisiert, wenn sich das Gerät ändert.",
"remove_area_id": "Bereich entfernen",
"remove_device_id": "Gerät entfernen",
"remove_entity_id": "Entität entfernen"
@@ -1013,9 +624,6 @@
"person": {
"create_zone": "Zone vom aktuellen Standort erstellen"
},
"remote": {
"activity": "aktuelle Aktivität"
},
"restored": {
"confirm_remove_text": "Bist du dir sicher, dass du diese Entität löschen möchtest?",
"confirm_remove_title": "Entität entfernen?",
@@ -1089,6 +697,7 @@
"script": "Skripte",
"server_control": "Serversteuerung",
"tag": "NFC Tags",
"tags": "Tags",
"users": "Benutzer",
"zone": "Zonen"
},
@@ -1147,7 +756,6 @@
"clusters": "Cluster verwalten",
"reconfigure": "Gerät neu konfigurieren",
"remove": "Gerät entfernen",
"view_in_visualization": "Visualisierung in einer Map",
"zigbee_information": "ZigBee-Gerätesignatur"
},
"confirmations": {
@@ -2725,7 +2333,6 @@
"caption": "Visualisierung",
"header": "Netzwerkvisualisierung",
"highlight_label": "Geräte hervorheben",
"refresh_topology": "Topologie aktualisieren",
"zoom_label": "Auf Gerät zoomen"
}
},
@@ -2760,17 +2367,11 @@
},
"zwave_js": {
"add_node": {
"cancel_inclusion": "Erfassung abbrechen",
"controller_in_inclusion_mode": "Ihr Z-Wave-Controller befindet sich jetzt im Inklusionsmodus.",
"follow_device_instructions": "Befolge die mit dem Gerät gelieferten Anweisungen, um die Kopplung am Gerät auszulösen.",
"inclusion_failed": "Der Knoten konnte nicht hinzugefügt werden. Bitte überprüfe die Protokolle für weitere Informationen.",
"inclusion_finished": "Der Knoten wurde hinzugefügt. Es kann einige Minuten dauern, bis alle Einheiten angezeigt werden, da der Knoten im Hintergrund fertig eingerichtet wird.",
"introduction": "Dieser Assistent führt dich durch das Hinzufügen eines Knotens zu deinem Z-Wave-Netzwerk.",
"secure_inclusion_warning": "Sichere Geräte benötigen zusätzliche Bandbreite; zu viele sichere Geräte können Ihr Z-Wave-Netzwerk ausbremsen. Wir empfehlen, die sichere Einbindung nur für Geräte zu verwenden, die sie benötigen, wie Schlösser oder Garagentoröffner.",
"start_inclusion": "Starten der Erfassung",
"start_secure_inclusion": "Starten der sicheren Erfassung",
"title": "Z-Wave-Knoten hinzufügen",
"use_secure_inclusion": "Sichere Einbindung verwenden",
"view_device": "Gerät anzeigen"
},
"button": "Konfigurieren",
@@ -2817,13 +2418,9 @@
"unknown": "Unbekannt"
},
"remove_node": {
"cancel_exclusion": "Entfernung von Geräten abbrechen",
"controller_in_exclusion_mode": "Dein Z-Wave Controller befindet sich jetzt im Ausschluss-Modus",
"exclusion_failed": "Der Knoten konnte nicht entfernt werden. Bitte in den Logs nach mehr Informationen suchen.",
"exclusion_finished": "Der Knoten {id} wurde aus deinem Z-Wave-Netzwerk entfernt.",
"follow_device_instructions": "Befolge die mit dem Gerät gelieferten Anweisungen, um die Kopplung am Gerät auszulösen.",
"introduction": "Entferne einen Knoten aus deinem Z-Wave-Netzwerk und entferne die zugehörigen Geräte und Entitäten aus Home Assistant.",
"start_exclusion": "Entfernung von Geräten starten",
"title": "Z-Wave-Knoten entfernen"
}
},
@@ -3403,8 +3000,6 @@
"error_remove": "Konfiguration konnte nicht entfernt werden: {error}",
"error_save_yaml": "YAML konnte nicht gespeichert werden: {error}",
"header": "Konfiguration bearbeiten",
"lovelace_changed": "Die Lovelace-Konfiguration wurde aktualisiert. Möchtest du die aktualisierte Konfiguration in den Editor laden und deine aktuellen Änderungen verlieren?",
"reload": "Neu laden",
"resources_moved": "Ressourcen sollten nicht mehr zur Lovelace-Konfiguration hinzugefügt werden, sondern können im Lovelace-Konfigurationsfenster hinzugefügt werden.",
"save": "Speichern",
"saved": "Gespeichert",

View File

@@ -102,389 +102,6 @@
"unknown": "Άγνωστη"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"default": "Προεπιλογή",
"header": "Ήχος",
"input": "Είσοδος",
"output": "Έξοδος"
},
"network": {
"container": "Κοντέινερ",
"disabled": "Απενεργοποιημένο",
"header": "Δίκτυο",
"host": "Κεντρικός υπολογιστής"
},
"no_configuration": "Αυτό το πρόσθετο δεν εκθέτει τη διαμόρφωση για να την επεξεργαστείτε...",
"options": {
"edit_in_ui": "Επεξεργασία σε περιβάλλον χρήστη",
"edit_in_yaml": "Επεξεργασία σε YAML",
"header": "Επιλογές",
"invalid_yaml": "Μη έγκυρο YAML",
"show_unused_optional": "Εμφάνιση αχρησιμοποίητων προαιρετικών ρυθμίσεων διαμόρφωσης"
}
},
"dashboard": {
"action_error": {
"get_changelog": "Αποτυχία λήψης αλλαγών πρόσθετων",
"go_to_config": "Αποτυχία έναρξης πρόσθετου - η επικύρωση διαμόρφωσης απέτυχε!",
"install": "Αποτυχία εγκατάστασης πρόσθετου",
"restart": "Αποτυχία επανεκκίνησης του πρόσθετου",
"start": "Αποτυχία έναρξης πρόσθετου",
"start_invalid_config": "Μεταβείτε στη διαμόρφωση",
"stop": "Αποτυχία διακοπής του πρόσθετου",
"uninstall": "Αποτυχία απεγκατάστασης του πρόσθετου",
"validate_config": "Αποτυχία επικύρωσης διαμόρφωσης πρόσθετου"
},
"capability": {
"apparmor": {
"description": "Το AppArmor ('Application Armor') είναι μια λειτουργική μονάδα ασφαλείας πυρήνα Linux που περιορίζει τις δυνατότητες πρόσθετων, όπως πρόσβαση στο δίκτυο, πρόσβαση σε ακατέργαστη υποδοχή και άδεια ανάγνωσης, εγγραφής ή εκτέλεσης συγκεκριμένων αρχείων. \n\n Οι συντάκτες πρόσθετων μπορούν να παρέχουν τα προφίλ ασφαλείας τους, βελτιστοποιημένα για το πρόσθετο ή να ζητήσουν την απενεργοποίησή του. Εάν το AppArmor είναι απενεργοποιημένο, θα αυξήσει τους κινδύνους ασφαλείας και, ως εκ τούτου, έχει αρνητικό αντίκτυπο στη βαθμολογία ασφαλείας του πρόσθετου.",
"title": "AppArmor"
},
"auth_api": {
"description": "Ένα πρόσθετο μπορεί να κάνει έλεγχο ταυτότητας των χρηστών έναντι του Home Assistant, επιτρέποντας στα πρόσθετα να δίνουν στους χρήστες τη δυνατότητα να συνδεθούν σε εφαρμογές που εκτελούνται μέσα σε πρόσθετα, χρησιμοποιώντας το όνομα χρήστη / τον κωδικό πρόσβασης του Home Assistant. Αυτό το σήμα υποδεικνύει εάν ο συντάκτης του πρόσθετου ζητά αυτήν τη δυνατότητα.",
"title": "Έλεγχος ταυτότητας Home Assistant"
},
"docker_api": {
"description": "Ο συντάκτης του πρόσθετου ζήτησε από το πρόσθετο να έχει πρόσβαση διαχείρισης στην παρουσία Docker που εκτελείται στο σύστημά σας. Αυτή η λειτουργία παρέχει στο πρόσθετο πλήρη πρόσβαση και έλεγχο σε ολόκληρο το σύστημα οικιακού βοηθού σας, το οποίο προσθέτει κινδύνους ασφαλείας και ενδέχεται να προκαλέσει βλάβη στο σύστημά σας όταν γίνεται κατάχρηση. Επομένως, αυτή η δυνατότητα επηρεάζει αρνητικά τη βαθμολογία ασφαλείας του πρόσθετου. \n\n Αυτό το επίπεδο πρόσβασης δεν χορηγείται αυτόματα και πρέπει να επιβεβαιωθεί από εσάς. Για να το κάνετε αυτό, πρέπει να απενεργοποιήσετε τη λειτουργία προστασίας στο πρόσθετο με μη αυτόματο τρόπο. Απενεργοποιήστε τη λειτουργία προστασίας μόνο εάν γνωρίζετε, χρειάζεστε και εμπιστεύεστε την πηγή αυτού του πρόσθετου.",
"title": "Πλήρης πρόσβαση στο Docker"
},
"full_access": {
"description": "Αυτό το πρόσθετο έχει πλήρη πρόσβαση στο υλικό του συστήματός σας, κατόπιν αιτήματος του συντάκτη του πρόσθετου. Η πρόσβαση είναι συγκρίσιμη με την προνομιακή λειτουργία στο Docker. Εφόσον αυτό δημιουργεί πιθανούς κινδύνους ασφαλείας, αυτή η δυνατότητα επηρεάζει αρνητικά τη βαθμολογία ασφαλείας του πρόσθετου. \n\n Αυτό το επίπεδο πρόσβασης δεν χορηγείται αυτόματα και πρέπει να επιβεβαιωθεί από εσάς. Για να το κάνετε αυτό, πρέπει να απενεργοποιήσετε τη λειτουργία προστασίας στο πρόσθετο με μη αυτόματο τρόπο. Απενεργοποιήστε τη λειτουργία προστασίας μόνο εάν γνωρίζετε, χρειάζεστε και εμπιστεύεστε την πηγή αυτού του πρόσθετου.",
"title": "Πλήρης πρόσβαση στο υλικό"
},
"hassio_api": {
"description": "Το πρόσθετο είχε πρόσβαση στο API του επόπτη, κατόπιν αιτήματος του πρόσθετου συντάκτη. Από προεπιλογή, το πρόσθετο μπορεί να αποκτήσει πρόσβαση σε γενικές πληροφορίες έκδοσης του συστήματός σας. Όταν το πρόσθετο ζητά πρόσβαση σε επίπεδο \"διαχειριστή\" ή \"διαχειριστή\" στο API, θα αποκτήσει πρόσβαση για τον έλεγχο πολλών τμημάτων του συστήματος Home Assistant. Αυτή η άδεια υποδεικνύεται από αυτό το σήμα και θα επηρεάσει αρνητικά τη βαθμολογία ασφαλείας του πρόσθετου.",
"title": "Πρόσβαση Supervisor API"
},
"homeassistant_api": {
"description": "Αυτό το πρόσθετο επιτρέπεται να έχει άμεση πρόσβαση στην τρέχουσα παρουσία του Βοηθού σπιτιού μέσω του Home Assistant API. Αυτή η λειτουργία χειρίζεται τον έλεγχο ταυτότητας και για το πρόσθετο, το οποίο επιτρέπει σε ένα πρόσθετο να αλληλεπιδρά με το Home Assistant χωρίς την ανάγκη πρόσθετων διακριτικών ελέγχου ταυτότητας.",
"title": "Πρόσβαση Home Assistant API"
},
"host_network": {
"description": "Τα πρόσθετα συνήθως εκτελούνται στο δικό τους απομονωμένο επίπεδο δικτύου, το οποίο τους εμποδίζει να έχουν πρόσβαση στο δίκτυο του κεντρικού λειτουργικού συστήματος. Σε ορισμένες περιπτώσεις, αυτή η απομόνωση δικτύου μπορεί να περιορίσει τα πρόσθετα στην παροχή των υπηρεσιών τους και ως εκ τούτου, η απομόνωση μπορεί να αρθεί από τον πρόσθετο συντάκτη, παρέχοντας στο πρόσθετο πλήρη πρόσβαση στις δυνατότητες δικτύου του κεντρικού υπολογιστή. Αυτό δίνει στο πρόσθετο περισσότερες δυνατότητες δικτύωσης αλλά μειώνει την ασφάλεια, επομένως, η βαθμολογία ασφαλείας του πρόσθετου θα μειωθεί όταν αυτή η επιλογή χρησιμοποιείται από το πρόσθετο.",
"title": "Δίκτυο κεντρικού υπολογιστή"
},
"host_pid": {
"description": "Συνήθως, οι διαδικασίες που εκτελούνται το πρόσθετο, είναι απομονωμένες από όλες τις άλλες διαδικασίες συστήματος. Ο συντάκτης του πρόσθετου ζήτησε από το πρόσθετο να έχει πρόσβαση στις διεργασίες συστήματος που εκτελούνται στην παρουσία του συστήματος κεντρικού υπολογιστή, και επιτρέπει στο πρόσθετο να δημιουργεί διαδικασίες στο σύστημα κεντρικού υπολογιστή. Αυτή η λειτουργία παρέχει στο πρόσθετο πλήρη πρόσβαση και έλεγχο σε ολόκληρο το σύστημα οικιακού βοηθού σας, το οποίο προσθέτει κινδύνους ασφαλείας και ενδέχεται να προκαλέσει βλάβη στο σύστημά σας όταν γίνεται κατάχρηση. Επομένως, αυτή η δυνατότητα επηρεάζει αρνητικά τη βαθμολογία ασφαλείας του πρόσθετου. \n\n Αυτό το επίπεδο πρόσβασης δεν χορηγείται αυτόματα και πρέπει να επιβεβαιωθεί από εσάς. Για να το κάνετε αυτό, πρέπει να απενεργοποιήσετε τη λειτουργία προστασίας στο πρόσθετο με μη αυτόματο τρόπο. Απενεργοποιήστε τη λειτουργία προστασίας μόνο εάν γνωρίζετε, χρειάζεστε και εμπιστεύεστε την πηγή αυτού του πρόσθετου.",
"title": "Χώρος ονομάτων διεργασιών κεντρικού υπολογιστή"
},
"ingress": {
"description": "Αυτό το πρόσθετο χρησιμοποιεί το Ingress για να ενσωματώσει τη διασύνδεσή του με ασφάλεια στο Home Assistant.",
"title": "Ingress"
},
"label": {
"apparmor": "apparmor",
"auth": "εξουσιοδότηση",
"docker": "docker",
"hardware": "υλικό",
"hass": "hass",
"hassio": "hassio",
"host": "κεντρικός υπολογιστής",
"host_pid": "pid κεντρικού υπολογιστή",
"ingress": "είσοδος",
"rating": "εκτίμηση",
"stage": "στάδιο"
},
"rating": {
"description": "Το Home Assistant παρέχει αξιολόγηση ασφαλείας σε καθένα από τα πρόσθετα, η οποία υποδεικνύει τους κινδύνους που ενέχονται κατά τη χρήση αυτού του πρόσθετου. Όσο περισσότερη πρόσβαση απαιτεί ένα πρόσθετο στο σύστημά σας, τόσο χαμηλότερη είναι η βαθμολογία, αυξάνοντας έτσι τους πιθανούς κινδύνους ασφαλείας. \n\n Το σκορ είναι σε κλίμακα από το 1 έως το 6. Όταν το 1 είναι το χαμηλότερο σκορ (θεωρείται το πιο ανασφαλές και το υψηλότερο κίνδυνο) και το σκορ 6 είναι το υψηλότερο σκορ (θεωρείται το πιο ασφαλές και χαμηλότερο κίνδυνο).",
"title": "Αξιολόγηση ασφαλείας πρόσθετου"
},
"role": {
"admin": "admin",
"backup": "backup",
"default": "default",
"homeassistant": "homeassistant",
"manager": "manager"
},
"stage": {
"description": "Τα πρόσθετα μπορούν να έχουν ένα από τα τρία στάδια: \n\n {icon_stable} ** Σταθερό **: Πρόκειται για πρόσθετα έτοιμα για χρήση στην παραγωγή. \n\n {icon_experimental} ** Πειραματικό **: Αυτά ενδέχεται να περιέχουν σφάλματα και ενδέχεται να μην έχουν ολοκληρωθεί. \n\n {icon_deprecated} ** Καταργημένο **: Αυτά τα πρόσθετα δεν θα λαμβάνουν πλέον ενημερώσεις.",
"title": "Στάδιο προσθέτων"
}
},
"changelog": "Changelog",
"cpu_usage": "Χρήση CPU πρόσθετου",
"hostname": "Όνομα κεντρικού υπολογιστή",
"install": "εγκατάσταση",
"new_update_available": "{name} {version} είναι διαθέσιμο",
"not_available_arch": "Αυτό το πρόσθετο δεν είναι συμβατό με τον επεξεργαστή της συσκευής σας ή το λειτουργικό σύστημα που έχετε εγκαταστήσει στη συσκευή σας.",
"not_available_version": "Εκτελείτε το Home Assistant {core_version_installed} , για να ενημερώσετε αυτήν την έκδοση του πρόσθετου χρειάζεστε τουλάχιστον την έκδοση {core_version_needed} του Home Assistant",
"open_web_ui": "Άνοιγμα διεπαφής ιστού",
"option": {
"auto_update": {
"description": "Αυτόματη ενημέρωση του πρόσθετου όταν υπάρχει διαθέσιμη νέα έκδοση",
"title": "Αυτόματη ενημέρωση"
},
"boot": {
"description": "Ξεκινήστε το πρόσθετο κατά την εκκίνηση του συστήματος",
"title": "Έναρξη κατά την εκκίνηση"
},
"ingress_panel": {
"description": "Προσθήκη αυτού του πρόσθετου στην πλαϊνή στήλη",
"title": "Εμφάνιση στην πλαϊνή γραμμή"
},
"protected": {
"description": "Αποκλείει την αυξημένη πρόσβαση συστήματος από το πρόσθετο",
"title": "Τρόπος προστασίας"
},
"watchdog": {
"description": "Αυτό θα ξεκινήσει το πρόσθετο εάν διακοπεί η λειτουργία του",
"title": "Φρουρός"
}
},
"protection_mode": {
"content": "Η λειτουργία προστασίας σε αυτό το πρόσθετο είναι απενεργοποιημένη! Αυτό δίνει στο πρόσθετο πλήρη πρόσβαση σε ολόκληρο το σύστημα, το οποίο προσθέτει κινδύνους ασφαλείας και ενδέχεται να προκαλέσει βλάβη στο σύστημά σας όταν χρησιμοποιείται εσφαλμένα. Απενεργοποιήστε τη λειτουργία προστασίας μόνο εάν γνωρίζετε, χρειάζεστε και εμπιστεύεστε την πηγή αυτού του πρόσθετου.",
"enable": "Ενεργοποίηση λειτουργίας προστασίας",
"title": "Προειδοποίηση: Η λειτουργία προστασίας είναι απενεργοποιημένη!"
},
"ram_usage": "Χρήση μνήμης RAM πρόσθετου",
"rebuild": "ανοικοδόμηση",
"restart": "επανεκκίνηση",
"start": "έναρξη",
"stop": "στοπ",
"uninstall": "απεγκατάσταση",
"visit_addon_page": "Επισκεφθείτε τη σελίδα {name} για περισσότερες λεπτομέρειες"
},
"documentation": {
"get_documentation": "Αποτυχία λήψης τεκμηρίωσης πρόσθετου, {error}"
},
"failed_to_reset": "Αποτυχία επαναφοράς της διαμόρφωσης πρόσθετου, {error}",
"failed_to_save": "Αποτυχία αποθήκευσης διαμόρφωσης πρόσθετου, {error}",
"logs": {
"get_logs": "Αποτυχία λήψης πρόσθετων αρχείων καταγραφής, {error}"
},
"panel": {
"configuration": "Ρυθμίσεις",
"documentation": "Τεκμηρίωση",
"info": "Πληροφορίες",
"log": "Αρχείο καταγραφής"
},
"state": {
"installed": "Το πρόσθετο είναι εγκατεστημένο",
"not_available": "Το πρόσθετο δεν είναι διαθέσιμο στο σύστημά σας",
"not_installed": "Το πρόσθετο δεν είναι εγκατεστημένο"
}
},
"common": {
"cancel": "Ακύρωση",
"description": "Περιγραφή",
"error": {
"unknown": "Άγνωστο σφάλμα",
"update_failed": "Η ενημέρωση απέτυχε"
},
"failed_to_restart_name": "Αποτυχία επανεκκίνησης {name}",
"failed_to_update_name": "Αποτυχία ενημέρωσης {name}",
"learn_more": "Μάθετε περισσότερα",
"new_version_available": "Νέα έκδοση διαθέσιμη",
"newest_version": "Νεότερη έκδοση",
"no": "Όχι",
"refresh": "Ανανέωση",
"release_notes": "Σημειώσεις έκδοσης",
"reload": "Επαναφόρτωση",
"reset_defaults": "Επαναφορά στα προεπιλεγμένα",
"reset_options": "Επαναφορά επιλογών",
"restart": "Επανεκκίνηση",
"restart_name": "Επανεκκίνηση {name}",
"running_version": "Αυτήν τη στιγμή εκτελείτε την έκδοση {version}",
"save": "Αποθήκευση",
"show_more": "Εμφάνιση περισσότερων πληροφοριών σχετικά με αυτό",
"update": "Ενημέρωση",
"update_available": "{count} {count, plural,\n one {Ενημέρωση}\n other {Ενημερώσεις}\n} εκκρεμεμούν",
"version": "Έκδοση",
"yes": "Ναι"
},
"confirm": {
"reset_options": {
"text": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε όλες τις επιλογές σας;",
"title": "Επαναφορά επιλογών"
},
"restart": {
"text": "Είστε βέβαιοι ότι θέλετε να επανεκκινήσετε το {name};"
},
"update": {
"text": "Είστε βέβαιοι ότι θέλετε να ενημερώσετε το {name} στην έκδοση {version} ;",
"title": "Ενημέρωση {name}"
}
},
"dashboard": {
"addon_new_version": "Νέα έκδοση διαθέσιμη",
"addon_running": "Το πρόσθετο εκτελείται",
"addon_stopped": "Το πρόσθετο έχει σταματήσει",
"addons": "Πρόσθετα",
"no_addons": "Δεν έχετε εγκαταστήσει πρόσθετα ακόμα. Επισκεφθείτε το κατάστημα πρόσθετων για να ξεκινήσετε!"
},
"dialog": {
"network": {
"connected_to": "Συνδέθηκε στο {ssid}",
"dhcp": "DHCP",
"disabled": "Απενεργοποιημένο",
"dns_servers": "Διακομιστές DNS",
"failed_to_change": "Αποτυχία αλλαγής ρυθμίσεων δικτύου",
"gateway": "Διεύθυνση πύλης",
"ip_netmask": "Διεύθυνση IP/μάσκα δικτύου",
"open": "Άνοιγμα",
"scan_ap": "Σάρωση για σημεία πρόσβασης",
"static": "Στατική",
"title": "Ρυθμίσεις δικτύου",
"unsaved": "Έχετε μη αποθηκευμένες αλλαγές, αυτές θα χαθούν αν αλλάξετε καρτέλες, θέλετε να συνεχίσετε;",
"warning": "Εάν αλλάζετε τις διευθύνσεις Wi-Fi, IP ή πύλης, ενδέχεται να χάσετε τη σύνδεση!",
"wep": "WEP",
"wpa": "wpa-psk"
},
"registries": {
"add_new_registry": "Προσθήκη νέου μητρώου",
"add_registry": "Προσθήκη μητρώου",
"failed_to_add": "Αποτυχία προσθήκης μητρώου",
"failed_to_remove": "Αποτυχία κατάργησης μητρώου",
"no_registries": "Δεν έχουν διαμορφωθεί μητρώα",
"password": "Κωδικός",
"registry": "Περιοχή Μητρώου",
"remove": "Αφαίρεση",
"title_add": "Προσθήκη νέου μητρώου κοντέινερ",
"title_manage": "Διαχείριση μητρώων κοντέινερ",
"username": "Όνομα χρήστη"
},
"repositories": {
"add": "Προσθήκη",
"remove": "Αφαίρεση",
"title": "Διαχείριση αποθετηρίων πρόσθετων"
},
"restart_addon": {
"confirm_text": "Επανεκκίνηση πρόσθετου",
"text": "Θέλετε να επανεκκινήσετε το πρόσθετο με τις αλλαγές σας;"
},
"update": {
"create_snapshot": "Δημιουργία στιγμιότυπου του {name} πριν από την ενημέρωση",
"snapshot": "Στιγμιότυπο",
"snapshotting": "Δημιουργία στιγμιότυπου του {name}",
"updating": "Ενημέρωση του {name} στην έκδοση {version}"
}
},
"my": {
"error": "Προέκυψε ένα άγνωστο σφάλμα",
"faq_link": "Συχνές ερωτήσεις Home Assistant"
},
"panel": {
"dashboard": "Πίνακας Επισκόπησης",
"snapshots": "Στιγμιότυπα",
"store": "Κατάστημα πρόσθετων",
"system": "Σύστημα"
},
"snapshot": {
"addons": "Πρόσθετα",
"available_snapshots": "Διαθέσιμα στιγμιότυπα",
"could_not_create": "Δεν ήταν δυνατή η δημιουργία στιγμιότυπου",
"create": "Δημιουργία",
"create_blocked_not_running": "Η δημιουργία ενός στιγμιότυπου δεν είναι δυνατή αυτήν τη στιγμή, επειδή το σύστημα βρίσκεται σε κατάσταση {state}.",
"create_snapshot": "Δημιουργία στιγμιότυπου",
"description": "Τα στιγμιότυπα σας επιτρέπουν να δημιουργείτε εύκολα αντίγραφα ασφαλείας και να επαναφέρετε όλα τα δεδομένα του Home Assistant σας.",
"enter_password": "Εισαγάγετε έναν κωδικό πρόσβασης.",
"folder": {
"addons/local": "Τοπικά πρόσθετα",
"homeassistant": "Διαμόρφωση Home Assistant",
"media": "Πολυμέσα",
"share": "Κοινή χρήση",
"ssl": "SSL"
},
"folders": "Φάκελοι",
"full_snapshot": "Πλήρες στιγμιότυπο",
"name": "Όνομα",
"no_snapshots": "Δεν έχετε στιγμιότυπα ακόμα.",
"partial_snapshot": "Μερικό στιγμιότυπο",
"password": "Κωδικός",
"password_protected": "προστατεύεται με κωδικό πρόσβασης",
"password_protection": "Προστασία με κωδικό πρόσβασης",
"security": "Ασφάλεια",
"type": "Τύπος",
"upload_snapshot": "Μεταφόρτωση στιγμιότυπου"
},
"store": {
"missing_addons": "Λείπουν πρόσθετα; Ενεργοποίηση λειτουργίας για προχωρημένους στη σελίδα προφίλ χρήστη",
"no_results_found": "Δεν βρέθηκαν αποτελέσματα στο {αποθετήριο}.",
"registries": "Μητρώα",
"repositories": "Αποθετήρια"
},
"system": {
"core": {
"cpu_usage": "Χρήση βασικής CPU",
"ram_usage": "Χρήση βασικής μνήμης RAM"
},
"host": {
"change": "Αλλαγή",
"change_hostname": "Αλλαγή ονόματος κεντρικού υπολογιστή",
"confirm_reboot": "Είστε βέβαιοι ότι θέλετε να επανεκκινήσετε τον κεντρικό υπολογιστή;",
"confirm_shutdown": "Είστε βέβαιοι ότι θέλετε να τερματίσετε τη λειτουργία του κεντρικού υπολογιστή;",
"deployment": "Ανάπτυξη",
"docker_version": "Έκδοση Docker",
"emmc_lifetime_used": "eMMC διάρκεια ζωής που χρησιμοποιήθηκε",
"failed_to_get_hardware_list": "Αποτυχία λήψης λίστας υλικού",
"failed_to_import_from_usb": "Αποτυχία εισαγωγής από USB",
"failed_to_reboot": "Αποτυχία επανεκκίνησης του κεντρικού υπολογιστή",
"failed_to_set_hostname": "Η ρύθμιση ονόματος κεντρικού υπολογιστή απέτυχε",
"failed_to_shutdown": "Αποτυχία τερματισμού του κεντρικού υπολογιστή",
"hardware": "Υλικό",
"hostname": "Όνομα κεντρικού υπολογιστή",
"import_from_usb": "Εισαγωγή από USB",
"ip_address": "Διεύθυνση IP",
"new_hostname": "Εισαγάγετε ένα νέο όνομα κεντρικού υπολογιστή:",
"operating_system": "Λειτουργικό σύστημα",
"reboot_host": "Επανεκκίνηση κεντρικού υπολογιστή",
"shutdown_host": "Τερματισμός κεντρικού υπολογιστή",
"used_space": "Χρησιμοποιημένος χώρος"
},
"log": {
"get_logs": "Αποτυχία λήψης αρχείων καταγραφής {provider}, {error}",
"log_provider": "Υπηρεσία παροχής αρχείων καταγραφής"
},
"supervisor": {
"beta_backup": "Βεβαιωθείτε ότι έχετε αντίγραφα ασφαλείας των δεδομένων σας πριν ενεργοποιήσετε αυτήν τη δυνατότητα.",
"beta_join_confirm": "Θέλετε να συμμετάσχετε στο κανάλι beta;",
"beta_release_items": "Αυτό περιλαμβάνει εκδόσεις beta για:",
"beta_warning": "Οι εκδόσεις beta προορίζονται για δοκιμαστές και πρώτους χρήστες και μπορούν να περιέχουν ασταθείς αλλαγές κώδικα",
"channel": "Κανάλι",
"cpu_usage": "Χρήση CPU Επόπτη",
"failed_to_reload": "Απέτυχε η επαναφόρτωση του Επόπτη",
"failed_to_set_option": "Αποτυχία ορισμού επιλογής Επόπτη",
"failed_to_update": "Απέτυχε η ενημέρωση του Επόπτη",
"join_beta_action": "Εγγραφείτε στο κανάλι beta",
"join_beta_description": "Λάβετε ενημερώσεις beta για Home Assistant (RCs), Επόπτη και κεντρικό υπολογιστές",
"leave_beta_action": "Αποχώρηση από το κανάλι beta",
"leave_beta_description": "Λάβετε σταθερές ενημερώσεις για το Home Assistant, τον Επόπτη και τον κεντρικό υπολογιστή",
"ram_usage": "Χρήση μνήμης RAM Επόπτη",
"reload_supervisor": "Επαναφόρτωση Επόπτη",
"share_diagnostics": "Κοινή χρήση διαγνωστικών",
"share_diagnostics_description": "Μοιραστείτε αναφορές σφαλμάτων και διαγνωστικές πληροφορίες.",
"share_diagonstics_description": "Θα θέλατε να κοινοποιείτε αυτόματα αναφορές σφαλμάτων και διαγνωστικές πληροφορίες όταν ο επόπτης αντιμετωπίζει απρόσμενα σφάλματα; {line_break} Αυτό θα μας επιτρέψει να διορθώσουμε τα προβλήματα, οι πληροφορίες είναι προσβάσιμες μόνο από την ομάδα του Home Assistant Core και δεν θα κοινοποιηθούν σε άλλους. {line_break} Τα δεδομένα δεν περιλαμβάνουν ιδιωτικές / ευαίσθητες πληροφορίες και μπορείτε να το απενεργοποιήσετε στις ρυθμίσεις όποτε θέλετε.",
"share_diagonstics_title": "Βοηθήστε στη βελτίωση του Home Assistant",
"unhealthy_description": "Η εκτέλεση μιας ανθυγιεινής εγκατάστασης θα προκαλέσει προβλήματα. Ακολουθεί μια λίστα με ζητήματα που εντοπίστηκαν με την εγκατάστασή σας, κάντε κλικ στους συνδέσμους για να μάθετε πώς μπορείτε να επιλύσετε τα προβλήματα.",
"unhealthy_reason": {
"docker": "Το περιβάλλον Docker δεν λειτουργεί σωστά",
"privileged": "Ο Επόπτης δεν έχει προνόμια",
"setup": "Η εγκατάσταση του Επόπτη απέτυχε",
"supervisor": "Ο επόπτης δεν μπόρεσε να ενημερωθεί"
},
"unhealthy_title": "Η εγκατάστασή σας είναι ανθυγιεινή",
"unsupported_description": "Ακολουθεί μια λίστα με ζητήματα που εντοπίστηκαν με την εγκατάστασή σας, κάντε κλικ στους συνδέσμους για να μάθετε πώς μπορείτε να επιλύσετε τα προβλήματα.",
"unsupported_reason": {
"container": "Κοντέινερ που είναι γνωστά ότι προκαλούν προβλήματα",
"dbus": "DBUS",
"docker_configuration": "Διαμόρφωση Docker",
"docker_version": "Έκδοση Docker",
"job_conditions": "Αγνοημένες συνθήκες εργασίας",
"lxc": "LXC",
"network_manager": "Διαχειριστής δικτύου",
"os": "Λειτουργικό σύστημα",
"privileged": "Ο Επόπτης δεν έχει προνόμια",
"systemd": "Systemd"
},
"unsupported_title": "Εκτελείτε μια μη υποστηριζόμενη εγκατάσταση",
"update_supervisor": "Ενημέρωση του Επόπτη",
"warning": "ΠΡΟΕΙΔΟΠΟΙΗΣΗ"
}
}
},
"ui": {
"auth_store": {
"ask": "Θέλετε να αποθηκεύσετε αυτή τη σύνδεση;",
@@ -503,7 +120,7 @@
},
"automation": {
"last_triggered": "Τελευταίο έναυσμα",
"trigger": "Εκτέλεση ενεργειών"
"trigger": "Έναυσμα"
},
"camera": {
"not_available": "Μη διαθέσιμη εικόνα"
@@ -760,8 +377,6 @@
"changed_to_state": "άλλαξε σε {state}",
"cleared_device_class": "παραγράφηκε (δεν εντοπίστηκε {device_class} )",
"detected_device_class": "εντόπισε {device_class}",
"is_closing": "κλείνει",
"is_opening": "ανοίγει",
"rose": "ανέτειλε",
"set": "έδυσε",
"turned_off": "απενεργοποιήθηκε",
@@ -1017,7 +632,7 @@
"remove_intro": "Εάν η οντότητα δεν χρησιμοποιείται πλέον, μπορείτε να την καθαρίσετε αφαιρώντας την."
},
"script": {
"last_action": "Τελευταία ενέργεια",
"last_action": "Τελευταία Ενέργεια",
"last_triggered": "Τελευταία ενεργοποίηση"
},
"settings": "Ρυθμίσεις οντότητας",
@@ -1082,6 +697,7 @@
"script": "Scripts",
"server_control": "Στοιχεία ελέγχου Server",
"tag": "Ετικέτες",
"tags": "Ετικέτες",
"users": "Χρήστες",
"zone": "Ζώνες"
},
@@ -1140,7 +756,6 @@
"clusters": "Διαχείριση συμπλεγμάτων",
"reconfigure": "Ρυθμίστε Ξανά Τη Συσκευή",
"remove": "Κατάργηση συσκευής",
"view_in_visualization": "Προβολή στην Απεικόνιση",
"zigbee_information": "Υπογραφή συσκευής Zigbee"
},
"confirmations": {
@@ -1297,7 +912,7 @@
"event": {
"event": "Γεγονός:",
"label": "Εκκίνηση συμβάντος",
"service_data": "Δεδομένα υπηρεσιών"
"service_data": "Δεδομένα υπηρεσίας"
},
"repeat": {
"label": "Επανάληψη",
@@ -2718,7 +2333,6 @@
"caption": "Απεικόνιση",
"header": "Απεικόνιση δικτύου",
"highlight_label": "Επισήμανση συσκευών",
"refresh_topology": "Ανανέωση τοπολογίας",
"zoom_label": "Ζουμ στη συσκευή"
}
},
@@ -3396,8 +3010,6 @@
"error_remove": "Δεν είναι δυνατή η κατάργηση της διαμόρφωσης: {error}",
"error_save_yaml": "Δεν είναι δυνατή η αποθήκευση του YAML: {error}",
"header": "Επεξεργασία διαμόρφωσης",
"lovelace_changed": "Η διαμόρφωση Lovelace ενημερώθηκε, θέλετε να φορτώσετε την ενημερωμένη διαμόρφωση στο πρόγραμμα επεξεργασίας και να χάσετε τις τρέχουσες αλλαγές σας;",
"reload": "Επαναφόρτωση",
"resources_moved": "Οι πόροι δεν θα πρέπει πλέον να προστίθενται στη διαμόρφωση Lovelace, αλλά μπορούν να προστεθούν στον πίνακα παραμέτρων Lovelace.",
"save": "Αποθήκευση",
"saved": "Αποθηκεύτηκε",

View File

@@ -102,393 +102,6 @@
"unknown": "Unknown"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"default": "Default",
"header": "Audio",
"input": "Input",
"output": "Output"
},
"network": {
"container": "Container",
"disabled": "Disabled",
"header": "Network",
"host": "Host"
},
"no_configuration": "This add-on does not expose configuration for you to mess with...",
"options": {
"edit_in_ui": "Edit in UI",
"edit_in_yaml": "Edit in YAML",
"header": "Options",
"invalid_yaml": "Invalid YAML",
"show_unused_optional": "Show unused optional configuration options"
}
},
"dashboard": {
"action_error": {
"get_changelog": "Failed to get add-on changelog",
"go_to_config": "Failed to start add-on - configuration validation failed!",
"install": "Failed to install add-on",
"restart": "Failed to restart add-on",
"start": "Failed to start add-on",
"start_invalid_config": "Go to configuration",
"stop": "Failed to stop add-on",
"uninstall": "Failed to uninstall add-on",
"validate_config": "Failed to validate add-on configuration"
},
"capability": {
"apparmor": {
"description": "AppArmor ('Application Armor') is a Linux kernel security module that restricts add-ons capabilities like network access, raw socket access, and permission to read, write, or execute specific files.\n\nAdd-on authors can provide their security profiles, optimized for the add-on, or request it to be disabled. If AppArmor is disabled, it will raise security risks and therefore, has a negative impact on the security score of the add-on.",
"title": "AppArmor"
},
"auth_api": {
"description": "An add-on can authenticate users against Home Assistant, allowing add-ons to give users the possibility to log into applications running inside add-ons, using their Home Assistant username/password. This badge indicates if the add-on author requests this capability.",
"title": "Home Assistant Authentication"
},
"docker_api": {
"description": "The add-on author has requested the add-on to have management access to the Docker instance running on your system. This mode gives the add-on full access and control to your entire Home Assistant system, which adds security risks, and could damage your system when misused. Therefore, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on.",
"title": "Full Docker Access"
},
"full_access": {
"description": "This add-on is given full access to the hardware of your system, by request of the add-on author. Access is comparable to the privileged mode in Docker. Since this opens up possible security risks, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on.",
"title": "Full Hardware Access"
},
"hassio_api": {
"description": "The add-on was given access to the Supervisor API, by request of the add-on author. By default, the add-on can access general version information of your system. When the add-on requests 'manager' or 'admin' level access to the API, it will gain access to control multiple parts of your Home Assistant system. This permission is indicated by this badge and will impact the security score of the add-on negatively.",
"title": "Supervisor API Access"
},
"homeassistant_api": {
"description": "This add-on is allowed to access your running Home Assistant instance directly via the Home Assistant API. This mode handles authentication for the add-on as well, which enables an add-on to interact with Home Assistant without the need for additional authentication tokens.",
"title": "Home Assistant API Access"
},
"host_network": {
"description": "Add-ons usually run in their own isolated network layer, which prevents them from accessing the network of the host operating system. In some cases, this network isolation can limit add-ons in providing their services and therefore, the isolation can be lifted by the add-on author, giving the add-on full access to the network capabilities of the host machine. This gives the add-on more networking capabilities but lowers the security, hence, the security rating of the add-on will be lowered when this option is used by the add-on.",
"title": "Host Network"
},
"host_pid": {
"description": "Usually, the processes the add-on runs, are isolated from all other system processes. The add-on author has requested the add-on to have access to the system processes running on the host system instance, and allow the add-on to spawn processes on the host system as well. This mode gives the add-on full access and control to your entire Home Assistant system, which adds security risks, and could damage your system when misused. Therefore, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on.",
"title": "Host Processes Namespace"
},
"ingress": {
"description": "This add-on is using Ingress to embed its interface securely into Home Assistant.",
"title": "Ingress"
},
"label": {
"apparmor": "apparmor",
"auth": "auth",
"docker": "docker",
"hardware": "hardware",
"hass": "hass",
"hassio": "hassio",
"host": "host",
"host_pid": "host pid",
"ingress": "ingress",
"rating": "rating",
"stage": "stage"
},
"rating": {
"description": "Home Assistant provides a security rating to each of the add-ons, which indicates the risks involved when using this add-on. The more access an add-on requires on your system, the lower the score, thus raising the possible security risks.\n\nA score is on a scale from 1 to 6. Where 1 is the lowest score (considered the most insecure and highest risk) and a score of 6 is the highest score (considered the most secure and lowest risk).",
"title": "Add-on Security Rating"
},
"role": {
"admin": "admin",
"backup": "backup",
"default": "default",
"homeassistant": "homeassistant",
"manager": "manager"
},
"stage": {
"description": "Add-ons can have one of three stages:\n\n{icon_stable} **Stable**: These are add-ons ready to be used in production.\n\n{icon_experimental} **Experimental**: These may contain bugs, and may be unfinished.\n\n{icon_deprecated} **Deprecated**: These add-ons will no longer receive any updates.",
"title": "Add-on Stage"
}
},
"changelog": "Changelog",
"cpu_usage": "Add-on CPU Usage",
"hostname": "Hostname",
"install": "install",
"new_update_available": "{name} {version} is available",
"not_available_arch": "This add-on is not compatible with the processor of your device or the operating system you have installed on your device.",
"not_available_version": "You are unning Home Assistant {core_version_installed}, to update to this version of the add-on you need at least version {core_version_needed} of Home Assistan",
"open_web_ui": "Open web UI",
"option": {
"auto_update": {
"description": "Auto update the add-on when there is a new version available",
"title": "Auto update"
},
"boot": {
"description": "Make the add-on start during a system boot",
"title": "Start on boot"
},
"ingress_panel": {
"description": "Add this add-on to your sidebar",
"title": "Show in sidebar"
},
"protected": {
"description": "Blocks elevated system access from the add-on",
"title": "Protection mode"
},
"watchdog": {
"description": "This will start the add-on if it crashes",
"title": "Watchdog"
}
},
"protection_mode": {
"content": "Protection mode on this add-on is disabled! This gives the add-on full access to the entire system, which adds security risks, and could damage your system when used incorrectly. Only disable the protection mode if you know, need AND trust the source of this add-on.",
"enable": "Enable Protection mode",
"title": "Warning: Protection mode is disabled!"
},
"ram_usage": "Add-on RAM Usage",
"rebuild": "rebuild",
"restart": "restart",
"start": "start",
"stop": "stop",
"uninstall": "uninstall",
"visit_addon_page": "Visit the {name} page for more detals"
},
"documentation": {
"get_documentation": "Failed to get add-on documentation, {error}"
},
"failed_to_reset": "Failed to reset add-on configuration, {error}",
"failed_to_save": "Failed to save add-on configuration, {error}",
"logs": {
"get_logs": "Failed to get add-on logs, {error}"
},
"panel": {
"configuration": "Configuration",
"documentation": "Documentation",
"info": "Info",
"log": "Log"
},
"state": {
"installed": "Add-on is installed",
"not_available": "Add-on is not available on your system",
"not_installed": "Add-on is not installed"
}
},
"common": {
"cancel": "Cancel",
"close": "Close",
"description": "Description",
"error": {
"unknown": "Unknown error",
"update_failed": "Update failed"
},
"failed_to_restart_name": "Failed to restart {name}",
"failed_to_update_name": "Failed to update {name}",
"learn_more": "Learn more",
"new_version_available": "New version available",
"newest_version": "Newest Version",
"no": "No",
"refresh": "Refresh",
"release_notes": "Release notes",
"reload": "Reload",
"reset_defaults": "Reset to defaults",
"reset_options": "Reset options",
"restart": "Restart",
"restart_name": "Restart {name}",
"running_version": "You are currently running version {version}",
"save": "Save",
"show_more": "Show more information about this",
"update": "Update",
"update_available": "{count, plural,\n one {Update}\n other {{count} Updates}\n} pending",
"version": "Version",
"yes": "Yes"
},
"confirm": {
"reset_options": {
"text": "Are you sure you want to reset all your options?",
"title": "Reset options"
},
"restart": {
"text": "Are you sure you want to restart {name}?",
"title": "Restart {name}"
},
"update": {
"text": "Are you sure you want to update {name} to version {version}?",
"title": "Update {name}"
}
},
"dashboard": {
"addon_new_version": "New version available",
"addon_running": "Add-on is running",
"addon_stopped": "Add-on is stopped",
"addons": "Add-ons",
"no_addons": "You don't have any add-ons installed yet. Head over to the add-on store to get started!"
},
"dialog": {
"network": {
"connected_to": "Connected to {ssid}",
"dhcp": "DHCP",
"disabled": "Disabled",
"dns_servers": "DNS Servers",
"failed_to_change": "Failed to change network settings",
"gateway": "Gateway address",
"ip_netmask": "IP address/Netmask",
"open": "Open",
"scan_ap": "Scan for accesspoints",
"static": "Static",
"title": "Network settings",
"unsaved": "You have unsaved changes, these will get lost if you change tabs, do you want to continue?",
"warning": "If you are changing the Wi-Fi, IP or gateway addresses, you might lose the connection!",
"wep": "WEP",
"wpa": "wpa-psk"
},
"registries": {
"add_new_registry": "Add new registry",
"add_registry": "Add registry",
"failed_to_add": "Failed to add registry",
"failed_to_remove": "Failed to remove registry",
"no_registries": "No registries configured",
"password": "Password",
"registry": "Registry",
"remove": "Remove",
"title_add": "Add New Container Registry",
"title_manage": "Manage Container Registries",
"username": "Username"
},
"repositories": {
"add": "Add",
"remove": "Remove",
"title": "Manage add-on repositories"
},
"restart_addon": {
"confirm_text": "Restart add-on",
"text": "Do you want to restart the add-on with your changes?"
},
"update": {
"create_snapshot": "Create a snapshot of {name} before updating",
"snapshot": "Snapshot",
"snapshotting": "Creating snapshot of {name}",
"updating": "Updating {name} to version {version}"
}
},
"my": {
"error": "An unknown error occured",
"error_addon_not_found": "Add-on not found",
"faq_link": "My Home Assistant FAQ",
"not_supported": "This redirect is not supported by your Home Assistant instance. Check the {link} for the supported redirects and the version they where introduced."
},
"panel": {
"dashboard": "Dashboard",
"snapshots": "Snapshots",
"store": "Add-on Store",
"system": "System"
},
"snapshot": {
"addons": "Add-ons",
"available_snapshots": "Available Snapshots",
"could_not_create": "Could not create snapshot",
"create": "Create",
"create_blocked_not_running": "Creating a snapshot is not possible right now because the system is in {state} state.",
"create_snapshot": "Create snapshot",
"description": "Snapshots allow you to easily backup and restore all data of your Home Assistant instance.",
"enter_password": "Please enter a password.",
"folder": {
"addons/local": "Local add-ons",
"homeassistant": "Home Assistant configuration",
"media": "Media",
"share": "Share",
"ssl": "SSL"
},
"folders": "Folders",
"full_snapshot": "Full snapshot",
"name": "Name",
"no_snapshots": "You don't have any snapshots yet.",
"partial_snapshot": "Partial snapshot",
"password": "Password",
"password_protected": "password protected",
"password_protection": "Password protection",
"security": "Security",
"type": "Type",
"upload_snapshot": "Upload snapshot"
},
"store": {
"missing_addons": "Missing add-ons? Enable advanced mode in your user profile page",
"no_results_found": "No results found in {repository}.",
"registries": "Registries",
"repositories": "Repositories"
},
"system": {
"core": {
"cpu_usage": "Core CPU Usage",
"ram_usage": "Core RAM Usage"
},
"host": {
"change": "Change",
"change_hostname": "Change Hostname",
"confirm_reboot": "Are you sure you want to reboot the host?",
"confirm_shutdown": "Are you sure you want to shutdown the host?",
"deployment": "Deployment",
"docker_version": "Docker version",
"emmc_lifetime_used": "eMMC Lifetime Used",
"failed_to_get_hardware_list": "Failed to get hardware list",
"failed_to_import_from_usb": "Failed to import from USB",
"failed_to_reboot": "Failed to reboot the host",
"failed_to_set_hostname": "Setting hostname failed",
"failed_to_shutdown": "Failed to shutdown the host",
"hardware": "Hardware",
"hostname": "Hostname",
"import_from_usb": "Import from USB",
"ip_address": "IP Address",
"new_hostname": "Please enter a new hostname:",
"operating_system": "Operating System",
"reboot_host": "Reboot host",
"shutdown_host": "Shutdown host",
"used_space": "Used space"
},
"log": {
"get_logs": "Failed to get {provider} logs, {error}",
"log_provider": "Log Provider"
},
"supervisor": {
"beta_backup": "Make sure you have backups of your data before you activate this feature.",
"beta_join_confirm": "Do you want to join the beta channel?",
"beta_release_items": "This includes beta releases for:",
"beta_warning": "Beta releases are for testers and early adopters and can contain unstable code changes",
"channel": "Channel",
"cpu_usage": "Supervisor CPU Usage",
"failed_to_reload": "Failed to reload the Supervisor",
"failed_to_set_option": "Failed to set Supervisor option",
"failed_to_update": "Failed to update the Supervisor",
"join_beta_action": "Join beta channel",
"join_beta_description": "Get beta updates for Home Assistant (RCs), Supervisor and host",
"leave_beta_action": "Leave beta channel",
"leave_beta_description": "Get stable updates for Home Assistant, Supervisor and host",
"ram_usage": "Supervisor RAM Usage",
"reload_supervisor": "Reload Supervisor",
"share_diagnostics": "Share Diagnostics",
"share_diagnostics_description": "Share crash reports and diagnostic information.",
"share_diagonstics_description": "Would you want to automatically share crash reports and diagnostic information when the Supervisor encounters unexpected errors? {line_break} This will allow us to fix the problems, the information is only accessible to the Home Assistant Core team and will not be shared with others.{line_break} The data does not include any private/sensitive information and you can disable this in settings at any time you want.",
"share_diagonstics_title": "Help Improve Home Assistant",
"unhealthy_description": "Running an unhealthy installation will cause issues. Below is a list of issues found with your installation, click on the links to learn how you can resolve the issues.",
"unhealthy_reason": {
"docker": "The Docker environment is not working properly",
"privileged": "Supervisor is not privileged",
"setup": "Setup of the Supervisor failed",
"supervisor": "Supervisor was not able to update"
},
"unhealthy_title": "Your installation is unhealthy",
"unsupported_description": "Below is a list of issues found with your installation, click on the links to learn how you can resolve the issues.",
"unsupported_reason": {
"container": "Containers known to cause issues",
"dbus": "DBUS",
"docker_configuration": "Docker Configuration",
"docker_version": "Docker Version",
"job_conditions": "Ignored job conditions",
"lxc": "LXC",
"network_manager": "Network Manager",
"os": "Operating System",
"privileged": "Supervisor is not privileged",
"systemd": "Systemd"
},
"unsupported_title": "You are running an unsupported installation",
"update_supervisor": "Update the Supervisor",
"warning": "WARNING"
}
}
},
"ui": {
"auth_store": {
"ask": "Do you want to stay logged in?",
@@ -764,8 +377,6 @@
"changed_to_state": "changed to {state}",
"cleared_device_class": "cleared (no {device_class} detected)",
"detected_device_class": "detected {device_class}",
"is_closing": "is closing",
"is_opening": "is opening",
"rose": "rose",
"set": "set",
"turned_off": "turned off",
@@ -1013,9 +624,6 @@
"person": {
"create_zone": "Create zone from current location"
},
"remote": {
"activity": "Current activity"
},
"restored": {
"confirm_remove_text": "Are you sure you want to remove this entity?",
"confirm_remove_title": "Remove entity?",
@@ -1024,8 +632,8 @@
"remove_intro": "If the entity is no longer in use, you can clean it up by removing it."
},
"script": {
"last_action": "Last action",
"last_triggered": "Last triggered"
"last_action": "Last Action",
"last_triggered": "Last Triggered"
},
"settings": "Entity settings",
"sun": {
@@ -1089,6 +697,7 @@
"script": "Scripts",
"server_control": "Server Controls",
"tag": "Tags",
"tags": "Tags",
"users": "Users",
"zone": "Zones"
},
@@ -1147,7 +756,6 @@
"clusters": "Manage Clusters",
"reconfigure": "Reconfigure Device",
"remove": "Remove Device",
"view_in_visualization": "View in Visualization",
"zigbee_information": "Zigbee device signature"
},
"confirmations": {
@@ -2725,7 +2333,6 @@
"caption": "Visualization",
"header": "Network Visualization",
"highlight_label": "Highlight Devices",
"refresh_topology": "Refresh Topology",
"zoom_label": "Zoom To Device"
}
},
@@ -3403,8 +3010,6 @@
"error_remove": "Unable to remove configuration: {error}",
"error_save_yaml": "Unable to save YAML: {error}",
"header": "Edit Configuration",
"lovelace_changed": "The Lovelace config was updated, do you want to load the updated config in the editor and lose your current changes?",
"reload": "Reload",
"resources_moved": "Resources should no longer be added to the Lovelace configuration but can be added in the Lovelace config panel.",
"save": "Save",
"saved": "Saved",

View File

@@ -102,393 +102,6 @@
"unknown": "Desconocido"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"default": "Predeterminado",
"header": "Audio",
"input": "Entrada",
"output": "Salida"
},
"network": {
"container": "Contenedor",
"disabled": "Deshabilitada",
"header": "Red",
"host": "Host"
},
"no_configuration": "Este complemento no expone ninguna configuración que pueda alterar...",
"options": {
"edit_in_ui": "Editar en la interfaz de usuario",
"edit_in_yaml": "Editar en YAML",
"header": "Opciones",
"invalid_yaml": "YAML no válido",
"show_unused_optional": "Mostrar opciones de configuración opcionales no utilizadas"
}
},
"dashboard": {
"action_error": {
"get_changelog": "Fallo al obtener el registro de cambios del complemento",
"go_to_config": "Fallo al iniciar complemento - Validación de configuración errónea.",
"install": "Fallo al instalar el complemento",
"restart": "Fallo al reiniciar el complemento",
"start": "Fallo al iniciar el complemento",
"start_invalid_config": "Ir a la configuración",
"stop": "Fallo al detener el complemento",
"uninstall": "Fallo al desinstalar el complemento",
"validate_config": "Fallo al validar la configuración del complemento"
},
"capability": {
"apparmor": {
"description": "AppArmor ('Application Armor') es un módulo de seguridad del kernel de Linux que restringe las capacidades de los complementos como el acceso a la red, el acceso al socket sin procesar y el permiso para leer, escribir o ejecutar archivos específicos. \n\n Los autores de complementos pueden proporcionar sus perfiles de seguridad, optimizados para el complemento, o solicitar su desactivación. Si AppArmor está deshabilitado, aumentará los riesgos de seguridad y, por lo tanto, tendrá un impacto negativo en la puntuación de seguridad del complemento.",
"title": "AppArmor"
},
"auth_api": {
"description": "Un complemento puede autenticar a los usuarios contra Home Assistant, lo que permite que los complementos brinden a los usuarios la posibilidad de iniciar sesión en aplicaciones que se ejecutan dentro de complementos, utilizando su nombre de usuario / contraseña de Home Assistant. Esta insignia indica si el autor del complemento solicita esta capacidad.",
"title": "Autenticación de Home Assistant"
},
"docker_api": {
"description": "El autor del complemento ha solicitado que éste tenga acceso de administración a la instancia de Docker que se ejecuta en su sistema. Este modo le da al complemento acceso y control total a todo su sistema Home Assistant, lo que agrega riesgos de seguridad y podría dañar su sistema si se usa incorrectamente. Por lo tanto, esta característica tiene un impacto negativo en la puntuación de seguridad del complemento. \n\nEste nivel de acceso no se otorga automáticamente y debe ser confirmado por usted. Para hacerlo, debe deshabilitar manualmente el modo de protección en el complemento. Desactive el modo de protección SOLAMENTE si conoce, necesita y confía en la fuente de este complemento.",
"title": "Acceso total a Docker"
},
"full_access": {
"description": "A pedido del autor del complemento, éste tiene acceso total al hardware de su sistema. El acceso es comparable al modo privilegiado en Docker. Dado que esto abre posibles riesgos de seguridad, ésta característica impacta negativamente en la puntuación de seguridad del complemento. \n\nEste nivel de acceso no se otorga automáticamente y debe ser confirmado por usted. Para hacerlo, debe deshabilitar manualmente el modo de protección en el complemento. Desactive el modo de protección SOLAMENTE si conoce, necesita y confía en la fuente de este complemento.",
"title": "Acceso total al hardware"
},
"hassio_api": {
"description": "Al complemento se le dio acceso a la API Supervisor, a solicitud del autor del complemento. De forma predeterminada, el complemento puede acceder a la información general de la versión de su sistema. Cuando el complemento solicita acceso de nivel de 'administrador' a la API, obtendrá acceso para controlar varias partes de su sistema Home Assistant. Este permiso está indicado por esta insignia y afectará negativamente la puntuación de seguridad del complemento.",
"title": "Acceso a la API Supervisor"
},
"homeassistant_api": {
"description": "Este complemento puede acceder a su instancia de Home Assistant en ejecución directamente a través de la API de Home Assistant. Este modo también maneja la autenticación para el complemento, lo que permite que un complemento interactúe con Home Assistant sin la necesidad de tokens de autenticación adicionales.",
"title": "Acceso a la API de Home Assistant"
},
"host_network": {
"description": "Los complementos generalmente se ejecutan en su propia capa de red aislada, lo que les impide acceder a la red del sistema operativo host. En algunos casos, este aislamiento de red puede limitar los complementos en la prestación de sus servicios y, por lo tanto, el autor del complemento puede eliminar el aislamiento, lo que le da al complemento acceso completo a las capacidades de red de la máquina host. Esto le da al complemento más capacidades de red pero reduce la seguridad, por lo tanto, la clasificación de seguridad del complemento se reducirá cuando el complemento utilice esta opción.",
"title": "Red del host"
},
"host_pid": {
"description": "Por lo general, los procesos que ejecuta el complemento están aislados de todos los demás procesos del sistema. El autor del complemento ha solicitado que el complemento tenga acceso a los procesos del sistema que se ejecutan en la instancia del sistema host y que permita que el complemento genere procesos en el sistema host también. Este modo le da al complemento acceso y control total a todo su sistema Home Assistant, lo que agrega riesgos de seguridad y podría dañar su sistema si se usa incorrectamente. Por lo tanto, esta característica tiene un impacto negativo en la puntuación de seguridad del complemento. \n\nEste nivel de acceso no se otorga automáticamente y debe ser confirmado por usted. Para hacerlo, debe deshabilitar manualmente el modo de protección en el complemento. Desactive el modo de protección SOLAMENTE si conoce, necesita y confía en la fuente de este complemento.",
"title": "Espacio de nombres de procesos de host"
},
"ingress": {
"description": "Este complemento utiliza Ingress para integrar su interfaz de forma segura en Home Assistant.",
"title": "Ingress"
},
"label": {
"apparmor": "Apparmor",
"auth": "autenticación",
"docker": "Docker",
"hardware": "Hardware",
"hass": "hass",
"hassio": "hassio",
"host": "Host",
"host_pid": "pid de host",
"ingress": "Ingreso",
"rating": "clasificación",
"stage": "Etapa"
},
"rating": {
"description": "Home Assistant proporciona una clasificación de seguridad para cada uno de los complementos, que indica los riesgos involucrados al usar tal complemento. Cuanto más acceso requiera un complemento en su sistema, menor será la puntuación, dado que aumentará los posibles riesgos de seguridad. \n\nEl puntaje está en una escala de 1 a 6. Donde 1 es el puntaje más bajo (considerado el menos seguro y de mayor riesgo) y un puntaje de 6 es el puntaje más alto (considerado el más seguro y de menor riesgo).",
"title": "Calificación de seguridad del complemento"
},
"role": {
"admin": "administrador",
"backup": "copia de seguridad",
"default": "Predeterminado",
"homeassistant": "homeassistant",
"manager": "Administrador"
},
"stage": {
"description": "Los complementos pueden tener una de tres etapas: \n\n {icon_stable} ** Estable **: estos son complementos listos para usarse en producción. \n\n {icon_experimental} ** Experimental **: estos pueden contener errores y pueden no estar terminados. \n\n {icon_deprecated} ** Obsoleto **: estos complementos ya no recibirán actualizaciones.",
"title": "Etapa del complemento"
}
},
"changelog": "Registro de cambios",
"cpu_usage": "Uso de CPU del complemento",
"hostname": "Nombre de host",
"install": "instalar",
"new_update_available": "{name} {version} está disponible",
"not_available_arch": "Este complemento no es compatible con el procesador de su dispositivo o el sistema operativo que ha instalado en su dispositivo.",
"not_available_version": "Está ejecutando Home Assistant {core_version_installed} , para actualizar a esta versión del complemento necesitas al menos la versión {core_version_needed} de Home Assistant",
"open_web_ui": "Abrir la interfaz de usuario web",
"option": {
"auto_update": {
"description": "Actualice automáticamente el complemento cuando haya una nueva versión disponible",
"title": "Actualización automática"
},
"boot": {
"description": "Hacer que el complemento se inicie durante el arranque del sistema",
"title": "Iniciar en el arranque"
},
"ingress_panel": {
"description": "Agregar este complemento a la barra lateral",
"title": "Mostrar en la barra lateral"
},
"protected": {
"description": "Bloquea el acceso elevado al sistema desde el complemento",
"title": "Modo de protección"
},
"watchdog": {
"description": "Esto iniciará el complemento si se bloquea",
"title": "Watchdog"
}
},
"protection_mode": {
"content": "¡El modo de protección en este complemento está deshabilitado! Esto le da al complemento acceso completo a todo el sistema, lo que agrega riesgos de seguridad y podría dañar su sistema si se usa incorrectamente. Desactive el modo de protección SOLAMENTE si conoce, necesita y confía en la fuente de este complemento.",
"enable": "Activar el modo de protección",
"title": "Advertencia: ¡El modo de protección está desactivado!"
},
"ram_usage": "Uso de RAM del complemento",
"rebuild": "reconstruir",
"restart": "reiniciar",
"start": "Iniciar",
"stop": "detener",
"uninstall": "desinstalar",
"visit_addon_page": "Visite la página {name} para obtener más detalles"
},
"documentation": {
"get_documentation": "Fallo al obtener documentación del complemento, {error}"
},
"failed_to_reset": "Fallo al restablecer la configuración del complemento, {error}",
"failed_to_save": "Fallo al guardar la configuración del complemento, {error}",
"logs": {
"get_logs": "Fallo al obtener los registros del complemento, {error}"
},
"panel": {
"configuration": "Configuración",
"documentation": "Documentación",
"info": "Información",
"log": "Registro"
},
"state": {
"installed": "El complemento está instalado",
"not_available": "El complemento no está disponible en su sistema",
"not_installed": "El complemento no está instalado"
}
},
"common": {
"cancel": "Cancelar",
"close": "Cerrar",
"description": "Descripción",
"error": {
"unknown": "Error desconocido",
"update_failed": "Actualización fallida"
},
"failed_to_restart_name": "Fallo al reiniciar {name}",
"failed_to_update_name": "Fallo al actualizar {name}",
"learn_more": "Aprender más",
"new_version_available": "Nueva versión disponible",
"newest_version": "Versión más reciente",
"no": "No",
"refresh": "Actualizar",
"release_notes": "Notas de lanzamiento",
"reload": "Recargar",
"reset_defaults": "Restablecer a los valores predeterminados",
"reset_options": "Restablecer opciones",
"restart": "Reiniciar",
"restart_name": "Reiniciar {name}",
"running_version": "Actualmente está ejecutando la versión {version}",
"save": "Guardar",
"show_more": "Mostrar más información sobre esto",
"update": "Actualizar",
"update_available": "{count} {count, plural,\n one {actualización}\n other {actualizaciones}\n} pendiente/s",
"version": "Versión",
"yes": "Si"
},
"confirm": {
"reset_options": {
"text": "¿Está seguro de que desea restablecer todas sus opciones?",
"title": "Restablecer opciones"
},
"restart": {
"text": "¿Está seguro de que desea reiniciar {name} ?",
"title": "Reiniciar {name}"
},
"update": {
"text": "¿Estás seguro de actualizar {name} a la versión {version}?",
"title": "Actualizar {name}"
}
},
"dashboard": {
"addon_new_version": "Nueva versión disponible",
"addon_running": "El complemento se está ejecutando",
"addon_stopped": "El complemento está detenido",
"addons": "Complementos",
"no_addons": "No hay ningún complemento instalado. ¡Diríjase a la tienda de complementos para comenzar!"
},
"dialog": {
"network": {
"connected_to": "Conectado a {ssid}",
"dhcp": "DHCP",
"disabled": "Deshabilitado",
"dns_servers": "Servidores DNS",
"failed_to_change": "Fallo al modificar la configuración de la red",
"gateway": "Dirección de la puerta de enlace",
"ip_netmask": "Dirección IP / Máscara de red",
"open": "Abierta",
"scan_ap": "Buscar puntos de acceso",
"static": "Estática",
"title": "Configuración de red",
"unsaved": "Tiene cambios sin guardar, estos se perderán si cambia de pestaña, ¿desea continuar?",
"warning": "Si está cambiando las direcciones de Wi-Fi, IP o puerta de enlace, ¡podría perder la conexión!",
"wep": "WEP",
"wpa": "WPA-PSK"
},
"registries": {
"add_new_registry": "Agregar nuevo registro",
"add_registry": "Agregar registro",
"failed_to_add": "Fallo al añadir el registro",
"failed_to_remove": "Fallo al eliminar el registro",
"no_registries": "No hay registros configurados",
"password": "Contraseña",
"registry": "Registro",
"remove": "Eliminar",
"title_add": "Agregar nuevo registro de contenedores",
"title_manage": "Gestionar registros de contenedores",
"username": "Nombre de usuario"
},
"repositories": {
"add": "Agregar",
"remove": "Eliminar",
"title": "Administrar repositorios de complementos"
},
"restart_addon": {
"confirm_text": "Reiniciar complemento",
"text": "¿Desea reiniciar el complemento con sus cambios?"
},
"update": {
"create_snapshot": "Crear una instantánea de {name} antes de actualizar",
"snapshot": "Instantánea",
"snapshotting": "Creando instantánea de {name}",
"updating": "Actualizando {name} a la versión {version}"
}
},
"my": {
"error": "Ha ocurrido un error desconocido",
"error_addon_not_found": "Complemento no encontrado",
"faq_link": "Mis preguntas frecuentes de Home Assistant",
"not_supported": "Esta redirección no está soportada por su instancia de Home Assistant. Consulte las redirecciones soportadas y la versión en la que fueron introducidas en {link}."
},
"panel": {
"dashboard": "Tablero",
"snapshots": "Instantáneas",
"store": "Tienda de complementos",
"system": "Sistema"
},
"snapshot": {
"addons": "Complementos",
"available_snapshots": "Instantáneas disponibles",
"could_not_create": "No se pudo crear la instantánea",
"create": "Crear",
"create_blocked_not_running": "No es posible crear una instantánea en este momento porque el sistema está {state} .",
"create_snapshot": "Crear instantánea",
"description": "Las instantáneas le permiten realizar copias de seguridad y restaurar fácilmente todos los datos de su instancia de Home Assistant.",
"enter_password": "Por favor ingrese una contraseña.",
"folder": {
"addons/local": "Complementos locales",
"homeassistant": "Configuración de Home Assistant",
"media": "Medios",
"share": "Compartir",
"ssl": "SSL"
},
"folders": "Carpetas",
"full_snapshot": "Instantánea completa",
"name": "Nombre",
"no_snapshots": "Aún no tiene instantáneas.",
"partial_snapshot": "Instantánea parcial",
"password": "Contraseña",
"password_protected": "protegido por contraseña",
"password_protection": "Protección con contraseña",
"security": "Seguridad",
"type": "Tipo",
"upload_snapshot": "Subir instantánea"
},
"store": {
"missing_addons": "¿Faltan complementos? Habilite el modo avanzado en su página de perfil de usuario",
"no_results_found": "No se encontraron resultados en {repository} .",
"registries": "Registros",
"repositories": "Repositorios"
},
"system": {
"core": {
"cpu_usage": "Uso de CPU del núcleo",
"ram_usage": "Uso de RAM del núcleo"
},
"host": {
"change": "Cambiar",
"change_hostname": "Cambiar nombre de host",
"confirm_reboot": "¿Está seguro de que desea reiniciar el host?",
"confirm_shutdown": "¿Está seguro de que desea apagar el host?",
"deployment": "Despliegue",
"docker_version": "Versión de Docker",
"emmc_lifetime_used": "Vida útil de la eMMC utilizada",
"failed_to_get_hardware_list": "Fallo al obtener la lista de hardware",
"failed_to_import_from_usb": "No se pudo importar desde USB",
"failed_to_reboot": "Fallo al reiniciar el host",
"failed_to_set_hostname": "Error al establecer el nombre de host",
"failed_to_shutdown": "Fallo al apagar el host",
"hardware": "Hardware",
"hostname": "Nombre de host",
"import_from_usb": "Importar desde USB",
"ip_address": "Dirección IP",
"new_hostname": "Ingrese un nuevo nombre de host:",
"operating_system": "Sistema operativo",
"reboot_host": "Reiniciar host",
"shutdown_host": "Apagar host",
"used_space": "Espacio utilizado"
},
"log": {
"get_logs": "No se pudieron obtener los registros de {provider}, {error}",
"log_provider": "Registro del proveedor"
},
"supervisor": {
"beta_backup": "Asegúrese de tener copias de seguridad de sus datos antes de activar esta función.",
"beta_join_confirm": "¿Quieres unirte al canal beta?",
"beta_release_items": "Esto incluye versiones beta para:",
"beta_warning": "Las versiones beta son para testers y usuarios pioneros. Pueden contener cambios de código inestables.",
"channel": "Canal",
"cpu_usage": "Uso de CPU de Supervisor",
"failed_to_reload": "Fallo al recargar Supervisor",
"failed_to_set_option": "Fallo al configurar la opción de Supervisor",
"failed_to_update": "Fallo al actualizar Supervisor",
"join_beta_action": "Unirse al canal beta",
"join_beta_description": "Obtener actualizaciones beta para Home Assistant (RCs), supervisor y anfitrión",
"leave_beta_action": "Salir del canal beta",
"leave_beta_description": "Obtenga actualizaciones estables para Home Assistant, Supervisor y host",
"ram_usage": "Uso de RAM de Supervisor",
"reload_supervisor": "Recargar Supervisor",
"share_diagnostics": "Compartir diagnósticos",
"share_diagnostics_description": "Compartir informes de fallos e información de diagnóstico.",
"share_diagonstics_description": "¿Le gustaría compartir automáticamente informes de fallas e información de diagnóstico cuando el supervisor encuentra errores inesperados? {line_break} Esto nos permitirá solucionar los problemas, la información solo es accesible para el equipo principal de Home Assistant y no se compartirá con otros. {line_break} Los datos no incluyen ninguna información privada / confidencial y puede desactivar esto en la configuración en cualquier momento que desee.",
"share_diagonstics_title": "Ayude a mejorar Home Assistant",
"unhealthy_description": "Ejecutar una instalación en mal estado causará problemas. A continuación se muestra una lista de problemas encontrados con su instalación, haga clic en los enlaces para saber cómo puede resolverlos.",
"unhealthy_reason": {
"docker": "El entorno de Docker no funciona correctamente",
"privileged": "El supervisor no tiene privilegios",
"setup": "Falló la configuración del supervisor",
"supervisor": "El supervisor no pudo actualizar"
},
"unhealthy_title": "La instalación tiene problemas",
"unsupported_description": "A continuación se muestra una lista de problemas encontrados con su instalación, haga clic en los enlaces para saber cómo puede resolverlos.",
"unsupported_reason": {
"container": "Contenedores conocidos por causar problemas",
"dbus": "DBUS",
"docker_configuration": "Configuración de Docker",
"docker_version": "Versión de Docker",
"job_conditions": "Condiciones de trabajo ignoradas",
"lxc": "LXC",
"network_manager": "Administrador de red",
"os": "Sistema operativo",
"privileged": "El supervisor no tiene privilegios",
"systemd": "Systemd"
},
"unsupported_title": "Está ejecutando una instalación no soportada",
"update_supervisor": "Actualizar el supervisor",
"warning": "ADVERTENCIA"
}
}
},
"ui": {
"auth_store": {
"ask": "¿Desea permanecer conectado?",
@@ -764,8 +377,6 @@
"changed_to_state": "cambiado a {state}",
"cleared_device_class": "despejado (no se detecta {device_class})",
"detected_device_class": "detectado {device_class}",
"is_closing": "se está cerrando",
"is_opening": "se está abriendo",
"rose": "salió",
"set": "se ocultó",
"turned_off": "apagado",
@@ -1013,9 +624,6 @@
"person": {
"create_zone": "Crear zona desde ubicación actual"
},
"remote": {
"activity": "Actividad actual"
},
"restored": {
"confirm_remove_text": "¿Está seguro de que desea eliminar esta entidad?",
"confirm_remove_title": "¿Eliminar entidad?",
@@ -1088,7 +696,7 @@
"scene": "Escenas",
"script": "",
"server_control": "Controles del servidor",
"tag": "Etiquetas",
"tags": "Etiquetas",
"users": "Usuarios",
"zone": "Zonas"
},
@@ -1147,7 +755,6 @@
"clusters": "Administrar clústeres",
"reconfigure": "Reconfigurar dispositivo",
"remove": "Eliminar dispositivo",
"view_in_visualization": "Ver en Visualización",
"zigbee_information": "Firma del dispositivo Zigbee"
},
"confirmations": {
@@ -2725,7 +2332,6 @@
"caption": "Visualización",
"header": "Visualización de red",
"highlight_label": "Resaltar dispositivos",
"refresh_topology": "Actualizar topología",
"zoom_label": "Zoom al dispositivo"
}
},
@@ -3403,8 +3009,6 @@
"error_remove": "No se puede eliminar la configuración: {error}",
"error_save_yaml": "No se puede guardar YAML: {error}",
"header": "Editar configuración",
"lovelace_changed": "La configuración de Lovelace se actualizó, ¿desea cargar la configuración actualizada en el editor y perder los cambios actuales?",
"reload": "Recargar",
"resources_moved": "Los recursos ya no se deben agregar a la configuración de Lovelace, sino que se pueden agregar en el panel de configuración de Lovelace.",
"save": "Guardar",
"saved": "Guardado",

View File

@@ -102,393 +102,6 @@
"unknown": "Desconocido"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"default": "Por defecto",
"header": "Audio",
"input": "Entrada",
"output": "Salida"
},
"network": {
"container": "Contenedor",
"disabled": "Deshabilitada",
"header": "Red",
"host": "Host"
},
"no_configuration": "Este complemento no expone configuración con la que puedas trastear.",
"options": {
"edit_in_ui": "Editar en la IU",
"edit_in_yaml": "Editar en YAML",
"header": "Opciones",
"invalid_yaml": "YAML no válido",
"show_unused_optional": "Mostrar opciones de configuración opcionales no utilizadas"
}
},
"dashboard": {
"action_error": {
"get_changelog": "No se pudo obtener el registro de cambios del complemento",
"go_to_config": "No se pudo iniciar el complemento: ¡la validación de la configuración falló!",
"install": "No se pudo instalar el complemento",
"restart": "No se pudo reiniciar el complemento",
"start": "No se pudo iniciar el complemento",
"start_invalid_config": "Ir a la configuración",
"stop": "No se pudo detener el complemento",
"uninstall": "No se pudo desinstalar el complemento",
"validate_config": "No se pudo validar la configuración del complemento"
},
"capability": {
"apparmor": {
"description": "AppArmor ('Application Armor') es un módulo de seguridad del kernel de Linux que restringe las capacidades de los complementos como el acceso a la red, el acceso al socket sin procesar y el permiso para leer, escribir o ejecutar archivos específicos. \n\nLos autores de complementos pueden proporcionar sus perfiles de seguridad, optimizados para el complemento, o solicitar su desactivación. Si AppArmor está deshabilitado, aumentará los riesgos de seguridad y, por lo tanto, tendrá un impacto negativo en la puntuación de seguridad del complemento.",
"title": "AppArmor"
},
"auth_api": {
"description": "Un complemento puede autenticar a los usuarios contra Home Assistant, lo que permite que los complementos brinden a los usuarios la posibilidad de iniciar sesión en aplicaciones que se ejecutan dentro de complementos, utilizando tu nombre de usuario/contraseña de Home Assistant. Esta insignia indica si el autor del complemento solicita esta capacidad.",
"title": "Autenticación de Home Assistant"
},
"docker_api": {
"description": "El autor del complemento ha solicitado que el complemento tenga acceso de administración a la instancia de Docker que se ejecuta en tu sistema. Este modo le da al complemento acceso y control total a todo tu sistema Home Assistant, lo que agrega riesgos de seguridad y podría dañar tu sistema si se usa incorrectamente. Por lo tanto, esta característica tiene un impacto negativo en la puntuación de seguridad del complemento. \n\nEste nivel de acceso no se otorga automáticamente y debe ser confirmado por ti. Para hacer esto, debes deshabilitar el modo de protección en el complemento manualmente. Desactiva solo el modo de protección si conoces, necesitas Y confías en la fuente de este complemento.",
"title": "Acceso completo a Docker"
},
"full_access": {
"description": "Este complemento tiene acceso completo al hardware de tu sistema, a petición del autor del complemento. El acceso es comparable al modo privilegiado en Docker. Dado que esto abre posibles riesgos de seguridad, esta característica impacta negativamente en la puntuación de seguridad del complemento. \n\nEste nivel de acceso no se otorga automáticamente y debe ser confirmado por ti. Para hacer esto, debes deshabilitar el modo de protección en el complemento manualmente. Desactiva solo el modo de protección si conoces, necesitas Y confías en la fuente de este complemento.",
"title": "Acceso completo al hardware"
},
"hassio_api": {
"description": "Al complemento se le dio acceso a la API del supervisor, a petición del autor del complemento. De forma predeterminada, el complemento puede acceder a la información general de la versión de tu sistema. Cuando el complemento solicita acceso de nivel de 'gerente' o 'administrador' a la API, obtendrá acceso para controlar varias partes de tu sistema Home Assistant. Este permiso está indicado por esta insignia y afectará negativamente la puntuación de seguridad del complemento.",
"title": "Acceso a la API del supervisor"
},
"homeassistant_api": {
"description": "Este complemento puede acceder a tu instancia de Home Assistant en ejecución directamente a través de la API de Home Assistant. Este modo también maneja la autenticación para el complemento, lo que permite que un complemento interactúe con Home Assistant sin la necesidad de tokens de autenticación adicionales.",
"title": "Acceso a la API de Home Assistant"
},
"host_network": {
"description": "Los complementos generalmente se ejecutan en su propia capa de red aislada, lo que les impide acceder a la red del sistema operativo del host. En algunos casos, este aislamiento de red puede limitar los complementos en la prestación de sus servicios y, por lo tanto, el autor del complemento puede eliminar el aislamiento, lo que le da al complemento acceso completo a las capacidades de red de la máquina host. Esto le da al complemento más capacidades de red pero reduce la seguridad, por lo tanto, la clasificación de seguridad del complemento se reducirá cuando el complemento utilice esta opción.",
"title": "Red del host"
},
"host_pid": {
"description": "Por lo general, los procesos que ejecuta el complemento están aislados de todos los demás procesos del sistema. El autor del complemento ha solicitado que el complemento tenga acceso a los procesos del sistema que se ejecutan en la instancia del sistema host y también que permitas que el complemento genere procesos en el sistema host. Este modo le da al complemento acceso y control total a todo tu sistema Home Assistant, lo que agrega riesgos de seguridad y podría dañar tu sistema si se usa incorrectamente. Por lo tanto, esta característica tiene un impacto negativo en la puntuación de seguridad del complemento. \n\nEste nivel de acceso no se otorga automáticamente y debe ser confirmado por ti. Para hacer esto, debes deshabilitar el modo de protección en el complemento manualmente. Desactiva solo el modo de protección si conoces, necesitas Y confías en la fuente de este complemento.",
"title": "Espacio de nombres de los procesos del host"
},
"ingress": {
"description": "Este complemento utiliza Entrada para integrar su interfaz de forma segura en Home Assistant.",
"title": "Entrada"
},
"label": {
"apparmor": "apparmor",
"auth": "auth",
"docker": "docker",
"hardware": "hardware",
"hass": "hass",
"hassio": "hassio",
"host": "host",
"host_pid": "pid de host",
"ingress": "entrada",
"rating": "clasificación",
"stage": "etapa"
},
"rating": {
"description": "Home Assistant proporciona una clasificación de seguridad para cada uno de los complementos, que indica los riesgos involucrados al usar este complemento. Cuanto más acceso requiera un complemento en tu sistema, menor será la puntuación, lo que aumentará los posibles riesgos de seguridad. \n\nLa puntuación está en una escala de 1 a 6. Donde 1 es la puntuación más baja (considerado el más inseguro y de mayor riesgo) y una puntuación de 6 es la puntuación más alta (considerado el más seguro y de menor riesgo).",
"title": "Clasificación de seguridad del complemento"
},
"role": {
"admin": "administrador",
"backup": "copia de seguridad",
"default": "predeterminado",
"homeassistant": "homeassistant",
"manager": "gerente"
},
"stage": {
"description": "Los complementos pueden tener una de tres etapas: \n\n {icon_stable} ** Estable **: estos son complementos listos para usarse en producción. \n\n {icon_experimental} ** Experimental **: estos pueden contener errores y pueden estar inacabados. \n\n {icon_deprecated} ** Obsoleto **: estos complementos ya no recibirán actualizaciones.",
"title": "Etapa de complemento"
}
},
"changelog": "Registro de cambios",
"cpu_usage": "Complemento de uso de CPU",
"hostname": "Nombre de host",
"install": "instalar",
"new_update_available": "{name} {version} está disponible",
"not_available_arch": "Este complemento no es compatible con el procesador de tu dispositivo o el sistema operativo que has instalado en tu dispositivo.",
"not_available_version": "Estás ejecutando Home Assistant {core_version_installed}, para actualizar a esta versión del complemento necesitas al menos la versión {core_version_needed} de Home Assistant",
"open_web_ui": "Abrir la interfaz web",
"option": {
"auto_update": {
"description": "Actualizar automáticamente el complemento cuando haya una nueva versión disponible",
"title": "Actualización automática"
},
"boot": {
"description": "Hacer que el complemento se inicie durante el arranque del sistema",
"title": "Iniciar en el arranque"
},
"ingress_panel": {
"description": "Agrega este complemento a tu barra lateral",
"title": "Mostrar en la barra lateral"
},
"protected": {
"description": "Bloquea el acceso elevado al sistema desde el complemento",
"title": "Modo de protección"
},
"watchdog": {
"description": "Esto iniciará el complemento si falla",
"title": "Vigilancia"
}
},
"protection_mode": {
"content": "¡El modo de protección en este complemento está deshabilitado! Esto le da al complemento acceso completo a todo el sistema, lo que agrega riesgos de seguridad y podría dañar tu sistema si se usa incorrectamente. Desactiva solo el modo de protección si conoces, necesitas Y confías en la fuente de este complemento.",
"enable": "Habilitar el modo de protección",
"title": "Advertencia: ¡El modo de protección está desactivado!"
},
"ram_usage": "Complemento de uso de RAM",
"rebuild": "reconstruir",
"restart": "reiniciar",
"start": "iniciar",
"stop": "detener",
"uninstall": "desinstalar",
"visit_addon_page": "Visita la página {name} para obtener más detalles"
},
"documentation": {
"get_documentation": "No se pudo obtener la documentación del complemento, {error}"
},
"failed_to_reset": "No se pudo restablecer la configuración del complemento, {error}",
"failed_to_save": "No se pudo guardar la configuración del complemento, {error}",
"logs": {
"get_logs": "No se pudieron obtener los registros del complemento, {error}"
},
"panel": {
"configuration": "Configuración",
"documentation": "Documentación",
"info": "Información",
"log": "Registro"
},
"state": {
"installed": "El complemento está instalado",
"not_available": "El complemento no está disponible en su sistema",
"not_installed": "El complemento no está instalado"
}
},
"common": {
"cancel": "Cancelar",
"close": "Cerrar",
"description": "Descripción",
"error": {
"unknown": "Error desconocido",
"update_failed": "Error en la actualización"
},
"failed_to_restart_name": "No se pudo reiniciar {name}",
"failed_to_update_name": "No se pudo actualizar {name}",
"learn_more": "Aprende más",
"new_version_available": "Nueva versión disponible",
"newest_version": "Versión más reciente",
"no": "No",
"refresh": "Actualizar",
"release_notes": "Notas de versión",
"reload": "Recargar",
"reset_defaults": "Restablecer los valores predeterminados",
"reset_options": "Restablecer opciones",
"restart": "Reiniciar",
"restart_name": "Reiniciar {name}",
"running_version": "Actualmente estás ejecutando la versión {version}",
"save": "Guardar",
"show_more": "Mostrar más información sobre esto",
"update": "Actualizar",
"update_available": "{count, plural,\n one {actualización pendiente}\n other {{count} actualizaciones pendientes}\n}",
"version": "Versión",
"yes": "Sí"
},
"confirm": {
"reset_options": {
"text": "¿Estás seguro de que deseas restablecer todas tus opciones?",
"title": "Restablecer opciones"
},
"restart": {
"text": "¿Estás seguro de que deseas reiniciar {name}?",
"title": "Reiniciar {name}"
},
"update": {
"text": "¿Estás seguro de que deseas actualizar {name} a la versión {version}?",
"title": "Actualizar {name}"
}
},
"dashboard": {
"addon_new_version": "Nueva versión disponible",
"addon_running": "El complemento se está ejecutando",
"addon_stopped": "El complemento está detenido",
"addons": "Complementos",
"no_addons": "Aún no tienes ningún complemento instalado. ¡Dirígete a la tienda de complementos para comenzar!"
},
"dialog": {
"network": {
"connected_to": "Conectado a {ssid}",
"dhcp": "DHCP",
"disabled": "Deshabilitada",
"dns_servers": "Servidores DNS",
"failed_to_change": "No se pudo cambiar la configuración de red",
"gateway": "Dirección de la puerta de enlace",
"ip_netmask": "Dirección IP/Máscara de red",
"open": "Abierta",
"scan_ap": "Buscar puntos de acceso",
"static": "Estática",
"title": "Configuración de red",
"unsaved": "Tienes cambios sin guardar, estos se perderán si cambias de pestaña, ¿deseas continuar?",
"warning": "Si estás cambiando las direcciones de Wi-Fi, IP o puerta de enlace, ¡podrías perder la conexión!",
"wep": "WEP",
"wpa": "wpa-psk"
},
"registries": {
"add_new_registry": "Añadir un nuevo registro",
"add_registry": "Añadir registro",
"failed_to_add": "No se pudo agregar el registro",
"failed_to_remove": "No se pudo eliminar el registro",
"no_registries": "No hay registros configurados",
"password": "Contraseña",
"registry": "Registro",
"remove": "Eliminar",
"title_add": "Añadir un nuevo registro de contenedores",
"title_manage": "Administrar los registros de contenedores",
"username": "Nombre de usuario"
},
"repositories": {
"add": "Añadir",
"remove": "Eliminar",
"title": "Administrar los repositorios de complementos"
},
"restart_addon": {
"confirm_text": "Reiniciar el complemento",
"text": "¿Quieres reiniciar el complemento con tus cambios?"
},
"update": {
"create_snapshot": "Crea una instantánea de {name} antes de actualizar",
"snapshot": "Instantánea",
"snapshotting": "Creando instantánea de {name}",
"updating": "Actualizando {name} a la versión {version}"
}
},
"my": {
"error": "Se ha producido un error desconocido",
"error_addon_not_found": "Complemento no encontrado",
"faq_link": "Preguntas frecuentes sobre mi Home Assistant",
"not_supported": "Esta redirección no es compatible con tu instancia de Home Assistant. Consulta el {link} para conocer las redirecciones admitidas y la versión en la que se introdujeron."
},
"panel": {
"dashboard": "Panel de control",
"snapshots": "Instantáneas",
"store": "Tienda de complementos",
"system": "Sistema"
},
"snapshot": {
"addons": "Complementos",
"available_snapshots": "Instantáneas disponibles",
"could_not_create": "No se pudo crear la instantánea",
"create": "Crear",
"create_blocked_not_running": "No es posible crear una instantánea en este momento porque el sistema está en el estado {state}.",
"create_snapshot": "Crear instantánea",
"description": "Las instantáneas te permiten realizar copias de seguridad y restaurar fácilmente todos los datos de tu instancia de Home Assistant.",
"enter_password": "Por favor, introduce una contraseña.",
"folder": {
"addons/local": "Complementos locales",
"homeassistant": "Configuración de Home Assistant",
"media": "Medios",
"share": "Compartir",
"ssl": "SSL"
},
"folders": "Carpetas",
"full_snapshot": "Instantánea completa",
"name": "Nombre",
"no_snapshots": "Aún no tienes instantáneas.",
"partial_snapshot": "Instantánea parcial",
"password": "Contraseña",
"password_protected": "protegida por contraseña",
"password_protection": "Protección con contraseña",
"security": "Seguridad",
"type": "Tipo",
"upload_snapshot": "Subir instantánea"
},
"store": {
"missing_addons": "¿Faltan complementos? Habilita el modo avanzado en tu página de perfil de usuario",
"no_results_found": "No se encontraron resultados en {repository}.",
"registries": "Registros",
"repositories": "Repositorios"
},
"system": {
"core": {
"cpu_usage": "Uso de CPU principal",
"ram_usage": "Uso de RAM principal"
},
"host": {
"change": "Cambiar",
"change_hostname": "Cambiar nombre de host",
"confirm_reboot": "¿Estás seguro de que quieres reiniciar el host?",
"confirm_shutdown": "¿Estás seguro de que quieres apagar el host?",
"deployment": "Despliegue",
"docker_version": "Versión de Docker",
"emmc_lifetime_used": "Vida útil de eMMC utilizada",
"failed_to_get_hardware_list": "No se pudo obtener la lista de hardware",
"failed_to_import_from_usb": "No se pudo importar desde USB",
"failed_to_reboot": "No se pudo reiniciar el host",
"failed_to_set_hostname": "Error al configurar el nombre de host",
"failed_to_shutdown": "No se pudo apagar el host",
"hardware": "Hardware",
"hostname": "Nombre de host",
"import_from_usb": "Importar desde USB",
"ip_address": "Dirección IP",
"new_hostname": "Por favor, introduce un nuevo nombre de host:",
"operating_system": "Sistema operativo",
"reboot_host": "Reiniciar el host",
"shutdown_host": "Apagar el host",
"used_space": "Espacio usado"
},
"log": {
"get_logs": "No se pudieron obtener los registros de {provider}, {error}",
"log_provider": "Proveedor de registros"
},
"supervisor": {
"beta_backup": "Asegúrate de tener copias de seguridad de tus datos antes de activar esta función.",
"beta_join_confirm": "¿Quieres unirte al canal beta?",
"beta_release_items": "Esto incluye versiones beta para:",
"beta_warning": "Las versiones beta son para probadores y usuarios pioneros y pueden contener cambios de código inestables",
"channel": "Canal",
"cpu_usage": "Uso de CPU del supervisor",
"failed_to_reload": "No pudo recargar el supervisor",
"failed_to_set_option": "No se pudo configurar la opción del supervisor",
"failed_to_update": "No se pudo actualizar el supervisor",
"join_beta_action": "Únete al canal beta",
"join_beta_description": "Obtén actualizaciones beta para Home Assistant (RC), Supervisor y el host",
"leave_beta_action": "Salir del canal beta",
"leave_beta_description": "Obtén actualizaciones estables para Home Assistant, Supervisor y el host",
"ram_usage": "Uso de RAM del supervisor",
"reload_supervisor": "Recargar el supervisor",
"share_diagnostics": "Compartir diagnósticos",
"share_diagnostics_description": "Comparte informes de fallos e información de diagnóstico.",
"share_diagonstics_description": "¿Te gustaría compartir automáticamente informes de fallos e información de diagnóstico cuando el supervisor encuentra errores inesperados? {line_break} Esto nos permitirá solucionar los problemas, la información solo es accesible para el equipo principal de Home Assistant y no se compartirá con otros. {line_break} Los datos no incluyen ninguna información privada/confidencial y puedes desactivar esto en la configuración en cualquier momento que desees.",
"share_diagonstics_title": "Ayuda a mejorar Home Assistant",
"unhealthy_description": "Ejecutar una instalación en mal estado causará problemas. A continuación se muestra una lista de problemas encontrados con tu instalación, haz clic en los enlaces para saber cómo puedes resolver los problemas.",
"unhealthy_reason": {
"docker": "El entorno de Docker no funciona correctamente",
"privileged": "El supervisor no es privilegiado",
"setup": "La configuración del supervisor falló",
"supervisor": "El supervisor no se pudo actualizar"
},
"unhealthy_title": "Tu instalación está en mal estado",
"unsupported_description": "A continuación se muestra una lista de problemas encontrados con tu instalación, haz clic en los enlaces para saber cómo puedes resolver los problemas.",
"unsupported_reason": {
"container": "Contenedores conocidos por causar problemas",
"dbus": "DBUS",
"docker_configuration": "Configuración de Docker",
"docker_version": "Versión de Docker",
"job_conditions": "Condiciones de trabajo ignoradas",
"lxc": "LXC",
"network_manager": "Administrador de red",
"os": "Sistema operativo",
"privileged": "El supervisor no es privilegiado",
"systemd": "Systemd"
},
"unsupported_title": "Estás ejecutando una instalación no soportada",
"update_supervisor": "Actualizar el supervisor",
"warning": "ADVERTENCIA"
}
}
},
"ui": {
"auth_store": {
"ask": "¿Quieres permanecer conectado?",
@@ -762,10 +375,8 @@
"messages": {
"became_unavailable": "dejó de estar disponible",
"changed_to_state": "cambiado a {state}",
"cleared_device_class": "borrado (no se detecta {device_class})",
"cleared_device_class": "no detectado (no se detecta {device_class})",
"detected_device_class": "detectado {device_class}",
"is_closing": "se está cerrando",
"is_opening": "se está abriendo",
"rose": "salió",
"set": "se puso",
"turned_off": "apagado",
@@ -774,16 +385,16 @@
"was_at_state": "se detectó en {state}",
"was_away": "se detectó como ausente",
"was_closed": "se cerró",
"was_connected": "se conectó",
"was_disconnected": "se desconectó",
"was_connected": "fue conectado",
"was_disconnected": "fue desconectado",
"was_locked": "se bloqueó",
"was_low": "era bajo",
"was_normal": "era normal",
"was_opened": "se abrió",
"was_plugged_in": "se enchufó",
"was_plugged_in": "fue enchufado",
"was_safe": "era seguro",
"was_unlocked": "se desbloqueó",
"was_unplugged": "se desenchufó",
"was_unlocked": "fue desbloqueado",
"was_unplugged": "fue desenchufado",
"was_unsafe": "era inseguro"
}
},
@@ -898,7 +509,7 @@
"dialogs": {
"config_entry_system_options": {
"enable_new_entities_description": "Si está deshabilitada, las nuevas entidades que se descubran para {integration} no se añadirán automáticamente a Home Assistant.",
"enable_new_entities_label": "Habilitar entidades recién añadidas.",
"enable_new_entities_label": "Activar entidades recién añadidas.",
"title": "Opciones del sistema para {integration}",
"update": "Actualizar"
},
@@ -913,22 +524,22 @@
"editor": {
"advanced": "Configuración avanzada",
"area": "Establecer solo el área de la entidad",
"area_note": "Por defecto, las entidades de un dispositivo están en la misma área que el dispositivo. Si cambias el área de esta entidad, ya no emulará el área del dispositivo.",
"area_note": "Por defecto, las entidades de un dispositivo están en la misma área que el dispositivo. Si cambias el área de esta entidad, ya no seguirá el área del dispositivo.",
"change_device_area": "Cambiar el área del dispositivo",
"confirm_delete": "¿Estás seguro de que quieres eliminar este elemento?",
"delete": "Eliminar",
"device_disabled": "El dispositivo de esta entidad está deshabilitado.",
"enabled_cause": "Deshabilitada por {cause}.",
"enabled_cause": "Desactivado por {cause}.",
"enabled_delay_confirm": "Las entidades habilitadas se agregarán a Home Assistant en {delay} segundos",
"enabled_description": "Las entidades deshabilitadas no se añadirán a Home Assistant.",
"enabled_label": "Habilitar entidad",
"enabled_description": "Las entidades deshabilitadas no se agregarán a Home Assistant.",
"enabled_label": "Activar entidad",
"enabled_restart_confirm": "Reinicia Home Assistant para terminar de habilitar las entidades",
"entity_id": "ID de la entidad",
"follow_device_area": "Emular el área del dispositivo",
"follow_device_area": "Seguir el área del dispositivo",
"icon": "Icono",
"icon_error": "Los iconos deben tener el formato 'prefijo:nombreicono', por ejemplo, 'mdi:home'",
"name": "Nombre",
"note": "Nota: Es posible que esto no funcione todavía con todas las integraciones.",
"note": "Nota: puede que esto no funcione todavía con todas las integraciones",
"open_device_settings": "Abrir la configuración del dispositivo",
"unavailable": "Esta entidad no está disponible actualmente.",
"update": "Actualizar"
@@ -991,7 +602,7 @@
"timer": {
"duration": "Duración"
},
"yaml_not_editable": "La configuración de esta entidad no se puede editar desde la IU. Solo las entidades constituidas desde la IU se pueden configurar desde la IU"
"yaml_not_editable": "La configuración de esta entidad no se puede editar desde la IU. Solo las entidades configuradas desde la IU se pueden configurar desde la IU"
},
"image_cropper": {
"crop": "Recortar"
@@ -1001,7 +612,7 @@
"close_cover": "Cerrar persiana",
"close_tile_cover": "Cerrar la inclinación de la persiana",
"open_cover": "Abrir persiana",
"open_tilt_cover": "Abrir la inclinación de la persiana",
"open_tilt_cover": "Inclinación de la persiana abierta",
"stop_cover": "Detener el movimiento de la persiana"
},
"details": "Detalles",
@@ -1013,9 +624,6 @@
"person": {
"create_zone": "Crear zona a partir de la ubicación actual"
},
"remote": {
"activity": "Actividad actual"
},
"restored": {
"confirm_remove_text": "¿Estás seguro de que deseas eliminar esta entidad?",
"confirm_remove_title": "¿Eliminar entidad?",
@@ -1041,10 +649,10 @@
"commands": "Comandos de aspiradora:",
"fan_speed": "Velocidad del ventilador",
"locate": "Localizar",
"pause": "Pausar",
"pause": "Pausa",
"return_home": "Volver a casa",
"start": "Iniciar",
"start_pause": "Iniciar/Pausar",
"start": "Inicio",
"start_pause": "Inicio/Pausa",
"status": "Estado",
"stop": "Detener"
}
@@ -1089,6 +697,7 @@
"script": "Scripts",
"server_control": "Controles del servidor",
"tag": "Etiquetas",
"tags": "Etiquetas",
"users": "Usuarios",
"zone": "Zonas"
},
@@ -1147,14 +756,13 @@
"clusters": "Administrar clústeres",
"reconfigure": "Reconfigurar dispositivo",
"remove": "Eliminar dispositivos",
"view_in_visualization": "Ver en Visualización",
"zigbee_information": "Firma del dispositivo Zigbee"
},
"confirmations": {
"remove": "¿Estás seguro de que quieres eliminar este dispositivo?"
},
"device_signature": "Firma del dispositivo Zigbee",
"last_seen": "Visto por última vez",
"last_seen": "Ultima vez visto",
"manuf": "por {manufacturer}",
"no_area": "Ningún área",
"power_source": "Fuente de alimentación",
@@ -1775,7 +1383,7 @@
"email": "Correo electrónico",
"email_error_msg": "Correo electrónico no válido",
"forgot_password": "¿Olvidaste la contraseña?",
"introduction": "Home Assistant Cloud te proporciona una conexión remota segura a tu instancia mientras estás fuera de casa. También te permite conectarte con servicios exclusivos de la nube: Amazon Alexa y Google Assistant.",
"introduction": "Home Assistant Cloud te proporciona una conexión remota segura a tu instancia mientras estás fuera de casa. También te permite conectarte con servicios solo en la nube: Amazon Alexa y Google Assistant.",
"introduction2": "Este servicio está a cargo de nuestro socio.",
"introduction2a": ", una compañía fundada por los fundadores de Home Assistant y Hass.io.",
"introduction3": "Home Assistant Cloud es un servicio de suscripción con una prueba gratuita de un mes. No se necesita información de pago.",
@@ -2725,7 +2333,6 @@
"caption": "Visualización",
"header": "Visualización de la red",
"highlight_label": "Resaltar dispositivos",
"refresh_topology": "Actualizar topología",
"zoom_label": "Zoom al dispositivo"
}
},
@@ -3212,7 +2819,7 @@
"columns": "Columnas",
"description": "La tarjeta Cuadrícula te permite mostrar varias tarjetas en una cuadrícula.",
"name": "Cuadrícula",
"square": "Representar tarjetas como cuadrados"
"square": "Renderizar tarjetas como cuadrados"
},
"history-graph": {
"description": "La tarjeta Historial Gráfico te permite mostrar un gráfico para cada una de las entidades enumeradas.",
@@ -3235,7 +2842,7 @@
"name": "Luz"
},
"logbook": {
"description": "La tarjeta Registro muestra un listado de eventos de las entidades.",
"description": "La tarjeta Registro muestra una lista de eventos para las entidades.",
"name": "Registro"
},
"map": {
@@ -3403,8 +3010,6 @@
"error_remove": "No se puede eliminar la configuración: {error}",
"error_save_yaml": "No se puede guardar YAML: {error}",
"header": "Editar configuración",
"lovelace_changed": "La configuración de Lovelace se actualizó, ¿deseas cargar la configuración actualizada en el editor y perder tus cambios actuales?",
"reload": "Recargar",
"resources_moved": "Los recursos ya no se deben agregar a la configuración de Lovelace, sino que se pueden agregar en el panel de configuración de Lovelace.",
"save": "Guardar",
"saved": "Guardado",

View File

@@ -102,393 +102,6 @@
"unknown": "Teadmata"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"default": "Vaikimisi",
"header": "Heli",
"input": "Sisend",
"output": "Väljund"
},
"network": {
"container": "Konteiner",
"disabled": "Keelatud",
"header": "Võrk",
"host": "Host"
},
"no_configuration": "See lisandmoodul ei avalda sätteid millega jamada...",
"options": {
"edit_in_ui": "Redigeeri kasutajaliideses",
"edit_in_yaml": "Redigeeri YAML-ina",
"header": "Valikud",
"invalid_yaml": "Sobimatu YAML",
"show_unused_optional": "Kuva kasutamata valikulised seadistussuvandid"
}
},
"dashboard": {
"action_error": {
"get_changelog": "Lisandmooduli muudatuste logi hankimine nurjus",
"go_to_config": "Lisandmooduli käivitamine nurjus sätete kontroll nurjus!",
"install": "Lisandmooduli paigaldamine nurjus",
"restart": "Lisandmooduli taaskäivitamine nurjus",
"start": "Lisandmooduli käivitamine nurjus",
"start_invalid_config": "Mine sätetesse",
"stop": "Lisandmooduli peatamine nurjus",
"uninstall": "Lisandmooduli eemaldamine nurjus",
"validate_config": "Lisandmooduli sätete kontroll nurjus"
},
"capability": {
"apparmor": {
"description": "AppArmor ('Application Armor') on Linuxi tuuma turvamoodul, mis piirab lisandmoodulite võimalusi, näiteks võrgule juurdepääsu, otsest võgupesa juurdepääsu ja konkreetseid faile lugeda, kirjutada või käivitada. \n\n Pistikprogrammi autorid võivad esitada oma turvaprofiilid, mis on lisandmooduli jaoks optimeeritud, või taotleda selle keelamist. Kui AppArmor on keelatud, tekitab see turvariske ja seetõttu mõjutab see lisandmooduli turbeskoori negatiivselt.",
"title": "AppArmor"
},
"auth_api": {
"description": "Lisandmoodul võib kasutajaid Home Assistanti abil autentida, võimaldades lisandmoodulitel anda kasutajatele võimaluse sisse logida lisandmoodulites töötavatesse rakendustesse, kasutades nende Home Assistanti kasutajanime / parooli. See märk näitab, kas lisandmooduli autor seda võimalust taotleb.",
"title": "Home Assistanti autentimine"
},
"docker_api": {
"description": "Lisandmooduli autor on taotlenud lisandmoodulilt haldusjuurdepääsu teie süsteemis töötavale Dockeri eksemplarile. See režiim annab lisandmoodulile täieliku juurdepääsu ja kontrolli kogu Home Assistanti süsteemile, mis lisab turvariske ja võib väärkasutamisel teie süsteemi kahjustada. Seetõttu mõjutab see funktsioon lisandmooduli turvaskoori negatiivselt.\n\nSeda juurdepääsutaset ei anta automaatselt ja pead selle kinnitama. Selleks pead lisandmooduli kaitserežiimi käsitsi keelama. Keela kaitserežiim ainult siis, kui tead, vajad ja usaldad selle lisandmooduli allikat.",
"title": "Täielik juurdepääs Dockerile"
},
"full_access": {
"description": "Lisandmoodulile antakse lisandmooduli autori taotlusel täielik juurdepääs süsteemi riistvarale. Juurdepääs on võrreldav Dockeri privilegeeritud režiimiga. Kuna see avab võimalikud turvariskid, mõjutab see funktsioon lisandmooduli turvaskoori negatiivselt.\n\nSeda juurdepääsutaset ei anta automaatselt ja pead selle kinnitama. Selleks pead lisandmooduli kaitserežiimi käsitsi keelama. Keela kaitserežiim ainult siis, kui tead, vajad ja usaldad selle lisandmooduli allikat.",
"title": "Täielik juurdepääs riistvarale"
},
"hassio_api": {
"description": "Lisandmoodulile anti juurdepääs Supervisori API-le lisandmooduli autori taotlusel. Vaikimisi saab lisandmoodul juurdepääsu süsteemi üldisele versiooniteabele. Kui pistikprogramm taotleb API-le juurdepääsu halduri või administraatori tasemel, saab see juurdepääsu Home Assistanti süsteemi mitme osa juhtimiseks. See luba on tähistatud selle märgiga ja see mõjutab pistikprogrammi turvaskoori negatiivselt.",
"title": "Supervisori API juurdepääs"
},
"homeassistant_api": {
"description": "Sellel lisandmoodulil on juurdepääs töötavale koduabilise eksemplarile otse Home Assistanti API kaudu. See režiim tegeleb ka lisandmooduli autentimisega, mis võimaldab lisandmoodulil Home Assistantiga suhelda, ilma et oleks vaja täiendavaid autentimisvõtmeid.",
"title": "Home Assistant API ligipääs"
},
"host_network": {
"description": "Lisandmoodulid töötavad tavaliselt oma isoleeritud võrgukihis, mis takistab neil juurdepääsu hosti operatsioonisüsteemi võrgule. Mõnel juhul võib see võrguisolatsioon piirata lisandmooduleid nende teenuste pakkumisel ja seetõttu saab lisandmooduli autor isolatsiooni tühistada, andes lisandmoodulile täieliku juurdepääsu hostimasina võrgu võimalustele. See annab lisandmoodulile rohkem võrguvõimalusi, kuid vähendab turvalisust, seega langeb lisandmooduli turvahinnang, kui lisandmoodul seda võimalust kasutab.",
"title": "Hosti võrk"
},
"host_pid": {
"description": "Tavaliselt on lisandmooduli protsessid isoleeritud kõigist teistest süsteemiprotsessidest. Lisandmooduli autor on taotlenud lisandmooduli juurdepääsu hostisüsteemi eksemplaris töötavatele süsteemiprotsessidele ja lubama lisandmoodulit ka hostisüsteemi kudemisprotsessidele. See režiim annab lisandmoodulile täieliku juurdepääsu ja kontrolli kogu Home Assistanti süsteemile, mis lisab turvariske ja võib väärkasutamisel teie süsteemi kahjustada. Seetõttu mõjutab see funktsioon lisandmooduli turvaskoori negatiivselt.\n\nSeda juurdepääsutaset ei anta automaatselt ja pead selle kinnitama. Selleks pead lisandmooduli kaitserežiimi käsitsi keelama. Keela kaitserežiim ainult siis, kui tead, vajad ja usaldad selle lisandmooduli allikat.",
"title": "Hostiprotsesside nimeruum"
},
"ingress": {
"description": "See lisandmoodul kasutab Ingressi, et manustada oma liides turvaliselt Home Assistanti.",
"title": "Ingress"
},
"label": {
"apparmor": "apparmor",
"auth": "auth",
"docker": "docker",
"hardware": "riistvara",
"hass": "hass",
"hassio": "hassio",
"host": "host",
"host_pid": "hosti pid",
"ingress": "ingress",
"rating": "hinnang",
"stage": "järk"
},
"rating": {
"description": "Home Assistant annab igale lisandmoodulile turvaklassi, mis näitab selle lisandmooduli kasutamisega seotud riske. Mida rohkem lisandmoodul vajab süsteemile juurdepääsu, seda väiksem on skoor, suurendades seeläbi võimalikke turvariske. \n\nHinne on skaalal 1 kuni 6. Kus 1 on madalaim tulemus (peetakse kõige ebaturvalisemaks ja kõige suuremaks riskiks) ja 6 on kõige suurem tulemus (peetakse kõige turvalisemaks ja madalaimaks riskiks).",
"title": "Lisandmooduli turbehinnang"
},
"role": {
"admin": "admin",
"backup": "varundus",
"default": "vaikimisi",
"homeassistant": "homeassistant",
"manager": "haldur"
},
"stage": {
"description": "Lisandmoodulitel võib olla üks kolmest järgust: \n\n {icon_stable} ** Stabiilne **: need on kasutamiseks valmis lisandmoodulid. \n\n {icon_experimental} ** Eksperimentaalne **: need võivad sisaldada vigu ja võivad olla lõpetamata. \n\n {icon_deprecated} ** Katkestatud **: need lisandmoodulid ei saa enam värskendusi.",
"title": "Lisandmooduli järk"
}
},
"changelog": "Muudatste nimekiri",
"cpu_usage": "Lisandmooduli protsessori kasutus",
"hostname": "Hostinimi",
"install": "paigalda",
"new_update_available": "{name} {version} on saadaval",
"not_available_arch": "See lisandmoodul ei ühildu seadme protsessoriga ega seadmesse installitud operatsioonisüsteemiga.",
"not_available_version": "Kasutad Home Assistant {core_version_installed} Selle lisandmooduli versiooni värskendamiseks vajad vähemalt Home Assistant {core_version_needed}",
"open_web_ui": "Ava veebiliides",
"option": {
"auto_update": {
"description": "Lisandmooduli automaatne uuendamine kui uus versioon on saadaval",
"title": "Automaatne värskendamine"
},
"boot": {
"description": "Lisandmooduli käivitamine süsteemi käivitamise ajal",
"title": "Käivita alglaadimisel"
},
"ingress_panel": {
"description": "Lisa see lisandmoodul külgribale",
"title": "Kuva külgribal"
},
"protected": {
"description": "Blokeerib laiendatud süsteemijuurdepääsu lisandmoodulist",
"title": "Kaitserežiim"
},
"watchdog": {
"description": "See käivitab lisandmooduli kokkujooksmisel",
"title": "Valvetaimer"
}
},
"protection_mode": {
"content": "Selle lisandmooduli kaitserežiim on keelatud! See annab lisandmoodulile täieliku juurdepääsu kogu süsteemile, mis lisab turvariske ja võib valesti kasutamisel süsteemi kahjustada. Keela kaitserežiim ainult siis, kui tead, vajad ja usaldad selle lisandmooduli allikat.",
"enable": "Luba kaitserežiim",
"title": "Hoiatus: kaitserežiim on keelatud!"
},
"ram_usage": "Lisandmooduli RAM-i kasutus",
"rebuild": "taasloo",
"restart": "taaskäivita",
"start": "käivita",
"stop": "peata",
"uninstall": "eemalda",
"visit_addon_page": "Täiendavate detailide saamiseks külasta lehte {name}"
},
"documentation": {
"get_documentation": "Lisandmooduli dokumentatsiooni hankimine nurjus, {error}"
},
"failed_to_reset": "Lisandmooduli sätete lähtestamine nurjus, {error}",
"failed_to_save": "Lisandmooduli sätete salvestamine nurjus, {error}",
"logs": {
"get_logs": "Lisandmoodulite logide hankimine nurjus, {error}"
},
"panel": {
"configuration": "Seaded",
"documentation": "Dokumentatsioon",
"info": "Info",
"log": "Logikirjed"
},
"state": {
"installed": "Lisandmoodul on paigaldatud",
"not_available": "Lisandmoodul pole antud süsteemile saadaval",
"not_installed": "Lisandmoodulit pole paigaldatud"
}
},
"common": {
"cancel": "Loobu",
"close": "Sulge",
"description": "Kirjeldus",
"error": {
"unknown": "Tundmatu viga",
"update_failed": "Värskendamine nurjus"
},
"failed_to_restart_name": "Üksuse {name} taaskäivitamine nurjus",
"failed_to_update_name": "Üksuse {name} värskendamine nurjus",
"learn_more": "Lisateave",
"new_version_available": "Uus versioon on saadaval",
"newest_version": "Uusim versioon",
"no": "Ei",
"refresh": "värskenda",
"release_notes": "Väljalaske teave",
"reload": "Taaslae",
"reset_defaults": "Lähtesta vaikeväärtustele",
"reset_options": "Lähtesta suvandid",
"restart": "Taaskäivita",
"restart_name": "Taaskäivita {name}",
"running_version": "Kasutad praegu versiooni {version}",
"save": "Salvesta",
"show_more": "Kuva selle kohta rohkem teavet",
"update": "Uuenda",
"update_available": "{count, plural,\n one {värskendus}\n other {{count] värskendust}\n} on saadaval",
"version": "Versioon",
"yes": "Jah"
},
"confirm": {
"reset_options": {
"text": "Kas soovid kindlasti kõik oma valikud lähtestada?",
"title": "Lähtesta suvandid"
},
"restart": {
"text": "Kas olete kindel, et soovid rakenduse {name} taaskäivitada?",
"title": "taaskäivita"
},
"update": {
"text": "Kas soovid kindlasti värskendada {name} versioonile {version}?",
"title": "Uuenda {name}"
}
},
"dashboard": {
"addon_new_version": "Uus versioon on saadaval",
"addon_running": "Lisandmoodul töötab",
"addon_stopped": "Lisandmoodul on peatatud",
"addons": "Lisandmoodulid",
"no_addons": "Ühtegi lisandmoodulit pole veel paigaldatud. Alustamiseks mine lisandmoodulite hoidlasse!"
},
"dialog": {
"network": {
"connected_to": "Ühendatud pääsupunktiga {ssid}",
"dhcp": "DHCP",
"disabled": "Keelatud",
"dns_servers": "DNS serverid",
"failed_to_change": "Võrgusätete muutmine nurjus",
"gateway": "Lüüsi aadress",
"ip_netmask": "IP-aadress / võrgumask",
"open": "Avatud",
"scan_ap": "Otsi pääsupunkte",
"static": "Staatiline",
"title": "Võrgu sätted",
"unsaved": "Muudatused on salvestamata. Need lähevad kaotsi kui vahetad vahelehte. Kas soovid jätkata?",
"warning": "Kui muudad WiFi, IP või lüüsi aadressi võib ühendus katkeda!",
"wep": "WEP",
"wpa": "wpa-psk"
},
"registries": {
"add_new_registry": "Lisa uus register",
"add_registry": "Lisa register",
"failed_to_add": "Registri lisamine nurjus",
"failed_to_remove": "Registri eemaldamine nurjus",
"no_registries": "Ühtegi registrit pole seadistatud",
"password": "Salasõna",
"registry": "Register",
"remove": "Eemalda",
"title_add": "Lisa uus konteineri register",
"title_manage": "Konteineri registrite haldamine",
"username": "Kasutajanimi"
},
"repositories": {
"add": "Lisa",
"remove": "Eemalda",
"title": "Halda lisandmoodulite hoidlaid"
},
"restart_addon": {
"confirm_text": "Taaskäivita lisandmoodul",
"text": "Kas soovid lisandmooduli taaskäivitada rakendades muudatused?"
},
"update": {
"create_snapshot": "Enne {name} värskendamist loo hetktõmmis",
"snapshot": "Hetktõmmis",
"snapshotting": "Üksuse {name} hetktõmmise loomine",
"updating": "Üksuse {name} värskendamine versioonile {version}"
}
},
"my": {
"error": "Viga",
"error_addon_not_found": "Lisandmoodulit ei leitud",
"faq_link": "KKK viide",
"not_supported": "pole toetatud"
},
"panel": {
"dashboard": "Kasutajaliidese vaade",
"snapshots": "Hetke varukoopia",
"store": "Lisandmoodulite hoidla",
"system": "Süsteem"
},
"snapshot": {
"addons": "Lisandmoodulid",
"available_snapshots": "Saadaolevad hetktõmmised",
"could_not_create": "Hetktõmmise loomine nurjus",
"create": "Loo",
"create_blocked_not_running": "Hetktõmmise loomine pole praegu võimalik kuna süsteem on olekus {state}.",
"create_snapshot": "Loo hetktõmmis",
"description": "Hetktõmmised võimaldavad hõlpsalt varundada ja taastada kõik Home Assistanti andmed.",
"enter_password": "Sisesta salasõna.",
"folder": {
"addons/local": "Kohalikud lisandmoodulid",
"homeassistant": "Home Assistanti sätted",
"media": "Andmekandja",
"share": "Jaga",
"ssl": "SSL"
},
"folders": "Kaustad",
"full_snapshot": "Täielik hetktõmmis",
"name": "Nimi",
"no_snapshots": "Sul pole veel ühtegi hetktõmmist.",
"partial_snapshot": "Osaline hetktõmmis",
"password": "Salasõna",
"password_protected": "salasõnaha kaitstud",
"password_protection": "Salasõnaga kaitstud",
"security": "Turvalisus",
"type": "Tüüp",
"upload_snapshot": "Hetktõmmise üleslaadimine"
},
"store": {
"missing_addons": "Ei näe lisandmooduleid? Luba täpsem režiim oma kasutajaprofiili lehel",
"no_results_found": "Hoidlast {repository} ei leitud tulemeid.",
"registries": "Registrid",
"repositories": "Hoidlad"
},
"system": {
"core": {
"cpu_usage": "Protsessori hõivatus",
"ram_usage": "Mälu hõivatus"
},
"host": {
"change": "Muuda",
"change_hostname": "Hostinime muutmine",
"confirm_reboot": "Kas soovid kindlasti hosti taaskäivitada?",
"confirm_shutdown": "Kas soovid kindlasti hosti välja lülitada?",
"deployment": "Juurutamine",
"docker_version": "Dockeri versioon",
"emmc_lifetime_used": "eMMC elueast on kasutatud",
"failed_to_get_hardware_list": "Riistvaraloendi toomine nurjus",
"failed_to_import_from_usb": "USB seadmelt importimine nurjus",
"failed_to_reboot": "Hosti taaskäivitamine nurjus",
"failed_to_set_hostname": "Hostinime määramine nurjus",
"failed_to_shutdown": "Hosti sulgemine nurjus",
"hardware": "Riistvara",
"hostname": "Hostinimi",
"import_from_usb": "Lae USB seadmelt",
"ip_address": "IP-aadress",
"new_hostname": "Sisesta uus hostinimi:",
"operating_system": "Operatsioonisüsteem",
"reboot_host": "Taaskäivita host",
"shutdown_host": "Lülita host välja",
"used_space": "Kasutatud maht"
},
"log": {
"get_logs": "{provider} logide toomine nurjus, {tõrge}",
"log_provider": "Logi pakkuja"
},
"supervisor": {
"beta_backup": "Enne selle funktsiooni aktiveerimist veendu, et andmetest oleks varukoopiad.",
"beta_join_confirm": "Kas soovid liituda beetakanaliga?",
"beta_release_items": "See hõlmab beetaversioone:",
"beta_warning": "Beetaversioonid on mõeldud testijatele ja varakult kasutajatele ning need võivad sisaldada ebastabiilseid koodimuudatusi",
"channel": "Kanal",
"cpu_usage": "Supervisori protsessori kasutus",
"failed_to_reload": "Supervisori taaslaadimine nurjus",
"failed_to_set_option": "Supevisori suvandi seadmine nurjus",
"failed_to_update": "Supervisori värskendamine nurjus",
"join_beta_action": "Liitu beetakanaliga",
"join_beta_description": "Hangi beebivärskendusi Home Assistanti (RC), juhendaja ja hosti jaoks",
"leave_beta_action": "Lahku beetakanalist",
"leave_beta_description": "Hangi Home Assistanti, Supervisori ja hosti jaoks stabiilseid uuendusi",
"ram_usage": "Supervisori mälu kasutus",
"reload_supervisor": "Taaslae Supevisor",
"share_diagnostics": "Jaga silumisteavet",
"share_diagnostics_description": "Jaga krahhiaruandeid ja diagnostikateavet.",
"share_diagonstics_description": "Kas soovid automaatselt jagada krahhiaruandeid ja diagnostikateavet kui Supervisoris ilmneb ootamatuid tõrkeid? {line_break} See võimaldab meil probleeme lahendada, teave on kättesaadav ainult Home Assistanti põhimeeskonnale ja seda ei jagata teistega. {line_break} Andmed ei sisalda privaatset/tundlikku teavet ja saad selle sätetes igal ajal keelata.",
"share_diagonstics_title": "Aita Home Assistanti paremaks muuta",
"unhealthy_description": "Vigase paigalduse käivitamine tekitab probleeme. Allpool on paigaldamisel leitud probleemide loend. Klõpsa linkidel, et saada teada, kuidas saad probleeme lahendada.",
"unhealthy_reason": {
"docker": "Dockeri keskkond ei tööta korralikult",
"privileged": "Supervisoril pole piisavalt õigusi",
"setup": "Supervisori seadistamine nurjus",
"supervisor": "Supervisorit ei saanud värskendada"
},
"unhealthy_title": "Paigaldus on vigane",
"unsupported_description": "Allpool on loend paigaldusel leitud probleemidest. Klõpsa linkidel, et saada teada, kuidas saad probleeme lahendada.",
"unsupported_reason": {
"container": "Konteinerid mis teadaolevalt põhjustavad probleeme",
"dbus": "DBUS",
"docker_configuration": "Dockeri sätted",
"docker_version": "Dockeri versioon",
"job_conditions": "Eiratud tingimused",
"lxc": "LXC",
"network_manager": "Võrguhaldur",
"os": "Operatsioonisüsteem",
"privileged": "Supervisoril pole piisavalt õigusi",
"systemd": "Systemd"
},
"unsupported_title": "Kasutad toetamata paigaldusmeetodit",
"update_supervisor": "Uuenda Supervisorit",
"warning": "HOIATUS"
}
}
},
"ui": {
"auth_store": {
"ask": "Kas Te soovite jääda sisselogituks selles seadmes?",
@@ -764,8 +377,6 @@
"changed_to_state": "muutus olekusse {state}",
"cleared_device_class": "lõpetatud ( {device_class} ei leitud)",
"detected_device_class": "tuvastati {device_class}",
"is_closing": "sulgub",
"is_opening": "avaneb",
"rose": "tõusis",
"set": "määratud",
"turned_off": "lülitus välja",
@@ -1013,9 +624,6 @@
"person": {
"create_zone": "Loo tsoon praegusest asukohast"
},
"remote": {
"activity": "Praegune tegevus"
},
"restored": {
"confirm_remove_text": "Oled kindel, et soovid selle olemi eemaldada?",
"confirm_remove_title": "Kas eemaldan olemi?",
@@ -1024,8 +632,8 @@
"remove_intro": "Kui olemit enam ei kasutata, võid selle eemaldada."
},
"script": {
"last_action": "Viimatine tegevus",
"last_triggered": "Viimati käivitatud"
"last_action": "Viimane tegevus",
"last_triggered": "Viimati vallandunud"
},
"settings": "Olemi seaded",
"sun": {
@@ -1089,6 +697,7 @@
"script": "Scriptid",
"server_control": "Serveri juhtimine",
"tag": "Märgised",
"tags": "Märgised",
"users": "Kasutajad",
"zone": "Tsoonid"
},
@@ -1147,7 +756,6 @@
"clusters": "Halda seadmekobaraid",
"reconfigure": "Muuda seadme sätteid",
"remove": "Eemalda seade",
"view_in_visualization": "Visualiseeri",
"zigbee_information": "Zigbee seadme tunnus"
},
"confirmations": {
@@ -1296,7 +904,7 @@
"extra_fields": {
"code": "Kood",
"message": "Sõnum",
"position": "Asend",
"position": "Asukoht",
"title": "Nimetus"
},
"label": "Seade"
@@ -2725,7 +2333,6 @@
"caption": "Visualiseerimine",
"header": "Võrgu visualiseerimine",
"highlight_label": "Tõsta seadmed esile",
"refresh_topology": "Värskenda seadmete kaarti",
"zoom_label": "Näita seadet"
}
},
@@ -3403,8 +3010,6 @@
"error_remove": "Konfiguratsiooni ei saa eemaldada: {error}",
"error_save_yaml": "YAML-i ei saa salvestada: {error}",
"header": "Muuda seadeid",
"lovelace_changed": "Lovelace'i konfiguratsiooni värskendati, kas soovid uuendatud konfiguratsiooni redaktorisse laadida ja oma praegused muudatused kaotada?",
"reload": "Taaslae",
"resources_moved": "Ressursse ei tohiks enam lisada Lovelace konfiguratsiooni kuid saab lisada Lovelace config paneeli.",
"save": "Salvesta",
"saved": "Salvestatud",

View File

@@ -658,6 +658,7 @@
"person": "Henkilöt",
"script": "Skriptit",
"server_control": "Palvelimen hallinta",
"tags": "Tägit",
"users": "Käyttäjät",
"zone": "Alueet"
},

View File

@@ -102,115 +102,6 @@
"unknown": "Inconnu"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"header": "Audio"
},
"options": {
"header": "Options"
}
},
"panel": {
"configuration": "Configuration",
"documentation": "Documentation",
"info": "Info"
}
},
"common": {
"cancel": "Annuler",
"close": "Fermer",
"no": "Non",
"reload": "Recharger",
"save": "Sauver",
"update": "Mise à jour",
"version": "Version",
"yes": "Oui"
},
"confirm": {
"update": {
"title": "Mettre à jour {name}"
}
},
"dialog": {
"network": {
"dhcp": "DHCP",
"disabled": "Désactivé",
"dns_servers": "Serveurs DNS",
"gateway": "Adresse de la passerelle",
"ip_netmask": "Adresse IP / masque réseau",
"open": "Ouvrir",
"scan_ap": "Rechercher les points d'accès",
"static": "Statique",
"title": "Paramètres réseaux",
"wep": "WEP",
"wpa": "wpa-psk"
},
"registries": {
"add_new_registry": "Ajouter un nouveau registre",
"add_registry": "Ajouter un registre",
"failed_to_add": "Échec de l'ajout du registre",
"no_registries": "Aucun registre configuré",
"password": "Mot de passe",
"registry": "Registre",
"remove": "Supprimer",
"username": "Nom d'utilisateur"
},
"repositories": {
"add": "Ajouter",
"remove": "Supprimer",
"title": "Gérer les référentiels d'add-ons"
},
"restart_addon": {
"confirm_text": "Redémarrer add-on"
},
"update": {
"snapshot": "Instantané"
}
},
"my": {
"error_addon_not_found": "Add-on non trouvé"
},
"snapshot": {
"available_snapshots": "Instantanés disponibles",
"create": "Créer",
"create_snapshot": "Créer un instantané",
"folder": {
"media": "Médias",
"share": "Partager",
"ssl": "SSL"
},
"folders": "Dossiers",
"name": "Nom",
"password": "Mot de passe",
"security": "Sécurité",
"type": "Type",
"upload_snapshot": "Téléverser un instantané"
},
"store": {
"registries": "Registres",
"repositories": "Dépôts"
},
"system": {
"host": {
"hardware": "Matériel",
"reboot_host": "Redémarrer l'hôte",
"shutdown_host": "Arrêter l'hôte"
},
"supervisor": {
"channel": "Canal",
"reload_supervisor": "Recharger le superviseur",
"share_diagonstics_title": "Aider à améliorer Home Assistant",
"unsupported_reason": {
"dbus": "DBUS",
"lxc": "LXC",
"systemd": "Systemd"
},
"warning": "AVERTISSEMENT"
}
}
},
"ui": {
"auth_store": {
"ask": "Voulez-vous enregistrer cette connexion?",
@@ -486,8 +377,6 @@
"changed_to_state": "changé en {state}.",
"cleared_device_class": "effacé (no {device_class} detected)",
"detected_device_class": "détecté {device_class}",
"is_closing": "se ferme",
"is_opening": "s'ouvre",
"rose": "s'est levé",
"set": "s'est couché",
"turned_off": "éteint",
@@ -735,9 +624,6 @@
"person": {
"create_zone": "Créer une zone à partir de l'emplacement actuel"
},
"remote": {
"activity": "Activité en cours"
},
"restored": {
"confirm_remove_text": "Voulez-vous vraiment supprimer cette entité ?",
"confirm_remove_title": "Supprimer l'entité ?",
@@ -811,6 +697,7 @@
"script": "Scripts",
"server_control": "Contrôle du serveur",
"tag": "Balises",
"tags": "Balises",
"users": "Utilisateurs",
"zone": "Zones"
},
@@ -3123,7 +3010,6 @@
"error_remove": "Impossible de supprimer la configuration: {error}",
"error_save_yaml": "Impossible de sauvegarder le YAML : {error}",
"header": "Modifier la configuration",
"reload": "Recharger",
"resources_moved": "Les ressources ne doivent plus être ajoutées à la configuration Lovelace mais peuvent être ajoutées dans le panneau de configuration Lovelace.",
"save": "Enregistrer",
"saved": "Enregistré",

View File

@@ -102,268 +102,6 @@
"unknown": "Ismeretlen"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"default": "Alapértelmezett",
"header": "Hang",
"input": "Bemenet",
"output": "Kimenet"
},
"network": {
"container": "Konténer",
"disabled": "Letiltva",
"header": "Hálózat",
"host": "Gazdagép"
},
"options": {
"edit_in_ui": "Szerkesztés a felhasználói felületen",
"edit_in_yaml": "Szerkesztés YAML-ben",
"header": "Lehetőségek",
"invalid_yaml": "Érvénytelen YAML"
}
},
"dashboard": {
"action_error": {
"install": "A bővítmény telepítése sikertelen",
"restart": "A bővítmény újraindítása sikertelen",
"start": "A bővítmény indítása sikertelen",
"start_invalid_config": "Ugrás a konfigurációra",
"stop": "A bővítmény leállítása sikertelen",
"uninstall": "A bővítmény törlése sikertelen"
},
"capability": {
"label": {
"apparmor": "apparmor",
"auth": "auth",
"docker": "docker",
"hardware": "hardver",
"hassio": "hassio",
"host": "gazdagép",
"rating": "értékelés"
},
"role": {
"admin": "admin",
"homeassistant": "homeassistant"
}
},
"changelog": "Változási napló",
"install": "telepítés",
"open_web_ui": "Webes felhasználói felület megnyitása",
"option": {
"auto_update": {
"description": "A bővítmény automatikus frissítése ha új verzió érhető el",
"title": "Automatikus frissítés"
},
"boot": {
"title": "Indítás a rendszerindításkor"
},
"ingress_panel": {
"title": "Megjelenítés az oldalsávon"
},
"watchdog": {
"description": "Ez elindítja az add-ont, ha összeomlik",
"title": "Watchdog"
}
},
"restart": "újraindítás",
"start": "indítás",
"stop": "leállítás",
"uninstall": "eltávolítás"
},
"panel": {
"configuration": "Konfiguráció",
"documentation": "Dokumentáció",
"info": "Infó",
"log": "Napló"
}
},
"common": {
"cancel": "Mégsem",
"close": "Bezárás",
"description": "Leírás",
"error": {
"unknown": "Ismeretlen hiba",
"update_failed": "Sikertelen frissítés"
},
"failed_to_restart_name": "Nem sikerült újraindítani a következőt: {name}",
"failed_to_update_name": "Nem sikerült frissíteni a következőt: {name}",
"learn_more": "Tudj meg többet",
"new_version_available": "Új verzió érhető el",
"newest_version": "Legújabb verzió",
"no": "Nem",
"refresh": "Frissítés",
"reload": "Újratöltés",
"reset_defaults": "Visszaállítás az alapértelmezett értékekre",
"reset_options": "Visszaállítási lehetõségek",
"restart": "Újraindítás",
"restart_name": "{name} újraindítása",
"running_version": "Jelenleg a {version} verzió fut",
"save": "Mentés",
"show_more": "További információk megjelenítése",
"update": "Frissítés",
"update_available": "{count, plural,\n one {Frissítés}\n other {{count} Frissítés}\n} függőben",
"version": "Verzió",
"yes": "Igen"
},
"confirm": {
"reset_options": {
"text": "Biztosan visszaállítod az összes beállítást?",
"title": "Visszaállítási lehetõségek"
},
"restart": {
"text": "Biztosan újra akarod indítani a(z) {name}-t?",
"title": "{name} újraindítása"
},
"update": {
"text": "Biztosan frissíteni szeretnéd a(z) {name} verziót a(z) {version} verzióra?",
"title": "{name} frissítése"
}
},
"dashboard": {
"addon_new_version": "Új verzió érhető el",
"addons": "Bővítmények"
},
"dialog": {
"network": {
"connected_to": "Csatlakozva a következőhöz: {ssid}",
"dhcp": "DHCP",
"disabled": "Letiltva",
"dns_servers": "DNS Szerverek",
"failed_to_change": "Nem sikerült megváltoztatni a hálózati beállításokat",
"gateway": "Átjáró címe",
"ip_netmask": "IP-cím/Netmaszk",
"open": "Nyitva",
"static": "Statikus",
"title": "Hálózati beállítások",
"unsaved": "Vannak nem mentett módosítások, amik elvesznek ha másik fülre váltasz, biztosan ki akarsz lépni?",
"wep": "WEP",
"wpa": "wpa-psk"
},
"registries": {
"password": "Jelszó",
"remove": "Eltávolítás",
"username": "Felhasználónév"
},
"repositories": {
"add": "Hozzáadás",
"remove": "Eltávolítás",
"title": "Bővítmény-tárolók kezelése"
},
"restart_addon": {
"confirm_text": "Add-on újraindítása"
},
"update": {
"create_snapshot": "Frissítés előtt pillanatkép készítése erről: {name}",
"snapshot": "Pillanatkép",
"snapshotting": "Pillanatkép készítése erről: {name}",
"updating": "{name} frissítése {version} verzióra"
}
},
"my": {
"error": "Ismeretlen hiba történt",
"error_addon_not_found": "A bővítmény nem található",
"faq_link": "My Home Assistant GYIK"
},
"panel": {
"dashboard": "Irányítópult",
"snapshots": "Pillanatképek",
"system": "Rendszer"
},
"snapshot": {
"addons": "Bővítmények",
"available_snapshots": "Rendelkezésreálló pillanatképek",
"could_not_create": "Nem lehet pillanatképet létrehozni",
"create": "Létrehozás",
"create_blocked_not_running": "Jelenleg nem lehet pillanatképet létrehozni, mivel a rendszer {state} állapotban van.",
"create_snapshot": "Pillanatkép létrehozása",
"description": "A pillanatképekkel könnyen hozhatsz létre vagy tölthetsz vissza mentést a teljes Home Assistant példányodról.",
"enter_password": "Add meg a jelszót",
"folder": {
"addons/local": "Helyi bővítmények",
"homeassistant": "Home Assistant konfiguráció",
"media": "Média",
"ssl": "SSL"
},
"folders": "Mappák",
"full_snapshot": "Teljes pillanatkép",
"name": "Név",
"no_snapshots": "Nincs még egyetlen pillanatképed sem létrehozva.",
"partial_snapshot": "Részleges pillanatkép",
"password": "Jelszó",
"password_protected": "jelszóval védett",
"password_protection": "Jelszóvédelem",
"security": "Biztonság",
"type": "Típus",
"upload_snapshot": "Pillanatkép feltöltése"
},
"store": {
"missing_addons": "Hiányzó add-onok? Kapcsold be a haladó üzemmódot a felhasználói profil oldalon",
"repositories": "Tárolók"
},
"system": {
"core": {
"cpu_usage": "Core CPU használat"
},
"host": {
"change": "Módosítás",
"change_hostname": "Gazdagép nevének megváltoztatása",
"confirm_reboot": "Valóba újra szeretnéd indítani a gazdagépet?",
"confirm_shutdown": "Valóban le szeretnéd állítani a gazdagépet?",
"deployment": "Telepítés",
"docker_version": "Docker verzió",
"failed_to_import_from_usb": "Nem sikerült importálni az USB-ről",
"failed_to_reboot": "A gazdagép újraindítása sikertelen",
"failed_to_shutdown": "A gazdagép leállítása sikertelen",
"hardware": "Hardver",
"hostname": "Gazdagép neve",
"import_from_usb": "Importálás USB-ről",
"ip_address": "IP-cím",
"operating_system": "Operációs rendszer",
"reboot_host": "Gazdagép újraindítása",
"shutdown_host": "Gazdagép leállítása",
"used_space": "Felhasznált terület"
},
"log": {
"get_logs": "Nem sikerült lekérni a(z) {provider} naplókat, {error}"
},
"supervisor": {
"beta_join_confirm": "Szeretnél csatlakozni a béta csatornához?",
"channel": "Csatorna",
"cpu_usage": "Supervisor CPU használat",
"failed_to_reload": "Nem sikerült újratölteni a Supervisort",
"failed_to_set_option": "Nem sikerült beállítani a Supervisor opciót",
"failed_to_update": "Nem sikerült frissíteni a Supervisort",
"join_beta_action": "Csatlakozás a béta csatornához",
"leave_beta_action": "Kilépés a béta csatornából",
"leave_beta_description": "Stabil frissítések a Home Assistanthoz, a Supervisorhoz és a gazdagéphez",
"ram_usage": "Supervisor RAM használat",
"reload_supervisor": "Supervisor újratöltése",
"share_diagnostics": "Diagnosztika megosztása",
"share_diagnostics_description": "Összeomlási jelentések és diagnosztikai információk megosztása.",
"share_diagonstics_title": "Segíts a Home Assistant fejlesztésében",
"unhealthy_reason": {
"docker": "A Docker futtatókörnyezet nem működik megfelelően",
"setup": "A Supervisor beállítása sikertelen volt",
"supervisor": "A Supervisor nem tudott frissíteni"
},
"unhealthy_title": "A telepítés nem megfelelő",
"unsupported_reason": {
"container": "Konténerek, amelyekről ismert, hogy problémákat okoznak",
"dbus": "DBUS",
"docker_configuration": "Docker konfiguráció",
"docker_version": "Docker verzió",
"lxc": "LCX",
"network_manager": "Network Manager",
"os": "Operációs rendszer",
"systemd": "Systemd"
},
"update_supervisor": "A Supervisor frissítése",
"warning": "FIGYELMEZTETÉS"
}
}
},
"ui": {
"auth_store": {
"ask": "Bejelentkezve szeretnél maradni?",
@@ -462,8 +200,7 @@
},
"script": {
"cancel": "Mégse",
"cancel_multiple": "Mégse {number}",
"run": "Futtatás"
"cancel_multiple": "Mégse {number}"
},
"service": {
"run": "Futtatás"
@@ -558,13 +295,6 @@
"yes": "Igen"
},
"components": {
"addon-picker": {
"error": {
"no_supervisor": {
"title": "Nincs Supervisor"
}
}
},
"area-picker": {
"add_dialog": {
"add": "Hozzáadás",
@@ -585,10 +315,6 @@
"remove_user": "Felhasználó eltávolítása",
"select_blueprint": "Tervrajz kiválasztása"
},
"calendar": {
"my_calendars": "Saját naptáraim",
"today": "Ma"
},
"data-table": {
"no-data": "Nincs adat",
"search": "Keresés"
@@ -736,10 +462,6 @@
"week": "{count} {count, plural,\n one {héttel}\n other {héttel}\n} ezelőtt"
}
},
"service-control": {
"required": "Ez a mező kötelező",
"service_data": "Szolgáltatás adatai"
},
"service-picker": {
"service": "Szolgáltatás"
},
@@ -774,8 +496,6 @@
"control": "Ellenőrzés",
"dismiss": "Elvetés",
"editor": {
"advanced": "Haladó beállítások",
"change_device_area": "Az eszköz területének módosítása",
"confirm_delete": "Biztosan törölni szeretnéd ezt a bejegyzést?",
"delete": "Törlés",
"device_disabled": "Ennek az entitásnak az eszköze le van tiltva.",
@@ -872,9 +592,6 @@
"person": {
"create_zone": "Zóna létrehozása az aktuális helyről"
},
"remote": {
"activity": "Jelenlegi tevékenység"
},
"restored": {
"confirm_remove_text": "Biztosan el szeretnéd távolítani ezt az entitást?",
"confirm_remove_title": "Eltávolítod az entitást?",
@@ -947,7 +664,7 @@
"scene": "Jelenetek",
"script": "Szkriptek",
"server_control": "Szerver vezérlés",
"tag": "Címkék",
"tags": "Címkék",
"users": "Felhasználók",
"zone": "Zónák"
},
@@ -1038,13 +755,8 @@
},
"errors": {
"config": {
"edit_in_yaml_supported": "YAML-ben továbbra is szerkesztheted a konfigurációt.",
"editor_not_available": "Nincs elérhető vizuális szerkesztő a(z) \"{type}\" típushoz.",
"editor_not_supported": "A vizuális szerkesztő nem támogatott ebben a konfigurációban",
"error_detected": "Konfigurációs hibákat észleltünk",
"key_missing": "A (z) \" {key}\" szükséges kulcs hiányzik.",
"key_not_expected": "A(z) \"{key}\" kulcs nem várt, vagy a vizuális szerkesztő nem támogatja.",
"no_type_provided": "Nincs megadva típus."
"key_missing": "A (z) \" {key} \" szükséges kulcs hiányzik.",
"key_not_expected": "A(z) \"{key}\" kulcs nem várható, vagy a vizuális szerkesztő nem támogatja."
}
},
"login-form": {
@@ -1151,17 +863,13 @@
"device_id": {
"action": "Művelet",
"extra_fields": {
"code": "Kód",
"message": "Üzenet",
"position": "Pozíció",
"title": "Cím"
"code": "Kód"
},
"label": "Eszköz"
},
"event": {
"event": "Esemény:",
"label": "Esemény meghívása",
"service_data": "Szolgáltatás adatai"
"label": "Esemény meghívása"
},
"repeat": {
"label": "Ismétlés",
@@ -1293,7 +1001,7 @@
"edit_ui": "Szerkesztés a felhasználói felületen",
"edit_yaml": "Szerkesztés YAML-ként",
"enable_disable": "Automatizálás engedélyezése/letiltása",
"introduction": "Használj automatizálásokat otthonod életre keltéséhez.",
"introduction": "Használj automatizálásokat otthonod életre keltéséhez",
"load_error_not_editable": "Csak az automations.yaml fájlban megadott automatizálások szerkeszthetők.",
"load_error_unknown": "Hiba az automatizálás betöltésekor ({err_no}).",
"max": {
@@ -1327,8 +1035,7 @@
"extra_fields": {
"above": "Felett",
"below": "Alatt",
"for": "Időtartam",
"zone": "Zóna"
"for": "Időtartam"
},
"label": "Eszköz",
"trigger": "Eseményindító"
@@ -1540,11 +1247,10 @@
"sign_out": "Kijelentkezés",
"thank_you_note": "Köszönjük, hogy a Home Assistant Felhő részese vagy. Az olyan emberek miatt, mint te, vagyunk képesek mindenki számára nagyszerű otthoni automatizálási élményt nyújtani. Köszönjük!",
"tts": {
"default_language": "Alapértelmezett nyelv",
"dialog": {
"example_message": "Hello {name}, bármilyen szöveget lejátszhat bármely támogatott médialejátszón!",
"header": "Próbálja ki a szövegfelolvasást",
"play": "Lejátszás",
"play": "Lejátszása",
"target": "Cél",
"target_browser": "Böngésző"
},
@@ -1627,7 +1333,7 @@
"dismiss": "Elvetés",
"email": "Email",
"email_error_msg": "Érvénytelen email",
"forgot_password": "Elfelejtett jelszó?",
"forgot_password": "elfelejtett jelszó?",
"introduction": "A Home Assistant Felhő biztonságos távoli kapcsolatot nyújt a példányodhoz, miközben távol vagy. Azt is lehetővé teszi, hogy csak felhőn alapuló szolgáltatásokhoz csatlakozz: Amazon Alexa, Google Asszisztens.",
"introduction2": "Ezt a szolgáltatást partnerünk üzemelteti, a ",
"introduction2a": ", amelyet a Home Assistant és a Hass.io alapítói hoztak létre.",
@@ -1928,15 +1634,6 @@
"delete_confirm": "Biztosan törölni szeretnéd ezt az integrációt?",
"device_unavailable": "Eszköz nem érhető el",
"devices": "{count} {count, plural,\n one {eszköz}\n other {eszköz}\n}",
"disable": {
"disabled": "Letiltva",
"disabled_by": {
"device": "eszköz",
"integration": "integráció",
"user": "felhasználó"
},
"disabled_cause": "Letiltva ez által: {cause}"
},
"documentation": "Dokumentáció",
"entities": "{count} {count, plural,\n one {entitás}\n other {entitás}\n}",
"entity_unavailable": "Entitás nem érhető el",
@@ -1957,10 +1654,8 @@
"config_flow": {
"aborted": "Megszakítva",
"close": "Bezárás",
"could_not_load": "A konfigurációs folyamat nem tölthető be",
"created_config": "Konfiguráció létrehozva a következőhöz: {name}.",
"dismiss": "Párbeszédpanel elvetése",
"error": "Hiba",
"error_saving_area": "Hiba a terület mentésekor: {error}",
"external_step": {
"description": "Ehhez a lépéshez egy külső weboldal meglátogatása szükséges.",
@@ -1969,20 +1664,12 @@
"finish": "Befejezés",
"loading_first_time": "Kérlek várj, amíg az integráció telepítésre kerül",
"not_all_required_fields": "Nincs kitöltve minden szükséges mező.",
"pick_flow_step": {
"title": "Felfedeztük ezeket, be akarod állítani őket?"
},
"submit": "Küldés"
},
"configure": "Beállítás",
"configured": "Konfigurálva",
"description": "Integrációk kezelése (szolgáltatások, eszközök...)",
"details": "Integráció részletei",
"disable": {
"disabled_integrations": "{number} letiltva",
"hide_disabled": "A letiltott integrációk elrejtése",
"show_disabled": "A letiltott integrációk megjelenítése"
},
"discovered": "Felfedezett",
"home_assistant_website": "Home Assistant weboldal",
"ignore": {
@@ -2603,23 +2290,6 @@
"introduction": "A zónák lehetővé teszik a Föld bizonyos területeinek megadását. Ha egy személy egy zónán belül van, az állapota felveszi a zóna nevét. A zónák eseményindítóként vagy feltételként is használhatók az automatizálási beállításokon belül.",
"no_zones_created_yet": "Úgy tűnik, még nem hoztál létre zónákat."
},
"zwave_js": {
"common": {
"close": "Bezárás"
},
"dashboard": {
"dump_not_ready_confirm": "Letöltés",
"server_version": "Szerver verzió"
},
"network_status": {
"connected": "Csatlakoztatva",
"connecting": "Csatlakozás",
"unknown": "Ismeretlen"
},
"node_status": {
"unknown": "Ismeretlen"
}
},
"zwave": {
"button": "Beállítás",
"common": {
@@ -2633,8 +2303,7 @@
"learn_more": "Tudj meg többet a Z-Wave-ről",
"migration": {
"ozw": {
"header": "Áthelyezés az OpenZWave-re",
"introduction": "Ez a varázsló segít áttérni a régi Z-Wave integrációról az OpenZWave integrációra, amely jelenleg béta állapotban van."
"header": "Áthelyezés az OpenZWave-re"
}
},
"network_management": {
@@ -2740,22 +2409,17 @@
"type": "Esemény típusa"
},
"services": {
"all_parameters": "Minden rendelkezésre álló paraméter",
"call_service": "Szolgáltatás meghívása",
"column_description": "Leírás",
"column_example": "Példa",
"column_parameter": "Paraméter",
"description": "A 'service dev' eszköz lehetővé teszi bármely Home Assistant-ban rendelkezésre álló szolgáltatás meghívását.",
"fill_example_data": "Kitöltés példaadatokkal",
"title": "Szolgáltatások",
"ui_mode": "Ugrás a felhasználói felület módra",
"yaml_mode": "Ugrás a YAML módra",
"yaml_parameters": "A paraméterek csak YAML módban érhetők el"
"title": "Szolgáltatások"
},
"states": {
"alert_entity_field": "Az entitás kötelező mező",
"attributes": "Attribútumok",
"copy_id": "Azonosító másolása a vágólapra",
"current_entities": "Jelenlegi entitások",
"description1": "Egy eszköz állapotának beállítása a Home Assistant-ban.",
"description2": "Ez nem fog kommunikálni az aktuális eszközzel.",
@@ -2813,10 +2477,6 @@
"yaml_unsupported": "Ez a funkció nem elérhető, ha a Lovelace felhasználói felületet YAML módban használod."
},
"cards": {
"actions": {
"action_confirmation": "Biztosan futtatod a(z) \"{action}\" műveletet?",
"no_service": "Nincs megadva futtatandó szolgáltatás"
},
"confirm_delete": "Biztosan törölni szeretnéd ezt a kártyát?",
"empty_state": {
"go_to_integrations_page": "Ugrás az 'integrációk' oldalra.",
@@ -2997,10 +2657,8 @@
"name": "Pillantás"
},
"grid": {
"columns": "Oszlopok",
"description": "A Rács kártya lehetővé teszi több kártya megjelenítését egy rácsban.",
"name": "Rács",
"square": "Kártyák megjelenítése négyzetként"
"name": "Rács"
},
"history-graph": {
"description": "Az Előzmény grafikon kártya lehetővé teszi az entitások múltbeli értékeinek grafikus megjelenítését.",
@@ -3185,14 +2843,12 @@
"confirm_remove_config_text": "Automatikusan létrehozzuk a Lovelace felhasználói felületed nézeteit a területeiddel és eszközeiddel, ha eltávolítod a Lovelace konfigurációját.",
"confirm_remove_config_title": "Biztosan el szeretnéd távolítani a Lovelace felhasználói felület konfigurációját?",
"confirm_unsaved_changes": "Vannak nem mentett módosítások, biztosan ki akarsz lépni?",
"confirm_unsaved_comments": "A konfiguráció megjegyzéseket tartalmazhat, amik nem kerülnek elmentésre. Biztosan folytatod?",
"confirm_unsaved_comments": "A konfiguráció megjegyzéseket tartalmaz, amik nem kerülnek elmentésre. Biztosan folytatod?",
"error_invalid_config": "A konfiguráció érvénytelen: {error}",
"error_parse_yaml": "Nem sikerült elemezni a YAML-t: {error}",
"error_remove": "Nem lehet eltávolítani a konfigurációt: {error}",
"error_save_yaml": "Nem sikerült menteni a YAML-t: {error}",
"header": "Konfiguráció szerkesztése",
"lovelace_changed": "A Lovelace konfigurációja frissült, be akarod tölteni a frissített konfigurációt a szerkesztőbe és elveszíteni az aktuális módosításokat?",
"reload": "Újratöltés",
"resources_moved": "Az erőforrásokat ezentúl nem a Lovelace konfigurációban kell megadni, hanem a Lovelace konfigurációs panelben.",
"save": "Mentés",
"saved": "Mentett",
@@ -3278,11 +2934,6 @@
"empty": "Nincsenek üzeneteid",
"playback_title": "Üzenet lejátszása"
},
"my": {
"documentation": "dokumentáció",
"error": "Ismeretlen hiba történt",
"faq_link": "My Home Assistant GYIK"
},
"page-authorize": {
"abort_intro": "Bejelentkezés megszakítva",
"authorizing_client": "Éppen a {clientId} számára készülsz hozzáférést biztosítani a Home Assistant példányodhoz.",

View File

@@ -100,391 +100,6 @@
"unknown": "Tidak diketahui"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"default": "Bawaan",
"header": "Audio",
"input": "Input",
"output": "Output"
},
"network": {
"container": "Kontainer",
"disabled": "Dinonaktifkan",
"header": "Jaringan",
"host": "Host"
},
"no_configuration": "Add-on ini tidak memaparkan konfigurasi untuk Anda utak-atik…",
"options": {
"edit_in_ui": "Edit lewat Antarmuka",
"edit_in_yaml": "Edit sebagai YAML",
"header": "Opsi",
"invalid_yaml": "YAML tidak valid",
"show_unused_optional": "Tampilkan opsi konfigurasi opsional yang tidak digunakan"
}
},
"dashboard": {
"action_error": {
"get_changelog": "Gagal mendapatkan log perubahan add-on",
"go_to_config": "Gagal memulai add-on - validasi konfigurasi gagal!",
"install": "Gagal menginstal add-on",
"restart": "Gagal memulai ulang add-on",
"start": "Gagal memulai add-on",
"start_invalid_config": "Buka konfigurasi",
"stop": "Gagal menghentikan add-on",
"uninstall": "Gagal mencopot add-on",
"validate_config": "Gagal memvalidasi konfigurasi add-on"
},
"capability": {
"apparmor": {
"description": "AppArmor ('Application Armor') merupakan modul keamanan kernel Linux yang membatasi kemampuan add-on seperti akses jaringan, akses soket mentah, dan izin untuk membaca, menulis, atau mengeksekusi file tertentu. \n\nPenulis add-on dapat menyediakan profil keamanan mereka, yang dioptimalkan untuk add-on, atau memintanya untuk dinonaktifkan. Jika AppArmor dinonaktifkan, hal ini akan meningkatkan risiko keamanan sehingga berdampak negatif pada skor keamanan add-on.",
"title": "AppArmor"
},
"auth_api": {
"description": "Add-on dapat mengautentikasi pengguna lewat Home Assistant, sehingga pengguna dapat masuk ke aplikasi mereka yang berjalan di dalam add-on dengan menggunakan nama pengguna/kata sandi Home Assistant mereka. Lencana ini menunjukkan bahwa pembuat add-on meminta kemampuan ini.",
"title": "Autentikasi Home Assistant"
},
"docker_api": {
"description": "Penulis add-on telah meminta add-on untuk memiliki akses manajemen ke instans Docker yang berjalan di sistem Anda. Mode ini memberi add-on akses dan kontrol penuh ke seluruh sistem Home Assistant Anda, yang meningkatkan risiko keamanan dan dapat merusak sistem Anda jika disalahgunakan. Oleh karena itu, fitur ini berdampak negatif pada skor keamanan add-on. \n\nTingkat akses ini tidak diberikan secara otomatis dan harus Anda konfirmasikan terlebih dulu. Untuk melakukannya, Anda perlu menonaktifkan mode perlindungan pada add-on secara manual. Nonaktifkan mode perlindungan hanya jika Anda benar-benar berpengalaman, membutuhkan, DAN mempercayai sumber add-on ini.",
"title": "Akses Docker Penuh"
},
"full_access": {
"description": "Add-on ini telah diberikan akses penuh ke perangkat keras sistem Anda atas permintaan penulis add-on. Akses ini sebanding dengan mode istimewa di Docker. Karena hal ini membuka kemungkinan risiko keamanan, fitur ini berdampak negatif pada skor keamanan add-on. \n\nTingkat akses ini tidak diberikan secara otomatis dan harus Anda konfirmasikan terlebih dulu. Untuk melakukannya, Anda perlu menonaktifkan mode perlindungan pada add-on secara manual. Nonaktifkan mode perlindungan hanya jika Anda benar-benar berpengalaman, membutuhkan, DAN mempercayai sumber add-on ini.",
"title": "Akses Perangkat Keras Penuh"
},
"hassio_api": {
"description": "Add-on diberi akses ke API Supervisor, atas permintaan penulis add-on. Secara baku, add-on dapat mengakses informasi versi umum sistem Anda. Saat add-on meminta akses level 'manajer' atau 'admin' ke API, add-on tersebut akan mendapatkan akses untuk mengontrol beberapa bagian sistem Home Assistant Anda. Izin ini ditunjukkan oleh lencana ini dan akan berdampak negatif pada skor keamanan add-on.",
"title": "Akses API Supervisor"
},
"homeassistant_api": {
"description": "Add-on ini diizinkan untuk mengakses instans Home Assistant Anda yang sedang berjalan secara langsung melalui API Home Assistant. Mode ini juga menangani autentikasi untuk add-on, yang memungkinkan add-on berinteraksi dengan Home Assistant tanpa memerlukan token autentikasi tambahan.",
"title": "Akses API Home Assistant"
},
"host_network": {
"description": "Add-on biasanya berjalan di lapisan jaringannya sendiri yang terisolasi, yang mencegahnya mengakses jaringan sistem operasi host. Dalam beberapa kasus, isolasi jaringan ini dapat membatasi add-on dalam menyediakan layanannya dan oleh karena itu, isolasi tersebut dapat dicabut oleh pembuat add-on, sehingga memberikan akses penuh add-on ke kemampuan jaringan mesin host. Ini memberi add-on lebih banyak kemampuan jaringan tetapi menurunkan tingkat keamanan. Oleh karena itu, peringkat keamanan add-on akan diturunkan ketika opsi ini digunakan oleh add-on.",
"title": "Jaringan Host"
},
"host_pid": {
"description": "Pada umumnya, proses add-on yang berjalan diisolasi dari semua proses sistem lainnya. Penulis add-on telah meminta add-on untuk memiliki akses ke proses sistem yang berjalan pada instans sistem host, dan mengizinkan add-on untuk juga menelurkan proses pada sistem host. Mode ini memberi add-on akses dan kontrol penuh ke seluruh sistem Home Assistant Anda, yang meningkatkan risiko keamanan dan dapat merusak sistem Anda jika disalahgunakan. Oleh karena itu, fitur ini berdampak negatif pada skor keamanan add-on. \n\nTingkat akses ini tidak diberikan secara otomatis dan harus Anda konfirmasikan terlebih dulu. Untuk melakukannya, Anda perlu menonaktifkan mode perlindungan pada add-on secara manual. Nonaktifkan mode perlindungan hanya jika Anda benar-benar berpengalaman, membutuhkan, DAN mempercayai sumber add-on ini.",
"title": "Namespace Proses Host"
},
"ingress": {
"description": "Add-on ini menggunakan Ingress untuk menyematkan antarmukanya dengan aman ke Home Assistant.",
"title": "Ingress"
},
"label": {
"apparmor": "apparmor",
"auth": "autentikasi",
"docker": "docker",
"hardware": "perangkat keras",
"hass": "hass",
"hassio": "hassio",
"host": "host",
"host_pid": "pid host",
"ingress": "ingress",
"rating": "peringkat",
"stage": "tahap"
},
"rating": {
"description": "Home Assistant memberikan peringkat keamanan untuk setiap add-on, yang menunjukkan risiko yang terlibat saat menggunakan add-on ini. Semakin banyak akses yang diperlukan add-on pada sistem Anda, semakin rendah skornya, sehingga meningkatkan kemungkinan risiko keamanan. \n\nSkor diberikan dalam skala dari 1 hingga 6. Skor 1 adalah skor terendah (dianggap paling tidak aman dan berisiko tertinggi) dan skor 6 adalah skor tertinggi (dianggap paling aman dan berisiko terendah).",
"title": "Peringkat Keamanan Add-on"
},
"role": {
"admin": "admin",
"backup": "cadangan",
"default": "bawaan",
"homeassistant": "homeassistant",
"manager": "manajer"
},
"stage": {
"description": "Add-on dapat memiliki salah satu dari tiga tahap:\n\n{icon_stable} **Stabil**: Ini adalah add-on yang siap digunakan dalam produksi.\n\n{icon_experimental} **Eksperimental**: Ini mungkin mengandung bug, dan mungkin pengembangannya belum selesai.\n\n{icon_deprecated} **Tidak digunakan lagi**: Add-on ini tidak akan lagi menerima pembaruan apa pun.",
"title": "Tahap Add-On"
}
},
"changelog": "Log Perubahan",
"cpu_usage": "Penggunaan CPU Add-On",
"hostname": "Nama Host",
"install": "instal",
"new_update_available": "{name} {version} tersedia",
"not_available_arch": "Add-on ini tidak kompatibel dengan prosesor perangkat Anda atau sistem operasi yang Anda instal di perangkat.",
"not_available_version": "Anda menjalanan Home Assistant {core_version_installed}, untuk memperbarui ke versi add-on ini, Anda memerlukan Home Assistant setidaknya versi {core_version_needed}",
"open_web_ui": "Buka antarmuka web",
"option": {
"auto_update": {
"description": "Perbarui add-on secara otomatis jika tersedia versi baru",
"title": "Pembaruan otomatis"
},
"boot": {
"description": "Mulai add-on ketika boot sistem",
"title": "Mulai saat boot"
},
"ingress_panel": {
"description": "Tambahkan add-on ini ke bilah samping Anda",
"title": "Tampilkan di bilah samping"
},
"protected": {
"description": "Memblokir akses sistem yang ditingkatkan dari add-on",
"title": "Mode perlindungan"
},
"watchdog": {
"description": "Ini akan memulai add-on jika macet",
"title": "Watchdog"
}
},
"protection_mode": {
"content": "Mode proteksi pada add-on ini telah dinonaktifkan! Ini memberikan akses penuh add-on ke seluruh sistem, yang meningkatkan risiko keamanan dan dapat merusak sistem Anda jika digunakan dengan tidak benar. Hanya nonaktifkan mode perlindungan jika Anda benar-benar berpengalaman, membutuhkan, DAN mempercayai sumber add-on ini.",
"enable": "Aktifkan Mode perlindungan",
"title": "Peringatan: Mode perlindungan dinonaktifkan!"
},
"ram_usage": "Penggunaan RAM Add-on",
"rebuild": "bangun kembali",
"restart": "mulai ulang",
"start": "mulai",
"stop": "hentikan",
"uninstall": "copot instalasi",
"visit_addon_page": "Kunjungi halaman {name} untuk mendapatkan detail lebih lanjut"
},
"documentation": {
"get_documentation": "Gagal mendapatkan dokumentasi add-on, {error}"
},
"failed_to_reset": "Gagal menyetel ulang konfigurasi add-on, {error}",
"failed_to_save": "Gagal menyimpan konfigurasi add-on, {error}",
"logs": {
"get_logs": "Gagal mendapatkan log add-on, {error}"
},
"panel": {
"configuration": "Konfigurasi",
"documentation": "Dokumentasi",
"info": "Info",
"log": "Log"
},
"state": {
"installed": "Add-on diinstal",
"not_available": "Add-on tidak tersedia di sistem Anda",
"not_installed": "Add-on tidak diinstal"
}
},
"common": {
"cancel": "Batalkan",
"description": "Deskripsi",
"error": {
"unknown": "Kesalahan yang tidak diketahui",
"update_failed": "Proses pembaruan gagal"
},
"failed_to_restart_name": "Gagal memulai ulang {name}",
"failed_to_update_name": "Gagal memperbarui {name}",
"learn_more": "Pelajari lebih lanjut",
"new_version_available": "Versi baru tersedia",
"newest_version": "Versi Terbaru",
"no": "Tidak",
"refresh": "Segarkan",
"release_notes": "Catatan rilis",
"reload": "Muat ulang",
"reset_defaults": "Setel ulang ke bawaan",
"reset_options": "Atur ulang opsi",
"restart": "Mulai ulang",
"restart_name": "Mulai ulang {name}",
"running_version": "Anda sedang menjalankan versi {version}",
"save": "Simpan",
"show_more": "Tampilkan info lebih lanjut tentang ini",
"update": "Perbarui",
"update_available": "{count, plural,\n one {Pembaruan}\n other {{count} Pembaruan}\n} tertunda",
"version": "Versi:",
"yes": "Ya"
},
"confirm": {
"reset_options": {
"text": "Yakin ingin mengatur ulang semua opsi Anda?",
"title": "Atur ulang opsi"
},
"restart": {
"text": "Yakin ingin memulai ulang {name}?",
"title": "Mulai ulang {name}"
},
"update": {
"text": "Yakin ingin memperbarui {name} ke versi {version}?",
"title": "Perbarui {name}"
}
},
"dashboard": {
"addon_new_version": "Versi baru tersedia",
"addon_running": "Add-on sedang berjalan",
"addon_stopped": "Add-on dihentikan",
"addons": "Add-on",
"no_addons": "Anda belum memasang add-on apa pun. Kunjungi toko add-on untuk memulai!"
},
"dialog": {
"network": {
"connected_to": "Tersambung ke {ssid}",
"dhcp": "DHCP",
"disabled": "Dinonaktifkan",
"dns_servers": "Server DNS",
"failed_to_change": "Gagal mengubah pengaturan jaringan",
"gateway": "Alamat gateway",
"ip_netmask": "Alamat IP/Netmask",
"open": "Buka",
"scan_ap": "Pindai titik akses",
"static": "Statis",
"title": "Pengaturan jaringan",
"unsaved": "Anda memiliki perubahan yang belum disimpan, ini akan hilang jika Anda berpindah tab, yakin ingin melanjutkan?",
"warning": "Jika Anda mengubah alamat Wi-Fi, IP, atau gateway, Anda mungkin kehilangan koneksi!",
"wep": "WEP",
"wpa": "wpa-psk"
},
"registries": {
"add_new_registry": "Tambahkan registri baru",
"add_registry": "Tambahkan registri",
"failed_to_add": "Gagal menambahkan registri",
"failed_to_remove": "Gagal menghapus registri",
"no_registries": "Tidak ada registri yang dikonfigurasi",
"password": "Kata sandi",
"registry": "Registri",
"remove": "Hapus",
"title_add": "Tambahkan Registri Kontainer Baru",
"title_manage": "Kelola Registri Kontainer",
"username": "Nama pengguna"
},
"repositories": {
"add": "Tambahkan",
"remove": "Hapus",
"title": "Kelola repositori add-on"
},
"restart_addon": {
"confirm_text": "Mulai ulang add-on",
"text": "Ingin memulai ulang add-on disertai perubahan Anda?"
},
"update": {
"create_snapshot": "Buat snapshot dari {name} sebelum memperbarui",
"snapshot": "Snapshot",
"snapshotting": "Membuat snapshot dari {name}",
"updating": "Memperbarui {name} ke versi {version}"
}
},
"my": {
"error": "Terjadi kesalahan yang tidak diketahui",
"faq_link": "FAQ Home Assistant Saya",
"not_supported": "Pengalihan ini tidak didukung oleh instans Home Assistant Anda. Periksa {link} tentang pengalihan yang didukung dan versi mana mulai diperkenalkan."
},
"panel": {
"dashboard": "Dasbor",
"snapshots": "Snapshot",
"store": "Toko Add-on",
"system": "Sistem"
},
"snapshot": {
"addons": "Add-on",
"available_snapshots": "Snapshot yang Tersedia",
"could_not_create": "Tidak dapat membuat snapshot",
"create": "Buat",
"create_blocked_not_running": "Pembuatan snapshot tidak dapat dilakukan saat ini karena sistem dalam keadaan {state} .",
"create_snapshot": "Buat snapshot",
"description": "Snapshot dapat digunakan untuk mempermudah pencadangan dan pemulihan semua data instans Home Assistant Anda.",
"enter_password": "Masukkan kata sandi.",
"folder": {
"addons/local": "Add-on lokal",
"homeassistant": "Konfigurasi Home Assistant",
"media": "Media",
"share": "Bagikan",
"ssl": "SSL"
},
"folders": "Folder",
"full_snapshot": "Snapshot lengkap",
"name": "Nama",
"no_snapshots": "Anda belum memiliki snapshot.",
"partial_snapshot": "Snapshot parsial",
"password": "Kata sandi",
"password_protected": "dilindungi kata sandi",
"password_protection": "Perlindungan kata sandi",
"security": "Keamanan",
"type": "Jenis",
"upload_snapshot": "Unggah snapshot"
},
"store": {
"missing_addons": "Add-on tidak ada? Aktifkan mode tingkat lanjut di halaman profil pengguna Anda",
"no_results_found": "Tidak ada hasil yang ditemukan di {repository}.",
"registries": "Registri",
"repositories": "Repositori"
},
"system": {
"core": {
"cpu_usage": "Penggunaan CPU Core",
"ram_usage": "Penggunaan RAM Core"
},
"host": {
"change": "Ubah",
"change_hostname": "Ubah Nama Host",
"confirm_reboot": "Yakin ingin me-reboot host?",
"confirm_shutdown": "Yakin ingin mematikan host?",
"deployment": "Penyebaran",
"docker_version": "Versi Docker",
"emmc_lifetime_used": "Waktu Hidup eMMC yang Digunakan",
"failed_to_get_hardware_list": "Gagal mendapatkan daftar perangkat keras",
"failed_to_import_from_usb": "Gagal mengimpor dari USB",
"failed_to_reboot": "Gagal me-reboot host",
"failed_to_set_hostname": "Gagal menyetel nama host",
"failed_to_shutdown": "Gagal mematikan host",
"hardware": "Perangkat keras",
"hostname": "Nama host",
"import_from_usb": "Impor dari USB",
"ip_address": "Alamat IP",
"new_hostname": "Masukkan nama host baru:",
"operating_system": "Sistem Operasi",
"reboot_host": "Nyalakan ulang host",
"shutdown_host": "Matikan host",
"used_space": "Ruang yang digunakan"
},
"log": {
"get_logs": "Gagal mendapatkan log {provider}, {error}",
"log_provider": "Penyedia Log"
},
"supervisor": {
"beta_backup": "Pastikan Anda memiliki cadangan data sebelum mengaktifkan fitur ini.",
"beta_join_confirm": "Ingin bergabung dengan kanal beta?",
"beta_release_items": "Ini mencakup rilis beta untuk:",
"beta_warning": "Rilis beta diperuntukkan bagi penguji dan pengadopsi awal dan dapat berisi perubahan kode program yang tidak stabil",
"channel": "Kanal",
"cpu_usage": "Penggunaan CPU Supervisor",
"failed_to_reload": "Gagal memuat ulang Supervisor",
"failed_to_set_option": "Gagal menyetel opsi Supervisor",
"failed_to_update": "Gagal memperbarui Supervisor",
"join_beta_action": "Gabung dengan kanal beta",
"join_beta_description": "Dapatkan pembaruan beta untuk Home Assistant (RC), Supervisor, dan host",
"leave_beta_action": "Tinggalkan kanal beta",
"leave_beta_description": "Dapatkan pembaruan stabil untuk Home Assistant, Supervisor, dan host",
"ram_usage": "Penggunaan RAM Supervisor",
"reload_supervisor": "Muat Ulang Supervisor",
"share_diagnostics": "Bagikan Diagnostik",
"share_diagnostics_description": "Bagikan laporan kerusakan dan informasi diagnostik.",
"share_diagonstics_description": "Apakah Anda ingin membagikan laporan kerusakan dan informasi diagnostik secara otomatis saat Supervisor menemukan kesalahan yang tidak terduga? {line_break} Ini akan memungkinkan kami memperbaiki masalah. Informasinya hanya dapat diakses oleh tim Home Assistant Core dan tidak akan dibagikan dengan orang lain. {line_break} Data tidak menyertakan informasi pribadi/sensitif dan Anda dapat menonaktifkannya di setelan kapan saja.",
"share_diagonstics_title": "Bantu Menyempurnakan Home Assistant",
"unhealthy_description": "Menjalankan penginstalan yang tidak sehat akan menyebabkan masalah. Di bawah ini adalah daftar masalah yang ditemukan pada instalasi Anda, klik pada tautan untuk mempelajari cara menyelesaikan masalah tersebut.",
"unhealthy_reason": {
"docker": "Lingkungan Docker tidak berfungsi dengan benar",
"privileged": "Supervisor tidak memiliki hak istimewa",
"setup": "Penyiapan Supervisor gagal",
"supervisor": "Supervisor tidak dapat memperbarui"
},
"unhealthy_title": "Instalasi Anda tidak sehat",
"unsupported_description": "Di bawah ini adalah daftar masalah yang ditemukan pada instalasi Anda, klik pada tautan untuk mempelajari cara menyelesaikan masalah tersebut.",
"unsupported_reason": {
"container": "Kontainer diketahui menyebabkan masalah",
"dbus": "DBUS",
"docker_configuration": "Konfigurasi Docker",
"docker_version": "Versi Docker",
"job_conditions": "Kondisi pekerjaan yang diabaikan",
"lxc": "LXC",
"network_manager": "Manajer Jaringan",
"os": "Sistem Operasi",
"privileged": "Supervisor tidak memiliki hak istimewa",
"systemd": "Systemd"
},
"unsupported_title": "Anda menjalankan instalasi yang tidak didukung",
"update_supervisor": "Perbarui Supervisor",
"warning": "PERINGATAN"
}
}
},
"ui": {
"auth_store": {
"ask": "Ingin menyimpan login ini?",
@@ -759,8 +374,6 @@
"changed_to_state": "berubah menjadi {state}",
"cleared_device_class": "dibersihkan (tidak ada {device_class} yang terdeteksi)",
"detected_device_class": "terdeteksi {device_class}",
"is_closing": "menutup",
"is_opening": "membuka",
"rose": "terbit",
"set": "terbenam",
"turned_off": "dimatikan",
@@ -1079,6 +692,7 @@
"script": "Skrip",
"server_control": "Kontrol Server",
"tag": "Tag",
"tags": "Tag",
"users": "Pengguna",
"zone": "Zona"
},
@@ -1137,7 +751,6 @@
"clusters": "Kelola Cluster",
"reconfigure": "Konfigurasi Ulang Perangkat",
"remove": "Hapus Perangkat",
"view_in_visualization": "Tampilkan dalam Visualisasi",
"zigbee_information": "Tanda tangan perangkat Zigbee"
},
"confirmations": {
@@ -2715,7 +2328,6 @@
"caption": "Visualisasi",
"header": "Visualisasi Jaringan",
"highlight_label": "Sorot Perangkat",
"refresh_topology": "Segarkan Topologi",
"zoom_label": "Perbesar Ke Perangkat"
}
},
@@ -3382,8 +2994,6 @@
"error_remove": "Tidak dapat menghapus konfigurasi: {error}",
"error_save_yaml": "Tidak dapat menyimpan YAML: {error}",
"header": "Edit Konfigurasi",
"lovelace_changed": "Konfigurasi Lovelace telah diperbarui. Ingin memuat konfigurasi yang diperbarui di editor dan kehilangan perubahan Anda saat ini?",
"reload": "Muat Ulang",
"resources_moved": "Sumber daya seharusnya tidak lagi ditambahkan ke konfigurasi Lovelace tetapi dapat ditambahkan di panel konfigurasi Lovelace.",
"save": "Simpan",
"saved": "Disimpan",

View File

@@ -93,125 +93,6 @@
"unknown": "Óþekkt"
}
},
"supervisor": {
"dialog": {
"network": {
"connected_to": "Tengt við {ssid}",
"dhcp": "DHCP",
"disabled": "Óvirkt",
"dns_servers": "DNS þjónar",
"failed_to_change": "Ekki tókst að breyta netstillingum",
"gateway": "Vistfang gáttar",
"ip_netmask": "IP vistfang/Netmöskvi",
"open": "Opið",
"scan_ap": "Leita að aðgangsstöðum",
"static": "Föst",
"title": "Netstillingar",
"unsaved": "Þú ert með óvistaðar breytingar, þær týnast ef þú skiptir um flipa, viltu halda áfram?",
"warning": "Ef þú ert að breyta Wi-Fi, IP eða gáttarvistföngum gætirðu misst tenginguna!",
"wep": "WEP",
"wpa": "WPA-PSK"
},
"registries": {
"password": "Lykilorð",
"remove": "Fjarlægja",
"username": "Username"
},
"repositories": {
"add": "Bæta við",
"remove": "Fjarlægja",
"title": "Stjórna viðbótargeymslum"
},
"restart_addon": {
"confirm_text": "Endurræsa viðbót",
"text": "Á að endurræsa viðbótina með breytingum þínum?"
},
"update": {
"create_snapshot": "Stofna skyndimynd af {name} áður en uppfært er",
"snapshot": "Skyndimynd",
"snapshotting": "Bý til skyndimynd af {name}",
"updating": "Uppfæri {name} í útgáfu {version}"
}
},
"my": {
"error_addon_not_found": "Viðbót fannst ekki"
},
"snapshot": {
"addons": "Viðbætur",
"available_snapshots": "Tiltækar skyndimyndir",
"could_not_create": "Ekki tókst að búa til skyndimynd",
"create": "Búa til",
"create_blocked_not_running": "Ekki er hægt að búa til skyndimynd núna þar sem kerfið er í {state} stöðu.",
"create_snapshot": "Búa til skyndimynd",
"description": "Skyndimyndir gera þér kleift að vinna með öryggisafrit af gögnum þessa tilviks af Home Assistant.",
"enter_password": "Færðu inn lykilorð.",
"folder": {
"addons/local": "Staðbundnar viðbætur",
"homeassistant": "Home Assistant stillingar",
"media": "Efni",
"share": "Deila",
"ssl": "SSL"
},
"folders": "Möppur",
"full_snapshot": "Full skyndimynd",
"name": "Heiti",
"partial_snapshot": "Skyndimynd að hluta",
"password": "Lykilorð",
"password_protected": "varið með lykilorði",
"password_protection": "Vörn með lykilorði",
"security": "Öryggi",
"type": "Gerð",
"upload_snapshot": "Hlaða upp skyndimynd"
},
"system": {
"core": {
"cpu_usage": "Kjarni: Notkun örgjörva",
"ram_usage": "Kjarni: Notkun vinnsluminnis"
},
"host": {
"change": "Breyta",
"change_hostname": "Breyta vélarheiti",
"confirm_reboot": "Á örugglega að endurræsa vélina?",
"confirm_shutdown": "Ertu viss um að þú viljir ganga frá vélinni?",
"deployment": "Dreifing",
"docker_version": "Docker útgáfa",
"emmc_lifetime_used": "eMMC líftími notaður",
"failed_to_get_hardware_list": "Ekki tókst að sækja vélbúnaðarlista",
"failed_to_import_from_usb": "Ekki tókst að flytja inn úr USB",
"failed_to_reboot": "Ekki tókst að endurræsa vélina",
"failed_to_set_hostname": "Ekki tókst að breyta vélarheiti",
"failed_to_shutdown": "Ekki tókst að ganga frá vélinni",
"hardware": "Vélbúnaður",
"hostname": "Vélarheiti",
"import_from_usb": "Flytja inn frá USB",
"ip_address": "IP vistfang",
"new_hostname": "Vinsamlega sláðu inn nýtt vélarheiti:",
"operating_system": "Stýrikerfi",
"reboot_host": "Endurræsa vél",
"shutdown_host": "Ganga frá vél",
"used_space": "Notað pláss"
},
"supervisor": {
"unhealthy_reason": {
"docker": "Docker umhverfið virkar ekki rétt",
"privileged": "Umsjónarkerfi hefur ekki áskilin réttindi",
"setup": "Uppsetning umsjónarkerfis mistókst",
"supervisor": "Umsjónarkerfi tókst ekki að uppfæra"
},
"unsupported_reason": {
"dbus": "DBUS",
"docker_configuration": "Stillingar Docker",
"docker_version": "Docker útgáfa",
"job_conditions": "Hunsuð skilyrði verka",
"lxc": "LXC",
"network_manager": "Netstjóri",
"os": "Stýrikerfis",
"privileged": "Umsjónarkerfi hefur ekki áskilin réttindi",
"systemd": "Systemd"
}
}
}
},
"ui": {
"auth_store": {
"ask": "Viltu vista þessa innskráningu?",
@@ -532,9 +413,6 @@
"edit": "Breyta einingu",
"history": "Saga",
"last_changed": "Síðast breytt",
"remote": {
"activity": "Núverandi verkþáttur"
},
"restored": {
"confirm_remove_title": "Fjarlægja einingu?",
"remove_action": "Fjarlægja einingu"
@@ -588,6 +466,7 @@
"person": "Persónur",
"scene": "Senur",
"script": "Skriftur",
"tags": "Strikamerki",
"users": "Notendur",
"zone": "Svæði"
},

View File

@@ -102,391 +102,6 @@
"unknown": "Sconosciuto"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"default": "Predefinito",
"header": "Audio",
"input": "Ingresso",
"output": "Uscita"
},
"network": {
"container": "Container",
"disabled": "Disabilitato",
"header": "Rete",
"host": "Host"
},
"no_configuration": "Questo componente aggiuntivo non espone la sua configurazione per fartela pasticciare...",
"options": {
"edit_in_ui": "Modifica nell'interfaccia utente",
"edit_in_yaml": "Modifica in YAML",
"header": "Opzioni",
"invalid_yaml": "YAML non valido",
"show_unused_optional": "Mostra opzioni di configurazione facoltative inutilizzate"
}
},
"dashboard": {
"action_error": {
"get_changelog": "Impossibile ottenere il registro delle modifiche del componente aggiuntivo",
"go_to_config": "Impossibile avviare il componente aggiuntivo - convalida della configurazione non riuscita!",
"install": "Impossibile installare il componente aggiuntivo",
"restart": "Impossibile riavviare il componente aggiuntivo",
"start": "Impossibile avviare il componente aggiuntivo",
"start_invalid_config": "Vai alla configurazione",
"stop": "Impossibile arrestare il componente aggiuntivo",
"uninstall": "Impossibile disinstallare il componente aggiuntivo",
"validate_config": "Impossibile convalidare la configurazione del componente aggiuntivo"
},
"capability": {
"apparmor": {
"description": "AppArmor (\"Application Armor\") è un modulo di sicurezza del kernel Linux che limita le funzionalità dei componenti aggiuntivi come l'accesso alla rete, l'accesso raw socket e l'autorizzazione a leggere, scrivere o eseguire file specifici. \n\nGli autori di componenti aggiuntivi possono fornire i propri profili di sicurezza, ottimizzati per il componente aggiuntivo o richiederne la disabilitazione. Se AppArmor è disabilitato, aumenterà i rischi per la sicurezza e, di conseguenza, avrà un impatto negativo sul punteggio di sicurezza del componente aggiuntivo.",
"title": "AppArmor"
},
"auth_api": {
"description": "Un componente aggiuntivo può autenticare gli utenti rispetto a Home Assistant, consentendo ai componenti aggiuntivi la possibilità di offrire agli utenti l'accesso alle applicazioni in esecuzione all'interno dei componenti aggiuntivi stessi, utilizzando il proprio nome utente/password di Home Assistant. Questo distintivo indica se l'autore del componente aggiuntivo richiede questa funzionalità.",
"title": "Autenticazione di Home Assistant"
},
"docker_api": {
"description": "L'autore del componente aggiuntivo ha richiesto al componente aggiuntivo di avere accesso alla gestione dell'istanza Docker in esecuzione nel sistema. Questa modalità offre al componente aggiuntivo l'accesso completo e il controllo all'intero sistema Home Assistant, il che aggiunge rischi per la sicurezza e potrebbe danneggiare il sistema in caso di uso improprio. Pertanto, questa funzionalità influisce negativamente sul punteggio di sicurezza del componente aggiuntivo.\n\nQuesto livello di accesso non viene concesso automaticamente e deve essere confermato dall'utente. Per fare ciò, è necessario disabilitare manualmente la modalità di protezione sul componente aggiuntivo. Disabilitare la modalità di protezione solo se si sa, è necessario e considerare attendibile l'origine di questo componente aggiuntivo.",
"title": "Accesso completo a Docker"
},
"full_access": {
"description": "Questo componente aggiuntivo ha pieno accesso all'hardware del sistema, su richiesta dell'autore del componente aggiuntivo. L'accesso è paragonabile alla modalità privilegiata in Docker. Poiché ciò apre possibili rischi per la sicurezza, questa funzionalità influisce negativamente sul punteggio di sicurezza aggiuntivo.\n\nQuesto livello di accesso non viene concesso automaticamente e deve essere confermato dall'utente. Per fare ciò, è necessario disabilitare manualmente la modalità di protezione sul componente aggiuntivo. Disabilitare la modalità di protezione solo se si sa, è necessario e considerare attendibile l'origine di questo componente aggiuntivo.",
"title": "Accesso completo all'hardware"
},
"hassio_api": {
"description": "Al componente aggiuntivo è stato concesso l'accesso all'API Supervisor, su richiesta dell'autore del componente aggiuntivo. Per impostazione predefinita, il componente aggiuntivo può accedere alle informazioni generali sulla versione del sistema. Quando il componente aggiuntivo richiede l'accesso all'API a livello di \"manager\" o \"admin\", avrà accesso per controllare più parti del sistema Home Assistant. Questa autorizzazione è indicata da questo distintivo e avrà un impatto negativo sul punteggio di sicurezza del componente aggiuntivo.",
"title": "Accesso API Supervisor"
},
"homeassistant_api": {
"description": "Questo componente aggiuntivo può accedere all'istanza di Home Assistant in esecuzione direttamente tramite l'API di Home Assistant. Questa modalità gestisce anche l'autenticazione per il componente aggiuntivo, che consente a un componente aggiuntivo di interagire con Home Assistant senza la necessità di token di autenticazione aggiuntivi.",
"title": "Accesso all'API di Home Assistant"
},
"host_network": {
"description": "I componenti aggiuntivi vengono in genere eseguiti nel proprio livello di rete isolato, impedendo loro di accedere alla rete del sistema operativo host. In alcuni casi, questo isolamento della rete può limitare i componenti aggiuntivi nella fornitura dei propri servizi e, pertanto, l'isolamento può essere revocato dall'autore del componente aggiuntivo, offrendo al componente aggiuntivo l'accesso completo alle funzionalità di rete del computer host. In questo modo il componente aggiuntivo offre più funzionalità di rete, ma riduce la sicurezza, pertanto la classificazione di sicurezza del componente aggiuntivo verrà abbassata quando questa opzione viene utilizzata dal componente aggiuntivo.",
"title": "Rete host"
},
"host_pid": {
"description": "In genere, i processi che il componente aggiuntivo esegue, sono isolati da tutti gli altri processi di sistema. L'autore del componente aggiuntivo ha richiesto al componente aggiuntivo di avere accesso ai processi di sistema in esecuzione nell'istanza del sistema host e di consentire al componente aggiuntivo di generare processi anche nel sistema host. Questa modalità offre al componente aggiuntivo l'accesso completo e il controllo all'intero sistema Home Assistant, il che aggiunge rischi per la sicurezza e potrebbe danneggiare il sistema in caso di uso improprio. Pertanto, questa funzionalità influisce negativamente sul punteggio di sicurezza del componente aggiuntivo.\n\nQuesto livello di accesso non viene concesso automaticamente e deve essere confermato dall'utente. Per fare ciò, è necessario disabilitare manualmente la modalità di protezione sul componente aggiuntivo. Disabilitare la modalità di protezione solo se si sa, è necessario e considerare attendibile l'origine di questo componente aggiuntivo.",
"title": "Spazio dei nomi dei processi host"
},
"ingress": {
"description": "Questo componente aggiuntivo utilizza Ingress per incorporare la sua interfaccia in modo sicuro in Home Assistant.",
"title": "Ingress"
},
"label": {
"apparmor": "apparmor",
"auth": "auth",
"docker": "docker",
"hardware": "hardware",
"hass": "hass",
"hassio": "hassio",
"host": "host",
"host_pid": "host pid",
"ingress": "ingress",
"rating": "valutazione",
"stage": "fase"
},
"rating": {
"description": "Home Assistant fornisce una classificazione di sicurezza a ciascuno dei componenti aggiuntivi, che indica i rischi connessi all'utilizzo di questo componente aggiuntivo. Maggiore è l'accesso necessario a un componente aggiuntivo sul sistema, minore è il punteggio, aumentando così i possibili rischi per la sicurezza.\n\nIl punteggio è su una scala da 1 a 6. Dove 1 è il punteggio più basso (considerato il più insicuro ed a rischio più alto) e un punteggio di 6 è il punteggio più alto (considerato il più sicuro ed a rischio più basso).",
"title": "Classificazione di sicurezza del componente aggiuntivo"
},
"role": {
"admin": "admin",
"backup": "backup",
"default": "predefinito",
"homeassistant": "homeassistant",
"manager": "manager"
},
"stage": {
"description": "I componenti aggiuntivi possono avere una delle tre fasi seguenti:\n\n{icon_stable} **Stabile**: si tratta di componenti aggiuntivi pronti per l'uso in produzione.\n\n{icon_experimental} **Sperimentale**: questi possono contenere bug e potrebbero non essere completati.\n\n{icon_deprecated} **Deprecato**: questi componenti aggiuntivi non riceveranno più aggiornamenti.",
"title": "Fase del componente aggiuntivo"
}
},
"changelog": "Registro delle modifiche",
"cpu_usage": "Utilizzo CPU componente aggiuntivo",
"hostname": "Nome host",
"install": "installa",
"new_update_available": "{name} {version} è disponibile",
"not_available_arch": "Questo componente aggiuntivo non è compatibile con il processore del dispositivo o con il sistema operativo installato nel dispositivo.",
"not_available_version": "Stai eseguendo Home Assistant {core_version_installed}, per aggiornare a questa versione del componente aggiuntivo è necessaria almeno la versione {core_version_needed} di Home Assistant",
"open_web_ui": "Apri l'interfaccia utente web",
"option": {
"auto_update": {
"description": "Aggiorna automaticamente il componente aggiuntivo quando è disponibile una nuova versione",
"title": "Aggiornamento automatico"
},
"boot": {
"description": "Avvia il componente aggiuntivo durante l'avvio del sistema",
"title": "Inizia dall'avvio"
},
"ingress_panel": {
"description": "Aggiungi questo componente aggiuntivo alla barra laterale",
"title": "Mostra nella barra laterale"
},
"protected": {
"description": "Blocca l'accesso al sistema con privilegi elevati dal componente aggiuntivo",
"title": "Modalità di protezione"
},
"watchdog": {
"description": "Questo avvierà il componente aggiuntivo se si arresta in modo anomalo",
"title": "Watchdog"
}
},
"protection_mode": {
"content": "La modalità di protezione su questo componente aggiuntivo è disabilitata! Questo dà al componente aggiuntivo pieno accesso all'intero sistema, il che aggiunge rischi per la sicurezza e potrebbe danneggiare il tuo sistema se usato in modo scorretto. Disabilita la modalità di protezione solo se conosci, hai bisogno e ti fidi della fonte di questo componente aggiuntivo.",
"enable": "Abilita la modalità di protezione",
"title": "Attenzione: la modalità di protezione è disabilitata!"
},
"ram_usage": "Utilizzo RAM componente aggiuntivo",
"rebuild": "ricostruisci",
"restart": "riavvia",
"start": "avvia",
"stop": "arresta",
"uninstall": "disinstalla",
"visit_addon_page": "Visita la pagina di {name} per maggiori dettagli"
},
"documentation": {
"get_documentation": "Impossibile ottenere la documentazione del componente aggiuntivo, {error}"
},
"failed_to_reset": "Impossibile reimpostare la configurazione del componente aggiuntivo, {error}",
"failed_to_save": "Impossibile salvare la configurazione del componente aggiuntivo, {error}",
"logs": {
"get_logs": "Impossibile ottenere i registri del componente aggiuntivo, {error}"
},
"panel": {
"configuration": "Configurazione",
"documentation": "Documentazione",
"info": "Informazioni",
"log": "Registro"
},
"state": {
"installed": "Il componente aggiuntivo è installato",
"not_available": "Il componente aggiuntivo non è disponibile sul tuo sistema",
"not_installed": "Il componente aggiuntivo non è installato"
}
},
"common": {
"cancel": "Annulla",
"description": "Descrizione",
"error": {
"unknown": "Errore sconosciuto",
"update_failed": "Aggiornamento non riuscito"
},
"failed_to_restart_name": "Impossibile riavviare {name}",
"failed_to_update_name": "Impossibile aggiornare {name}",
"learn_more": "Ulteriori informazioni",
"new_version_available": "Nuova versione disponibile",
"newest_version": "Ultima versione",
"no": "No",
"refresh": "Aggiorna",
"release_notes": "Note sulla versione",
"reload": "Ricarica",
"reset_defaults": "Ripristina le impostazioni predefinite",
"reset_options": "Ripristina le opzioni",
"restart": "Riavvia",
"restart_name": "Riavvia {name}",
"running_version": "È attualmente in esecuzione la versione {version}",
"save": "Salva",
"show_more": "Ulteriori informazioni al riguardo",
"update": "Aggiorna",
"update_available": "{count, plural,\n one {Aggiornamento}\n other {{count} aggiornamenti}\n} in sospeso",
"version": "Versione",
"yes": "Sì"
},
"confirm": {
"reset_options": {
"text": "Reimpostare tutte le opzioni?",
"title": "Ripristina le opzioni"
},
"restart": {
"text": "Riavviare {name}?",
"title": "Riavvia {name}"
},
"update": {
"text": "Aggiornare {name} alla versione {version}?",
"title": "Aggiorna {name}"
}
},
"dashboard": {
"addon_new_version": "Nuova versione disponibile",
"addon_running": "Il componente aggiuntivo è in esecuzione",
"addon_stopped": "Il componente aggiuntivo viene arrestato",
"addons": "Componenti aggiuntivi",
"no_addons": "Non hai ancora installato alcun componente aggiuntivo. Vai al negozio di componenti aggiuntivi per iniziare!"
},
"dialog": {
"network": {
"connected_to": "Connesso a {ssid}",
"dhcp": "DHCP",
"disabled": "Disabilitato",
"dns_servers": "Server DNS",
"failed_to_change": "Impossibile modificare le impostazioni di rete",
"gateway": "Indirizzo del gateway",
"ip_netmask": "Indirizzo IP/Netmask",
"open": "Aperto",
"scan_ap": "Scansione dei punti di accesso",
"static": "Statico",
"title": "Impostazioni di rete",
"unsaved": "Hai modifiche non salvate, queste andranno perse se cambi scheda, vuoi continuare?",
"warning": "Se stai modificando gli indirizzi Wi-Fi, IP o gateway, potresti perdere la connessione!",
"wep": "WEP",
"wpa": "WPA-PSK"
},
"registries": {
"add_new_registry": "Aggiungi nuovo registro",
"add_registry": "Aggiungi registro",
"failed_to_add": "Impossibile aggiungere il registro",
"failed_to_remove": "Impossibile rimuovere il registro",
"no_registries": "Nessun registro configurato",
"password": "Password",
"registry": "Registro",
"remove": "Rimuovi",
"title_add": "Aggiungi nuovo registro container",
"title_manage": "Gestisci i registri dei container",
"username": "Nome utente"
},
"repositories": {
"add": "Aggiungi",
"remove": "Rimuovi",
"title": "Gestisci i repository dei componenti aggiuntivi"
},
"restart_addon": {
"confirm_text": "Riavvia il componente aggiuntivo",
"text": "Riavviare il componente aggiuntivo con le modifiche?"
},
"update": {
"create_snapshot": "Creare un'istantanea di {name} prima dell'aggiornamento",
"snapshot": "Istantanea",
"snapshotting": "Creazione istantanea di {name}",
"updating": "Aggiornamento di {name} alla versione {version}"
}
},
"my": {
"error": "Si è verificato un errore sconosciuto",
"faq_link": "My Home Assistant FAQ",
"not_supported": "Questo reindirizzamento non è supportato dall'istanza di Home Assistant. Controlla il {link} per i reindirizzamenti supportati e la versione in cui sono stati introdotti."
},
"panel": {
"dashboard": "Pannello di controllo",
"snapshots": "Istantanee",
"store": "Negozio dei componenti aggiuntivi",
"system": "Sistema"
},
"snapshot": {
"addons": "Componenti aggiuntivi",
"available_snapshots": "Istantanee disponibili",
"could_not_create": "Impossibile creare l'istantanea",
"create": "Crea",
"create_blocked_not_running": "La creazione di un'istantanea non è al momento possibile perché il sistema è nello stato {state}.",
"create_snapshot": "Crea istantanea",
"description": "Le istantanee ti consentono di eseguire facilmente il backup e il ripristino di tutti i dati dell'istanza di Home Assistant.",
"enter_password": "Immettere una password.",
"folder": {
"addons/local": "Componenti aggiuntivi locali",
"homeassistant": "Configurazione di Home Assistant",
"media": "Media",
"share": "Share",
"ssl": "SSL"
},
"folders": "Cartelle",
"full_snapshot": "Istantanea completa",
"name": "Nome",
"no_snapshots": "Non hai ancora nessuna istantanea.",
"partial_snapshot": "Istantanea parziale",
"password": "Password",
"password_protected": "protetto da password",
"password_protection": "Protezione con password",
"security": "Sicurezza",
"type": "Tipo",
"upload_snapshot": "Invia istantanea"
},
"store": {
"missing_addons": "Componenti aggiuntivi mancanti? Abilita la modalità avanzata nella pagina del tuo profilo utente",
"no_results_found": "Nessun risultato trovato in {repository}.",
"registries": "Registri",
"repositories": "Repository"
},
"system": {
"core": {
"cpu_usage": "Utilizzo della CPU principale",
"ram_usage": "Utilizzo della RAM principale"
},
"host": {
"change": "Cambia",
"change_hostname": "Cambia nome host",
"confirm_reboot": "Riavviare l'host?",
"confirm_shutdown": "Arrestare l'host?",
"deployment": "Distribuzione",
"docker_version": "Versione Docker",
"emmc_lifetime_used": "Durata eMMC usata",
"failed_to_get_hardware_list": "Impossibile ottenere l'elenco hardware",
"failed_to_import_from_usb": "Importazione da USB non riuscita",
"failed_to_reboot": "Impossibile riavviare l'host",
"failed_to_set_hostname": "Impostazione del nome host non riuscita",
"failed_to_shutdown": "Impossibile arrestare l'host",
"hardware": "Hardware",
"hostname": "Nome host",
"import_from_usb": "Importa da USB",
"ip_address": "Indirizzo IP",
"new_hostname": "Inserisci un nuovo nome host:",
"operating_system": "Sistema operativo",
"reboot_host": "Riavvia host",
"shutdown_host": "Arresta host",
"used_space": "Spazio utilizzato"
},
"log": {
"get_logs": "Impossibile ottenere i registri di {provider}, {error}",
"log_provider": "Fornitore del registro"
},
"supervisor": {
"beta_backup": "Assicurati di disporre di backup dei tuoi dati prima di attivare questa funzione.",
"beta_join_confirm": "Vuoi entrare a far parte del canale beta?",
"beta_release_items": "Questo include le versioni beta per:",
"beta_warning": "Le versioni beta sono per \"tester\" e \"early adopter\" e possono contenere modifiche al codice instabili",
"channel": "Canale",
"cpu_usage": "Utilizzo CPU Supervisor",
"failed_to_reload": "Impossibile ricaricare il Supervisor",
"failed_to_set_option": "Impossibile impostare l'opzione Supervisor",
"failed_to_update": "Impossibile aggiornare il Supervisor",
"join_beta_action": "Partecipa al canale beta",
"join_beta_description": "Ricevi gli aggiornamenti beta per Home Assistant (RC), Supervisor e host",
"leave_beta_action": "Lascia il canale beta",
"leave_beta_description": "Ricevi aggiornamenti stabili per Home Assistant, Supervisor e host",
"ram_usage": "Utilizzo RAM Supervisor",
"reload_supervisor": "Ricarica Supervisor",
"share_diagnostics": "Condividi diagnostica",
"share_diagnostics_description": "Condividi i rapporti sugli arresti anomali e le informazioni diagnostiche.",
"share_diagonstics_description": "Vorresti condividere automaticamente i rapporti sugli arresti anomali e le informazioni diagnostiche quando il Supervisor rileva errori imprevisti? {line_break} Questo ci consentirà di risolvere i problemi, le informazioni sono accessibili solo al team di Home Assistant Core e non saranno condivise con altri. {line_break} I dati non includono alcuna informazione privata/sensibile e puoi disabilitarla nelle impostazioni in qualsiasi momento lo desideri.",
"share_diagonstics_title": "Aiutaci a migliorare Home Assistant",
"unhealthy_description": "L'esecuzione di un'installazione non funzionante causerà problemi. Di seguito è riportato un elenco dei problemi riscontrati con l'installazione, fare clic sui collegamenti per scoprire come risolvere i problemi.",
"unhealthy_reason": {
"docker": "L'ambiente Docker non funziona correttamente",
"privileged": "Il Supervisor non è privilegiato",
"setup": "Configurazione del Supervisor non riuscita",
"supervisor": "Il Supervisor non è stato in grado di aggiornare"
},
"unhealthy_title": "L'installazione non è integra",
"unsupported_description": "Di seguito è riportato un elenco dei problemi riscontrati con l'installazione, fare clic sui collegamenti per scoprire come risolvere i problemi.",
"unsupported_reason": {
"container": "Container noti per causare problemi",
"dbus": "DBUS",
"docker_configuration": "Configurazione Docker",
"docker_version": "Versione Docker",
"job_conditions": "Condizioni di lavoro ignorate",
"lxc": "LXC",
"network_manager": "Gestione della rete",
"os": "Sistema operativo",
"privileged": "Il Supervisor non è privilegiato",
"systemd": "Systemd"
},
"unsupported_title": "Stai eseguendo un'installazione non supportata",
"update_supervisor": "Aggiorna il Supervisor",
"warning": "ATTENZIONE"
}
}
},
"ui": {
"auth_store": {
"ask": "Vuoi rimanere connesso?",
@@ -762,8 +377,6 @@
"changed_to_state": "cambiato in {state}",
"cleared_device_class": "sgombro (nessun {device_class} rilevato)",
"detected_device_class": "rilevato {device_class}",
"is_closing": "in chiusura",
"is_opening": "in apertura",
"rose": "sorto",
"set": "tramontato",
"turned_off": "spento",
@@ -1011,9 +624,6 @@
"person": {
"create_zone": "Crea zona dalla posizione corrente"
},
"remote": {
"activity": "Attività corrente"
},
"restored": {
"confirm_remove_text": "Sei sicuro di voler rimuovere questa entità?",
"confirm_remove_title": "Rimuovere l'entità?",
@@ -1086,7 +696,7 @@
"scene": "Scene",
"script": "Script",
"server_control": "Controlli del Server",
"tag": "Etichette",
"tags": "Etichette",
"users": "Utenti",
"zone": "Zone"
},
@@ -1145,7 +755,6 @@
"clusters": "Gestisci i cluster",
"reconfigure": "Riconfigura dispositivo",
"remove": "Rimuovi dispositivo",
"view_in_visualization": "Visualizza in visualizzazione",
"zigbee_information": "Firma del dispositivo Zigbee"
},
"confirmations": {
@@ -2723,7 +2332,6 @@
"caption": "Visualizzazione",
"header": "Visualizzazione di rete",
"highlight_label": "Evidenzia dispositivi",
"refresh_topology": "Aggiorna la topologia",
"zoom_label": "Ingrandisci al dispositivo"
}
},
@@ -3401,8 +3009,6 @@
"error_remove": "Impossibile rimuovere la configurazione: {error}",
"error_save_yaml": "Impossibile salvare YAML: {error}",
"header": "Modifica Configurazione",
"lovelace_changed": "La configurazione di Lovelace è stata aggiornata, vuoi caricare la configurazione aggiornata nell'editor e perdere le modifiche attuali?",
"reload": "Ricarica",
"resources_moved": "Le risorse non dovrebbero più essere aggiunte alla configurazione di Lovelace ma possono essere aggiunte nel pannello di configurazione di Lovelace.",
"save": "Salva",
"saved": "Salvato",

View File

@@ -1,7 +1,7 @@
{
"config_entry": {
"disabled_by": {
"config_entry": "設定エントリ",
"config_entry": "構成エントリ",
"device": "デバイス",
"integration": "インテグレーション",
"user": "ユーザー"
@@ -96,391 +96,6 @@
"unknown": "不明"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"default": "デフォルト",
"header": "オーディオ",
"input": "入力",
"output": "出力"
},
"network": {
"container": "コンテナ",
"disabled": "無効",
"header": "ネットワーク",
"host": "ホスト"
},
"no_configuration": "このアドオンは、設定を公開していません...",
"options": {
"edit_in_ui": "UIで編集",
"edit_in_yaml": "YAMLで編集",
"header": "オプション",
"invalid_yaml": "無効なYAML",
"show_unused_optional": "未使用の設定オプションを表示する"
}
},
"dashboard": {
"action_error": {
"get_changelog": "アドオンの変更ログを取得できませんでした",
"go_to_config": "アドオンの起動に失敗しました - 設定検証に失敗しました。",
"install": "アドオンのインストールに失敗しました",
"restart": "アドオンの再起動に失敗しました",
"start": "アドオンの開始に失敗しました",
"start_invalid_config": "設定に移動",
"stop": "アドオンの停止に失敗しました",
"uninstall": "アドオンのアンインストールに失敗しました",
"validate_config": "アドオン設定の検証に失敗しました"
},
"capability": {
"apparmor": {
"description": "AppArmor ('Application Armor') は Linux カーネルのセキュリティモジュールで、ネットワークアクセス、生のソケットアクセス、特定のファイルの読み取り、書き込み、実行の許可などのアドオン機能を制限します。\n\nアドオンの作成者は、アドオン用に最適化されたセキュリティプロファイルを提供するか、無効化を要求することができます。AppArmorを無効にすると、セキュリティリスクが高まるため、アドオンのセキュリティスコアに悪影響を及ぼします。",
"title": "AppArmor"
},
"auth_api": {
"description": "アドオンはホームアシスタントに対してユーザーを認証することができ、ユーザーはホームアシスタントのユーザー名/パスワードを使用して、アドオン内で実行されているアプリケーションにログインすることができます。このバッジは、アドオンの作成者がこの機能を要求しているかどうかを示します。",
"title": "HomeAssistant認証"
},
"docker_api": {
"description": "アドオンの作成者は、システムで実行されている Docker インスタンスへの管理アクセスを持つアドオンを要求しました。このモードでは、アドオンはホームアシスタントシステム全体にフルアクセスと制御を提供し、セキュリティリスクを追加し、誤用時にシステムに損害を与える可能性があります。したがって、この機能はアドオンのセキュリティ スコアに悪影響を与えます。\n\nこのレベルのアクセスは自動的には付与されず、ユーザーが確認する必要があります。これを行うには、アドオンの保護モードを手動で無効にする必要があります。あなたが知っている場合にのみ、保護モードを無効にし、このアドオンのソースを信頼し、必要とします。",
"title": "Dockerへのフルアクセス"
},
"full_access": {
"description": "このアドオンは、アドオンの作成者の要求によって、システムのハードウェアへのフルアクセスが与えられます。アクセスは、Docker の特権モードと同等です。これにより、セキュリティリスクが生じる可能性があるため、この機能はアドオンのセキュリティ スコアに悪影響を及ぼします。\n\nこのレベルのアクセスは自動的には付与されず、ユーザーが確認する必要があります。これを行うには、アドオンの保護モードを手動で無効にする必要があります。あなたが知っている場合にのみ、保護モードを無効にし、このアドオンのソースを信頼し、必要とします。",
"title": "フル ハードウェア アクセス"
},
"hassio_api": {
"description": "アドオンは、アドオン作成者の要求によって、スーパーバイザ API へのアクセス権を与えられました。既定では、アドオンはシステムの一般的なバージョン情報にアクセスできます。アドオンが API への「マネージャー」または「管理者」レベルのアクセスを要求すると、ホームアシスタントシステムの複数の部分を制御するアクセス権を取得します。このアクセス許可はこのバッジによって示され、アドオンのセキュリティ スコアに悪影響を与えます。",
"title": "SupervisorAPIアクセス"
},
"homeassistant_api": {
"description": "このアドオンは、ホームアシスタント API を介して直接、実行中のホームアシスタントインスタンスにアクセスできます。このモードはアドオンの認証も処理するため、アドオンは追加の認証トークンを必要とせずにホームアシスタントと対話できます。",
"title": "Home AssistantAPIアクセス"
},
"host_network": {
"description": "アドオンは通常、独自の隔離されたネットワークレイヤーで実行され、ホストオペレーティングシステムのネットワークにアクセスすることができません。場合によっては、このネットワーク隔離によってアドオンのサービス提供が制限されることがあります。そのため、アドオンの作者が隔離を解除して、アドオンがホストマシンのネットワーク機能にフルアクセスできるようにすることができます。これにより、アドオンはより多くのネットワーク機能を得ることができますが、セキュリティが低下するため、アドオンでこのオプションを使用すると、アドオンのセキュリティ評価が低くなります。",
"title": "ホスト ネットワーク"
},
"host_pid": {
"description": "通常、アドオンが実行するプロセスは、他のすべてのシステムプロセスから分離されます。アドオン作成者は、ホスト システム インスタンスで実行されているシステム プロセスにアクセスし、ホスト システム上のプロセスを生成できるようにアドオンを要求しました。このモードでは、アドオンはホームアシスタントシステム全体にフルアクセスと制御を提供し、セキュリティリスクを追加し、誤用時にシステムに損害を与える可能性があります。したがって、この機能はアドオンのセキュリティ スコアに悪影響を与えます。\n\nこのレベルのアクセスは自動的には付与されず、ユーザーが確認する必要があります。これを行うには、アドオンの保護モードを手動で無効にする必要があります。あなたが知っている場合にのみ、保護モードを無効にし、このアドオンのソースを信頼し、必要とします。",
"title": "ホストプロセスの名前空間"
},
"ingress": {
"description": "このアドオンは、Ingressを使用して、インターフェイスをHomeAssistantに安全に埋め込みます。",
"title": "イングレス"
},
"label": {
"apparmor": "apparmor",
"auth": "認証",
"docker": "docker",
"hardware": "ハードウェア",
"hass": "hass",
"hassio": "hassio",
"host": "ホスト",
"host_pid": "ホスト PID",
"ingress": "イングレス",
"rating": "評価",
"stage": "ステージ"
},
"rating": {
"description": "ホーム アシスタントは、各アドオンにセキュリティ評価を提供します。アドオンがシステムに必要なアクセスが多いほどスコアが低くなり、セキュリティリスクが高くなる可能性があります。\n\nスコアは1から6までのスケールです。1 が最も低いスコア (最も安全で最も高いリスクと見なされる) で、スコア 6 が最高スコア (最も安全で最も低いリスクと見なされます) です。",
"title": "アドオンのセキュリティ評価"
},
"role": {
"admin": "管理者",
"backup": "バックアップ",
"default": "デフォルト",
"homeassistant": "homeassistant",
"manager": "マネージャー"
},
"stage": {
"description": "アドオンには、次の 3 つのステージのいずれかを設定できます。\n\n{icon_stable} **安定** : これらは、運用環境で使用する準備ができているアドオンです。\n\n{icon_experimental} **実験**: バグが含まれている可能性があり、未完成の可能性があります。\n\n{icon_deprecated} **非推奨**: これらのアドオンは、更新プログラムを受信しなくなります。",
"title": "アドオンステージ"
}
},
"changelog": "更新履歴",
"cpu_usage": "アドオンCPU使用率",
"hostname": "ホスト名",
"install": "インストール",
"new_update_available": "{name} {version}が利用可能です",
"not_available_arch": "このアドオンは、デバイスのプロセッサまたはデバイスにインストールされているオペレーティングシステムと互換性がありません。",
"not_available_version": "ホーム アシスタント {core_version_installed} を無効にして、このバージョンのアドオンに更新するには、少なくともバージョン {core_version_needed} のホーム アシストが必要です",
"open_web_ui": "Web UI を開く",
"option": {
"auto_update": {
"description": "新しいバージョンが利用可能になったときにアドオンを自動更新します",
"title": "自動更新"
},
"boot": {
"description": "システムブート時にアドオンを起動する",
"title": "起動時に開始"
},
"ingress_panel": {
"description": "このアドオンをサイドバーに追加する",
"title": "サイドバーに表示"
},
"protected": {
"description": "アドオンからシステムアクセスの昇格をブロックします",
"title": "保護モード"
},
"watchdog": {
"description": "クラッシュした場合にアドオンを起動します。",
"title": "ウォッチドッグ"
}
},
"protection_mode": {
"content": "このアドオンの保護モードは無効になっています。これによりアドオンはシステム全体へのフルアクセスが可能になり、セキュリティリスクが追加され、誤って使用された場合にはシステムにダメージを与える可能性があります。保護モードを無効にするのは、このアドオンのソースを知り、必要とし、信頼している場合のみにしてください。",
"enable": "保護モードを有効にする",
"title": "警告: 保護モードは無効です。"
},
"ram_usage": "アドオンのRAM使用量",
"rebuild": "再構築",
"restart": "再起動",
"start": "開始",
"stop": "停止",
"uninstall": "アンインストール",
"visit_addon_page": "詳細については、 {name}ページにアクセスしてください"
},
"documentation": {
"get_documentation": " {error}アドオンドキュメントの取得に失敗しました"
},
"failed_to_reset": "{error}アドオン設定のリセットに失敗しました",
"failed_to_save": " {error}アドオン設定の保存に失敗しました",
"logs": {
"get_logs": " {error}アドオンログの取得に失敗しました"
},
"panel": {
"configuration": "設定",
"documentation": "ドキュメント",
"info": "情報",
"log": "ログ"
},
"state": {
"installed": "アドオンがインストールされている",
"not_available": "アドオンはお使いのシステムでは利用できません",
"not_installed": "アドオンがインストールされていません"
}
},
"common": {
"cancel": "キャンセル",
"description": "説明",
"error": {
"unknown": "不明なエラー",
"update_failed": "更新に失敗しました"
},
"failed_to_restart_name": "{name} を再起動できませんでした",
"failed_to_update_name": "{name} を更新できませんでした",
"learn_more": "詳細情報",
"new_version_available": "新しいバージョンが利用可能",
"newest_version": "最新バージョン",
"no": "いいえ",
"refresh": "リフレッシュ",
"release_notes": "リリースノート",
"reload": "リロード",
"reset_defaults": "デフォルトにリセット",
"reset_options": "リセットオプション",
"restart": "再起動",
"restart_name": "{name}を再起動します",
"running_version": "現在 {version} を実行しています",
"save": "保存",
"show_more": "この詳細情報を表示する",
"update": "更新",
"update_available": "{count, plural,\n one {アップデート}\n other {{count} アップデート}\n} 保留中",
"version": "バージョン",
"yes": "はい"
},
"confirm": {
"reset_options": {
"text": "すべてのオプションをリセットしてもよろしいですか?",
"title": "リセットオプション"
},
"restart": {
"text": "{name}を再起動してもよろしいですか?",
"title": " {name}を再起動"
},
"update": {
"text": "{name}をバージョン{version}に更新してもよろしいですか?",
"title": "{name}更新"
}
},
"dashboard": {
"addon_new_version": "新しいバージョンが利用可能",
"addon_running": "アドオンが実行されています",
"addon_stopped": "アドオンが停止しています",
"addons": "アドオン",
"no_addons": "まだアドオンがインストールされていません。アドオンストアにアクセスして始めましょう!"
},
"dialog": {
"network": {
"connected_to": "{ssid}に接続しました",
"dhcp": "DHCP",
"disabled": "無効",
"dns_servers": "DNSサーバー",
"failed_to_change": "ネットワーク設定の変更に失敗しました",
"gateway": "ゲートウェイアドレス",
"ip_netmask": "IPアドレス/ネットマスク",
"open": "開く",
"scan_ap": "アクセスポイントのスキャン",
"static": "静的",
"title": "ネットワーク設定",
"unsaved": "保存されていない変更があります。タブを変更するとこれらは失われます。続行しますか?",
"warning": "Wi-Fi、IP、またはゲートウェイアドレスを変更すると、接続が失われる可能性があります。",
"wep": "WEP",
"wpa": "wpa-psk"
},
"registries": {
"add_new_registry": "新しいレジストリの追加",
"add_registry": "レジストリの追加",
"failed_to_add": "レジストリを追加できませんでした",
"failed_to_remove": "レジストリを削除できませんでした",
"no_registries": "レジストリが設定されていません",
"password": "パスワード",
"registry": "レジストリ",
"remove": "削除",
"title_add": "新しいコンテナレジストリの追加",
"title_manage": "コンテナレジストリの管理",
"username": "ユーザー名"
},
"repositories": {
"add": "追加",
"remove": "削除",
"title": "アドオンリポジトリの管理"
},
"restart_addon": {
"confirm_text": "アドオンの再起動",
"text": "変更を保存してアドオンを再起動しますか?"
},
"update": {
"create_snapshot": "更新前に{name}のスナップショットを作成する",
"snapshot": "スナップショット",
"snapshotting": "{name} のスナップショットの作成",
"updating": "{name}をバージョン{version}に更新しています"
}
},
"my": {
"error": "不明なエラーが発生しました",
"faq_link": "マイホームアシスタントFAQ",
"not_supported": "このリダイレクトは、HomeAssistantインスタンスではサポートされていません。 サポートされているリダイレクトとそれらが導入されたバージョンについては、{link}を確認してください。"
},
"panel": {
"dashboard": "ダッシュボード",
"snapshots": "スナップショット",
"store": "アドオンストア",
"system": "システム"
},
"snapshot": {
"addons": "アドオン",
"available_snapshots": "利用可能なスナップショット",
"could_not_create": "スナップショットを作成できませんでした。",
"create": "作成",
"create_blocked_not_running": "システムが {state} 状態であるため、スナップショットの作成は現在できません。",
"create_snapshot": "スナップショットの作成",
"description": "スナップショットでは、Home Assistantインスタンスのすべてのデータを簡単にバックアップして復元することができます。",
"enter_password": "パスワードを入力してください。",
"folder": {
"addons/local": "ローカルアドオン",
"homeassistant": "HomeAssistantの設定",
"media": "メディア",
"share": "共有",
"ssl": "SSL"
},
"folders": "フォルダー",
"full_snapshot": "フルスナップショット",
"name": "名前",
"no_snapshots": "スナップショットはまだありません。",
"partial_snapshot": "部分的なスナップショット",
"password": "パスワード",
"password_protected": "パスワードで保護された",
"password_protection": "パスワード保護",
"security": "セキュリティ",
"type": "タイプ",
"upload_snapshot": "スナップショットのアップロード"
},
"store": {
"missing_addons": "アドオンがありませんか?ユーザープロファイルページで詳細モードを有効にする",
"no_results_found": "{repository}に結果が見つかりません。",
"registries": "レジストリ",
"repositories": "リポジトリ"
},
"system": {
"core": {
"cpu_usage": "コアCPU使用率",
"ram_usage": "コアRAMの使用量"
},
"host": {
"change": "変更",
"change_hostname": "ホスト名の変更",
"confirm_reboot": "ホストを再起動しますか?",
"confirm_shutdown": "ホストをシャットダウンしてもよろしいですか?",
"deployment": "展開",
"docker_version": "Dockerバージョン",
"emmc_lifetime_used": "eMMC の有効期間が使用されます",
"failed_to_get_hardware_list": "ハードウェア一覧を取得できませんでした",
"failed_to_import_from_usb": "USBからのインポートに失敗しました",
"failed_to_reboot": "ホストの再起動に失敗しました",
"failed_to_set_hostname": "ホスト名の設定に失敗しました",
"failed_to_shutdown": "ホストのシャットダウンに失敗しました",
"hardware": "ハードウェア",
"hostname": "ホスト名",
"import_from_usb": "USBからインポート",
"ip_address": "IPアドレス",
"new_hostname": "新しいホスト名を入力してください:",
"operating_system": "オペレーティングシステム",
"reboot_host": "ホストの再起動",
"shutdown_host": "ホストをシャットダウンします",
"used_space": "使用済みスペース"
},
"log": {
"get_logs": "{error},{provider}ログの取得に失敗しました",
"log_provider": "ログプロバイダー"
},
"supervisor": {
"beta_backup": "この機能をアクティブ化する前に、データのバックアップを作成してください。",
"beta_join_confirm": "ベータチャンネルに参加しますか?",
"beta_release_items": "これには、次のベータリリースが含まれます。",
"beta_warning": "ベータ版はテスターと早期導入者向けであり、不安定なコード変更を含むことができます",
"channel": "チャネル",
"cpu_usage": "SupervisorのCPU使用率",
"failed_to_reload": "スーパーバイザのリロードに失敗しました",
"failed_to_set_option": "Supervisorオプションの設定に失敗しました",
"failed_to_update": "Supervisorの更新に失敗しました",
"join_beta_action": "ベータチャンネルに参加",
"join_beta_description": "Home AssistantRC、Supervisor、ホストのベータ版アップデートを入手する",
"leave_beta_action": "ベータチャンネルを離れる",
"leave_beta_description": "Home Assistant、Supervisor、およびホストの安定した更新を取得する",
"ram_usage": "SupervisorのRAM使用量",
"reload_supervisor": "リロード Supervisor",
"share_diagnostics": "診断の共有",
"share_diagnostics_description": "クラッシュ レポートと診断情報を共有します。",
"share_diagonstics_description": "スーパーバイザで予期しないエラーが発生したときに、クラッシュ レポートと診断情報を自動的に共有しますか?{line_break}これにより、問題を解決することができ、情報はホームアシスタントコアチームにのみアクセス可能であり、他の人と共有されません。{line_break}データには、個人情報や機密情報は含まれていないので、いつでも設定でこれを無効にすることができます。",
"share_diagonstics_title": "HomeAssistantの改善にご協力ください",
"unhealthy_description": "正常でないインストールを実行すると、問題が発生します。以下は、インストールに関する問題の一覧です。",
"unhealthy_reason": {
"docker": "Docker 環境が正常に動作していません",
"privileged": "Supervisorには特権がありません",
"setup": "Supervisorのセットアップに失敗しました",
"supervisor": "Supervisorを更新できませんでした"
},
"unhealthy_title": "インストールが正常でない",
"unsupported_description": "以下は、インストールに関する問題の一覧です。",
"unsupported_reason": {
"container": "問題が発生することが知られているコンテナ",
"dbus": "DBUS",
"docker_configuration": "Dockerの設定",
"docker_version": "Dockerのバージョン",
"job_conditions": "無視されたジョブ条件",
"lxc": "LXC",
"network_manager": "ネットワークマネージャー",
"os": "オペレーティング システム",
"privileged": "Supervisorには特権がありません",
"systemd": "Systemd"
},
"unsupported_title": "サポートされていないインストールを実行しています",
"update_supervisor": "スーパーバイザーの更新",
"warning": "警告"
}
}
},
"ui": {
"auth_store": {
"ask": "このログインの保存をよろしいですか?",
@@ -577,8 +192,7 @@
},
"script": {
"cancel": "キャンセル",
"cancel_multiple": "キャンセル",
"run": "実行"
"cancel_multiple": "キャンセル"
},
"service": {
"run": "実行"
@@ -673,19 +287,6 @@
"yes": "はい"
},
"components": {
"addon-picker": {
"addon": "アドオン",
"error": {
"fetch_addons": {
"description": "アドオンを取得するとエラーが返されました。",
"title": "アドオンの取得中にエラーが発生しました"
},
"no_supervisor": {
"description": "Supervisorが見つからなかったため、アドオンを読み込めませんでした。",
"title": "Supervisorなし"
}
}
},
"area-picker": {
"add_dialog": {
"add": "追加",
@@ -754,8 +355,6 @@
"changed_to_state": "{state}に変更されました",
"cleared_device_class": "クリアされました ({device_class} 未検出)",
"detected_device_class": "{device_class} が検出されました",
"is_closing": "閉じてます",
"is_opening": "開いています",
"rose": "ローズ",
"set": "セット",
"turned_off": "オフになりました",
@@ -860,12 +459,6 @@
"week": "{count} {count, plural,\n one {週}\n other {週}前\n}"
}
},
"service-control": {
"required": "この項目は必須です",
"service_data": "サービスデータ",
"target": "ターゲット",
"target_description": "このサービスは、対象となる領域、デバイス、またはエンティティとして使用する必要があります。"
},
"service-picker": {
"service": "サービス"
},
@@ -976,12 +569,12 @@
"pattern": "クライアント側検証の正規表現パターン",
"text": "テキスト"
},
"platform_not_loaded": "{platform}統合がロードされていません。 'default_config'または '' {platform} ''を追加して、設定に追加してください。",
"platform_not_loaded": "{platform}統合がロードされていません。 'default_config'または '' {platform} ''を追加して、構成に追加してください。",
"required_error_msg": "この項目は必須です",
"timer": {
"duration": "期間"
},
"yaml_not_editable": "このエンティティの設定は UI から編集できません。UI から設定されたエンティティのみが UI から設定できます。"
"yaml_not_editable": "このエンティティの設定は UI から編集できません。UI から設定されたエンティティのみが UI から構成できます。"
},
"image_cropper": {
"crop": "収納"
@@ -1075,7 +668,7 @@
"scene": "シーン",
"script": "スクリプト",
"server_control": "サーバーコントロール",
"tag": "タグ",
"tags": "タグ",
"users": "ユーザー",
"zone": "場所"
},
@@ -1134,7 +727,6 @@
"clusters": "クラスタの管理",
"reconfigure": "デバイスを再設定",
"remove": "デバイスを削除",
"view_in_visualization": "ビジュアライゼーションで表示",
"zigbee_information": "Zigbee 情報"
},
"confirmations": {
@@ -1147,7 +739,7 @@
"power_source": "電源",
"quirk": "癖",
"services": {
"reconfigure": "ZHAデバイスを再設定します(デバイスの修復)。デバイスに問題がある場合に使用します。問題のデバイスがバッテリー駆動のデバイスである場合は、このサービスを使用するときに、デバイスが起動し、コマンドを受け入れていることを確認してください。",
"reconfigure": "ZHAデバイスを再構成します(デバイスの修復)。デバイスに問題がある場合に使用します。問題のデバイスがバッテリー駆動のデバイスである場合は、このサービスを使用するときに、デバイスが起動し、コマンドを受け入れていることを確認してください。",
"remove": "Zigbee ネットワークからデバイスを削除します。",
"updateDeviceName": "デバイス レジストリでこのデバイスのカスタム名を設定します。",
"zigbee_information": "デバイスのZigbee情報を表示します。"
@@ -1170,7 +762,7 @@
"edit_in_yaml_supported": "YAMLで設定を編集することはできます。",
"editor_not_available": "タイプ\"{type}\"で利用できるビジュアルエディタがありません。",
"editor_not_supported": "この設定では、Visual エディタはサポートされていません。",
"error_detected": "設定エラーが検出されました",
"error_detected": "構成エラーが検出されました",
"key_missing": "必要なキー \"{key}\" がありません。",
"key_not_expected": "キー \" {key} \"は予期されていないか、ビジュアルエディターでサポートされていません。",
"key_wrong_type": "\"{key}\" に指定された値は、ビジュアル エディターではサポートされていません。({type_correct}) をサポートしていますが、受信しました ({type_wrong})。",
@@ -1229,7 +821,7 @@
"header": "エリア",
"integrations_page": "インテグレーションページ",
"introduction": "エリアは、デバイスの場所を整理するために使用されます。この情報は、ホームアシスタント全体で、インターフェイス、アクセス権、他のシステムとの統合を整理するために使用されます。",
"introduction2": "デバイスをエリアに配置するには、次のリンクを使用して統合ページに移動し、設定済みの統合をクリックしてデバイス カードにアクセスします。",
"introduction2": "デバイスをエリアに配置するには、次のリンクを使用して統合ページに移動し、構成済みの統合をクリックしてデバイス カードにアクセスします。",
"no_areas": "まだエリアがないようです!"
}
},
@@ -1686,7 +1278,7 @@
},
"webhooks": {
"disable_hook_error_msg": "ウェブホックを無効にできませんでした:",
"info": "webhook によってトリガーされるように設定された URL を公開可能な URL を与えることができ、インスタンスをインターネットに公開することなく、どこからでもホームアシスタントにデータを送信できます。",
"info": "webhook によってトリガーされるように構成された URL を公開可能な URL を与えることができ、インスタンスをインターネットに公開することなく、どこからでもホームアシスタントにデータを送信できます。",
"link_learn_more": "Webhookを利用した自動化の作成について詳しく学んでください。",
"loading": "読み込み中...",
"manage": "管理",
@@ -1698,7 +1290,7 @@
}
},
"alexa": {
"banner": "この UI を介して公開されるエンティティの編集は、configuration.yaml でエンティティ フィルターを設定しているため無効になります。",
"banner": "この UI を介して公開されるエンティティの編集は、configuration.yaml でエンティティ フィルターを構成しているため無効になります。",
"dont_expose_entity": "エンティティを公開しない",
"expose": "Alexa に公開",
"expose_entity": "エンティティの公開",
@@ -1741,7 +1333,7 @@
"title": "パスワードを忘れた場合"
},
"google": {
"banner": "この UI を介して公開されるエンティティの編集は、configuration.yaml でエンティティ フィルターを設定しているため無効になります。",
"banner": "この UI を介して公開されるエンティティの編集は、configuration.yaml でエンティティ フィルターを構成しているため無効になります。",
"disable_2FA": "多要素認証を無効にする",
"dont_expose_entity": "エンティティを公開しない",
"expose": "Google Assistant に公開",
@@ -1826,7 +1418,7 @@
"unit_system_metric": "メトリック"
},
"header": "一般的な設定",
"introduction": "設定の変更は、面倒なプロセスになる可能性があります。私たちは知っています。このセクションでは、あなたの人生を少しでも楽にしようとしています。"
"introduction": "構成の変更は、面倒なプロセスになる可能性があります。私たちは知っています。このセクションでは、あなたの人生を少しでも楽にしようとしています。"
}
}
},
@@ -1879,9 +1471,8 @@
"cant_edit": "編集できるのは、UI で作成された項目のみです。",
"caption": "デバイス",
"confirm_delete": "このデバイスを削除してもよろしいですか?",
"confirm_disable_config_entry": "{entry_name}デバイスはもうありません。設定エントリを無効にしますか?",
"confirm_rename_entity_ids": "エンティティの ID も変更しますか?",
"confirm_rename_entity_ids_warning": "この場合、これらのエンティティを現在使用している設定 (オートメーション、スクリプト、シーン、Lovelace など) は変更されません。",
"confirm_rename_entity_ids_warning": "この場合、これらのエンティティを現在使用している構成 (オートメーション、スクリプト、シーン、Lovelace など) は変更されません。",
"data_table": {
"area": "エリア",
"battery": "バッテリー",
@@ -1897,7 +1488,7 @@
"device_not_found": "デバイスが見つかりません。",
"disabled": "無効",
"disabled_by": {
"config_entry": "設定エントリ",
"config_entry": "構成エントリ",
"integration": "インテグレーション",
"user": "ユーザー"
},
@@ -1976,7 +1567,7 @@
"button": "選択したものを削除",
"confirm_partly_text": "選択した{selected}エンティティの{selected}削除{removable}のみを削除できます。エンティティが削除できるのは、統合によってエンティティが提供されなくなった場合のみです。削除された統合のエンティティを削除する前に、Home Assistantを再起動する必要がある場合があります。削除可能なエンティティを削除してもよろしいですか",
"confirm_partly_title": "削除できるのは、選択された{number}エンティティのみです。",
"confirm_text": "これらのエンティティが含まれている場合は、Lovelace の設定および自動化からそれらを削除する必要があります。Lovelace",
"confirm_text": "これらのエンティティが含まれている場合は、Lovelace の構成および自動化からそれらを削除する必要があります。",
"confirm_title": "{number}エンティティを削除しますか?"
},
"search": "エンティティを検索",
@@ -1992,8 +1583,7 @@
},
"filtering": {
"clear": "消去",
"filtering_by": "フィルタリング",
"show": "表示"
"filtering_by": "フィルタリング"
},
"header": "Home Assistant の設定",
"helpers": {
@@ -2064,18 +1654,7 @@
"delete_confirm": "この統合を削除しますか?",
"device_unavailable": "デバイスを利用できません",
"devices": "{count} {count, plural,\n one {デバイス}\n other {デバイス}\n}",
"disable_restart_confirm": "Homeassistantを再起動して、このintegrationを無効にします。",
"disable": {
"disabled": "無効",
"disabled_by": {
"device": "デバイス",
"integration": "インテグレーション",
"user": "ユーザー"
},
"disabled_cause": "{cause}によって無効化"
},
"documentation": "ドキュメント",
"enable_restart_confirm": "Home Assistantを再起動して、このintegrationを有効にします",
"entities": "{count} {count, plural,\n one {エンティティ}\n other {エントリー}\n}",
"entity_unavailable": "エンティティは利用できません",
"firmware": "ファームウェア: {version}",
@@ -2095,10 +1674,8 @@
"config_flow": {
"aborted": "中止",
"close": "閉じる",
"could_not_load": "設定フローを読み込めませんでした",
"created_config": "{name} の設定を作成しました。",
"created_config": "{name} の構成が作成しました",
"dismiss": "ダイアログを閉じる",
"error": "エラー",
"error_saving_area": "エリアを保存できません: {error}",
"external_step": {
"description": "この手順を完了するには、外部のウエブサイトにアクセスする必要があります。",
@@ -2107,22 +1684,13 @@
"finish": "完了",
"loading_first_time": "インテグレーションのインストールを完了するまでお待ちください",
"not_all_required_fields": "必須フィールドの一覧に入力するわけではありません。",
"pick_flow_step": {
"new_flow": "いいえ、{integration} の他のインスタンスを設定します",
"title": "これらを発見しました。設定しますか?"
},
"submit": "送信"
},
"configure": "設定",
"configure": "構成",
"configured": "設定済み",
"confirm_new": "{integration}を設定しますか?",
"description": "インテグレーションの管理とセットアップ",
"details": "インテグレーションの詳細",
"disable": {
"disabled_integrations": "{number}は無効",
"hide_disabled": "無視されたインテグレーションを表示",
"show_disabled": "無効なintegrationを表示"
},
"discovered": "発見",
"home_assistant_website": "Home Assistant のウェブサイト",
"ignore": {
@@ -2145,12 +1713,12 @@
"none_found_detail": "別の検索基準をためしてみます。",
"note_about_integrations": "まだすべての統合をUI経由で設定できるわけではありません。",
"note_about_website_reference": "より多くが利用可能です",
"reconfigure": "再設定",
"reconfigure": "再構成",
"rename_dialog": "このコンフィグレーションエントリーの名前を変更",
"rename_input_label": "エントリー名",
"search": "インテグレーションを検索"
},
"introduction": "このビューでは、コンポーネントとHome Assistantを設定できます。まだすべてをUIから設定できるわけではありませんが、現在取り組んでいます。",
"introduction": "このビューでは、コンポーネントとHome Assistantを構成できます。まだすべてをUIから構成できるわけではありませんが、現在取り組んでいます。",
"logs": {
"caption": "ログ",
"clear": "消去",
@@ -2306,10 +1874,10 @@
"node_count": "{count}ノード"
},
"node_config": {
"header": "ノード設定",
"header": "ノード構成",
"help_source": "設定パラメータの説明とヘルプテキストは、OpenZWaveプロジェクトによって提供されます。",
"introduction": "Z-Wave ノードの各種設定パラメータを管理します。",
"wakeup_help": "バッテリ駆動のノードは、設定を変更するためにスリープ状態になっている必要があります。ードがスリープ解除されていない場合、OpenZWave は、ノードがウェイクアップする次の時間 (または数日後) にノードの設定を更新しようとします。デバイスを起動するには、次の手順に従います。"
"wakeup_help": "バッテリ駆動のノードは、構成を変更するためにスリープ状態になっている必要があります。ードがスリープ解除されていない場合、OpenZWave は、ノードがウェイクアップする次の時間 (または数日後) にノードの構成を更新しようとします。デバイスを起動するには、次の手順に従います。"
},
"node_metadata": {
"product_manual": "製品マニュアル"
@@ -2318,18 +1886,18 @@
"associations": "関連グループとメンバーシップの更新",
"cacheload": "OpenZWave キャッシュファイルから情報を読み込んでいます。バッテリー・ノードは、ノードがウェイクアップするまでこの段階にとどまります。",
"complete": "面接プロセスが完了しました",
"configuration": "ノードから設定値を取得する",
"configuration": "ノードから構成値を取得する",
"dynamic": "ノードから頻繁に変更される値を取得する",
"instances": "デバイスがサポートするインスタンスまたはチャネルに関する詳細の取得",
"manufacturerspecific1": "ードからの製造元および製品IDコードの取得",
"manufacturerspecific2": "ノードから頻繁に変更される値を取得する",
"neighbors": "ノードの近隣ノードのリストの取得",
"nodeinfo": "ノードから設定値を取得する",
"nodeinfo": "ノードから構成値を取得する",
"nodeplusinfo": "ードからZ-Wave +情報を取得する",
"probe": "ノードが起動しているかどうかの確認",
"protocolinfo": "コントローラからこのードの基本的なZ-Wave機能を取得する",
"session": "ノードから頻繁に変更される値を取得する",
"static": "ノードから設定値を取得する",
"static": "ノードから構成値を取得する",
"versions": "ファームウェアおよびコマンドクラスのバージョンに関する情報の取得",
"wakeup": "ウェイクアップ キューとメッセージのサポートのセットアップ"
},
@@ -2545,7 +2113,7 @@
"validation": {
"check_config": "設定を確認",
"heading": "設定の検証",
"introduction": "設定に変更を加えた後、すべてが有効であることを確認する場合は、設定を検証します。",
"introduction": "構成に変更を加えた後、すべてが有効であることを確認する場合は、構成を検証します。",
"invalid": "設定は無効です",
"valid": "設定は有効です!"
}
@@ -2637,7 +2205,7 @@
"search_again": "もう一度検索",
"spinner": "ZHA Zigbeeデバイスを検索しています..."
},
"button": "設定",
"button": "構成",
"cluster_attributes": {
"attributes_of_cluster": "選択したクラスターの属性",
"get_zigbee_attribute": "Zigbee属性を取得",
@@ -2658,7 +2226,7 @@
"clusters": {
"header": "クラスター",
"help_cluster_dropdown": "クラスターを選択して、属性とコマンドを表示します。",
"introduction": "クラスタは Zigbee 機能の設定要素です。機能を論理単位に分割します。クライアントとサーバーの種類があり、属性とコマンドで設定されています。"
"introduction": "クラスタは Zigbee 機能の構成要素です。機能を論理単位に分割します。クライアントとサーバーの種類があり、属性とコマンドで構成されています。"
},
"common": {
"clusters": "クラスター",
@@ -2666,12 +2234,12 @@
"value": "バリュー"
},
"device_pairing_card": {
"CONFIGURED": "設定の完了",
"CONFIGURED": "構成の完了",
"CONFIGURED_status_text": "初期化中",
"INITIALIZED": "初期化が完了しました",
"INITIALIZED_status_text": "デバイスを使用する準備ができました",
"INTERVIEW_COMPLETE": "インタビュー完了",
"INTERVIEW_COMPLETE_status_text": "設定",
"INTERVIEW_COMPLETE_status_text": "構成",
"PAIRED": "デバイスが見つかりました",
"PAIRED_status_text": "インタビュー開始"
},
@@ -2711,14 +2279,13 @@
"caption": "可視化",
"header": "ネットワークの視覚化",
"highlight_label": "デバイスを強調表示",
"refresh_topology": "トポロジの更新",
"zoom_label": "デバイスにズーム"
}
},
"zone": {
"add_zone": "ゾーンを追加",
"caption": "ゾーン",
"configured_in_yaml": "configuration.yamlで設定されたゾーンは、UIで編集できません。",
"configured_in_yaml": "configuration.yamlで構成されたゾーンは、UIで編集できません。",
"confirm_delete": "このゾーンを削除してもよろしいですか?",
"create_zone": "ゾーンを作成",
"description": "ユーザーを追跡するゾーンを管理する",
@@ -2739,8 +2306,8 @@
},
"edit_home_zone": "ホームゾーンの半径は、フロントエンドからはまだ編集できません。マップ上のマーカーをドラッグして、ホームゾーンを移動します。",
"edit_home_zone_narrow": "ホームゾーンの半径は、フロントエンドからはまだ編集できません。場所は、一般設定から変更できます。",
"go_to_core_config": "一般的な設定に移動しますか?",
"home_zone_core_config": "ホームゾーンの場所は、一般設定ページから編集できます。ホームゾーンの半径は、フロントエンドからはまだ編集できません。一般設定に移動しますか?",
"go_to_core_config": "一般的な構成に移動しますか?",
"home_zone_core_config": "ホームゾーンの場所は、一般構成ページから編集できます。ホームゾーンの半径は、フロントエンドからはまだ編集できません。一般構成に移動しますか?",
"introduction": "ゾーンを使用すると、地球上の特定の地域を指定できます。人がゾーン内にいるとき、州はゾーンから名前を取ります。ゾーンは、オートメーション設定内のトリガーまたは条件として使用することもできます。",
"no_zones_created_yet": "まだゾーンを作成していないようです。"
},
@@ -2843,12 +2410,12 @@
"network_stopped": "Z-Waveネットワークが停止しました"
},
"node_config": {
"config_parameter": "パラメーターの設定",
"config_parameter": "構成パラメーターの設定",
"config_value": "バリューを設定",
"false": "偽",
"header": "ノード設定オプション",
"header": "ノード構成オプション",
"seconds": "秒",
"set_config_parameter": "パラメーターの設定",
"set_config_parameter": "構成パラメーターの設定",
"set_wakeup": "ウェイクアップ間隔を設定",
"true": "真"
},
@@ -2933,18 +2500,13 @@
"type": "イベントの種類"
},
"services": {
"accepts_target": "このサービスは、ターゲットを受け入れます。例: `entity_idlight.bed_light`",
"all_parameters": "利用可能なすべてのパラメータ",
"call_service": "サービスの呼び出し",
"column_description": "説明",
"column_example": "例",
"column_parameter": "パラメータ",
"description": "サービス開発ツールを使用すると、ホームアシスタントで利用可能なサービスを呼び出すことができます。",
"fill_example_data": "データ記入例",
"title": "サービス",
"ui_mode": "UIモードに移動します",
"yaml_mode": "YAMLモードに移動します",
"yaml_parameters": "YAMLモードでのみ使用可能なパラメータ"
"title": "サービス"
},
"states": {
"alert_entity_field": "エンティティは必須フィールドです",
@@ -3002,7 +2564,7 @@
"lovelace": {
"add_entities": {
"generated_unsupported": "この機能は、Lovelace UIを制御している場合にのみ使用できます。",
"saving_failed": "Lovelace UI設定の保存に失敗しました。",
"saving_failed": "Lovelace UI構成の保存に失敗しました。",
"yaml_unsupported": "YAMLモードでLovelace UIを使用している場合、この関数は使用できません。"
},
"cards": {
@@ -3033,7 +2595,7 @@
"url": "{url_path}へのウィンドウを開く"
},
"safe-mode": {
"description": "Home Assistant は、設定の読み込み中に問題が発生し、セーフモードで実行されています。エラーログを見て、何が問題だったかを確認してください。",
"description": "Home Assistant は、構成の読み込み中に問題が発生し、セーフモードで実行されています。エラーログを見て、何が問題だったかを確認してください。",
"header": "セーフモードがアクティブになりました"
},
"shopping-list": {
@@ -3322,7 +2884,7 @@
"show_code_editor": "コードエディタを表示",
"show_visual_editor": "ビジュアルエディターを表示",
"toggle_editor": "エディターの切り替え",
"typed_header": "{type}カードの設定",
"typed_header": "{type}カードの構成",
"unsaved_changes": "変更が保存されていません"
},
"edit_lovelace": {
@@ -3335,8 +2897,8 @@
"add": "ビューの追加",
"delete": "ビューの削除",
"edit": "ビューの編集",
"header": "設定を表示",
"header_name": "{name}設定の表示",
"header": "構成を表示",
"header_name": "{name}構成の表示",
"move_left": "ビューを左に移動",
"move_right": "ビューを右に移動",
"tab_badges": "バッジ",
@@ -3371,7 +2933,7 @@
},
"migrate": {
"header": "設定に互換性がありません",
"migrate": "設定を移行する",
"migrate": "構成を移行する",
"para_migrate": "Home Assistantは、「設定の移行」ボタンを押すことで、すべてのカードとビューにIDを自動的に追加できます。",
"para_no_id": "この要素には ID がありません。'ui-lovelace.yaml' のこの要素に ID を追加してください。"
},
@@ -3379,18 +2941,16 @@
"header": "カードを移動するビューを選択してください"
},
"raw_editor": {
"confirm_remove_config_text": "Lovelace UI設定を削除すると、エリアとデバイスを含むLovelace UIビューが自動的に生成されます。",
"confirm_remove_config_title": "Lovelace UI設定を削除してもよろしいですかエリアとデバイスを使用してLovelace UIビューを自動的に生成します。",
"confirm_remove_config_text": "Lovelace UI構成を削除すると、エリアとデバイスを含むLovelace UIビューが自動的に生成されます。",
"confirm_remove_config_title": "Lovelace UI構成を削除してもよろしいですかエリアとデバイスを使用してLovelace UIビューを自動的に生成します。",
"confirm_unsaved_changes": "未保存の変更があります、終了してもよろしいですか?",
"confirm_unsaved_comments": "コンフィグレーションはコメントが含まれています、これらは保存されません。本当に続けますか?",
"error_invalid_config": "設定が無効です: {error}",
"error_parse_yaml": "YAMLを解析できません: {error}",
"error_remove": "設定を削除できません: {error}",
"error_remove": "構成を削除できません: {error}",
"error_save_yaml": "YAMLを保存できません: {error}",
"header": "設定を編集",
"lovelace_changed": "Lovelace設定が更新されましたが、エディタで更新された設定をロードして、現在の変更を失いますか?",
"reload": "リロード",
"resources_moved": "リソースはLovelace設定に追加されなくなりましたが、Lovelace設定パネルで追加できます。",
"resources_moved": "リソースはLovelace構成に追加されなくなりましたが、Lovelace構成パネルで追加できます。",
"save": "保存",
"saved": "保存しました",
"unsaved_changes": "保存されていない変更"
@@ -3400,11 +2960,11 @@
"close": "閉じる",
"empty_config": "新しいダッシュボードから開始する",
"header": "Lovelace UIを制御する",
"para": "このダッシュボードは現在、Home Assistantによって管理されています。新しいエンティティまたはLovelace UIコンポーネントが利用可能になると、自動的に更新されます。制御すると、このダッシュボードは自動的に更新されなくなります。いつでも設定\nで新しいダッシュボードを作成して、変更することができます。",
"para": "このダッシュボードは現在、Home Assistantによって管理されています。新しいエンティティまたはLovelace UIコンポーネントが利用可能になると、自動的に更新されます。制御すると、このダッシュボードは自動的に更新されなくなります。いつでも構成で新しいダッシュボードを作成して、変更することができます。",
"para_sure": "ユーザー インターフェイスを制御しますか?",
"save": "制御する",
"yaml_config": "ここでダッシュボードの現在の設定を説明します。",
"yaml_control": "YAML モードで制御するには、このダッシュボードの設定で指定した名前、またはデフォルトの 'ui-lovelace.yaml' を使用して YAML ファイルを作成します。",
"yaml_config": "ここで開始するには、このダッシュボードの現在の構成です。",
"yaml_control": "YAML モードで制御するには、このダッシュボードの構成で指定した名前、またはデフォルトの 'ui-lovelace.yaml' を使用して YAML ファイルを作成します。",
"yaml_mode": "このダッシュボードで YAML モードを使用している場合は、UI から Lovelace 設定を変更することはできません。UI からこのダッシュボードを管理する場合は、'configuration.yaml' の Lovelace 設定から 'mode: yaml' を削除します。"
},
"select_view": {
@@ -3476,11 +3036,8 @@
"playback_title": "メッセージの再生"
},
"my": {
"component_not_loaded": "このリダイレクトは、ホーム アシスタント インスタンスではサポートされていません。このリダイレクトを使用するには、integration {integration} が必要です。",
"documentation": "ドキュメント",
"error": "不明なエラーが発生しました",
"faq_link": "マイホームアシスタントFAQ",
"no_supervisor": "このリダイレクトは、ホーム アシスタントのインストールではサポートされていません。ホームアシスタントオペレーティングシステムまたはホームアシスタントの監視インストール方法のいずれかが必要です。詳細については、{docs_link}を参照してください。",
"not_supported": "このリダイレクトは、HomeAssistantインスタンスではサポートされていません。サポートされているリダイレクトとそれらが導入されたバージョンについては、 {link}を確認してください。"
},
"page-authorize": {
@@ -3789,7 +3346,7 @@
},
"sidebar": {
"done": "完了",
"external_app_configuration": "アプリの設定",
"external_app_configuration": "アプリの構成",
"sidebar_toggle": "サイドバーの切り替え"
}
}

View File

@@ -101,199 +101,6 @@
"unknown": "알수없음"
}
},
"supervisor": {
"addon": {
"dashboard": {
"capability": {
"apparmor": {
"description": "앱아머 ( 'Application Armor')는 네트워크 액세스, 원시 소켓 액세스 및 특정 파일 읽기, 쓰기 또는 실행 권한과 같은 추가 기능 기능을 제한하는 Linux 커널 보안 모듈입니다. \n\n 애드온 작성자는 애드온에 최적화 된 보안 프로필을 제공하거나 비활성화하도록 요청할 수 있습니다. AppArmor가 비활성화되면 보안 위험이 높아져 추가 기능의 보안 점수에 부정적인 영향을 미칩니다.",
"title": "앱아머"
},
"auth_api": {
"description": "애드온은 Home Assistant에서 사용자를 인증 할 수 있으므로 이 기능을 통해 사용자는 Home Assistant 사용자 이름 / 암호를 사용하여 애드온 내에서 실행되는 응용 프로그램에 로그인 할 수 있습니다. 이 배지는 애드온 작성자가이 이러한 기능을 요청하는지 여부를 나타냅니다.",
"title": "홈어시스턴트 인증"
},
"docker_api": {
"description": "애드온 작성자가 시스템에서 실행중인 Docker 인스턴스에 대한 관리 액세스 권한을 갖도록 애드온을 요청했습니다. 이 모드는 애드온이 전체 홈 어시스턴트 시스템에 대한 전체 액세스 및 제어를 제공하여 보안 위험을 추가하고 오용시 시스템을 손상시킬 수 있습니다. 따라서이 기능은 애드온 보안 점수에 부정적인 영향을 미칩니다. \n\n 이 수준의 액세스는 자동으로 부여되지 않으며 귀하가 확인해야합니다. 이렇게하려면 애드온에서 보호 모드를 수동으로 비활성화해야합니다. 이 애드온의 출처를 알고 필요하고 신뢰할 수있는 경우에만 보호 모드를 비활성화하십시오.",
"title": "전체 Docker 액세스"
},
"host_pid": {
"description": "일반적으로 애드온이 실행하는 프로세스는 다른 모든 시스템 프로세스와 격리됩니다. 애드온 작성자는 호스트 시스템 인스턴스에서 실행중인 시스템 프로세스에 액세스 할 수 있도록 애드온을 요청했으며 애드온이 호스트 시스템에서도 프로세스를 생성 할 수 있도록 허용했습니다. 이 모드는 애드온이 전체 홈 어시스턴트 시스템에 대한 전체 액세스 및 제어를 제공하여 보안 위험을 추가하고 오용시 시스템을 손상시킬 수 있습니다. 따라서이 기능은 애드온 보안 점수에 부정적인 영향을 미칩니다. \n\n 이 수준의 액세스는 자동으로 부여되지 않으며 귀하가 확인해야합니다. 이렇게하려면 애드온에서 보호 모드를 수동으로 비활성화해야합니다. 이 애드온의 출처를 알고 필요하고 신뢰할 수있는 경우에만 보호 모드를 비활성화하십시오.",
"title": "호스트 프로세스 네임스페이스"
},
"ingress": {
"description": "이 애드온은 안전하게 내장된 홈어시스턴트 인터페이스로의 진입을 사용합니다.",
"title": "진입"
},
"label": {
"apparmor": "앱아머",
"auth": "인증",
"docker": "Docker",
"hardware": "하드웨어",
"hass": "hass",
"hassio": "Hassio",
"host": "호스트",
"host_pid": "호스트 pid",
"ingress": "진입",
"rating": "평가",
"stage": "단계"
},
"role": {
"manager": "관리자"
}
}
}
},
"common": {
"cancel": "취소",
"error": {
"unknown": "알 수 없는 오류",
"update_failed": "업데이트 실패"
},
"failed_to_restart_name": "{name} 을(를) 다시 시작하지 못했습니다",
"refresh": "새로 고침",
"reload": "재실행",
"reset_defaults": "기본값으로 재설정",
"reset_options": "옵션 재설정",
"restart": "재시작",
"restart_name": "{name} 다시 시작",
"running_version": "현재 버전 {version}을 실행 중입니다.",
"save": "저장",
"show_more": "자세한 정보 표시"
},
"confirm": {
"reset_options": {
"text": "모든 옵션을 재설정 하시겠습니까?",
"title": "옵션 재설정"
},
"restart": {
"text": "{name} 을(를) 다시 시작하시겠습니까?",
"title": "{name} 다시 시작"
},
"update": {
"title": "{name} 업데이트"
}
},
"dialog": {
"network": {
"connected_to": "{ssid} 연결됨",
"dhcp": "DHCP",
"disabled": "비활성화",
"dns_servers": "DNS 서버",
"failed_to_change": "네트워크 설정 변경 실패",
"gateway": "게이트웨이 주소",
"ip_netmask": "IP 주소/넷마스크",
"open": "공개",
"scan_ap": "액세스 포인트 검색",
"static": "정적",
"title": "네트워크 설정",
"unsaved": "저장하지 않은 변경 사항이 있습니다. 탭을 변경하면 손실됩니다. 계속 하시겠습니까?",
"warning": "Wi-Fi, IP 또는 게이트웨이 주소를 변경하는 경우 연결이 끊어 질 수 있습니다!",
"wep": "WEP",
"wpa": "wpa-psk"
},
"registries": {
"add_new_registry": "신규 레지스트리 추가",
"add_registry": "레지스트리 추가",
"failed_to_add": "레지스트리 추가 실패",
"failed_to_remove": "레지스트리 제거 실패",
"no_registries": "구성된 레지스트리 없음",
"password": "암호",
"registry": "레지스트리",
"remove": "제거",
"title_add": "신규 컨테이너 레지스트리 추가",
"title_manage": "컨테이너 레지스트리 관리",
"username": "사용자명"
},
"repositories": {
"add": "추가하기",
"remove": "제거하기",
"title": "추가 기능 저장소 관리"
},
"restart_addon": {
"confirm_text": "추가 기능 다시 시작",
"text": "변경 사항과 함께 추가 기능을 다시 시작하시겠습니까?"
},
"update": {
"create_snapshot": "업데이트하기 전에 {name}의 스냅샷을 만들기",
"snapshot": "스냅샷",
"snapshotting": "{name} 스냅샷을 만드는 중",
"updating": "{name} 을(를) {version} 버전으로 업데이트 중"
}
},
"my": {
"error": "알려지지 않은 에러 발생",
"error_addon_not_found": "애드온을 찾을 수 없습니다.",
"faq_link": "자주 묻는 질문",
"not_supported": "이 리다이렉트는 홈어시트턴드에서 지원되지 않습니다. {link} 에서 소개되는 리다이렉트와 버전을 확인하세요."
},
"snapshot": {
"available_snapshots": "사용 가능한 스냅샷",
"could_not_create": "스냅샷을 만들 수 없습니다.",
"create": "생성",
"create_blocked_not_running": "{state} 상태이기 때문에 지금은 스냅샷을 생성 할 수 없습니다.",
"create_snapshot": "스냅샷 생성",
"description": "스냅샷을 사용하면 홈 어시스턴트 인스턴스의 모든 데이터를 쉽게 백업하고 복원할 수 있습니다.",
"folder": {
"addons/local": "로컬 애드온",
"media": "미디어"
},
"name": "이름",
"no_snapshots": "아직 스냅샷이 없습니다.",
"security": "보안",
"type": "유형",
"upload_snapshot": "스냅샷 업로드"
},
"store": {
"missing_addons": "애드온이 없나요? 사용자 프로필에서 고급 모드 활성화 하세요.",
"no_results_found": "{repository} 에 결과가 없습니다.",
"registries": "레지스트리",
"repositories": "저장소"
},
"system": {
"core": {
"cpu_usage": "코어 CPU 사용량",
"ram_usage": "코어 RAM 사용량"
},
"host": {
"change": "변경",
"change_hostname": "호스트 이름 변경",
"confirm_reboot": "호스트를 재부팅 하시겠습니까?",
"confirm_shutdown": "호스트를 종료 하시겠습니까?",
"deployment": "배포",
"docker_version": "Docker 버전",
"emmc_lifetime_used": "eMMC 사용 시간",
"failed_to_import_from_usb": "USB에서 가져오기 실패",
"failed_to_set_hostname": "호스트 이름 설정 실패",
"hardware": "하드웨어",
"hostname": "호스트 이름",
"import_from_usb": "USB에서 가져오기",
"ip_address": "IP 주소",
"new_hostname": "새 호스트 이름을 입력하십시오.",
"operating_system": "운영 체제",
"reboot_host": "호스트 재부팅",
"shutdown_host": "호스트 종료",
"used_space": "사용 공간"
},
"log": {
"get_logs": "{provider} 로그를 가져 오지 못했습니다 {error}",
"log_provider": "로그 제공"
},
"supervisor": {
"channel": "채널",
"cpu_usage": "Supervisor CPU 사용량",
"failed_to_reload": "Supervisor 재실행 실패",
"failed_to_set_option": "Supervisor 옵션 설정 실패",
"failed_to_update": "Supervisor 업데이트 실패",
"ram_usage": "Supervisor RAM 사용량",
"unhealthy_description": "비정상적인 설치를 실행하면 문제가 발생합니다. 다음은 설치시 발견 된 문제 목록입니다. 링크를 클릭하여 문제를 해결하는 방법을 알아보십시오.",
"unhealthy_title": "비정상 설치입니다.",
"unsupported_description": "다음은 설치시 발견 된 문제 목록입니다. 링크를 클릭하여 문제를 해결하는 방법을 알아보십시오.",
"unsupported_title": "지원되지 않는 설치로 운영 중입니다.",
"update_supervisor": "Supervisor 업데이트"
}
}
},
"ui": {
"auth_store": {
"ask": "로그인 상태를 유지하시겠습니까?",
@@ -312,7 +119,7 @@
},
"automation": {
"last_triggered": "최근 트리거 됨",
"trigger": "동작 실행"
"trigger": "실행"
},
"camera": {
"not_available": "이미지 사용 불가"
@@ -392,8 +199,7 @@
},
"script": {
"cancel": "취소",
"cancel_multiple": "{number} 개 취소",
"run": "실행"
"cancel_multiple": "{number} 개 취소"
},
"service": {
"run": "실행"
@@ -490,13 +296,13 @@
"components": {
"area-picker": {
"add_dialog": {
"add": "추가하기",
"add": "추가",
"failed_create_area": "영역을 만들지 못했습니다.",
"name": "이름",
"text": "새로운 영역의 이름을 입력해주세요.",
"title": "새로운 영역 추가하기"
"title": "새로운 영역 추가"
},
"add_new": "새로운 영역 추가하기",
"add_new": "새로운 영역 추가...",
"area": "영역",
"clear": "지우기",
"show_areas": "영역 표시"
@@ -649,9 +455,9 @@
"service": "서비스"
},
"user-picker": {
"add_user": "사용자 추가하기",
"add_user": "사용자 추가",
"no_user": "사용자 없음",
"remove_user": "사용자 제거하기"
"remove_user": "사용자 제거"
}
},
"dialogs": {
@@ -723,8 +529,8 @@
"unit_of_measurement": "측정 단위"
},
"input_select": {
"add": "추가하기",
"add_option": "옵션 추가하기",
"add": "추가",
"add_option": "옵션 추가",
"no_options": "아직 옵션이 없습니다.",
"options": "옵션"
},
@@ -761,14 +567,11 @@
"person": {
"create_zone": "현재 위치로 지역 만들기"
},
"remote": {
"activity": "현재 활동"
},
"restored": {
"confirm_remove_text": "이 구성요소를 제거하시겠습니까?",
"confirm_remove_title": "구성요소를 제거하시겠습니까?",
"not_provided": "이 구성요소는 현재 사용할 수 없습니다. 기기의 남겨진 잔여 데이터 이거나 제거, 변경 또는 기능 장애가 있는 통합 구성요소일 수 있습니다.",
"remove_action": "구성요소 제거하기",
"remove_action": "구성요소 제거",
"remove_intro": "구성요소를 더 이상 사용하지 않는 경우, 이를 제거하여 정리할 수 있습니다."
},
"script": {
@@ -835,7 +638,7 @@
"scene": "씬",
"script": "스크립트",
"server_control": "서버 제어",
"tag": "태그",
"tags": "태그",
"users": "사용자",
"zone": "지역"
},
@@ -890,10 +693,10 @@
},
"zha_device_info": {
"buttons": {
"add": "이 기기를 통해 기기 추가하기",
"add": "이 기기를 통해 기기 추가",
"clusters": "클러스터 관리",
"reconfigure": "기기 재설정",
"remove": "기기 제거하기",
"remove": "기기 제거",
"zigbee_information": "Zigbee 기기 서명"
},
"confirmations": {
@@ -992,8 +795,8 @@
},
"editor": {
"actions": {
"add": "동작 추가하기",
"delete": "삭제하기",
"add": "동작 추가",
"delete": "삭제",
"delete_confirm": "정말 삭제하시겠습니까?",
"duplicate": "복제",
"header": "동작",
@@ -1003,12 +806,12 @@
"type_select": "동작 유형",
"type": {
"choose": {
"add_option": "옵션 추가하기",
"add_option": "옵션 추가",
"conditions": "조건",
"default": "기본 동작",
"label": "선택",
"option": "옵션 {number}",
"remove_option": "옵션 제거하기",
"remove_option": "옵션 제거",
"sequence": "동작"
},
"condition": {
@@ -1076,12 +879,12 @@
"no_inputs": "이 블루프린트에는 입력이 없습니다."
},
"conditions": {
"add": "조건 추가하기",
"delete": "삭제하기",
"add": "조건 추가",
"delete": "삭제",
"delete_confirm": "정말 삭제하시겠습니까?",
"duplicate": "복제",
"header": "조건",
"introduction": "조건은 선택 사항이며 자동화가 트리거 될 때 설정된 모든 조건이 충족되지 않으면 동작되지 않도록 할 수 있습니다.",
"introduction": "조건은 자동화 규칙의 선택사항이며 트리거 될 때 설정된 모든 조건이 충족되지 않으면 동작되지 않도록 사용할 수 있습니다.",
"learn_more": "조건에 대해 더 알아보기",
"name": "조건",
"type_select": "조건 유형",
@@ -1180,8 +983,8 @@
"move_up": "위로 이동",
"save": "저장하기",
"triggers": {
"add": "트리거 추가하기",
"delete": "삭제하기",
"add": "트리거 추가",
"delete": "삭제",
"delete_confirm": "정말 삭제하시겠습니까?",
"duplicate": "복제",
"header": "트리거",
@@ -1622,11 +1425,8 @@
"description": "구성된 기기를 관리합니다",
"device_info": "기기 정보",
"device_not_found": "기기를 찾을 수 없습니다.",
"disabled_by": {
"config_entry": "구성 항목"
},
"entities": {
"add_entities_lovelace": "Lovelace 에 추가하기",
"add_entities_lovelace": "Lovelace 에 추가",
"disabled_entities": "+{count} {count, plural,\n one {비활성화 된 구성요소}\n other {비활성화 된 구성요소}\n}",
"entities": "구성요소",
"hide_disabled": "비활성화 된 구성요소 숨김",
@@ -1688,7 +1488,7 @@
"introduction": "Home Assistant 는 구성요소의 식별을 위해 모든 구성요소에 고유한 레지스트리를 부여합니다. 각각의 구성요소들은 자신만의 고유한 구성요소 ID 를 가집니다.",
"introduction2": "구성요소 레지스트리를 사용하여 이름을 대체하거나 구성요소 ID 변경 또는 Home Assistant 에서 항목을 제거할 수 있습니다.",
"remove_selected": {
"button": "선택된 구성요소 제거하기",
"button": "선택된 구성요소 제거",
"confirm_partly_text": "선택한 {selected} 개의 구성요소 중 {removable} 개의 구성요소를 제거할 수 있습니다. 통합 구성요소가 더 이상 구성요소를 제공하지 않는 경우에만 구성요소를 제거할 수 있으며, 제거된 통합 구성요소의 구성요소를 제거하기 전에 Home Assistant 를 다시 시작해야 할 수 있습니다. 제거 가능한 구성요소를 제거하시겠습니까?",
"confirm_partly_title": "선택된 {number} {number, plural,\n one { 개의 구성요소}\n other { 개의 구성요소}\n} 만 제거할 수 있습니다.",
"confirm_text": "이러한 구성요소가 포함된 경우 Lovelace 구성 및 자동화에서 제거해야 합니다.",
@@ -1714,12 +1514,12 @@
"caption": "도우미",
"description": "자동화 구축에 도움이 되는 요소를 관리합니다",
"dialog": {
"add_helper": "도우미 추가하기",
"add_platform": "{platform} 추가하기",
"add_helper": "도우미 추가",
"add_platform": "{platform} 추가",
"create": "만들기"
},
"picker": {
"add_helper": "도우미 추가하기",
"add_helper": "도우미 추가",
"headers": {
"editable": "수정 가능",
"entity_id": "구성요소 ID",
@@ -1767,7 +1567,7 @@
"missing_zwave": "Z-Wave 구성 패널이 보이지 않으신가요? {integrations_page} 의 ZHA 항목으로 이동되었습니다."
},
"integrations": {
"add_integration": "통합 구성요소 추가하기",
"add_integration": "통합 구성요소 추가",
"attention": "주의 필요",
"caption": "통합 구성요소",
"config_entry": {
@@ -1871,8 +1671,8 @@
"dismiss": "닫기",
"edit_dashboard": "대시보드 편집",
"icon": "아이콘",
"new_dashboard": "새로운 대시보드 추가하기",
"remove_default": "이 기기에서 기본값으로 제거하기",
"new_dashboard": "새로운 대시보드 추가",
"remove_default": "이 기기에서 기본값으로 제거",
"require_admin": "관리자 전용",
"set_default": "이 기기에서 기본값으로 설정",
"show_sidebar": "사이드바에 표시",
@@ -1883,7 +1683,7 @@
"url_error_msg": "URL 은 - 를 포함해야 하며 _ 및 - 를 제외한 공백이나 특수 문자를 포함할 수 없습니다"
},
"picker": {
"add_dashboard": "대시보드 추가하기",
"add_dashboard": "대시보드 추가",
"headers": {
"conf_mode": "구성 방법",
"default": "기본값",
@@ -1904,7 +1704,7 @@
"create": "만들기",
"delete": "삭제",
"dismiss": "닫기",
"new_resource": "새로운 리소스 추가하기",
"new_resource": "새로운 리소스 추가",
"type": "리소스 유형",
"update": "업데이트",
"url": "URL",
@@ -1913,7 +1713,7 @@
"warning_text": "리소스를 추가하는 것은 위험할 수 있습니다. 리소스의 출처를 알고 신뢰할 수 있는지 확인해주세요. 잘못된 리소스는 시스템에 심각한 손상을 줄 수 있습니다."
},
"picker": {
"add_resource": "새로운 리소스 추가하기",
"add_resource": "새로운 리소스 추가",
"headers": {
"type": "유형",
"url": "URL"
@@ -2054,9 +1854,9 @@
"none_found": "OpenZWave 인스턴스를 찾을 수 없습니다. 이 상황이 잘못되었다고 생각되시면 OpenZWave 및 MQTT 설정을 확인하고 Home Assistant 가 MQTT 브로커와 통신할 수 있는지 확인해주세요."
},
"services": {
"add_node": "노드 추가하기",
"add_node": "노드 추가",
"cancel_command": "명령 취소",
"remove_node": "노드 제거하기"
"remove_node": "노드 제거"
}
},
"person": {
@@ -2098,13 +1898,13 @@
"editor": {
"default_name": "새로운 씬",
"devices": {
"add": "기기 추가하기",
"add": "기기 추가",
"delete": "기기 삭제",
"header": "기기",
"introduction": "씬에 포함시키려는 기기를 추가해주세요. 모든 기기를 이 씬에 원하는 상태로 설정해주세요."
},
"entities": {
"add": "구성요소 추가하기",
"add": "구성요소 추가",
"delete": "구성요소 삭제",
"device_entities": "기기에 속하는 구성요소를 추가하면 해당 기기가 추가됩니다.",
"header": "구성요소",
@@ -2120,7 +1920,7 @@
"unsaved_confirm": "변경된 내용을 저장하지 않았습니다. 이 페이지를 떠나시겠습니까?"
},
"picker": {
"add_scene": "씬 추가하기",
"add_scene": "씬 추가",
"delete_confirm": "이 씬을 삭제하시겠습니까?",
"delete_scene": "씬 삭제",
"edit_scene": "씬 편집",
@@ -2149,7 +1949,7 @@
"id": "구성요소 ID",
"id_already_exists": "ID 가 이미 존재합니다",
"id_already_exists_save_error": "고유한 ID 가 아니므로 이 스크립트를 저장할 수 없습니다. 다른 ID 를 선택하거나 자동생성하려면 비워두세요.",
"introduction": "스크립트를 사용하여 일련의 동작을 실행합니다.",
"introduction": "스크립트를 사용하여 동작의 시퀀스를 실행합니다.",
"link_available_actions": "사용가능한 동작에 대해 더 알아보기.",
"load_error_not_editable": "scripts.yaml 의 스크립트만 편집할 수 있습니다.",
"max": {
@@ -2170,7 +1970,7 @@
"sequence_sentence": "이 스크립트의 동작 시퀀스."
},
"picker": {
"add_script": "스크립트 추가하기",
"add_script": "스크립트 추가",
"duplicate": "복제",
"edit_script": "스크립트 편집",
"header": "스크립트 편집기",
@@ -2241,7 +2041,7 @@
}
},
"tag": {
"add_tag": "태그 추가하기",
"add_tag": "태그 추가",
"automation_title": "{name} 태그가 검색되었습니다",
"caption": "태그",
"confirm_remove": "{tag} 태그를 제거하시겠습니까?",
@@ -2289,7 +2089,7 @@
"change_password": "비밀번호 변경",
"confirm_user_deletion": "{name} 을(를) 삭제하시겠습니까?",
"deactivate_user": "사용자 비활성화",
"delete_user": "사용자 삭제하기",
"delete_user": "사용자 삭제",
"group": "그룹",
"id": "ID",
"name": "표시 이름",
@@ -2304,7 +2104,7 @@
"username": "사용자 이름"
},
"picker": {
"add_user": "사용자 추가하기",
"add_user": "사용자 추가",
"headers": {
"group": "그룹",
"is_active": "활성화",
@@ -2317,7 +2117,7 @@
"users_privileges_note": "사용자 그룹 기능은 현재 작업 중이며, 사용자는 UI 를 통해 인스턴스를 관리할 수 없습니다. 모든 사용자 관리 API 엔드포인트가 관리자에 대한 액세스를 올바르게 제한하는지를 확인하는 중입니다."
},
"zha": {
"add_device": "기기 추가하기",
"add_device": "기기 추가",
"add_device_page": {
"discovered_text": "기기가 발견되면 여기에 표시됩니다.",
"no_devices_found": "발견된 기기가 없습니다. 기기를 검색하는 동안 기기가 페어링 모드 상태이고 절전모드가 해제되어있는지 확인해주세요.",
@@ -2375,8 +2175,8 @@
"unbind_button_label": "그룹 바인딩 해제"
},
"groups": {
"add_group": "그룹 추가하기",
"add_members": "구성 기기 추가하기",
"add_group": "그룹 추가",
"add_members": "구성 기기 추가",
"caption": "그룹",
"create": "그룹 생성",
"create_group": "Zigbee Home Automation - 그룹 만들기",
@@ -2389,8 +2189,8 @@
"group_not_found": "그룹을 찾을 수 없습니다!",
"groups": "그룹",
"members": "구성 기기",
"remove_members": "구성 기기 제거하기",
"removing_members": "구성 기기 제거하기"
"remove_members": "구성 기기 제거",
"removing_members": "구성 기기 제거"
},
"network": {
"caption": "네트워크"
@@ -2401,7 +2201,7 @@
}
},
"zone": {
"add_zone": "지역 추가하기",
"add_zone": "지역 추가",
"caption": "지역",
"configured_in_yaml": "configuration.yaml 에서 구성된 지역은 UI 에서 편집할 수 없습니다.",
"confirm_delete": "이 지역을 삭제하시겠습니까?",
@@ -2469,7 +2269,7 @@
"true": "참"
},
"node_management": {
"add_to_group": "그룹에 추가하기",
"add_to_group": "그룹에 추가",
"entities": "이 노드의 구성요소",
"entity_info": "구성요소 정보",
"exclude_entity": "Home Assistant 에서 이 구성요소 제외",
@@ -2485,8 +2285,8 @@
"nodes_in_group": "이 그룹의 다른 노드:",
"pooling_intensity": "폴링 강도",
"protection": "보호",
"remove_broadcast": "송출 제거하기",
"remove_from_group": "그룹에서 제거하기",
"remove_broadcast": "송출 제거",
"remove_from_group": "그룹에서 제거",
"set_protection": "보호 설정"
},
"ozw_log": {
@@ -2497,8 +2297,8 @@
"tail": "로그의 끝 부분"
},
"services": {
"add_node": "노드 추가하기",
"add_node_secure": "노드 보안 추가하기",
"add_node": "노드 추가",
"add_node_secure": "노드 보안 추가",
"cancel_command": "명령 취소",
"heal_network": "네트워크 복구",
"heal_node": "노드 복구",
@@ -2506,8 +2306,8 @@
"print_node": "노드 출력",
"refresh_entity": "구성요소 새로고침",
"refresh_node": "노드 새로고침",
"remove_failed_node": "실패한 노드 제거하기",
"remove_node": "노드 제거하기",
"remove_failed_node": "실패한 노드 제거",
"remove_node": "노드 제거",
"replace_failed_node": "실패한 노드 교체",
"save_config": "구성 저장",
"soft_reset": "소프트 리셋",
@@ -2617,10 +2417,6 @@
"yaml_unsupported": "YAML 모드에서 Lovelace UI 를 사용하는 경우 이 기능은 사용할 수 없습니다."
},
"cards": {
"actions": {
"action_confirmation": "\"{action}\" 동작을 실행하시겠습니까?",
"no_service": "실행할 서비스가 지정되지 않았습니다"
},
"confirm_delete": "이 카드를 삭제하시겠습니까?",
"empty_state": {
"go_to_integrations_page": "통합 페이지로 이동하기.",
@@ -2644,7 +2440,7 @@
"header": "안전 모드 활성화"
},
"shopping-list": {
"add_item": "항목 추가하기",
"add_item": "항목 추가",
"checked_items": "선택한 항목",
"clear_items": "선택한 항목 삭제"
},
@@ -2921,7 +2717,7 @@
"title": "제목"
},
"edit_view": {
"add": "뷰 추가하기",
"add": "뷰 추가",
"delete": "뷰 삭제",
"edit": "뷰 편집",
"header": "구성 보기",
@@ -2983,7 +2779,7 @@
"header": "뷰 선택"
},
"suggest_card": {
"add": "Lovelace UI 에 추가하기",
"add": "Lovelace UI 에 추가",
"create_own": "다른 카드 선택",
"header": "제안 드리는 카드"
},
@@ -3034,7 +2830,7 @@
}
},
"mailbox": {
"delete_button": "삭제하기",
"delete_button": "삭제",
"delete_prompt": "이 메시지를 삭제하시겠습니까?",
"empty": "메시지가 존재하지 않습니다",
"playback_title": "메시지 재생"
@@ -3042,7 +2838,7 @@
"my": {
"component_not_loaded": "이 리디렉션은 Home Assistant 인스턴스에서 지원되지 않습니다. 이 리디렉션을 사용하려면 {integration} 통합 구성요소가 필요합니다.",
"error": "알 수 없는 오류가 발생했습니다",
"faq_link": "자주 묻는 질문",
"faq_link": "내 Home Assistant 자주 묻는 질문",
"not_supported": "이 리디렉션은 Home Assistant 인스턴스에서 지원되지 않습니다. {link} 에서 지원되는 리디렉션과 리디렉션이 도입된 버전을 확인해주세요."
},
"page-authorize": {

View File

@@ -650,6 +650,7 @@
"scene": "Zeene",
"script": "Skripte",
"server_control": "Server Kontrolle",
"tags": "Tags",
"users": "Benotzer",
"zone": "Zone"
},

View File

@@ -65,13 +65,6 @@
"unknown": "Nežinoma"
}
},
"supervisor": {
"addon": {
"dashboard": {
"visit_addon_page": "Apsilankykite puslapyje {name}, jei reikia daugiau detalių"
}
}
},
"ui": {
"card": {
"alarm_control_panel": {
@@ -237,6 +230,7 @@
"scene": "Scenos",
"script": "Skriptai",
"server_control": "Serverio valdikliai",
"tags": "Žymės",
"users": "Vartotojai",
"zone": "Zonos"
}

View File

@@ -102,393 +102,6 @@
"unknown": "Ukjent"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"default": "Standard",
"header": "Lyd",
"input": "Inngang",
"output": "Utgang"
},
"network": {
"container": "Container",
"disabled": "Deaktivert",
"header": "Nettverk",
"host": "Vert"
},
"no_configuration": "Dette tillegget utsetter ikke konfigurasjon for deg til å tulle med...",
"options": {
"edit_in_ui": "Rediger i brukergrensesnittet",
"edit_in_yaml": "Rediger i YAML",
"header": "Alternativer",
"invalid_yaml": "Ugyldig YAML",
"show_unused_optional": "Vis ubrukte valgfrie konfigurasjonsalternativer"
}
},
"dashboard": {
"action_error": {
"get_changelog": "Kunne ikke hente endringslogg for tillegg",
"go_to_config": "Kunne ikke starte tillegget - validering av konfigurasjon mislyktes!",
"install": "Kunne ikke installere tillegget",
"restart": "Kunne ikke starte tillegget på nytt",
"start": "Kunne ikke starte tillegget",
"start_invalid_config": "Gå til konfigurasjon",
"stop": "Kunne ikke stoppe tillegget",
"uninstall": "Kunne ikke avinstallere tillegget",
"validate_config": "Kunne ikke validere tilleggskonfigurasjonen"
},
"capability": {
"apparmor": {
"description": "AppArmor ('Application Armor') er en sikkerhetsmodul for Linux-kjernen som begrenser tilleggsfunksjoner som nettverkstilgang, rå socket-tilgang og tillatelse til å lese, skrive eller kjøre bestemte filer.\n\nTilleggsforfattere kan oppgi sikkerhetsprofilene sine, optimalisert for tillegget, eller be om at det deaktiveres. Hvis AppArmor er deaktivert, vil det øke sikkerhetsrisikoen og har derfor en negativ innvirkning på sikkerhetspoengsummen for tillegget.",
"title": "AppArmor"
},
"auth_api": {
"description": "Et tillegg kan autentisere brukere mot Home Assistant, slik at tillegg kan gi brukerne muligheten til å logge på applikasjoner som kjører i tillegg, ved hjelp av brukernavnet / passordet til Home Assistant. Dette merket indikerer om tilleggsforfatteren ber om denne muligheten.",
"title": "Godkjenning av Home Assistant"
},
"docker_api": {
"description": "Tilleggsforfatteren har bedt om at tillegget skal ha ledertilgang til Docker-forekomsten som kjører på systemet ditt. Denne modusen gir tilleggsprogrammet full tilgang og kontroll til hele ditt Home Assistant system, noe som gir sikkerhetsrisiko og kan skade systemet ditt når det misbrukes. Derfor påvirker denne funksjonen tilleggssikkerhetspoengene negativt.\n\nDette tilgangsnivået gis ikke automatisk og må bekreftes av deg. For å gjøre dette må du deaktivere beskyttelsesmodus på tillegget manuelt. Deaktiver bare beskyttelsesmodus hvis du vet, trenger OG stoler på kilden til dette tillegget.",
"title": "Full Docker-tilgang"
},
"full_access": {
"description": "Dette tillegget får full tilgang til maskinvaren til systemet ditt, på forespørsel fra tilleggsforfatteren. Tilgang er sammenlignbar med den privilegerte modusen i Docker. Siden dette åpner mulige sikkerhetsrisikoer, påvirker denne funksjonen tilleggssikkerhetspoengene negativt. \n\nDette tilgangsnivået gis ikke automatisk og må bekreftes av deg. For å gjøre dette må du deaktivere beskyttelsesmodus på tillegget manuelt. Deaktiver bare beskyttelsesmodus hvis du vet, trenger OG stoler på kilden til dette tillegget.",
"title": "Full maskinvaretilgang"
},
"hassio_api": {
"description": "Tillegget ble gitt tilgang til Supervisor API, på forespørsel fra tilleggsforfatteren. Som standard kan tillegget få tilgang til generell versjonsinformasjon om systemet ditt. Når tillegget ber om \"manager\" eller \"admin\" nivå tilgang til API, vil det få tilgang til å kontrollere flere deler av Home Assistant-systemet. Denne tillatelsen er angitt av dette merket og vil påvirke tilleggssikkerhetspoengene for tillegget negativt.",
"title": "Supervisor API-tilgang"
},
"homeassistant_api": {
"description": "Dette tillegget har tilgang til den kjørende Home Assistant forekomsten direkte via Home Assistant API. Denne modusen håndterer også autentisering for tillegget, som gjør det mulig for et tillegg å samhandle med Home Assistant uten behov for ekstra autentiseringstokener.",
"title": "Home Assistant API-tilgang"
},
"host_network": {
"description": "Tillegg kjøres vanligvis i sitt eget isolerte nettverkslag, noe som forhindrer dem i å få tilgang til nettverket til vertsoperativsystemet. I noen tilfeller kan denne nettverksisolasjonen begrense tillegg når det gjelder å tilby sine tjenester, og isolasjonen kan derfor løftes av tilleggsforfatteren, noe som gir tilleggsprogrammet full tilgang til vertsmaskinens nettverksfunksjoner. Dette gir tilleggsprogrammet flere nettverksmuligheter, men senker sikkerheten, og derfor vil sikkerhetsvurderingen av tillegget senkes når dette alternativet brukes av tillegget.",
"title": "Vertsnettverk"
},
"host_pid": {
"description": "Vanligvis er prosessene tillegget kjører, isolert fra alle andre systemprosesser. Tilleggsforfatteren har bedt tillegget om å ha tilgang til systemprosessene som kjører på vertssystemforekomsten, og la tillegget gyte prosesser på vertssystemet også. Denne modusen gir tillegget full tilgang og kontroll til hele Home Assistant-systemet, som legger til sikkerhetsrisikoer, og kan skade systemet når det misbrukes. Denne funksjonen påvirker derfor sikkerhetspoengsummen negativt.\n\nDette tilgangsnivået gis ikke automatisk og må bekreftes av deg. Hvis du vil gjøre dette, må du deaktivere beskyttelsesmodus på tillegget manuelt. Deaktiver bare beskyttelsesmodus hvis du vet, trenger og stoler på kilden til dette tillegget.",
"title": "Vert behandler navneområdet"
},
"ingress": {
"description": "Dette tillegget bruker Ingress til å bygge grensesnittet sikkert inn i Home Assistant.",
"title": "Ingress"
},
"label": {
"apparmor": "apparmor",
"auth": "Auth",
"docker": "Docker",
"hardware": "Maskinvare",
"hass": "Hass",
"hassio": "HassIO",
"host": "Vert",
"host_pid": "vert pid",
"ingress": "ingress",
"rating": "Vurdering",
"stage": "Nivå"
},
"rating": {
"description": "Home Assistant gir en sikkerhetsvurdering for hvert av tilleggene, som indikerer risikoen ved bruk av dette tillegget. Jo mer tilgang et tillegg krever på systemet ditt, desto lavere poengsum, og dermed øker den mulige sikkerhetsrisikoen.\n\nEn poengsum er på en skala fra 1 til 6. Der 1 er den laveste poengsummen (ansett som den mest usikre og høyeste risikoen) og en score på 6 er den høyeste poengsummen (regnes som den sikreste og laveste risikoen).",
"title": "Sikkerhetsvurdering for tillegg"
},
"role": {
"admin": "admin",
"backup": "sikkerhetskopi",
"default": "Standard",
"homeassistant": "hjemmeassistent",
"manager": "Manager"
},
"stage": {
"description": "Tillegg kan ha en av tre trinn: \n\n{icon_stable} ** Stabil **: Disse er tillegg som er klare til å brukes i produksjon.\n\n{icon_experimental} ** Eksperimentell **: Disse kan inneholde feil og kan være uferdige.\n\n{icon_deprecated} ** Utdatert **: Disse tilleggene mottar ikke lenger noen oppdateringer.",
"title": "Tilleggstrinn"
}
},
"changelog": "Endringslogg",
"cpu_usage": "Tillegg CPU forbruk",
"hostname": "Vertsnavn",
"install": "Installer",
"new_update_available": "{name} {version} er tilgjengelig",
"not_available_arch": "Dette tillegget er ikke kompatibelt med prosessoren på enheten din eller operativsystemet du har installert på enheten",
"not_available_version": "Du kjører Home Assistant {core_version_installed} , for å oppdatere til denne versjonen av tillegget trenger du minst versjon {core_version_needed} av Home Assistant",
"open_web_ui": "Åpne nettgrensesnitt",
"option": {
"auto_update": {
"description": "Oppdater tillegget automatisk når det er en ny versjon tilgjengelig",
"title": "Automatisk oppdatering"
},
"boot": {
"description": "Få tillegget til å starte under en systemoppstart",
"title": "Start ved oppstart"
},
"ingress_panel": {
"description": "Legg til dette tillegget i sidepanelet",
"title": "Vis i sidepanelet"
},
"protected": {
"description": "Blokkerer forhøyet systemtilgang fra tillegget",
"title": "Beskyttelsesmodus"
},
"watchdog": {
"description": "Dette vil starte tillegget hvis det krasjer",
"title": "Vakthund"
}
},
"protection_mode": {
"content": "Beskyttelsesmodus på dette tillegget er deaktivert! Dette gir tillegget full tilgang til hele systemet, noe som utgjør en sikkerhetsrisiko, og kan skade systemet ditt om det brukes feil. Deaktiver bare beskyttelsesmodus hvis du vet, trenger OG stoler på kilden til dette tillegget.",
"enable": "Aktiver beskyttelsesmodus",
"title": "Advarsel: Beskyttelsesmodus er deaktivert!"
},
"ram_usage": "Tillegg RAM forbruk",
"rebuild": "Gjenoppbygg",
"restart": "Omstart",
"start": "Start",
"stop": "Stopp",
"uninstall": "Avinstaller",
"visit_addon_page": "Gå til {name}-siden for flere detaljer"
},
"documentation": {
"get_documentation": "Kunne ikke hente tilleggsdokumentasjon, {error}"
},
"failed_to_reset": "Kunne ikke tilbakestille tilleggskonfigurasjonen, {error}",
"failed_to_save": "Kunne ikke lagre tilleggskonfigurasjonen, {error}",
"logs": {
"get_logs": "Kunne ikke hente tilleggslogger, {error}"
},
"panel": {
"configuration": "Konfigurasjon",
"documentation": "Dokumentasjon",
"info": "Info",
"log": "Logg"
},
"state": {
"installed": "Tillegget er installert",
"not_available": "Tillegget er ikke tilgjengelig for systemet ditt",
"not_installed": "Tillegget er ikke installert"
}
},
"common": {
"cancel": "Avbryt",
"close": "Lukk",
"description": "Beskrivelse",
"error": {
"unknown": "Ukjent feil",
"update_failed": "Oppdatering mislyktes"
},
"failed_to_restart_name": "Kan ikke starte {name} på nytt",
"failed_to_update_name": "Kunne ikke oppdatere {name}",
"learn_more": "Lær mer",
"new_version_available": "Ny versjon tilgjengelig",
"newest_version": "Nyeste versjon",
"no": "Nei",
"refresh": "Oppdater",
"release_notes": "Utgivelsesmerknader",
"reload": "Last inn på nytt",
"reset_defaults": "Tilbakestill til standardinnstillinger",
"reset_options": "Tilbakestill innstillinger",
"restart": "Omstart",
"restart_name": "Start {name} på nytt",
"running_version": "Du kjører for øyeblikket versjon {version}",
"save": "Lagre",
"show_more": "Vis mer informasjon om dette",
"update": "Oppdater",
"update_available": "{count, plural,\n one {Oppdatering}\n other {{count} Oppdateringer}\n} venter",
"version": "Versjon",
"yes": "Ja"
},
"confirm": {
"reset_options": {
"text": "Er du sikker på at du vil tilbakestille alle instillingene dine?",
"title": "Tilbakestill instillinger"
},
"restart": {
"text": "Er du sikker på at du vil starte {name} på nytt?",
"title": "Start {name} på nytt"
},
"update": {
"text": "Er du sikker på at du vil oppdatere {name} til version {version} ?",
"title": "Oppdater {name}"
}
},
"dashboard": {
"addon_new_version": "Ny versjon tilgjengelig",
"addon_running": "Tillegget kjører",
"addon_stopped": "Tillegget er stoppet",
"addons": "Tillegg",
"no_addons": "Du har ikke installert tilleggsprogrammer ennå. Gå over til tilleggsbutikken for å komme i gang!"
},
"dialog": {
"network": {
"connected_to": "Koblet til {ssid}",
"dhcp": "",
"disabled": "Deaktivert",
"dns_servers": "DNS-servere",
"failed_to_change": "Kunne ikke endre nettverksinnstillingene",
"gateway": "Gateway-adresse",
"ip_netmask": "IP-adresse / nettmaske",
"open": "Åpen",
"scan_ap": "Søk etter tilgangspunkter",
"static": "Statisk",
"title": "Nettverksinnstillinger",
"unsaved": "Du har ikke lagrede endringer, disse vil gå tapt hvis du bytter fane, vil du fortsette?",
"warning": "Hvis du endrer Wi-Fi, IP eller gateway-adressene, kan du miste tilkoblingen!",
"wep": "WEP",
"wpa": "WPA-PSK"
},
"registries": {
"add_new_registry": "Legg til nytt register",
"add_registry": "Legg til register",
"failed_to_add": "Kunne ikke legge til registeret",
"failed_to_remove": "Kunne ikke fjerne registeret",
"no_registries": "Ingen registre er konfigurert",
"password": "Passord",
"registry": "Register",
"remove": "Fjern",
"title_add": "Legg til nytt containerregister",
"title_manage": "Behandle containerregistre",
"username": "Brukernavn"
},
"repositories": {
"add": "Legg til",
"remove": "Fjern",
"title": "Behandle tilleggspakkelagre"
},
"restart_addon": {
"confirm_text": "Start tillegg på nytt",
"text": "Ønsker du å starte tillegget på nytt med endringene dine?"
},
"update": {
"create_snapshot": "Lag en sikkerhetskopi av {name} før du oppdaterer",
"snapshot": "Sikkerhetskopi",
"snapshotting": "Oppretter sikkerhetskopi av {name}",
"updating": "Oppdaterer {name} til version {version}"
}
},
"my": {
"error": "Det oppstod en ukjent feil",
"error_addon_not_found": "Tillegget ble ikke funnet",
"faq_link": "Vanlige spørsmål om Min Home Assistant",
"not_supported": "Denne viderekoblingen støttes ikke av Home Assistant-forekomsten. Se på {link} for viderekoblinger som støttes, og hvilken versjon de ble introdusert."
},
"panel": {
"dashboard": "Dashboard",
"snapshots": "Snapshots",
"store": "Tilleggsbutikk",
"system": "System"
},
"snapshot": {
"addons": "Tillegg",
"available_snapshots": "Tilgjengelige sikkerhetskopier",
"could_not_create": "Kunne ikke opprette sikkerhetskopi",
"create": "Opprett",
"create_blocked_not_running": "Å lage en sikkerhetskopi er ikke mulig akkurat nå fordi systemet er i {state} status",
"create_snapshot": "Opprett sikkerhetskopi",
"description": "Sikkerhetskopier lar deg enkelt sikkerhetskopiere og gjenopprette alle dataene fra din Home Assistant forekomst",
"enter_password": "Vennligst skriv inn et passord",
"folder": {
"addons/local": "Lokale tillegg",
"homeassistant": "Home Assistant-konfigurasjon",
"media": "",
"share": "Delt",
"ssl": ""
},
"folders": "Mapper",
"full_snapshot": "Full sikkerhetskopi",
"name": "Navn",
"no_snapshots": "Du har ingen sikkerhetskopier ennå",
"partial_snapshot": "Delvis sikkerhetskopi",
"password": "Passord",
"password_protected": "Passordbeskyttet",
"password_protection": "Passordbeskyttelse",
"security": "Sikkerhet",
"type": "",
"upload_snapshot": "Last opp sikkerhetskopi"
},
"store": {
"missing_addons": "Manglende tillegg? Aktivere avansert modus på din brukerprofilside",
"no_results_found": "Ingen resultater funnet i {repository}",
"registries": "Registre",
"repositories": "Datalagre"
},
"system": {
"core": {
"cpu_usage": "Core CPU forbruk",
"ram_usage": "Core RAM forbruk"
},
"host": {
"change": "Endre",
"change_hostname": "Endre vertsnavn",
"confirm_reboot": "Er du sikker på at du vil starte verten på nytt?",
"confirm_shutdown": "Er du sikker på at du vil slå av verten?",
"deployment": "Distribusjon",
"docker_version": "Docker versjon",
"emmc_lifetime_used": "eMMC levetid brukt",
"failed_to_get_hardware_list": "Kunne ikke hente maskinvarelisten",
"failed_to_import_from_usb": "Kunne ikke importere fra USB",
"failed_to_reboot": "Kunne ikke starte verten på nytt",
"failed_to_set_hostname": "Angi vertsnavn mislyktes",
"failed_to_shutdown": "Kunne ikke slå av verten",
"hardware": "Maskinvare",
"hostname": "Vertsnavn",
"import_from_usb": "Importer fra USB",
"ip_address": "IP adresse",
"new_hostname": "Vennligst skriv inn et nytt vertsnavn:",
"operating_system": "Operativsystem",
"reboot_host": "Start verten på nytt",
"shutdown_host": "Slå av verten",
"used_space": "Brukt lagringsplass"
},
"log": {
"get_logs": "Kunne ikke hente {provider}-logger, {error}",
"log_provider": "Loggleverandør"
},
"supervisor": {
"beta_backup": "Forsikre deg om at du har sikkerhetskopier av dataene dine før du aktiverer denne funksjonen",
"beta_join_confirm": "Vil du bli med i beta-kanalen?",
"beta_release_items": "Dette inkluderer betaversjoner for:",
"beta_warning": "Betautgivelser er for testere og tidlige brukere og kan inneholde ustabile kodeendringer",
"channel": "Kanal",
"cpu_usage": "Supervisor CPU forbruk",
"failed_to_reload": "Kunne ikke laste inn Supervisor på nytt",
"failed_to_set_option": "Kan ikke sette Supervisor instilling",
"failed_to_update": "Kunne ikke oppdatere Supervisor",
"join_beta_action": "Bli med i beta-kanalen",
"join_beta_description": "Få beta-oppdateringer for Home Assistant (RCs), Supervisor og vert",
"leave_beta_action": "Forlat beta-kanalen",
"leave_beta_description": "Få stabile oppdateringer for Home Assistant, Supervisor og vert",
"ram_usage": "Supervisor RAM forbruk",
"reload_supervisor": "Last inn Supervisor på nytt",
"share_diagnostics": "Del diagnostikk",
"share_diagnostics_description": "Del krasjrapporter og diagnoseinformasjon",
"share_diagonstics_description": "Vil du automatisk dele krasjrapporter og diagnostisk informasjon når Supervisor møter på uventede feil? {line_break} Dette vil tillate oss å løse problemene, informasjonen er bare tilgjengelig for Home Assistant Core-teamet og deles ikke med andre. {line_break} Dataene inkluderer ikke privat / sensitiv informasjon, og du kan deaktivere dette i innstillingene når som helst.",
"share_diagonstics_title": "Hjelp med å forbedre Home Assistant",
"unhealthy_description": "Å kjøre en usunn installasjon vil forårsake problemer. Nedenfor er en liste over problemer som er funnet med installasjonen din. Klikk på lenkene for å lære hvordan du kan løse problemene.",
"unhealthy_reason": {
"docker": "Docker-miljøet fungerer ikke som det skal",
"privileged": "Supervisor er ikke privilegert",
"setup": "Installasjonen av Supervisor mislyktes",
"supervisor": "Supervisor kunne ikke oppdatere"
},
"unhealthy_title": "Installasjonen din er usunn",
"unsupported_description": "Nedenfor er en liste over problemer som er funnet med installasjonen din. Klikk på lenkene for å lære hvordan du kan løse problemene.",
"unsupported_reason": {
"container": "Containere som er kjent for å forårsake problemer",
"dbus": "",
"docker_configuration": "Docker-konfigurasjon",
"docker_version": "Docker-versjon",
"job_conditions": "Ignorerte arbeidsforhold",
"lxc": "",
"network_manager": "Nettverksbehandler",
"os": "Operativsystem",
"privileged": "Supervisor er ikke privilegert",
"systemd": ""
},
"unsupported_title": "Du kjører en installasjon som ikke støttes",
"update_supervisor": "Oppdater Supervisor",
"warning": "ADVARSEL"
}
}
},
"ui": {
"auth_store": {
"ask": "Vil du forbli innlogget på denne enheten?",
@@ -764,8 +377,6 @@
"changed_to_state": "endret til {state}",
"cleared_device_class": "klar (ingen {device_class} oppdaget)",
"detected_device_class": "oppdaget {device_class}",
"is_closing": "stenger",
"is_opening": "åpner",
"rose": "soloppgang",
"set": "solnedgang",
"turned_off": "slått av",
@@ -1013,9 +624,6 @@
"person": {
"create_zone": "Opprett sone fra gjeldende plassering"
},
"remote": {
"activity": "Nåværende aktivitet"
},
"restored": {
"confirm_remove_text": "Er du sikker på at du vil fjerne denne entiteten?",
"confirm_remove_title": "Vil du fjerne entiteten?",
@@ -1089,6 +697,7 @@
"script": "Skript",
"server_control": "Server-kontroller",
"tag": "Tagger",
"tags": "Tagger",
"users": "Brukere",
"zone": "Soner"
},
@@ -1147,7 +756,6 @@
"clusters": "Behandle Clusters",
"reconfigure": "Rekonfigurer enhet",
"remove": "Fjern enhet",
"view_in_visualization": "Visning i visualisering",
"zigbee_information": "ZigBee-enhetssignatur"
},
"confirmations": {
@@ -2725,7 +2333,6 @@
"caption": "Visualisering",
"header": "Nettverksvisualisering",
"highlight_label": "Fremhev enheter",
"refresh_topology": "Oppdater topologi",
"zoom_label": "Zoom til enhet"
}
},
@@ -3403,8 +3010,6 @@
"error_remove": "Kan ikke fjerne konfigurasjonen: {error}",
"error_save_yaml": "Kan ikke lagre YAML: {error}",
"header": "Rediger konfigurasjon",
"lovelace_changed": "Lovelace-konfigurasjonen ble oppdatert, vil du laste den oppdaterte konfigurasjonen i redigeringsprogrammet og miste gjeldende endringer?",
"reload": "Last inn på nytt",
"resources_moved": "Ressurser skal ikke lenger legges til Lovelace-konfigurasjonen, men kan legges til i Lovelace-konfigurasjonspanelet.",
"save": "Lagre",
"saved": "Lagret",

View File

@@ -102,393 +102,6 @@
"unknown": "Onbekend"
}
},
"supervisor": {
"addon": {
"configuration": {
"audio": {
"default": "Standaard",
"header": "Audio",
"input": "Invoer",
"output": "Uitvoer"
},
"network": {
"container": "Container",
"disabled": "Uitgeschakeld",
"header": "Netwerk",
"host": "Host"
},
"no_configuration": "Deze add-on laat geen configuratie zien waar je mee kunt spelen..",
"options": {
"edit_in_ui": "Bewerken in UI",
"edit_in_yaml": "Bewerken in YAML",
"header": "Opties",
"invalid_yaml": "Ongeldige YAML",
"show_unused_optional": "Ongebruikte optionele configuratieopties tonen"
}
},
"dashboard": {
"action_error": {
"get_changelog": "Mislukt om add-on changelog te krijgen",
"go_to_config": "Kan de add-on niet starten - configuratie validatie mislukt!",
"install": "De installatie van de add-on is mislukt",
"restart": "Kan de add-on niet herstarten",
"start": "Kan de add-on niet starten",
"start_invalid_config": "Ga naar configuratie",
"stop": "Kan add-on niet stoppen",
"uninstall": "De installatie van de add-on is mislukt",
"validate_config": "De configuratie van de add-on kon niet worden gevalideerd"
},
"capability": {
"apparmor": {
"description": "AppArmor ('Application Armor') is een beveiligingsmodule voor de Linux-kernel die de mogelijkheden van add-ons beperkt, zoals netwerktoegang, toegang tot raw socket, en toestemming om specifieke bestanden te lezen, te schrijven of uit te voeren.\n\nAuteurs van add-ons kunnen hun beveiligingsprofielen opgeven, geoptimaliseerd voor de add-on, of vragen om het uit te schakelen. Als AppArmor is uitgeschakeld, verhoogt dit de beveiligingsrisico's en heeft het dus een negatieve invloed op de beveiligingsscore van de add-on.",
"title": "AppArmor"
},
"auth_api": {
"description": "Een add-on kan gebruikers authenticeren tegen Home Assistant, waardoor add-ons gebruikers de mogelijkheid geven om in te loggen bij applicaties die draaien in add-ons, met hun Home Assistant gebruikersnaam/wachtwoord. Deze badge geeft aan of de auteur van de add-on deze mogelijkheid heeft aangevraagd.",
"title": "Home Assistant Authenticatie"
},
"docker_api": {
"description": "De auteur van de add-on heeft gevraagd of de add-on beheertoegang heeft tot de Docker-instantie die op uw systeem draait. Deze modus geeft de add-on volledige toegang en controle tot uw gehele Home Assistant-systeem, wat veiligheidsrisico's toevoegt en bij misbruik uw systeem kan beschadigen. Daarom heeft deze functie een negatieve invloed op de beveiligingsscore van de add-on.\n\nDit niveau van toegang wordt niet automatisch verleend en moet door u worden bevestigd. Om dit te doen moet u de beschermingsmodus op de add-on handmatig uitschakelen. Schakel de beveiligingsmodus alleen uit als u de bron van deze add-on kent, nodig hebt EN vertrouwt.",
"title": "Volledige Docker toegang"
},
"full_access": {
"description": "Deze add-on krijgt volledige toegang tot de hardware van uw systeem, op verzoek van de auteur van de add-on. De toegang is vergelijkbaar met de bevoorrechte modus in Docker. Aangezien dit mogelijke veiligheidsrisico's met zich meebrengt, heeft deze eigenschap een negatieve invloed op de veiligheidsscore van de add-on.\n\nDit niveau van toegang wordt niet automatisch verleend en moet door u worden bevestigd. Om dit te doen, moet u de beveiligingsmodus op de add-on handmatig uitschakelen. Schakel de beveiligingsmodus alleen uit als u de bron van deze add-on kent, nodig hebt EN vertrouwt.",
"title": "Volledige hardware toegang"
},
"hassio_api": {
"description": "De add-on heeft toegang gekregen tot de Supervisor API, op verzoek van de auteur van de add-on. Standaard heeft de add-on toegang tot algemene versie-informatie van uw systeem. Wanneer de add-on 'manager' of 'admin' niveau toegang tot de API aanvraagt, zal het toegang krijgen om meerdere delen van uw Home Assistant systeem te controleren. Deze toestemming wordt aangegeven met deze badge en zal de beveiligingsscore van de add-on negatief beïnvloeden.",
"title": "Supervisor API Toegang"
},
"homeassistant_api": {
"description": "Deze add-on heeft rechtstreeks toegang tot uw actieve Home Assistant-instantie via de Home Assistant API. Deze modus handelt ook de authenticatie voor de add-on af, waardoor een add-on kan communiceren met Home Assistant zonder de noodzaak van extra authenticatietokens.",
"title": "Home Assistant API Toegang"
},
"host_network": {
"description": "Add-ons draaien meestal in hun eigen geïsoleerde netwerklaag, waardoor ze geen toegang hebben tot het netwerk van het host-besturingssysteem. In sommige gevallen kan deze netwerkisolatie add-ons beperken in het leveren van hun diensten en daarom kan de isolatie worden opgeheven door de add-on-auteur, waardoor de add-on volledige toegang krijgt tot de netwerk mogelijkheden van de host-machine. Dit geeft de add-on meer netwerkmogelijkheden maar verlaagt de beveiliging, vandaar dat de beveiligingsclassificatie van de add-on zal worden verlaagd als deze optie door de add-on wordt gebruikt.",
"title": "Hostnetwerk"
},
"host_pid": {
"description": "Gewoonlijk zijn de processen die de add-on uitvoert, geïsoleerd van alle andere systeemprocessen. De auteur van de add-on heeft gevraagd of de add-on toegang heeft tot de systeemprocessen die op het hostsysteem draaien, en staat toe dat de add-on ook processen op het hostsysteem spawnt. Deze modus geeft de add-on volledige toegang tot en controle over uw gehele Home Assistant-systeem, wat veiligheidsrisico's toevoegt en bij misbruik uw systeem kan beschadigen. Daarom heeft deze functie een negatieve invloed op de add-on beveiligingsscore.\n\nDit niveau van toegang wordt niet automatisch verleend en moet door u worden bevestigd. Om dit te doen moet u de beschermingsmodus op de add-on handmatig uitschakelen. Schakel de beveiligingsmodus alleen uit als u de bron van deze add-on kent, nodig hebt EN vertrouwt.",
"title": "Host Processes Namespace"
},
"ingress": {
"description": "Deze add-on maakt gebruik van Ingress om zijn interface veilig toe te passen in Home Assistant.",
"title": "Ingress"
},
"label": {
"apparmor": "apparmor",
"auth": "auth",
"docker": "docker",
"hardware": "hardware",
"hass": "hass",
"hassio": "hassio",
"host": "host",
"host_pid": "host pid",
"ingress": "ingress",
"rating": "beoordeling",
"stage": "stadium"
},
"rating": {
"description": "Home Assistant geeft een veiligheidsscore aan elke add-on, die aangeeft welke risico's het gebruik van deze add-on met zich meebrengt. Hoe meer toegang een add-on tot je systeem vereist, hoe lager de score, waardoor de mogelijke veiligheidsrisico's toenemen.\n\nEen score is op een schaal van 1 tot 6. Waarbij 1 de laagste score is (beschouwd als het meest onveilige en het grootste risico) en een score van 6 de hoogste score is (beschouwd als het meest veilige en het minste risico).",
"title": "Add-on Veiligheidsbeoordeling"
},
"role": {
"admin": "admin",
"backup": "back-up",
"default": "standaard",
"homeassistant": "homeassistant",
"manager": "manager"
},
"stage": {
"description": "Add-ons kunnen een van de drie stadia hebben:\n\n{icon_stable} **Stabiel**: Dit zijn add-ons die klaar zijn om in productie gebruikt te worden.\n\n{icon_experimental} **Experimenteel**: Deze kunnen bugs bevatten, en kunnen onvoltooid zijn.\n\n{icon_deprecated} *Vervallen**: Deze add-ons zullen niet langer updates ontvangen.",
"title": "Add-on stadium"
}
},
"changelog": "Wijzigingsoverzicht",
"cpu_usage": "Add-on CPU-gebruik",
"hostname": "Hostnaam",
"install": "installeren",
"new_update_available": "{name} {version} is beschikbaar",
"not_available_arch": "Deze add-on is niet compatibel met de processor van uw apparaat of het besturingssysteem dat u op uw apparaat hebt geïnstalleerd.",
"not_available_version": "U draait Home Assistant {core_version_installed}. Om de add-on naar deze versie bij te werken dient u op zijn minst Home Assistant {core_version_needed} te hebben.",
"open_web_ui": "Open web UI",
"option": {
"auto_update": {
"description": "Update automatisch de add-on wanneer er een nieuwe versie beschikbaar is",
"title": "Automatisch updaten"
},
"boot": {
"description": "Laat de add-on starten tijdens het opstarten van het systeem",
"title": "Start bij opstarten"
},
"ingress_panel": {
"description": "Voeg deze add-on toe aan uw zijbalk",
"title": "Weergeven in zijbalk"
},
"protected": {
"description": "Blokkeert verhoogde systeem toegang van de add-on",
"title": "Beschermingsmodus"
},
"watchdog": {
"description": "Dit zal de add-on starten als deze crasht",
"title": "Watchdog"
}
},
"protection_mode": {
"content": "Beschermingsmodus op deze add-on is uitgeschakeld! Dit geeft de add-on volledige toegang tot het hele systeem, wat veiligheidsrisico's toevoegt, en uw systeem kan beschadigen bij onjuist gebruik. Schakel de beveiligingsmodus alleen uit als u de bron van deze add-on kent, nodig hebt EN vertrouwt.",
"enable": "Beveiligingsmodus inschakelen",
"title": "Waarschuwing: Beschermingsmodus is uitgeschakeld!"
},
"ram_usage": "Add-on RAM-gebruik",
"rebuild": "Herbouw",
"restart": "herstarten",
"start": "start",
"stop": "stop",
"uninstall": "verwijderen",
"visit_addon_page": "Bezoek de {name} pagina voor meer details"
},
"documentation": {
"get_documentation": "Mislukt om add-on documentatie te krijgen, {error}"
},
"failed_to_reset": "Kan configuratie van add-on niet resetten, {error}",
"failed_to_save": "Mislukt om add-on configuratie op te slaan, {error}",
"logs": {
"get_logs": "Mislukt om add-on logs te krijgen, {error}"
},
"panel": {
"configuration": "Configuratie",
"documentation": "Documentatie",
"info": "Informatie",
"log": "Logboek"
},
"state": {
"installed": "Add-on is geïnstalleerd",
"not_available": "Add-on is niet beschikbaar op uw systeem",
"not_installed": "Add-on is niet geïnstalleerd"
}
},
"common": {
"cancel": "Annuleren",
"close": "Sluiten",
"description": "Omschrijving",
"error": {
"unknown": "Onbekende fout",
"update_failed": "Update mislukt"
},
"failed_to_restart_name": "Mislukt om {name} te herstarten",
"failed_to_update_name": "Mislukt om {name} bij te werken",
"learn_more": "Meer informatie",
"new_version_available": "Nieuwe versie beschikbaar",
"newest_version": "Nieuwste versie",
"no": "Nee",
"refresh": "Vernieuwen",
"release_notes": "Release-notities",
"reload": "Herlaad",
"reset_defaults": "Terugzetten naar standaardinstellingen",
"reset_options": "Reset opties",
"restart": "Herstart",
"restart_name": "Herstart {name}",
"running_version": "U gebruikt momenteel versie {version}",
"save": "Opslaan",
"show_more": "Toon meer informatie hierover",
"update": "Update",
"update_available": "{count, plural, one {Update} other {{count} Updates}} Wachtend",
"version": "Versie",
"yes": "Ja"
},
"confirm": {
"reset_options": {
"text": "Weet u zeker dat u al uw opties opnieuw wilt instellen?",
"title": "Reset opties"
},
"restart": {
"text": "Weet u zeker dat u {name} opnieuw wilt starten?",
"title": "Herstart {name}"
},
"update": {
"text": "Weet u zeker dat u {name} wilt updaten naar versie {version}?",
"title": "Update {name}"
}
},
"dashboard": {
"addon_new_version": "Nieuwe versie beschikbaar",
"addon_running": "Add-on wordt uitgevoerd",
"addon_stopped": "Add-on is gestopt",
"addons": "Add-ons",
"no_addons": "Je hebt nog geen add-ons geïnstalleerd. Ga naar de add-on store om te beginnen!"
},
"dialog": {
"network": {
"connected_to": "Verbonden met {ssid}",
"dhcp": "DHCP",
"disabled": "Uitgeschakeld",
"dns_servers": "DNS-servers",
"failed_to_change": "Kan de netwerkinstellingen niet wijzigen",
"gateway": "Gateway-adres",
"ip_netmask": "IP-adres/Netmask",
"open": "Open",
"scan_ap": "Scan voor toegangspunten",
"static": "Statisch",
"title": "Netwerkinstellingen",
"unsaved": "U heeft onopgeslagen wijzigingen, deze gaan verloren als u van tabblad verandert, wilt u doorgaan?",
"warning": "Als u het Wi-Fi, IP of gateway adres verandert, kunt u de verbinding verliezen!",
"wep": "WEP",
"wpa": "wpa-psk"
},
"registries": {
"add_new_registry": "Voeg een nieuw register toe",
"add_registry": "Voeg register toe",
"failed_to_add": "Mislukt om register toe te voegen",
"failed_to_remove": "Het is niet gelukt om het register te verwijderen",
"no_registries": "Geen registers geconfigureerd",
"password": "Wachtwoord",
"registry": "Register",
"remove": "Verwijderen",
"title_add": "Nieuwe container registratie toevoegen",
"title_manage": "Containerregisters beheren",
"username": "Gebruikersnaam"
},
"repositories": {
"add": "Toevoegen",
"remove": "Verwijder",
"title": "Beheer add-on opslagplaatsen"
},
"restart_addon": {
"confirm_text": "Herstart add-on",
"text": "Wilt u de add-on opnieuw starten met uw wijzigingen?"
},
"update": {
"create_snapshot": "Maak een snapshot van {name} voordat u gaat updaten",
"snapshot": "Snapshot",
"snapshotting": "Maak een snapshot van {name}",
"updating": "Bijwerken van {name} naar versie {version}"
}
},
"my": {
"error": "Er is een onbekende fout opgetreden",
"error_addon_not_found": "Add-on niet gevonden",
"faq_link": "My Home Assistant FAQ",
"not_supported": "Deze redirect wordt niet ondersteund door uw Home Assistant instantie. Controleer de {link} voor de ondersteunde redirects en de versie waarin ze zijn geïntroduceerd."
},
"panel": {
"dashboard": "Dashboard",
"snapshots": "Snapshots",
"store": "Add-on Store",
"system": "Systeem"
},
"snapshot": {
"addons": "Add-ons",
"available_snapshots": "Beschikbare snapshots",
"could_not_create": "Kon geen snapshot maken",
"create": "Maak",
"create_blocked_not_running": "Het maken van een snapshot is nu niet mogelijk omdat het systeem in {state} staat.",
"create_snapshot": "Maak snapshot",
"description": "Met snapshots kunt u gemakkelijk een back-up maken van alle gegevens van uw Home Assistant en ze herstellen.",
"enter_password": "Voer een wachtwoord in.",
"folder": {
"addons/local": "Lokale add-ons",
"homeassistant": "Home Assistant configuratie",
"media": "Media",
"share": "Deel",
"ssl": "SSL"
},
"folders": "Mappen",
"full_snapshot": "Volledige snapshot",
"name": "Naam",
"no_snapshots": "Je hebt nog geen snapshots.",
"partial_snapshot": "Gedeeltelijke snapshot",
"password": "Wachtwoord",
"password_protected": "beveiligd met wachtwoord",
"password_protection": "Wachtwoord bescherming",
"security": "Beveiliging",
"type": "Type",
"upload_snapshot": "Upload snapshot"
},
"store": {
"missing_addons": "Mis je de add-ons? Schakel de geadvanceerde modus in op uw gebruikersprofielpagina",
"no_results_found": "Geen resultaten gevonden in {repository}.",
"registries": "Registers",
"repositories": "Opslagplaatsen"
},
"system": {
"core": {
"cpu_usage": "Core CPU-gebruik",
"ram_usage": "Core RAM-gebruik"
},
"host": {
"change": "Verander",
"change_hostname": "Hostnaam wijzigen",
"confirm_reboot": "Weet u zeker dat u de host opnieuw wilt opstarten?",
"confirm_shutdown": "Weet je zeker dat je de host wilt afsluiten?",
"deployment": "Implementatie",
"docker_version": "Docker versie",
"emmc_lifetime_used": "eMMC Levensduur Gebruikt",
"failed_to_get_hardware_list": "Kan geen hardware lijst krijgen",
"failed_to_import_from_usb": "Importeren vanaf USB mislukt",
"failed_to_reboot": "Kan de host niet herstarten",
"failed_to_set_hostname": "Instellen hostnaam mislukt",
"failed_to_shutdown": "Het is niet gelukt om de host af te sluiten",
"hardware": "Hardware",
"hostname": "Hostnaam",
"import_from_usb": "Importeren van USB",
"ip_address": "IP-adres",
"new_hostname": "Voer een nieuwe hostnaam in:",
"operating_system": "Besturingssysteem",
"reboot_host": "Host opnieuw opstarten",
"shutdown_host": "Host afsluiten",
"used_space": "Gebruikte ruimte"
},
"log": {
"get_logs": "Mislukt om {provider} logs te krijgen, {error}",
"log_provider": "Logboekprovider"
},
"supervisor": {
"beta_backup": "Zorg ervoor dat u back-ups van uw gegevens hebt voordat u deze functie activeert.",
"beta_join_confirm": "Wil je meedoen met de bèta releases?",
"beta_release_items": "Dit omvat beta releases voor:",
"beta_warning": "Beta-releases zijn voor testers en early adopters en kunnen onstabiele codewijzigingen bevatten",
"channel": "Kanaal",
"cpu_usage": "Supervisor CPU-gebruik",
"failed_to_reload": "Het is niet gelukt de Supervisor te herladen",
"failed_to_set_option": "Mislukt om Supervisor-optie in te stellen",
"failed_to_update": "Het is niet gelukt om de Supervisor bij te werken",
"join_beta_action": "Word lid van het beta-kanaal",
"join_beta_description": "Ontvang beta-updates voor Home Assistant (RC's), Supervisor en host",
"leave_beta_action": "Verlaat beta-kanaal",
"leave_beta_description": "Krijg stabiele updates voor Home Assistant, Supervisor en host",
"ram_usage": "Supervisor RAM-gebruik",
"reload_supervisor": "Herlaad de Supervisor",
"share_diagnostics": "Diagnostische gegevens delen",
"share_diagnostics_description": "Deel crash rapporten en diagnostische informatie.",
"share_diagonstics_description": "Zou je automatisch crash rapporten en diagnostische informatie willen delen wanneer de Supervisor onverwachte fouten tegenkomt? {line_break} Dit stelt ons in staat om de problemen op te lossen, de informatie is alleen toegankelijk voor het Home Assistant Core team en zal niet met anderen gedeeld worden.{line_break} De gegevens bevatten geen privé/gevoelige informatie en u kunt dit in de instellingen op elk gewenst moment uitschakelen.",
"share_diagonstics_title": "Help Home Assistant te verbeteren",
"unhealthy_description": "Het draaien van een onvolledige installatie zal problemen veroorzaken. Hieronder vindt u een lijst met problemen die gevonden zijn met uw installatie, klik op de links om te leren hoe u de problemen kunt oplossen.",
"unhealthy_reason": {
"docker": "De Docker omgeving werkt niet goed",
"privileged": "Supervisor heeft niet voldoende toegang",
"setup": "Setup van de Supervisor mislukt",
"supervisor": "Supervisor kon niet updaten"
},
"unhealthy_title": "Uw installatie is niet volledig",
"unsupported_description": "Hieronder vindt u een lijst met problemen die bij uw installatie zijn aangetroffen. Klik op de links om te zien hoe u de problemen kunt oplossen.",
"unsupported_reason": {
"container": "Containers waarvan bekend is dat ze problemen veroorzaken",
"dbus": "DBUS",
"docker_configuration": "Docker Configuratie",
"docker_version": "Docker versie",
"job_conditions": "Genegeerde taakvoorwaarden",
"lxc": "LXC",
"network_manager": "Netwerkmanager",
"os": "Besturingssysteem",
"privileged": "Supervisor heeft niet voldoende toegang",
"systemd": "Systemd"
},
"unsupported_title": "U gebruikt een niet-ondersteunde installatie",
"update_supervisor": "Supervisor updaten",
"warning": "WAARSCHUWING"
}
}
},
"ui": {
"auth_store": {
"ask": "Wil je ingelogd blijven?",
@@ -764,8 +377,6 @@
"changed_to_state": "gewijzigd in {state}",
"cleared_device_class": "niets gedetecteerd (geen {device_class} gedetecteerd)",
"detected_device_class": "{device_class} gedetecteerd",
"is_closing": "aan het sluiten",
"is_opening": "Aan het openen",
"rose": "opkomst",
"set": "ondergang",
"turned_off": "is uitgeschakeld",
@@ -1013,9 +624,6 @@
"person": {
"create_zone": "Creëer zone van huidige locatie"
},
"remote": {
"activity": "Huidige activiteit"
},
"restored": {
"confirm_remove_text": "Weet je zeker dat je dit item wilt verwijderen?",
"confirm_remove_title": "Entiteit verwijderen?",
@@ -1025,7 +633,7 @@
},
"script": {
"last_action": "Laatste actie",
"last_triggered": "Laatst geactiveerd"
"last_triggered": "Voor het laatst uitgevoerd"
},
"settings": "Entiteit instellingen",
"sun": {
@@ -1089,6 +697,7 @@
"script": "Scripts",
"server_control": "Server Controls",
"tag": "Tags",
"tags": "Tags",
"users": "Gebruikers",
"zone": "Zones"
},
@@ -1147,7 +756,6 @@
"clusters": "Clusters beheren",
"reconfigure": "Apparaat opnieuw configureren",
"remove": "Verwijder apparaat",
"view_in_visualization": "Bekijk in Visualisatie",
"zigbee_information": "Zigbee-apparaathandtekening"
},
"confirmations": {
@@ -1185,7 +793,7 @@
"editor_not_supported": "Visuele editor wordt niet ondersteund voor deze configuratie",
"error_detected": "Configuratiefouten ontdekt",
"key_missing": "Verplichte sleutel \"{key}\" ontbreekt.",
"key_not_expected": "Sleutel \"{key}\" wordt niet verwacht of ondersteund door de visuele editor.",
"key_not_expected": "Sleutel \" {key} \" wordt niet verwacht of wordt niet ondersteund door de visuele editor.",
"key_wrong_type": "De opgegeven waarde voor \" {key} \" wordt niet ondersteund door de visuele editor. We ondersteunen ( {type_correct} ) maar hebben ( {type_wrong} ) ontvangen.",
"no_type_provided": "Geen type opgegeven."
}
@@ -1685,7 +1293,7 @@
"tts": {
"default_language": "Standaardtaal om te gebruiken",
"dialog": {
"example_message": "Hallo {name}, je kunt elke tekst afspelen op elke ondersteunde mediaspeler!",
"example_message": "Hallo {naam}, je kunt elke tekst afspelen op elke ondersteunde mediaspeler!",
"header": "Probeer Tekst naar Spraak",
"play": "Speel",
"target": "Doel",
@@ -1892,7 +1500,7 @@
"cant_edit": "Je kunt alleen items bewerken die in de gebruikersinterface zijn gemaakt.",
"caption": "Apparaten",
"confirm_delete": "Weet je zeker dat je dit apparaat wilt verwijderen?",
"confirm_disable_config_entry": "Er zijn geen apparaten meer voor deze configuratie {entry_name}, wil je in plaats daarvan deze configuratie uitschakelen?",
"confirm_disable_config_entry": "Er zijn geen apparaten meer voor de config entry {entry_name}, wil je in plaats daarvan de config entry uitschakelen?",
"confirm_rename_entity_ids": "Wil je ook de entiteits-ID's van je entiteiten hernoemen?",
"confirm_rename_entity_ids_warning": "Dit zal geen enkele configuratie wijzigen (zoals automatiseringen, scripts, scènes, dashboards) die momenteel deze entiteiten gebruikt! U moet ze zelf bijwerken om de nieuwe entiteits-ID's te gebruiken!",
"data_table": {
@@ -1910,7 +1518,7 @@
"device_not_found": "Apparaat niet gevonden.",
"disabled": "Uitgeschakeld",
"disabled_by": {
"config_entry": "Configuratie-item",
"config_entry": "Configuratie-invoer",
"integration": "Integratie",
"user": "Gebruiker"
},
@@ -2122,7 +1730,7 @@
"loading_first_time": "Even geduld a.u.b. terwijl de integratie wordt geïnstalleerd",
"not_all_required_fields": "Niet alle verplichte velden zijn ingevuld.",
"pick_flow_step": {
"new_flow": "Nee, zet een andere instantie van {integration} op",
"new_flow": "Nee, zet een andere instantie van {integratie} op",
"title": "We hebben deze ontdekt. Wil je ze instellen?"
},
"submit": "Opslaan"
@@ -2725,7 +2333,6 @@
"caption": "Visualisatie",
"header": "Netwerkvisualisatie",
"highlight_label": "Markeer Apparaten",
"refresh_topology": "Topologie vernieuwen",
"zoom_label": "Zoom naar apparaat"
}
},
@@ -3026,7 +2633,7 @@
"no_entity_more_info": "Geen entiteit voorzien voor meer info dialoog",
"no_entity_toggle": "Geen entiteit opgegeven om te schakelen",
"no_navigation_path": "Geen navigatiepad opgegeven",
"no_service": "Geen service geselecteerd",
"no_service": "Geen service voor uitvoering opgegeven",
"no_url": "Geen URL om te openen opgegeven"
},
"confirm_delete": "Weet je zeker dat je deze kaart wilt verwijderen?",
@@ -3403,8 +3010,6 @@
"error_remove": "Kan configuratie niet verwijderen: {error}",
"error_save_yaml": "Kan YAML niet opslaan: {error}",
"header": "Configuratie bewerken",
"lovelace_changed": "De Lovelace configuratie is bijgewerkt, wil je de bijgewerkte configuratie in de editor laden en je huidige wijzigingen verliezen?",
"reload": "Herlaad",
"resources_moved": "Bronnen moeten niet langer worden toegevoegd aan de Lovelace-configuratie, maar kunnen worden toegevoegd in het Lovelace-configuratiepaneel.",
"save": "Opslaan",
"saved": "Opgeslagen",

View File

@@ -86,54 +86,6 @@
"unknown": "Ukjent"
}
},
"supervisor": {
"addon": {
"panel": {
"configuration": "Konfigurasjon ",
"documentation": "Dokumentasjon ",
"info": "Info",
"log": "Logg"
}
},
"common": {
"cancel": "Avbryt",
"close": "Lukk",
"newest_version": "Nyaste versjon",
"release_notes": "Utgjevingsnotat",
"update": "Oppdater ",
"version": "Versjon"
},
"confirm": {
"update": {
"text": "Er du sikker på at du vil oppdatere {name} til versjon {version}",
"title": "Oppdater {name}"
}
},
"dashboard": {
"addon_new_version": "Ny versjon tilgjengeleg",
"addon_running": "Tillegg køyrer",
"addon_stopped": "Tillegg stoppa",
"addons": "Tillegg",
"no_addons": "Du har ikkje installert nokon tillegg endå. Gå til tilleggsbutikken for å kome i gang!"
},
"dialog": {
"repositories": {
"remove": "Fjern"
},
"restart_addon": {
"confirm_text": "Start tillegget på nytt"
},
"update": {
"snapshot": "Øyeblikksbilde"
}
},
"panel": {
"dashboard": "Skrivebord",
"snapshots": "Snapshots",
"store": "Tillegsbutikk",
"system": "System"
}
},
"ui": {
"auth_store": {
"ask": "Vil du lagre denne pålogginga?",
@@ -177,7 +129,6 @@
"direction": "Retning",
"forward": "Framover",
"oscillate": "Sving",
"preset_mode": "Malmodus",
"reverse": "Bakover",
"speed": "Fart"
},
@@ -205,8 +156,7 @@
},
"script": {
"cancel": "Avbryt",
"cancel_multiple": "Avbryt {number}",
"run": "Køyr"
"cancel_multiple": "Avbryt {number}"
},
"service": {
"run": "Køyr"
@@ -283,19 +233,6 @@
"successfully_saved": "Vellukka lagring"
},
"components": {
"addon-picker": {
"addon": "Tillegg",
"error": {
"fetch_addons": {
"description": "Henter tillegget som gav feilen.",
"title": "Feil ved henting av tillegg."
},
"no_supervisor": {
"description": "Fann ikkje Supervisor, så tillegget kunne ikkje lastast.",
"title": "Inga Supervisor"
}
}
},
"area-picker": {
"add_dialog": {
"add": "Legg til",
@@ -327,12 +264,6 @@
"loading_history": "Lastar tilstandshistoria...",
"no_history_found": "Inga tilstandshistorie funne"
},
"logbook": {
"messages": {
"is_closing": "stenger",
"is_opening": "opnar"
}
},
"related-items": {
"area": "Område",
"device": "Eining",
@@ -348,12 +279,6 @@
},
"never": "Aldri"
},
"service-control": {
"required": "Dette feltet obligatorisk",
"service_data": "Tenestedata",
"target": "Mål",
"target_description": "Kva skal denne tenesta bruke som målretta område, einingar og oppføringar."
},
"service-picker": {
"service": "Teneste"
}
@@ -430,17 +355,7 @@
"description": "Vala vart lagra vellukka."
}
},
"quick-bar": {
"commands": {
"navigation": {
"tag": "Merknader"
}
}
},
"zha_device_info": {
"buttons": {
"view_in_visualization": "Visning i visualisering"
},
"confirmations": {
"remove": "Er du sikker på at du vil fjerne eininga?"
},
@@ -464,12 +379,6 @@
"second": "{count} {count, plural,\none {sekund}\nother {sekundar}\n}",
"week": "{count} {count, plural,\none {veke}\nother {veker}\n}"
},
"errors": {
"config": {
"key_not_expected": "Nøkkelen \"{key}\" er ikkje forventa eller støtta av den visuelle redigeraren.",
"key_wrong_type": "Den gitte verdien for \"{key}\" er ikkje støtta av den visuelle redigeraren. Vi støttar ({type_correct}), men mottok ({type_wrong})."
}
},
"login-form": {
"log_in": "Logg inn",
"password": "Passord",
@@ -535,9 +444,6 @@
},
"device_id": {
"action": "Handling ",
"extra_fields": {
"position": "Posisjon"
},
"label": "Eining"
},
"event": {
@@ -738,18 +644,6 @@
}
},
"cloud": {
"account": {
"tts": {
"dialog": {
"example_message": "Hei {name}! Du kan spele kva som heilst tekst på kva som heilst støtta mediaspelar\"",
"header": "Prøv tekst til tale",
"play": "Spel",
"target": "Mål",
"target_browser": "Nettlesar"
},
"try": "Prøv "
}
},
"alexa": {
"title": "Alexa"
},
@@ -813,7 +707,6 @@
},
"cant_edit": "Du kan berre redigere element som er laga i brukargrensesnittet.",
"caption": "Einingar",
"confirm_disable_config_entry": "Det er ikkje fleire einingar for konfigurasjonsoppføringa {entry_name}. Vil du heller deaktivere konfigurasjonsoppføringa?",
"confirm_rename_entity_ids": "Vil du også endre ID-ane til oppføringane dine?",
"data_table": {
"area": "Område",
@@ -861,8 +754,7 @@
},
"filtering": {
"clear": "Klarer",
"filtering_by": "Filtrerer etter",
"show": "Vis "
"filtering_by": "Filtrerer etter"
},
"header": "Konfigurer Home Assistant",
"info": {
@@ -879,18 +771,6 @@
"delete_confirm": "Er du sikker på at du vil slette denne integrasjonen?",
"device_unavailable": "Eininga utilgjengeleg",
"devices": "{count} {count, plural,\n one {eining}\n other {einingar}\n}",
"disable_restart_confirm": "Start Home Assistant på nytt for å fullføre deaktiveringa av denne integrasjonen",
"disable": {
"disable_confirm": "Er du sikker på at du vil deaktivere denne konfigurasjonsoppføringa? Einingane og oppføringane vil verte deaktivert.",
"disabled": "Deaktivert ",
"disabled_by": {
"device": "eining ",
"integration": "integrasjon ",
"user": "brukar "
},
"disabled_cause": "Deaktivert av {cause}"
},
"enable_restart_confirm": "Start Home Assistant på nytt for å fullføre aktiveringa av denne integrasjonen",
"entities": "{count} {count, plural,\n one {oppføring}\n other {oppføringar}\n}",
"entity_unavailable": "Oppføringa utilgjengeleg",
"firmware": "Firmware: {version}",
@@ -905,29 +785,18 @@
},
"config_flow": {
"close": "Lukk",
"could_not_load": "Konfigurasjonsflyt kunne ikkje lastast inn",
"dismiss": "Avvis dialogboksa",
"error": "Feil",
"external_step": {
"description": "Ei ekstern nettside må besøkast for å fullføre dette steget.",
"open_site": "Opne nettside"
},
"finish": "Fullfør",
"pick_flow_step": {
"new_flow": "Nei, sett opp ein anna førekomst av {integration}",
"title": "Vi oppdaga desse. Vil du sette dei opp?"
},
"submit": "Send inn"
},
"configure": "Konfigurer",
"configured": "Konfigurer",
"confirm_new": "Vil du sette opp {integration}?",
"confirm_new": "Vil du setje opp {integration}?",
"description": "Administrer tilkopla einingar og tenester",
"disable": {
"disabled_integrations": "{number} deaktivert ",
"hide_disabled": "Skjul deaktivert integrasjonar",
"show_disabled": "Vis deaktiverte integrasjonar"
},
"discovered": "Oppdaga",
"integration": "integrasjon ",
"new": "Sett opp ein ny integrasjon",
@@ -1066,9 +935,6 @@
},
"groups": {
"caption": "Grupper"
},
"visualization": {
"refresh_topology": "Oppdater topologi"
}
},
"zone": {
@@ -1090,12 +956,6 @@
"wakeup_interval": "Vekkarintervall"
},
"description": "Administrer Z-Wave-nettverket ditt",
"migration": {
"ozw": {
"header": "Migrer til OpenZWave",
"introduction": "Denne vegvisaren vil hjelpe deg å migrere frå den eldre Z-Wave-integrasjonen til OpenZWave-integrasjonen som for augneblinken er i beta."
}
},
"network_management": {
"header": "Z-Wave-nettverksadministrering",
"introduction": "Køyr kommandoar som påverkar Z-wave-nettverket. Du kjem ikkje til å få tilbakemelding om kommandoande lukkast, men du kan sjekke i OZW-loggen, og prøve å finne ut av det."
@@ -1175,15 +1035,9 @@
"title": "Hendingar"
},
"services": {
"accepts_target": "Denne tenesta godtek eit mål, for eksempel: `entity_id: light.bed_light`",
"all_parameters": "Alle tilgjengelege parameter ",
"title": "Tenester",
"ui_mode": "Gå til UI-modus",
"yaml_mode": "Gå til YAML-modus",
"yaml_parameters": "Parameter berre tilgjengeleg i YAML-modus"
"title": "Tenester"
},
"states": {
"copy_id": "Kopier ID til utklippstavla",
"no_entities": "Ingen oppføringar",
"title": "Statusar"
},
@@ -1324,8 +1178,6 @@
},
"header": "Rediger brukargrensesnitt",
"menu": {
"manage_dashboards": "Administrer skriveborda",
"manage_resources": "Adminstrer ressursar",
"raw_editor": "Rå konfigurasjonsredigerar"
},
"migrate": {
@@ -1336,8 +1188,6 @@
},
"raw_editor": {
"header": "Rediger konfigurasjon",
"lovelace_changed": "Lovelace-konfigurasjonen vart oppdatert. Vil du laste den oppdaterte konfigurasjonen i redigeringsprogrammet og miste gjeldende endringar?",
"reload": "Last inn på nytt",
"save": "Lagre",
"saved": "Lagra",
"unsaved_changes": "Ikkje lagra endringar"
@@ -1384,14 +1234,6 @@
"empty": "Du har ingen meldingar",
"playback_title": "Meldingsavspeling"
},
"my": {
"component_not_loaded": "Denne viderekoplinga er ikkje støtta av Home Assistant-førekomsten. Du treng {integration}-integrasjonen å bruke denne viderekoplinga.",
"documentation": "dokumentasjon",
"error": "Det hende ein ukjent feil ",
"faq_link": "Mine Home Assitant-FAQ",
"no_supervisor": "Denne viderekoplinga er ikkje støtta av Home Assistant-installasjonen. Det trengs anten installasjonsmetoden Home Assistant eller Home Assistant Supervised. For meir informasjon, sjå {docs_link} .",
"not_supported": "Denne viderekoplinga er ikkje støtta av Home Assistant-førekomsten. Sjå {link} for dei støtta vidarekoplingane og ved kva versjon dei vart introdusert."
},
"page-authorize": {
"abort_intro": "Innlogging avbrote",
"authorizing_client": "Du held på å gi {clientId} tilgang til Home Assistant-instansen din.",

Some files were not shown because too many files have changed in this diff Show More