diff --git a/src/localize/localize.ts b/src/localize/localize.ts index 6ed6b131..9a083867 100644 --- a/src/localize/localize.ts +++ b/src/localize/localize.ts @@ -8,17 +8,31 @@ const languages: any = { }; export function localize(string: string, search = '', replace = ''): string { - // Get the browser language. - let lang = localStorage - .getItem('selectedLanguage') - ?.replace(/['"]+/g, '') - .replace('-', '_'); + const canonicalizeLanguage = (language?: string | null): string | null => { + if (!language) { + return null; + } + return language.replace('-', '_'); + }; - // If that's not specified, try to find the Home Assistant language. + // Try the HA language first... + let lang; + const HALanguage = localStorage.getItem('selectedLanguage'); + if (HALanguage) { + const selectedLanguage = canonicalizeLanguage(JSON.parse(HALanguage)); + if (selectedLanguage) { + lang = selectedLanguage; + } + } + + // Then fall back to the browser language. if (!lang) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const hass = (document.querySelector('home-assistant') as any)?.hass; - lang = hass.selectedLanguage || hass.language; + for (const language of navigator.languages) { + const canonicalLanguage = canonicalizeLanguage(language); + if (canonicalLanguage && canonicalLanguage in languages) { + lang = language; + } + } } // Default to English is there's still no language setting.