From 25392655e727d11caf33b6991e50ff7f75b9016a Mon Sep 17 00:00:00 2001 From: Jan Bouwhuis Date: Tue, 17 Jan 2023 16:22:19 +0100 Subject: [PATCH] Allow translating select selector options (#85531) Co-authored-by: Franck Nijhof --- homeassistant/components/mqtt/config_flow.py | 1 + homeassistant/components/mqtt/strings.json | 9 +++++++++ .../components/mqtt/translations/en.json | 9 +++++++++ homeassistant/helpers/selector.py | 2 ++ script/hassfest/translations.py | 8 ++++++++ tests/helpers/test_selector.py | 19 +++++++++++++++++++ 6 files changed, 48 insertions(+) diff --git a/homeassistant/components/mqtt/config_flow.py b/homeassistant/components/mqtt/config_flow.py index 168f8b71cde..90c579b75fa 100644 --- a/homeassistant/components/mqtt/config_flow.py +++ b/homeassistant/components/mqtt/config_flow.py @@ -137,6 +137,7 @@ BROKER_VERIFICATION_SELECTOR = SelectSelector( SelectSelectorConfig( options=CA_VERIFICATION_MODES, mode=SelectSelectorMode.DROPDOWN, + translation_key=SET_CA_CERT, ) ) diff --git a/homeassistant/components/mqtt/strings.json b/homeassistant/components/mqtt/strings.json index 0ef5ea29068..b55fa5779b8 100644 --- a/homeassistant/components/mqtt/strings.json +++ b/homeassistant/components/mqtt/strings.json @@ -136,5 +136,14 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_inclusion": "[%key:component::mqtt::config::error::invalid_inclusion%]" } + }, + "selector": { + "set_ca_cert": { + "options": { + "off": "Off", + "auto": "Auto", + "custom": "Custom" + } + } } } diff --git a/homeassistant/components/mqtt/translations/en.json b/homeassistant/components/mqtt/translations/en.json index 1f092dfdc96..9280f36292d 100644 --- a/homeassistant/components/mqtt/translations/en.json +++ b/homeassistant/components/mqtt/translations/en.json @@ -136,5 +136,14 @@ "title": "MQTT options" } } + }, + "selector": { + "set_ca_cert": { + "options": { + "off": "Off", + "auto": "Auto", + "custom": "Custom" + } + } } } \ No newline at end of file diff --git a/homeassistant/helpers/selector.py b/homeassistant/helpers/selector.py index 32f2d6a1124..0ba5ee363e9 100644 --- a/homeassistant/helpers/selector.py +++ b/homeassistant/helpers/selector.py @@ -733,6 +733,7 @@ class SelectSelectorConfig(TypedDict, total=False): multiple: bool custom_value: bool mode: SelectSelectorMode + translation_key: str @SELECTORS.register("select") @@ -749,6 +750,7 @@ class SelectSelector(Selector[SelectSelectorConfig]): vol.Optional("mode"): vol.All( vol.Coerce(SelectSelectorMode), lambda val: val.value ), + vol.Optional("translation_key"): cv.string, } ) diff --git a/script/hassfest/translations.py b/script/hassfest/translations.py index 111a8ce235b..be73692cb26 100644 --- a/script/hassfest/translations.py +++ b/script/hassfest/translations.py @@ -216,6 +216,14 @@ def gen_strings_schema(config: Config, integration: Integration) -> vol.Schema: flow_title=UNDEFINED, require_step_title=False, ), + vol.Optional("selector"): cv.schema_with_slug_keys( + { + "options": cv.schema_with_slug_keys( + cv.string_with_no_html, slug_validator=translation_key_validator + ) + }, + slug_validator=vol.Any("_", cv.slug), + ), vol.Optional("device_automation"): { vol.Optional("action_type"): {str: cv.string_with_no_html}, vol.Optional("condition_type"): {str: cv.string_with_no_html}, diff --git a/tests/helpers/test_selector.py b/tests/helpers/test_selector.py index 4b4072bd06c..470865be2e3 100644 --- a/tests/helpers/test_selector.py +++ b/tests/helpers/test_selector.py @@ -419,6 +419,25 @@ def test_text_selector_schema(schema, valid_selections, invalid_selections): ("red", "green"), ("cat", 0, None, ["red"]), ), + ( + { + "options": ["red", "green", "blue"], + "translation_key": "color", + }, + ("red", "green", "blue"), + ("cat", 0, None, ["red"]), + ), + ( + { + "options": [ + {"value": "red", "label": "Ruby Red"}, + {"value": "green", "label": "Emerald Green"}, + ], + "translation_key": "color", + }, + ("red", "green"), + ("cat", 0, None, ["red"]), + ), ( {"options": ["red", "green", "blue"], "multiple": True}, (["red"], ["green", "blue"], []),