diff --git a/src/data/script_i18n.ts b/src/data/script_i18n.ts index b08cb49c49ad..686b52438e48 100644 --- a/src/data/script_i18n.ts +++ b/src/data/script_i18n.ts @@ -89,7 +89,8 @@ const tryDescribeAction = ( const config = action as ActionTypes["service"]; const targets: string[] = []; - if (config.target) { + const targetOrData = config.target || config.data; + if (targetOrData) { for (const [key, name] of Object.entries({ area_id: "areas", device_id: "devices", @@ -97,12 +98,10 @@ const tryDescribeAction = ( floor_id: "floors", label_id: "labels", })) { - if (!(key in config.target)) { + if (!(key in targetOrData)) { continue; } - const keyConf: string[] = Array.isArray(config.target[key]) - ? config.target[key] - : [config.target[key]]; + const keyConf: string[] = ensureArray(targetOrData[key]) || []; for (const targetThing of keyConf) { if (isTemplate(targetThing)) { @@ -195,8 +194,12 @@ const tryDescribeAction = ( (config.service && isTemplate(config.service)) ) { return hass.localize( - `${actionTranslationBaseKey}.service.description.service_based_on_template`, - { targets: formatListWithAnds(hass.locale, targets) } + targets.length + ? `${actionTranslationBaseKey}.service.description.service_based_on_template` + : `${actionTranslationBaseKey}.service.description.service_based_on_template_no_targets`, + { + targets: formatListWithAnds(hass.locale, targets), + } ); } @@ -208,7 +211,9 @@ const tryDescribeAction = ( if (config.metadata) { return hass.localize( - `${actionTranslationBaseKey}.service.description.service_name`, + targets.length + ? `${actionTranslationBaseKey}.service.description.service_name` + : `${actionTranslationBaseKey}.service.description.service_name_no_targets`, { domain: domainToName(hass.localize, domain), name: service || config.service, @@ -218,7 +223,9 @@ const tryDescribeAction = ( } return hass.localize( - `${actionTranslationBaseKey}.service.description.service_based_on_name`, + targets.length + ? `${actionTranslationBaseKey}.service.description.service_based_on_name` + : `${actionTranslationBaseKey}.service.description.service_based_on_name_no_targets`, { name: service ? `${domainToName(hass.localize, domain)}: ${service}` diff --git a/src/translations/en.json b/src/translations/en.json index c6cf7cae7ec4..18bb22292f01 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -3251,6 +3251,9 @@ "service_based_on_template": "Call a service based on a template on {targets}", "service_based_on_name": "Call a service ''{name}'' on {targets}", "service_name": "{domain} ''{name}'' on {targets}", + "service_based_on_template_no_targets": "Call a service based on a template", + "service_based_on_name_no_targets": "Call a service ''{name}''", + "service_name_no_targets": "{domain} ''{name}''", "service": "Call a service", "target_template": "templated {name}", "target_unknown_entity": "unknown entity",