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]) {