From 84f7c62ee22b1c4226c42b303e2af127077f034a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ab=C3=ADlio=20Costa?= Date: Wed, 20 Nov 2024 17:44:44 +0000 Subject: [PATCH] Add support for unit_of_measurement translation (#22868) --- src/common/entity/compute_state_display.ts | 7 ++++- test/common/entity/compute_state_display.ts | 29 ++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/common/entity/compute_state_display.ts b/src/common/entity/compute_state_display.ts index badeea8137..4423c53954 100644 --- a/src/common/entity/compute_state_display.ts +++ b/src/common/entity/compute_state_display.ts @@ -103,7 +103,12 @@ export const computeStateDisplayFromEntityAttributes = ( getNumberFormatOptions({ state, attributes } as HassEntity, entity) ); - const unit = attributes.unit_of_measurement; + const unit = + (entity?.translation_key && + localize( + `component.${entity.platform}.entity.${domain}.${entity.translation_key}.unit_of_measurement` + )) || + attributes.unit_of_measurement; if (unit) { return `${value}${blankBeforeUnit(unit, locale)}${unit}`; diff --git a/test/common/entity/compute_state_display.ts b/test/common/entity/compute_state_display.ts index 3bf6fdfe1c..41dd143444 100644 --- a/test/common/entity/compute_state_display.ts +++ b/test/common/entity/compute_state_display.ts @@ -1,8 +1,8 @@ import { assert } from "chai"; import { computeStateDisplay } from "../../../src/common/entity/compute_state_display"; import { UNKNOWN } from "../../../src/data/entity"; +import type { FrontendLocaleData } from "../../../src/data/translation"; import { - FrontendLocaleData, NumberFormat, TimeFormat, FirstWeekday, @@ -119,6 +119,33 @@ describe("computeStateDisplay", () => { ); }); + it("Localizes a numeric sensor value with translated unit_of_measurement", () => { + const stateObj: any = { + entity_id: "sensor.test", + state: "1234", + attributes: { + state_class: "measurement", + }, + }; + const entities: any = { + "sensor.test": { + translation_key: "custom_translation", + platform: "custom_integration", + }, + }; + assert.strictEqual( + computeStateDisplay( + localize, + stateObj, + localeData, + numericDeviceClasses, + demoConfig, + entities + ), + "1,234 component.custom_integration.entity.sensor.custom_translation.unit_of_measurement" + ); + }); + it("Localizes and formats numeric sensor value with units", () => { const stateObj: any = { entity_id: "sensor.test",