From 29e8edcb7035dba1030f39ac127babeb0671b8a7 Mon Sep 17 00:00:00 2001 From: Wendelin Date: Wed, 5 Nov 2025 16:23:50 +0100 Subject: [PATCH 1/3] Language picker add search fallback to en --- src/components/ha-language-picker.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/components/ha-language-picker.ts b/src/components/ha-language-picker.ts index 40fb2a039c65..6995f2b3754f 100644 --- a/src/components/ha-language-picker.ts +++ b/src/components/ha-language-picker.ts @@ -40,14 +40,22 @@ export const getLanguageOptions = ( return { id: lang, primary, - search_labels: [primary], + search_labels: [ + primary, + formatLanguageCode(lang, { language: "en" } as FrontendLocaleData), + ], }; }); } else if (locale) { options = languages.map((lang) => ({ id: lang, primary: formatLanguageCode(lang, locale), - search_labels: [formatLanguageCode(lang, locale)], + search_labels: [ + formatLanguageCode(lang, locale), + ...(locale.language !== "en" + ? [formatLanguageCode(lang, { language: "en" } as FrontendLocaleData)] + : []), + ], })); } From a86d868baab5f4fe2bdda8821c9098b5ef617258 Mon Sep 17 00:00:00 2001 From: Wendelin Date: Wed, 5 Nov 2025 16:34:21 +0100 Subject: [PATCH 2/3] Also add current lang as fallback --- src/components/ha-language-picker.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/ha-language-picker.ts b/src/components/ha-language-picker.ts index 6995f2b3754f..554a1bb53aee 100644 --- a/src/components/ha-language-picker.ts +++ b/src/components/ha-language-picker.ts @@ -42,6 +42,10 @@ export const getLanguageOptions = ( primary, search_labels: [ primary, + formatLanguageCode( + lang, + locale || ({ language: navigator.language } as FrontendLocaleData) + ), formatLanguageCode(lang, { language: "en" } as FrontendLocaleData), ], }; From d37e8e018327efc1d083d398be3ed0730c4f9037 Mon Sep 17 00:00:00 2001 From: Wendelin Date: Thu, 6 Nov 2025 08:39:03 +0100 Subject: [PATCH 3/3] Improve --- src/components/ha-language-picker.ts | 45 +++++++++++++++++----------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/src/components/ha-language-picker.ts b/src/components/ha-language-picker.ts index 554a1bb53aee..f2febcffac49 100644 --- a/src/components/ha-language-picker.ts +++ b/src/components/ha-language-picker.ts @@ -22,6 +22,7 @@ export const getLanguageOptions = ( ): PickerComboBoxItem[] => { let options: PickerComboBoxItem[] = []; + const enLocale = { language: "en" } as FrontendLocaleData; if (nativeName) { const translations = translationMetadata.translations; options = languages.map((lang) => { @@ -37,30 +38,38 @@ export const getLanguageOptions = ( primary = lang; } } + let searchLabels = primary; + const browserLangName = formatLanguageCode( + lang, + locale || ({ language: navigator.language } as FrontendLocaleData) + ); + if (browserLangName !== primary) { + searchLabels += `;${browserLangName}`; + } + const englishName = formatLanguageCode(lang, enLocale); + if (englishName !== primary && englishName !== browserLangName) { + searchLabels += `;${englishName}`; + } return { id: lang, primary, - search_labels: [ - primary, - formatLanguageCode( - lang, - locale || ({ language: navigator.language } as FrontendLocaleData) - ), - formatLanguageCode(lang, { language: "en" } as FrontendLocaleData), - ], + search_labels: searchLabels.split(";"), }; }); } else if (locale) { - options = languages.map((lang) => ({ - id: lang, - primary: formatLanguageCode(lang, locale), - search_labels: [ - formatLanguageCode(lang, locale), - ...(locale.language !== "en" - ? [formatLanguageCode(lang, { language: "en" } as FrontendLocaleData)] - : []), - ], - })); + options = languages.map((lang) => { + const primary = formatLanguageCode(lang, locale); + let searchLabels = primary; + const englishName = formatLanguageCode(lang, enLocale); + if (englishName !== primary) { + searchLabels += `;${englishName}`; + } + return { + id: lang, + primary, + search_labels: searchLabels.split(";"), + }; + }); } if (!noSort && locale) {