From 875b55743a0152e7630a6111d7128a2a28657c97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Wiedemann?= Date: Sun, 17 Jan 2021 17:27:20 +0000 Subject: [PATCH] feat: Format numbers according to selected language [#495 #509] Fixes #495 #509 --- .devcontainer/configuration.yaml | 23 +++++++++++++++++++++-- .devcontainer/ui-lovelace.yaml | 11 ++++++++++- src/main.js | 21 ++++++++++++++++++--- 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/.devcontainer/configuration.yaml b/.devcontainer/configuration.yaml index 740bcd4..52a938e 100644 --- a/.devcontainer/configuration.yaml +++ b/.devcontainer/configuration.yaml @@ -5,5 +5,24 @@ lovelace: type: module default_config: - -demo: \ No newline at end of file + +demo: + +sensor: + - platform: template + sensors: + pressure: + friendly_name: "Pressure" + unit_of_measurement: "hPa" + value_template: "{{ state_attr('weather.home', 'pressure') }}" + device_class: pressure + temperature: + friendly_name: "Temperature" + unit_of_measurement: "°C" + value_template: "{{ state_attr('weather.home', 'temperature') }}" + device_class: temperature + humidity: + friendly_name: "Humidity" + unit_of_measurement: "%" + value_template: "{{ state_attr('weather.home', 'humidity') }}" + device_class: humidity diff --git a/.devcontainer/ui-lovelace.yaml b/.devcontainer/ui-lovelace.yaml index be9144d..e880034 100644 --- a/.devcontainer/ui-lovelace.yaml +++ b/.devcontainer/ui-lovelace.yaml @@ -3,4 +3,13 @@ views: cards: - type: custom:mini-graph-card entities: - - sensor.outside_humidity + - sensor.humidity + - type: custom:mini-graph-card + entities: + - sensor.temperature + - type: custom:mini-graph-card + entities: + - sensor.pressure + show: + extrema: true + # decimals: 10 diff --git a/src/main.js b/src/main.js index 2f692d1..3a24770 100755 --- a/src/main.js +++ b/src/main.js @@ -667,11 +667,26 @@ class MiniGraphCard extends LitElement { const dec = this.config.decimals; const value_factor = 10 ** this.config.value_factor; - if (dec === undefined || Number.isNaN(dec) || Number.isNaN(state)) - return Math.round(state * value_factor * 100) / 100; + if (dec === undefined || Number.isNaN(dec) || Number.isNaN(state)) { + return this.numberFormat(Math.round(state * value_factor * 100) / 100, this._hass.language); + } const x = 10 ** dec; - return (Math.round(state * value_factor * x) / x).toFixed(dec); + return this.numberFormat( + (Math.round(state * value_factor * x) / x).toFixed(dec), + this._hass.language, dec, + ); + } + + numberFormat(num, language, dec) { + if (!Number.isNaN(Number(num)) && Intl) { + if (dec === undefined || Number.isNaN(dec)) { + return new Intl.NumberFormat(language).format(Number(num)); + } else { + return new Intl.NumberFormat(language, { minimumFractionDigits: dec }).format(Number(num)); + } + } + return num.toString(); } updateOnInterval() {