From 86fc954e6db072ec7e3bdfe126a278d824f2fb2b Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 20 May 2026 12:55:07 +0000 Subject: [PATCH 1/2] Fix onboarding crash when area translations are missing --- homeassistant/components/onboarding/views.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/onboarding/views.py b/homeassistant/components/onboarding/views.py index a4cd0198968d90..f8b4a8272f3355 100644 --- a/homeassistant/components/onboarding/views.py +++ b/homeassistant/components/onboarding/views.py @@ -198,7 +198,11 @@ async def post(self, request: web.Request, data: dict[str, str]) -> web.Response if await async_wait_component(hass, "person"): await person.async_create_person(hass, data["name"], user_id=user.id) - # Create default areas using the users supplied language. + # Create default areas using the users supplied language, + # falling back to English for any missing keys. + english_translations = await async_get_translations( + hass, "en", "area", {DOMAIN} + ) translations = await async_get_translations( hass, data["language"], "area", {DOMAIN} ) @@ -206,7 +210,11 @@ async def post(self, request: web.Request, data: dict[str, str]) -> web.Response area_registry = ar.async_get(hass) for area in DEFAULT_AREAS: - name = translations[f"component.onboarding.area.{area.key}"] + translation_key = f"component.onboarding.area.{area.key}" + name = translations.get( + translation_key, + english_translations.get(translation_key, area.key), + ) # Guard because area might have been created by an automatically # set up integration. if not area_registry.async_get_area_by_name(name): From 38a5fad551e806306a765a0ce3f1a2ee3c63d5d4 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 20 May 2026 13:05:59 +0000 Subject: [PATCH 2/2] Address review: skip duplicate fetch when language is English --- homeassistant/components/onboarding/views.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/onboarding/views.py b/homeassistant/components/onboarding/views.py index f8b4a8272f3355..d537ed17171c8d 100644 --- a/homeassistant/components/onboarding/views.py +++ b/homeassistant/components/onboarding/views.py @@ -198,14 +198,18 @@ async def post(self, request: web.Request, data: dict[str, str]) -> web.Response if await async_wait_component(hass, "person"): await person.async_create_person(hass, data["name"], user_id=user.id) - # Create default areas using the users supplied language, + # Create default areas using the user-supplied language, # falling back to English for any missing keys. + language = data["language"] english_translations = await async_get_translations( hass, "en", "area", {DOMAIN} ) - translations = await async_get_translations( - hass, data["language"], "area", {DOMAIN} - ) + if language == "en": + translations = english_translations + else: + translations = await async_get_translations( + hass, language, "area", {DOMAIN} + ) area_registry = ar.async_get(hass)