Make device classes in logbook translatable (#10376)

This commit is contained in:
Philip Allgaier 2021-10-26 21:00:28 +02:00 committed by GitHub
parent 371804591d
commit 0b2404a0f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 57 additions and 50 deletions

View File

@ -2,6 +2,7 @@ import { HassEntity } from "home-assistant-js-websocket";
import { BINARY_STATE_OFF, BINARY_STATE_ON } from "../common/const"; import { BINARY_STATE_OFF, BINARY_STATE_ON } from "../common/const";
import { computeDomain } from "../common/entity/compute_domain"; import { computeDomain } from "../common/entity/compute_domain";
import { computeStateDisplay } from "../common/entity/compute_state_display"; import { computeStateDisplay } from "../common/entity/compute_state_display";
import { LocalizeFunc } from "../common/translations/localize";
import { HomeAssistant } from "../types"; import { HomeAssistant } from "../types";
import { UNAVAILABLE_STATES } from "./entity"; import { UNAVAILABLE_STATES } from "./entity";
@ -35,9 +36,11 @@ export const getLogbookDataForContext = async (
hass: HomeAssistant, hass: HomeAssistant,
startDate: string, startDate: string,
contextId?: string contextId?: string
): Promise<LogbookEntry[]> => ): Promise<LogbookEntry[]> => {
addLogbookMessage( const localize = await hass.loadBackendTranslation("device_class");
return addLogbookMessage(
hass, hass,
localize,
await getLogbookDataFromServer( await getLogbookDataFromServer(
hass, hass,
startDate, startDate,
@ -47,6 +50,7 @@ export const getLogbookDataForContext = async (
contextId contextId
) )
); );
};
export const getLogbookData = async ( export const getLogbookData = async (
hass: HomeAssistant, hass: HomeAssistant,
@ -54,9 +58,11 @@ export const getLogbookData = async (
endDate: string, endDate: string,
entityId?: string, entityId?: string,
entity_matches_only?: boolean entity_matches_only?: boolean
): Promise<LogbookEntry[]> => ): Promise<LogbookEntry[]> => {
addLogbookMessage( const localize = await hass.loadBackendTranslation("device_class");
return addLogbookMessage(
hass, hass,
localize,
await getLogbookDataCache( await getLogbookDataCache(
hass, hass,
startDate, startDate,
@ -65,9 +71,11 @@ export const getLogbookData = async (
entity_matches_only entity_matches_only
) )
); );
};
export const addLogbookMessage = ( export const addLogbookMessage = (
hass: HomeAssistant, hass: HomeAssistant,
localize: LocalizeFunc,
logbookData: LogbookEntry[] logbookData: LogbookEntry[]
): LogbookEntry[] => { ): LogbookEntry[] => {
for (const entry of logbookData) { for (const entry of logbookData) {
@ -75,6 +83,7 @@ export const addLogbookMessage = (
if (entry.state && stateObj) { if (entry.state && stateObj) {
entry.message = getLogbookMessage( entry.message = getLogbookMessage(
hass, hass,
localize,
entry.state, entry.state,
stateObj, stateObj,
computeDomain(entry.entity_id!) computeDomain(entry.entity_id!)
@ -157,6 +166,7 @@ export const clearLogbookCache = (startDate: string, endDate: string) => {
export const getLogbookMessage = ( export const getLogbookMessage = (
hass: HomeAssistant, hass: HomeAssistant,
localize: LocalizeFunc,
state: string, state: string,
stateObj: HassEntity, stateObj: HassEntity,
domain: string domain: string
@ -165,21 +175,17 @@ export const getLogbookMessage = (
case "device_tracker": case "device_tracker":
case "person": case "person":
if (state === "not_home") { if (state === "not_home") {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_away`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_away`);
} }
if (state === "home") { if (state === "home") {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_at_home`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_at_home`);
} }
return hass.localize( return localize(`${LOGBOOK_LOCALIZE_PATH}.was_at_state`, "state", state);
`${LOGBOOK_LOCALIZE_PATH}.was_at_state`,
"state",
state
);
case "sun": case "sun":
return state === "above_horizon" return state === "above_horizon"
? hass.localize(`${LOGBOOK_LOCALIZE_PATH}.rose`) ? localize(`${LOGBOOK_LOCALIZE_PATH}.rose`)
: hass.localize(`${LOGBOOK_LOCALIZE_PATH}.set`); : localize(`${LOGBOOK_LOCALIZE_PATH}.set`);
case "binary_sensor": { case "binary_sensor": {
const isOn = state === BINARY_STATE_ON; const isOn = state === BINARY_STATE_ON;
@ -189,19 +195,19 @@ export const getLogbookMessage = (
switch (device_class) { switch (device_class) {
case "battery": case "battery":
if (isOn) { if (isOn) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_low`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_low`);
} }
if (isOff) { if (isOff) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_normal`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_normal`);
} }
break; break;
case "connectivity": case "connectivity":
if (isOn) { if (isOn) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_connected`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_connected`);
} }
if (isOff) { if (isOff) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_disconnected`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_disconnected`);
} }
break; break;
@ -210,46 +216,46 @@ export const getLogbookMessage = (
case "opening": case "opening":
case "window": case "window":
if (isOn) { if (isOn) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_opened`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_opened`);
} }
if (isOff) { if (isOff) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_closed`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_closed`);
} }
break; break;
case "lock": case "lock":
if (isOn) { if (isOn) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_unlocked`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_unlocked`);
} }
if (isOff) { if (isOff) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_locked`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_locked`);
} }
break; break;
case "plug": case "plug":
if (isOn) { if (isOn) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_plugged_in`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_plugged_in`);
} }
if (isOff) { if (isOff) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_unplugged`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_unplugged`);
} }
break; break;
case "presence": case "presence":
if (isOn) { if (isOn) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_at_home`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_at_home`);
} }
if (isOff) { if (isOff) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_away`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_away`);
} }
break; break;
case "safety": case "safety":
if (isOn) { if (isOn) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_unsafe`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_unsafe`);
} }
if (isOff) { if (isOff) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_safe`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_safe`);
} }
break; break;
@ -265,27 +271,27 @@ export const getLogbookMessage = (
case "sound": case "sound":
case "vibration": case "vibration":
if (isOn) { if (isOn) {
return hass.localize( return localize(`${LOGBOOK_LOCALIZE_PATH}.detected_device_class`, {
`${LOGBOOK_LOCALIZE_PATH}.detected_device_class`, device_class: localize(
"device_class", `component.binary_sensor.device_class.${device_class}`
device_class ),
); });
} }
if (isOff) { if (isOff) {
return hass.localize( return localize(`${LOGBOOK_LOCALIZE_PATH}.cleared_device_class`, {
`${LOGBOOK_LOCALIZE_PATH}.cleared_device_class`, device_class: localize(
"device_class", `component.binary_sensor.device_class.${device_class}`
device_class ),
); });
} }
break; break;
case "tamper": case "tamper":
if (isOn) { if (isOn) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.detected_tampering`); return localize(`${LOGBOOK_LOCALIZE_PATH}.detected_tampering`);
} }
if (isOff) { if (isOff) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.cleared_tampering`); return localize(`${LOGBOOK_LOCALIZE_PATH}.cleared_tampering`);
} }
break; break;
} }
@ -296,43 +302,43 @@ export const getLogbookMessage = (
case "cover": case "cover":
switch (state) { switch (state) {
case "open": case "open":
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_opened`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_opened`);
case "opening": case "opening":
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.is_opening`); return localize(`${LOGBOOK_LOCALIZE_PATH}.is_opening`);
case "closing": case "closing":
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.is_closing`); return localize(`${LOGBOOK_LOCALIZE_PATH}.is_closing`);
case "closed": case "closed":
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_closed`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_closed`);
} }
break; break;
case "lock": case "lock":
if (state === "unlocked") { if (state === "unlocked") {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_unlocked`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_unlocked`);
} }
if (state === "locked") { if (state === "locked") {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_locked`); return localize(`${LOGBOOK_LOCALIZE_PATH}.was_locked`);
} }
break; break;
} }
if (state === BINARY_STATE_ON) { if (state === BINARY_STATE_ON) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.turned_on`); return localize(`${LOGBOOK_LOCALIZE_PATH}.turned_on`);
} }
if (state === BINARY_STATE_OFF) { if (state === BINARY_STATE_OFF) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.turned_off`); return localize(`${LOGBOOK_LOCALIZE_PATH}.turned_off`);
} }
if (UNAVAILABLE_STATES.includes(state)) { if (UNAVAILABLE_STATES.includes(state)) {
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.became_unavailable`); return localize(`${LOGBOOK_LOCALIZE_PATH}.became_unavailable`);
} }
return hass.localize( return hass.localize(
`${LOGBOOK_LOCALIZE_PATH}.changed_to_state`, `${LOGBOOK_LOCALIZE_PATH}.changed_to_state`,
"state", "state",
stateObj stateObj
? computeStateDisplay(hass.localize, stateObj, hass.locale, state) ? computeStateDisplay(localize, stateObj, hass.locale, state)
: state : state
); );
}; };

View File

@ -37,7 +37,8 @@ export type TranslationCategory =
| "options" | "options"
| "device_automation" | "device_automation"
| "mfa_setup" | "mfa_setup"
| "system_health"; | "system_health"
| "device_class";
export const fetchTranslationPreferences = (hass: HomeAssistant) => export const fetchTranslationPreferences = (hass: HomeAssistant) =>
fetchFrontendUserData(hass.connection, "language"); fetchFrontendUserData(hass.connection, "language");