mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-10 02:46:38 +00:00
L10N config-entries (#1718)
* L10N config-entries * Lint * Address review comment * Add back parentheses
This commit is contained in:
parent
70225c1a18
commit
c91b28a850
@ -19,7 +19,7 @@ function computeEntityName(hass, entity) {
|
|||||||
/*
|
/*
|
||||||
* @appliesMixin EventsMixin
|
* @appliesMixin EventsMixin
|
||||||
*/
|
*/
|
||||||
class HaDeviceCard extends EventsMixin(PolymerElement) {
|
class HaCeEntitiesCard extends EventsMixin(PolymerElement) {
|
||||||
static get template() {
|
static get template() {
|
||||||
return html`
|
return html`
|
||||||
<style>
|
<style>
|
||||||
@ -63,7 +63,8 @@ class HaDeviceCard extends EventsMixin(PolymerElement) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_computeEntityName(entity, hass) {
|
_computeEntityName(entity, hass) {
|
||||||
return computeEntityName(hass, entity) || '(entity unavailable)';
|
return computeEntityName(hass, entity)
|
||||||
|
|| `(${this.localize('ui.panel.config.integrations.config_entry.entity_unavailable')})`;
|
||||||
}
|
}
|
||||||
|
|
||||||
_openMoreInfo(ev) {
|
_openMoreInfo(ev) {
|
||||||
@ -71,4 +72,4 @@ class HaDeviceCard extends EventsMixin(PolymerElement) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
customElements.define('ha-ce-entities-card', HaDeviceCard);
|
customElements.define('ha-ce-entities-card', HaCeEntitiesCard);
|
||||||
|
@ -50,17 +50,19 @@ class HaConfigManagerDashboard extends
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<hass-subpage header="Integrations">
|
<hass-subpage header="[[localize('ui.panel.config.integrations.caption')]]">
|
||||||
<template is="dom-if" if="[[progress.length]]">
|
<template is="dom-if" if="[[progress.length]]">
|
||||||
<ha-config-section>
|
<ha-config-section>
|
||||||
<span slot="header">Discovered</span>
|
<span slot="header">[[localize('ui.panel.config.integrations.discovered')]]</span>
|
||||||
<paper-card>
|
<paper-card>
|
||||||
<template is="dom-repeat" items="[[progress]]">
|
<template is="dom-repeat" items="[[progress]]">
|
||||||
<div class="config-entry-row">
|
<div class="config-entry-row">
|
||||||
<paper-item-body>
|
<paper-item-body>
|
||||||
[[_computeIntegrationTitle(localize, item.handler)]]
|
[[_computeIntegrationTitle(localize, item.handler)]]
|
||||||
</paper-item-body>
|
</paper-item-body>
|
||||||
<paper-button on-click="_continueFlow">Configure</paper-button>
|
<paper-button
|
||||||
|
on-click="_continueFlow"
|
||||||
|
>[[localize('ui.panel.config.integrations.configure')]]</paper-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</paper-card>
|
</paper-card>
|
||||||
@ -68,12 +70,12 @@ class HaConfigManagerDashboard extends
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<ha-config-section class='configured'>
|
<ha-config-section class='configured'>
|
||||||
<span slot="header">Configured</span>
|
<span slot="header">[[localize('ui.panel.config.integrations.configured')]]</span>
|
||||||
<paper-card>
|
<paper-card>
|
||||||
<template is="dom-if" if="[[!entries.length]]">
|
<template is="dom-if" if="[[!entries.length]]">
|
||||||
<div class="config-entry-row">
|
<div class="config-entry-row">
|
||||||
<paper-item-body two-line>
|
<paper-item-body two-line>
|
||||||
<div>Nothing configured yet</div>
|
<div>[[localize('ui.panel.config.integrations.none')]]</div>
|
||||||
</paper-item-body>
|
</paper-item-body>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -99,14 +101,16 @@ class HaConfigManagerDashboard extends
|
|||||||
</ha-config-section>
|
</ha-config-section>
|
||||||
|
|
||||||
<ha-config-section>
|
<ha-config-section>
|
||||||
<span slot="header">Set up a new integration</span>
|
<span slot="header">[[localize('ui.panel.config.integrations.new')]]</span>
|
||||||
<paper-card>
|
<paper-card>
|
||||||
<template is="dom-repeat" items="[[handlers]]">
|
<template is="dom-repeat" items="[[handlers]]">
|
||||||
<div class="config-entry-row">
|
<div class="config-entry-row">
|
||||||
<paper-item-body>
|
<paper-item-body>
|
||||||
[[_computeIntegrationTitle(localize, item)]]
|
[[_computeIntegrationTitle(localize, item)]]
|
||||||
</paper-item-body>
|
</paper-item-body>
|
||||||
<paper-button on-click="_createFlow">Configure</paper-button>
|
<paper-button
|
||||||
|
on-click="_createFlow"
|
||||||
|
>[[localize('ui.panel.config.integrations.configure')]]</paper-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</paper-card>
|
</paper-card>
|
||||||
|
@ -10,9 +10,10 @@ import compare from '../../../common/string/compare.js';
|
|||||||
import './ha-device-card.js';
|
import './ha-device-card.js';
|
||||||
import './ha-ce-entities-card.js';
|
import './ha-ce-entities-card.js';
|
||||||
import EventsMixin from '../../../mixins/events-mixin.js';
|
import EventsMixin from '../../../mixins/events-mixin.js';
|
||||||
|
import LocalizeMixin from '../../../mixins/localize-mixin.js';
|
||||||
import NavigateMixin from '../../../mixins/navigate-mixin.js';
|
import NavigateMixin from '../../../mixins/navigate-mixin.js';
|
||||||
|
|
||||||
class HaConfigEntryPage extends NavigateMixin(EventsMixin(PolymerElement)) {
|
class HaConfigEntryPage extends NavigateMixin(EventsMixin(LocalizeMixin(PolymerElement))) {
|
||||||
static get template() {
|
static get template() {
|
||||||
return html`
|
return html`
|
||||||
<style>
|
<style>
|
||||||
@ -44,7 +45,7 @@ class HaConfigEntryPage extends NavigateMixin(EventsMixin(PolymerElement)) {
|
|||||||
></paper-icon-button>
|
></paper-icon-button>
|
||||||
<div class='content'>
|
<div class='content'>
|
||||||
<template is='dom-if' if='[[_computeIsEmpty(_configEntryDevices, _noDeviceEntities)]]'>
|
<template is='dom-if' if='[[_computeIsEmpty(_configEntryDevices, _noDeviceEntities)]]'>
|
||||||
<p>This integration has no devices.</p>
|
<p>[[localize('ui.panel.config.integrations.config_entry.no_devices')]]</p>
|
||||||
</template>
|
</template>
|
||||||
<template is='dom-repeat' items='[[_configEntryDevices]]' as='device'>
|
<template is='dom-repeat' items='[[_configEntryDevices]]' as='device'>
|
||||||
<ha-device-card
|
<ha-device-card
|
||||||
@ -56,7 +57,7 @@ class HaConfigEntryPage extends NavigateMixin(EventsMixin(PolymerElement)) {
|
|||||||
</template>
|
</template>
|
||||||
<template is='dom-if' if='[[_noDeviceEntities.length]]'>
|
<template is='dom-if' if='[[_noDeviceEntities.length]]'>
|
||||||
<ha-ce-entities-card
|
<ha-ce-entities-card
|
||||||
heading='Entities without devices'
|
heading="[[localize('ui.panel.config.integrations.config_entry.no_device')]]"
|
||||||
entities='[[_noDeviceEntities]]'
|
entities='[[_noDeviceEntities]]'
|
||||||
hass='[[hass]]'
|
hass='[[hass]]'
|
||||||
></ha-ce-entities-card>
|
></ha-ce-entities-card>
|
||||||
@ -124,7 +125,7 @@ class HaConfigEntryPage extends NavigateMixin(EventsMixin(PolymerElement)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_removeEntry() {
|
_removeEntry() {
|
||||||
if (!confirm('Are you sure you want to delete this integration?')) return;
|
if (!confirm(this.localize('ui.panel.config.integrations.config_entry.delete_confirm'))) return;
|
||||||
|
|
||||||
const entryId = this.configEntry.entry_id;
|
const entryId = this.configEntry.entry_id;
|
||||||
|
|
||||||
@ -132,7 +133,7 @@ class HaConfigEntryPage extends NavigateMixin(EventsMixin(PolymerElement)) {
|
|||||||
.then((result) => {
|
.then((result) => {
|
||||||
this.fire('hass-reload-entries');
|
this.fire('hass-reload-entries');
|
||||||
if (result.require_restart) {
|
if (result.require_restart) {
|
||||||
alert('Restart Home Assistant to finish removing this integration');
|
alert(this.localize('ui.panel.config.integrations.config_entry.restart_confirm'));
|
||||||
}
|
}
|
||||||
this.navigate('/config/integrations/dashboard', true);
|
this.navigate('/config/integrations/dashboard', true);
|
||||||
});
|
});
|
||||||
|
@ -7,6 +7,7 @@ import { PolymerElement } from '@polymer/polymer/polymer-element.js';
|
|||||||
import '../../../layouts/hass-subpage.js';
|
import '../../../layouts/hass-subpage.js';
|
||||||
|
|
||||||
import EventsMixin from '../../../mixins/events-mixin.js';
|
import EventsMixin from '../../../mixins/events-mixin.js';
|
||||||
|
import LocalizeMixin from '../../../mixins/localize-mixin.js';
|
||||||
import computeStateName from '../../../common/entity/compute_state_name.js';
|
import computeStateName from '../../../common/entity/compute_state_name.js';
|
||||||
import '../../../components/entity/state-badge.js';
|
import '../../../components/entity/state-badge.js';
|
||||||
import compare from '../../../common/string/compare.js';
|
import compare from '../../../common/string/compare.js';
|
||||||
@ -20,7 +21,7 @@ function computeEntityName(hass, entity) {
|
|||||||
/*
|
/*
|
||||||
* @appliesMixin EventsMixin
|
* @appliesMixin EventsMixin
|
||||||
*/
|
*/
|
||||||
class HaDeviceCard extends EventsMixin(PolymerElement) {
|
class HaDeviceCard extends EventsMixin(LocalizeMixin(PolymerElement)) {
|
||||||
static get template() {
|
static get template() {
|
||||||
return html`
|
return html`
|
||||||
<style>
|
<style>
|
||||||
@ -61,17 +62,19 @@ class HaDeviceCard extends EventsMixin(PolymerElement) {
|
|||||||
<!-- <h1>[[configEntry.title]] ([[_computeIntegrationTitle(localize, configEntry.domain)]])</h1> -->
|
<!-- <h1>[[configEntry.title]] ([[_computeIntegrationTitle(localize, configEntry.domain)]])</h1> -->
|
||||||
<div class='info'>
|
<div class='info'>
|
||||||
<div class='model'>[[device.model]]</div>
|
<div class='model'>[[device.model]]</div>
|
||||||
<div class='manuf'>by [[device.manufacturer]]</div>
|
<div class='manuf'>
|
||||||
|
[[localize('ui.panel.config.integrations.config_entry.manuf', 'manufacturer', device.manufacturer)]]
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<template is='dom-if' if='[[device.hub_device_id]]'>
|
<template is='dom-if' if='[[device.hub_device_id]]'>
|
||||||
<div class='extra-info'>
|
<div class='extra-info'>
|
||||||
Connected via
|
[[localize('ui.panel.config.integrations.config_entry.hub')]]
|
||||||
<span class='hub'>[[_computeDeviceName(devices, device.hub_device_id)]]</span>
|
<span class='hub'>[[_computeDeviceName(devices, device.hub_device_id)]]</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template is='dom-if' if='[[device.sw_version]]'>
|
<template is='dom-if' if='[[device.sw_version]]'>
|
||||||
<div class='extra-info'>
|
<div class='extra-info'>
|
||||||
Firmware: [[device.sw_version]]
|
[[localize('ui.panel.config.integrations.config_entry.firmware', 'version', device.sw_version)]]
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
@ -126,12 +129,14 @@ class HaDeviceCard extends EventsMixin(PolymerElement) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_computeEntityName(entity, hass) {
|
_computeEntityName(entity, hass) {
|
||||||
return computeEntityName(hass, entity) || '(entity unavailable)';
|
return computeEntityName(hass, entity)
|
||||||
|
|| `(${this.localize('ui.panel.config.integrations.config_entry.entity_unavailable')})`;
|
||||||
}
|
}
|
||||||
|
|
||||||
_computeDeviceName(devices, deviceId) {
|
_computeDeviceName(devices, deviceId) {
|
||||||
const device = devices.find(dev => dev.id === deviceId);
|
const device = devices.find(dev => dev.id === deviceId);
|
||||||
return device ? device.name : '(device unavailable)';
|
return device ? device.name
|
||||||
|
: `(${this.localize('ui.panel.config.integrations.config_entry.device_unavailable')})`;
|
||||||
}
|
}
|
||||||
|
|
||||||
_openMoreInfo(ev) {
|
_openMoreInfo(ev) {
|
||||||
|
@ -40,7 +40,7 @@ class HaConfigDashboard extends NavigateMixin(LocalizeMixin(PolymerElement)) {
|
|||||||
<app-header slot="header" fixed="">
|
<app-header slot="header" fixed="">
|
||||||
<app-toolbar>
|
<app-toolbar>
|
||||||
<ha-menu-button narrow="[[narrow]]" show-menu="[[showMenu]]"></ha-menu-button>
|
<ha-menu-button narrow="[[narrow]]" show-menu="[[showMenu]]"></ha-menu-button>
|
||||||
<div main-title="">[[localize('panel.configuration')]]</div>
|
<div main-title="">[[localize('panel.config')]]</div>
|
||||||
</app-toolbar>
|
</app-toolbar>
|
||||||
</app-header>
|
</app-header>
|
||||||
|
|
||||||
@ -54,12 +54,16 @@ class HaConfigDashboard extends NavigateMixin(LocalizeMixin(PolymerElement)) {
|
|||||||
<a href='/config/cloud' tabindex="-1">
|
<a href='/config/cloud' tabindex="-1">
|
||||||
<paper-item on-click="_navigate">
|
<paper-item on-click="_navigate">
|
||||||
<paper-item-body two-line="">
|
<paper-item-body two-line="">
|
||||||
Home Assistant Cloud
|
[[localize('ui.panel.config.cloud.caption')]]
|
||||||
<template is="dom-if" if="[[cloudStatus.logged_in]]">
|
<template is="dom-if" if="[[cloudStatus.logged_in]]">
|
||||||
<div secondary="">Logged in as [[cloudStatus.email]]</div>
|
<div secondary="">
|
||||||
|
[[localize('ui.panel.config.cloud.description_login', 'email', cloudStatus.email)]]
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template is="dom-if" if="[[!cloudStatus.logged_in]]">
|
<template is="dom-if" if="[[!cloudStatus.logged_in]]">
|
||||||
<div secondary="">Not logged in</div>
|
<div secondary="">
|
||||||
|
[[localize('ui.panel.config.cloud.description_not_login')]]
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</paper-item-body>
|
</paper-item-body>
|
||||||
<iron-icon icon="hass:chevron-right"></iron-icon>
|
<iron-icon icon="hass:chevron-right"></iron-icon>
|
||||||
@ -72,8 +76,10 @@ class HaConfigDashboard extends NavigateMixin(LocalizeMixin(PolymerElement)) {
|
|||||||
<a href='/config/integrations/dashboard' tabindex="-1">
|
<a href='/config/integrations/dashboard' tabindex="-1">
|
||||||
<paper-item>
|
<paper-item>
|
||||||
<paper-item-body two-line>
|
<paper-item-body two-line>
|
||||||
Integrations
|
[[localize('ui.panel.config.integrations.caption')]]
|
||||||
<div secondary>Manage connected devices and services</div>
|
<div secondary>
|
||||||
|
[[localize('ui.panel.config.integrations.description')]]
|
||||||
|
</div>
|
||||||
</paper-item-body>
|
</paper-item-body>
|
||||||
<iron-icon icon="hass:chevron-right"></iron-icon>
|
<iron-icon icon="hass:chevron-right"></iron-icon>
|
||||||
</paper-item>
|
</paper-item>
|
||||||
|
@ -697,6 +697,31 @@
|
|||||||
"caption": "Script",
|
"caption": "Script",
|
||||||
"description": "Create and edit scripts"
|
"description": "Create and edit scripts"
|
||||||
},
|
},
|
||||||
|
"cloud": {
|
||||||
|
"caption": "Home Assistant Cloud",
|
||||||
|
"description_login": "Logged in as {email}",
|
||||||
|
"description_not_login": "Not logged in"
|
||||||
|
},
|
||||||
|
"integrations": {
|
||||||
|
"caption": "Integrations",
|
||||||
|
"description": "Manage connected devices and services",
|
||||||
|
"discovered": "Discovered",
|
||||||
|
"configured": "Configured",
|
||||||
|
"new": "Set up a new integration",
|
||||||
|
"configure": "Configure",
|
||||||
|
"none": "Nothing configured yet",
|
||||||
|
"config_entry": {
|
||||||
|
"no_devices": "This integration has no devices.",
|
||||||
|
"no_device": "Entities without devices",
|
||||||
|
"delete_confirm": "Are you sure you want to delete this integration?",
|
||||||
|
"restart_confirm": "Restart Home Assistant to finish removing this integration",
|
||||||
|
"manuf": "by {manufacturer}",
|
||||||
|
"hub": "Connected via",
|
||||||
|
"firmware": "Firmware: {version}",
|
||||||
|
"device_unavailable": "device unavailable",
|
||||||
|
"entity_unavailable": "entity unavailable"
|
||||||
|
}
|
||||||
|
},
|
||||||
"users": {
|
"users": {
|
||||||
"caption": "Users",
|
"caption": "Users",
|
||||||
"description": "Manage users",
|
"description": "Manage users",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user