diff --git a/src/util/hass-translation.html b/src/util/hass-translation.html index efdeeb4ffa..b161ecac7c 100644 --- a/src/util/hass-translation.html +++ b/src/util/hass-translation.html @@ -6,7 +6,7 @@ function getActiveTranslation() { // report languages with specific cases. const lookup = {}; /* eslint-disable no-undef */ - Object.keys(window.translationMetadata).forEach(function (tr) { + Object.keys(window.translationMetadata).forEach((tr) => { lookup[tr.toLowerCase()] = tr; }); @@ -14,7 +14,7 @@ function getActiveTranslation() { function languageGetTranslation(language) { const subtags = language.toLowerCase().split('-'); - for (var i = subtags.length; i >= 1; i--) { + for (let i = subtags.length; i >= 1; i--) { const lang = subtags.slice(0, i).join('-'); if (lookup[lang]) { @@ -24,14 +24,22 @@ function getActiveTranslation() { return null; } - var translation = null; + let translation = null; + let selectedLanguage; if (window.localStorage.selectedLanguage) { - translation = languageGetTranslation(JSON.parse(window.localStorage.selectedLanguage)); + try { + selectedLanguage = JSON.parse(window.localStorage.selectedLanguage); + } catch (e) { + // Ignore parsing error. + } + } + if (selectedLanguage) { + translation = languageGetTranslation(selectedLanguage); if (translation) { return translation; } } else if (navigator.languages) { - for (var i = 0; i < navigator.languages.length; i++) { + for (let i = 0; i < navigator.languages.length; i++) { translation = languageGetTranslation(navigator.languages[i]); if (translation) { return translation; @@ -54,7 +62,14 @@ const translations = {}; window.getTranslation = function (translationInput) { const translation = translationInput || getActiveTranslation(); - const translationFingerprint = window.translationMetadata[translation].fingerprint; + const metadata = window.translationMetadata[translation]; + if (!metadata) { + if (translationInput !== 'en') { + return window.getTranslation('en'); + } + return Promise.reject(new Error('Language en not found in metadata')); + } + const translationFingerprint = metadata.fingerprint; // Create a promise to fetch translation from the server if (!translations[translationFingerprint]) {