Localize cover, fan, light, media player, history charts (#1244)

* Localize cover, fan, light, media player, history charts

* Don't capitalize
This commit is contained in:
c727 2018-06-01 16:50:28 +02:00 committed by Paulus Schoutsen
parent fa11fbc85d
commit addb8e3111
6 changed files with 49 additions and 31 deletions

View File

@ -5,7 +5,9 @@ import { PolymerElement } from '@polymer/polymer/polymer-element.js';
import './state-history-chart-line.js'; import './state-history-chart-line.js';
import './state-history-chart-timeline.js'; import './state-history-chart-timeline.js';
class StateHistoryCharts extends PolymerElement { import LocalizeMixin from '../mixins/localize-mixin.js';
class StateHistoryCharts extends LocalizeMixin(PolymerElement) {
static get template() { static get template() {
return html` return html`
<style> <style>
@ -21,11 +23,11 @@ class StateHistoryCharts extends PolymerElement {
} }
</style> </style>
<template is="dom-if" class="info" if="[[_computeIsLoading(isLoadingData)]]"> <template is="dom-if" class="info" if="[[_computeIsLoading(isLoadingData)]]">
<div class="info">Loading state history...</div> <div class="info">[[localize('ui.components.history_charts.loading_history')]]</div>
</template> </template>
<template is="dom-if" class="info" if="[[_computeIsEmpty(isLoadingData, historyData)]]"> <template is="dom-if" class="info" if="[[_computeIsEmpty(isLoadingData, historyData)]]">
<div class="info">No state history found.</div> <div class="info">[[localize('ui.components.history_charts.no_history_found')]]</div>
</template> </template>
<template is="dom-if" if="[[historyData.timeline.length]]"> <template is="dom-if" if="[[historyData.timeline.length]]">

View File

@ -10,11 +10,13 @@ import CoverEntity from '../../../util/cover-model.js';
import attributeClassNames from '../../../common/entity/attribute_class_names'; import attributeClassNames from '../../../common/entity/attribute_class_names';
import featureClassNames from '../../../common/entity/feature_class_names'; import featureClassNames from '../../../common/entity/feature_class_names';
import LocalizeMixin from '../../../mixins/localize-mixin.js';
{ {
const FEATURE_CLASS_NAMES = { const FEATURE_CLASS_NAMES = {
128: 'has-set_tilt_position', 128: 'has-set_tilt_position',
}; };
class MoreInfoCover extends PolymerElement { class MoreInfoCover extends LocalizeMixin(PolymerElement) {
static get template() { static get template() {
return html` return html`
<style include="iron-flex"></style> <style include="iron-flex"></style>
@ -39,7 +41,7 @@ import featureClassNames from '../../../common/entity/feature_class_names';
<div class="current_position"> <div class="current_position">
<ha-labeled-slider <ha-labeled-slider
caption="Position" pin="" caption="[[localize('ui.card.cover.position')]]" pin=""
value="{{coverPositionSliderValue}}" value="{{coverPositionSliderValue}}"
disabled="[[!entityObj.supportsSetPosition]]" disabled="[[!entityObj.supportsSetPosition]]"
on-change="coverPositionSliderChanged" on-change="coverPositionSliderChanged"
@ -48,7 +50,7 @@ import featureClassNames from '../../../common/entity/feature_class_names';
<div class="tilt"> <div class="tilt">
<ha-labeled-slider <ha-labeled-slider
caption="Tilt position" pin="" extra="" caption="[[localize('ui.card.cover.tilt_position')]]" pin="" extra=""
value="{{coverTiltPositionSliderValue}}" value="{{coverTiltPositionSliderValue}}"
disabled="[[!entityObj.supportsSetTiltPosition]]" disabled="[[!entityObj.supportsSetTiltPosition]]"
on-change="coverTiltPositionSliderChanged"> on-change="coverTiltPositionSliderChanged">
@ -67,28 +69,17 @@ import featureClassNames from '../../../common/entity/feature_class_names';
static get properties() { static get properties() {
return { return {
hass: { hass: Object,
type: Object,
},
stateObj: { stateObj: {
type: Object, type: Object,
observer: 'stateObjChanged', observer: 'stateObjChanged',
}, },
entityObj: { entityObj: {
type: Object, type: Object,
computed: 'computeEntityObj(hass, stateObj)', computed: 'computeEntityObj(hass, stateObj)',
}, },
coverPositionSliderValue: Number,
coverPositionSliderValue: { coverTiltPositionSliderValue: Number
type: Number,
},
coverTiltPositionSliderValue: {
type: Number,
},
}; };
} }

View File

@ -12,11 +12,12 @@ import '../../../components/ha-attributes.js';
import attributeClassNames from '../../../common/entity/attribute_class_names'; import attributeClassNames from '../../../common/entity/attribute_class_names';
import EventsMixin from '../../../mixins/events-mixin.js'; import EventsMixin from '../../../mixins/events-mixin.js';
import LocalizeMixin from '../../../mixins/localize-mixin.js';
/* /*
* @appliesMixin EventsMixin * @appliesMixin EventsMixin
*/ */
class MoreInfoFan extends EventsMixin(PolymerElement) { class MoreInfoFan extends LocalizeMixin(EventsMixin(PolymerElement)) {
static get template() { static get template() {
return html` return html`
<style include="iron-flex"></style> <style include="iron-flex"></style>
@ -45,7 +46,7 @@ class MoreInfoFan extends EventsMixin(PolymerElement) {
<div class\$="[[computeClassNames(stateObj)]]"> <div class\$="[[computeClassNames(stateObj)]]">
<div class="container-speed_list"> <div class="container-speed_list">
<paper-dropdown-menu label-float="" dynamic-align="" label="Speed"> <paper-dropdown-menu label-float="" dynamic-align="" label="[[localize('ui.card.fan.speed')]]">
<paper-listbox slot="dropdown-content" selected="{{speedIndex}}"> <paper-listbox slot="dropdown-content" selected="{{speedIndex}}">
<template is="dom-repeat" items="[[stateObj.attributes.speed_list]]"> <template is="dom-repeat" items="[[stateObj.attributes.speed_list]]">
<paper-item>[[item]]</paper-item> <paper-item>[[item]]</paper-item>
@ -56,7 +57,7 @@ class MoreInfoFan extends EventsMixin(PolymerElement) {
<div class="container-oscillating"> <div class="container-oscillating">
<div class="center horizontal layout single-row"> <div class="center horizontal layout single-row">
<div class="flex">Oscillate</div> <div class="flex">[[localize('ui.card.fan.oscillate')]]</div>
<paper-toggle-button checked="[[oscillationToggleChecked]]" on-change="oscillationToggleChanged"> <paper-toggle-button checked="[[oscillationToggleChecked]]" on-change="oscillationToggleChanged">
</paper-toggle-button> </paper-toggle-button>
</div> </div>
@ -64,7 +65,7 @@ class MoreInfoFan extends EventsMixin(PolymerElement) {
<div class="container-direction"> <div class="container-direction">
<div class="direction"> <div class="direction">
<div>Direction</div> <div>[[localize('ui.card.fan.direction')]]</div>
<paper-icon-button icon="hass:rotate-left" on-click="onDirectionLeft" title="Left" disabled="[[computeIsRotatingLeft(stateObj)]]"></paper-icon-button> <paper-icon-button icon="hass:rotate-left" on-click="onDirectionLeft" title="Left" disabled="[[computeIsRotatingLeft(stateObj)]]"></paper-icon-button>
<paper-icon-button icon="hass:rotate-right" on-click="onDirectionRight" title="Right" disabled="[[computeIsRotatingRight(stateObj)]]"></paper-icon-button> <paper-icon-button icon="hass:rotate-right" on-click="onDirectionRight" title="Right" disabled="[[computeIsRotatingRight(stateObj)]]"></paper-icon-button>
</div> </div>

View File

@ -12,6 +12,7 @@ import '../../../components/ha-labeled-slider.js';
import featureClassNames from '../../../common/entity/feature_class_names'; import featureClassNames from '../../../common/entity/feature_class_names';
import EventsMixin from '../../../mixins/events-mixin.js'; import EventsMixin from '../../../mixins/events-mixin.js';
import LocalizeMixin from '../../../mixins/localize-mixin.js';
{ {
const FEATURE_CLASS_NAMES = { const FEATURE_CLASS_NAMES = {
@ -24,7 +25,7 @@ import EventsMixin from '../../../mixins/events-mixin.js';
/* /*
* @appliesMixin EventsMixin * @appliesMixin EventsMixin
*/ */
class MoreInfoLight extends EventsMixin(PolymerElement) { class MoreInfoLight extends LocalizeMixin(EventsMixin(PolymerElement)) {
static get template() { static get template() {
return html` return html`
<style include="iron-flex"></style> <style include="iron-flex"></style>
@ -83,22 +84,22 @@ import EventsMixin from '../../../mixins/events-mixin.js';
<div class\$="[[computeClassNames(stateObj)]]"> <div class\$="[[computeClassNames(stateObj)]]">
<div class="control brightness"> <div class="control brightness">
<ha-labeled-slider caption="Brightness" icon="hass:brightness-5" max="255" value="{{brightnessSliderValue}}" on-change="brightnessSliderChanged"></ha-labeled-slider> <ha-labeled-slider caption="[[localize('ui.card.light.brightness')]]" icon="hass:brightness-5" max="255" value="{{brightnessSliderValue}}" on-change="brightnessSliderChanged"></ha-labeled-slider>
</div> </div>
<div class="control color_temp"> <div class="control color_temp">
<ha-labeled-slider caption="Color Temperature" icon="hass:thermometer" min="[[stateObj.attributes.min_mireds]]" max="[[stateObj.attributes.max_mireds]]" value="{{ctSliderValue}}" on-change="ctSliderChanged"></ha-labeled-slider> <ha-labeled-slider caption="[[localize('ui.card.light.color_temperature')]]" icon="hass:thermometer" min="[[stateObj.attributes.min_mireds]]" max="[[stateObj.attributes.max_mireds]]" value="{{ctSliderValue}}" on-change="ctSliderChanged"></ha-labeled-slider>
</div> </div>
<div class="control white_value"> <div class="control white_value">
<ha-labeled-slider caption="White Value" icon="hass:file-word-box" max="255" value="{{wvSliderValue}}" on-change="wvSliderChanged"></ha-labeled-slider> <ha-labeled-slider caption="[[localize('ui.card.light.white_value')]]" icon="hass:file-word-box" max="255" value="{{wvSliderValue}}" on-change="wvSliderChanged"></ha-labeled-slider>
</div> </div>
<ha-color-picker class="control color" on-colorselected="colorPicked" desired-hs-color="{{colorPickerColor}}" throttle="500" hue-segments="24" saturation-segments="8"> <ha-color-picker class="control color" on-colorselected="colorPicked" desired-hs-color="{{colorPickerColor}}" throttle="500" hue-segments="24" saturation-segments="8">
</ha-color-picker> </ha-color-picker>
<div class="control effect_list"> <div class="control effect_list">
<paper-dropdown-menu label-float="" dynamic-align="" label="Effect"> <paper-dropdown-menu label-float="" dynamic-align="" label="[[localize('ui.card.light.effect')]]">
<paper-listbox slot="dropdown-content" selected="{{effectIndex}}"> <paper-listbox slot="dropdown-content" selected="{{effectIndex}}">
<template is="dom-repeat" items="[[stateObj.attributes.effect_list]]"> <template is="dom-repeat" items="[[stateObj.attributes.effect_list]]">
<paper-item>[[item]]</paper-item> <paper-item>[[item]]</paper-item>

View File

@ -14,12 +14,13 @@ import HassMediaPlayerEntity from '../../../util/hass-media-player-model.js';
import attributeClassNames from '../../../common/entity/attribute_class_names'; import attributeClassNames from '../../../common/entity/attribute_class_names';
import isComponentLoaded from '../../../common/config/is_component_loaded.js'; import isComponentLoaded from '../../../common/config/is_component_loaded.js';
import EventsMixin from '../../../mixins/events-mixin.js'; import EventsMixin from '../../../mixins/events-mixin.js';
import LocalizeMixin from '../../../mixins/localize-mixin.js';
{ {
/* /*
* @appliesMixin EventsMixin * @appliesMixin EventsMixin
*/ */
class MoreInfoMediaPlayer extends EventsMixin(PolymerElement) { class MoreInfoMediaPlayer extends LocalizeMixin(EventsMixin(PolymerElement)) {
static get template() { static get template() {
return html` return html`
<style include="iron-flex iron-flex-alignment"></style> <style include="iron-flex iron-flex-alignment"></style>
@ -99,7 +100,7 @@ import EventsMixin from '../../../mixins/events-mixin.js';
</div> </div>
<!-- TTS --> <!-- TTS -->
<div hidden\$="[[computeHideTTS(ttsLoaded, playerObj)]]" class="layout horizontal end"> <div hidden\$="[[computeHideTTS(ttsLoaded, playerObj)]]" class="layout horizontal end">
<paper-input id="ttsInput" label="Text to speak" class="flex" value="{{ttsMessage}}" on-keydown="ttsCheckForEnter"></paper-input> <paper-input id="ttsInput" label="[[localize('ui.card.media_player.text_to_speak')]]" class="flex" value="{{ttsMessage}}" on-keydown="ttsCheckForEnter"></paper-input>
<paper-icon-button icon="hass:send" on-click="sendTTS"></paper-icon-button> <paper-icon-button icon="hass:send" on-click="sendTTS"></paper-icon-button>
</div> </div>
</div> </div>

View File

@ -329,6 +329,24 @@
"camera": { "camera": {
"not_available": "Image not available" "not_available": "Image not available"
}, },
"cover": {
"position": "Position",
"tilt_position": "Tilt position"
},
"fan": {
"speed": "Speed",
"oscillate": "Oscillate",
"direction": "Direction"
},
"light": {
"brightness": "Brightness",
"color_temperature": "Color temperature",
"white_value": "White value",
"effect": "Effect"
},
"media_player": {
"text_to_speak": "Text to speak"
},
"persistent_notification": { "persistent_notification": {
"dismiss": "Dismiss" "dismiss": "Dismiss"
}, },
@ -382,6 +400,10 @@
"future": "In {time}", "future": "In {time}",
"never": "Never" "never": "Never"
}, },
"history_charts": {
"loading_history": "Loading state history...",
"no_history_found": "No state history found."
},
"service-picker": { "service-picker": {
"service": "Service" "service": "Service"
} }