Make automation editor card headers translateable (triggers partly) (#16969)

This commit is contained in:
Simon Lamon 2023-06-21 08:12:04 +02:00 committed by GitHub
parent 221f4f34a7
commit 386ed2167f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 74 additions and 39 deletions

View File

@ -24,6 +24,9 @@ import { EntityRegistryEntry } from "./entity_registry";
import "../resources/intl-polyfill"; import "../resources/intl-polyfill";
import { FrontendLocaleData } from "./translation"; import { FrontendLocaleData } from "./translation";
const triggerTranslationBaseKey =
"ui.panel.config.automation.editor.triggers.type";
const describeDuration = (forTime: number | string | ForDict) => { const describeDuration = (forTime: number | string | ForDict) => {
let duration: string | null; let duration: string | null;
if (typeof forTime === "number") { if (typeof forTime === "number") {
@ -101,14 +104,19 @@ export const describeTrigger = (
} }
const eventTypesString = disjunctionFormatter.format(eventTypes); const eventTypesString = disjunctionFormatter.format(eventTypes);
return `When ${eventTypesString} event is fired`; return hass.localize(
`${triggerTranslationBaseKey}.event.description.full`,
{ eventTypes: eventTypesString }
);
} }
// Home Assistant Trigger // Home Assistant Trigger
if (trigger.platform === "homeassistant" && trigger.event) { if (trigger.platform === "homeassistant" && trigger.event) {
return `When Home Assistant is ${ return hass.localize(
trigger.event === "start" ? "started" : "shutdown" trigger.event === "start"
}`; ? `${triggerTranslationBaseKey}.homeassistant.description.started`
: `${triggerTranslationBaseKey}.homeassistant.description.shutdown`
);
} }
// Numeric State Trigger // Numeric State Trigger
@ -329,29 +337,28 @@ export const describeTrigger = (
// Sun Trigger // Sun Trigger
if (trigger.platform === "sun" && trigger.event) { if (trigger.platform === "sun" && trigger.event) {
let base = `When the sun ${trigger.event === "sunset" ? "sets" : "rises"}`; let duration = "";
if (trigger.offset) { if (trigger.offset) {
let duration = ""; if (typeof trigger.offset === "number") {
duration = secondsToDuration(trigger.offset)!;
if (trigger.offset) { } else if (typeof trigger.offset === "string") {
if (typeof trigger.offset === "number") { duration = trigger.offset;
duration = ` offset by ${secondsToDuration(trigger.offset)!}`; } else {
} else if (typeof trigger.offset === "string") { duration = JSON.stringify(trigger.offset);
duration = ` offset by ${trigger.offset}`;
} else {
duration = ` offset by ${JSON.stringify(trigger.offset)}`;
}
} }
base += duration;
} }
return base; return hass.localize(
trigger.event === "sunset"
? `${triggerTranslationBaseKey}.sun.description.sets`
: `${triggerTranslationBaseKey}.sun.description.rises`,
{ hasDuration: duration !== "", duration: duration }
);
} }
// Tag Trigger // Tag Trigger
if (trigger.platform === "tag") { if (trigger.platform === "tag") {
return "When a tag is scanned"; return hass.localize(`${triggerTranslationBaseKey}.tag.description.full`);
} }
// Time Trigger // Time Trigger
@ -364,10 +371,9 @@ export const describeTrigger = (
: localizeTimeString(at, hass.locale, hass.config) : localizeTimeString(at, hass.locale, hass.config)
); );
const last = result.splice(-1, 1)[0]; return hass.localize(`${triggerTranslationBaseKey}.time.description.full`, {
return `When the time is equal to ${ time: disjunctionFormatter.format(result),
result.length ? `${result.join(", ")} or ` : "" });
}${last}`;
} }
// Time Pattern Trigger // Time Pattern Trigger
@ -561,24 +567,27 @@ export const describeTrigger = (
// MQTT Trigger // MQTT Trigger
if (trigger.platform === "mqtt") { if (trigger.platform === "mqtt") {
return "When an MQTT message has been received"; return hass.localize(`${triggerTranslationBaseKey}.mqtt.description.full`);
} }
// Template Trigger // Template Trigger
if (trigger.platform === "template") { if (trigger.platform === "template") {
let base = "When a template triggers"; let duration = "";
if (trigger.for) { if (trigger.for) {
const duration = describeDuration(trigger.for); duration = describeDuration(trigger.for) ?? "";
if (duration) {
base += ` for ${duration}`;
}
} }
return base;
return hass.localize(
`${triggerTranslationBaseKey}.template.description.full`,
{ hasDuration: duration !== "", duration: duration }
);
} }
// Webhook Trigger // Webhook Trigger
if (trigger.platform === "webhook") { if (trigger.platform === "webhook") {
return "When a Webhook payload has been received"; return hass.localize(
`${triggerTranslationBaseKey}.webhook.description.full`
);
} }
if (trigger.platform === "device") { if (trigger.platform === "device") {

View File

@ -2292,7 +2292,10 @@
"event_data": "Event data", "event_data": "Event data",
"context_users": "Limit to events triggered by", "context_users": "Limit to events triggered by",
"context_user_picked": "User firing event", "context_user_picked": "User firing event",
"context_user_pick": "Select user" "context_user_pick": "Select user",
"description": {
"full": "When {eventTypes} event is fired"
}
}, },
"geo_location": { "geo_location": {
"label": "Geolocation", "label": "Geolocation",
@ -2314,12 +2317,19 @@
"label": "Home Assistant", "label": "Home Assistant",
"event": "Event:", "event": "Event:",
"start": "Start", "start": "Start",
"shutdown": "Shutdown" "shutdown": "Shutdown",
"description": {
"started": "When Home Assistant is started",
"shutdown": "When Home Assistant is shutdown"
}
}, },
"mqtt": { "mqtt": {
"label": "MQTT", "label": "MQTT",
"topic": "Topic", "topic": "Topic",
"payload": "Payload (optional)" "payload": "Payload (optional)",
"description": {
"full": "When an MQTT message has been received"
}
}, },
"numeric_state": { "numeric_state": {
"label": "Numeric state", "label": "Numeric state",
@ -2336,22 +2346,35 @@
"event": "[%key:ui::panel::config::automation::editor::triggers::type::homeassistant::event%]", "event": "[%key:ui::panel::config::automation::editor::triggers::type::homeassistant::event%]",
"sunrise": "Sunrise", "sunrise": "Sunrise",
"sunset": "Sunset", "sunset": "Sunset",
"offset": "Offset (optional)" "offset": "Offset (optional)",
"description": {
"sets": "When the sun sets{hasDuration, select, \n true { offset by {duration}} \n other {}\n }",
"rises": "When the sun rises{hasDuration, select, \n true { offset by {duration}} \n other {}\n }"
}
}, },
"tag": { "tag": {
"label": "Tag" "label": "Tag",
"description": {
"full": "When a tag is scanned"
}
}, },
"template": { "template": {
"label": "Template", "label": "Template",
"value_template": "Value template", "value_template": "Value template",
"for": "For" "for": "For",
"description": {
"full": "When a template triggers{hasDuration, select, \n true { for {duration}} \n other {}\n }"
}
}, },
"time": { "time": {
"type_value": "Fixed time", "type_value": "Fixed time",
"type_input": "Value of a date/time helper or timestamp-class sensor", "type_input": "Value of a date/time helper or timestamp-class sensor",
"label": "Time", "label": "Time",
"at": "At time", "at": "At time",
"mode": "Mode" "mode": "Mode",
"description": {
"full": "When the time is equal to {time}"
}
}, },
"time_pattern": { "time_pattern": {
"label": "Time Pattern", "label": "Time Pattern",
@ -2365,7 +2388,10 @@
"local_only": "Only accessible from the local network", "local_only": "Only accessible from the local network",
"webhook_id": "Webhook ID", "webhook_id": "Webhook ID",
"webhook_id_helper": "Treat this ID like a password: keep it secret, and make it hard to guess.", "webhook_id_helper": "Treat this ID like a password: keep it secret, and make it hard to guess.",
"webhook_settings": "Webhook Settings" "webhook_settings": "Webhook Settings",
"description": {
"full": "When a Webhook payload has been received"
}
}, },
"zone": { "zone": {
"label": "Zone", "label": "Zone",