Conversation
The three-way bubbles select exposed its options as the literal strings OFF/MEDIUM/MAX, so every UI showed them in English regardless of the user language. Home Assistant translates select states by looking the option value up under entity.select.<key>.state, which requires slug values and a translation_key on the entity description. - switch option values to slugs (off/medium/max) - add translation_key to the select description - add the entity.select.bubbles.state block to en.json - add de.json with German translations for the states and options flow - add tests asserting the options are slugs and that every language translates every option BREAKING CHANGE: automations calling select.select_option with the literal OFF/MEDIUM/MAX values need updating to off/medium/max.
|
Reviewed the diff against the current The approach is correct, and the breaking change is unavoidable. The Home
So Worth making the blast radius explicit in the release notes, because it is
Checks run against this branch:
One nit in the new test: |
The three-way bubbles select exposes its options as the literal strings
OFF/MEDIUM/MAX, so every UI shows them in English regardless of the user's language. There is currently noentityblock in the translation files at all.Home Assistant translates select states by looking the option value up under
entity.select.<key>.state, which requires slug values plus atranslation_keyon the entity description.Changes
off/medium/max)translation_keyadded to the select descriptionentity.select.bubbles.stateblock added toen.jsonde.jsonadded — German for the states and the options flowThe entity
nameis deliberately left in the description, so display names do not change.select.select_optionwith the literalOFF/MEDIUM/MAXneed updating tooff/medium/max. I see no way to translate the states without it — happy to drop the PR if you consider that too disruptive for existing users.Verified locally (
uv syncagainst the repo's own lockfile, Python 3.14.2): baselinemain282 passed → with this change 284 passed;pre-commit run --all-filespasses all eight hooks.