diff --git a/src/entrypoints/app.js b/src/entrypoints/app.js index 280e0e2b9e..588db464b8 100644 --- a/src/entrypoints/app.js +++ b/src/entrypoints/app.js @@ -22,7 +22,7 @@ import '../managers/notification-manager.js'; import '../resources/ha-style.js'; import '../resources/html-import/polyfill.js'; import '../util/ha-pref-storage.js'; -import '../util/hass-translation.js'; +import { getActiveTranslation, getTranslation } from '../util/hass-translation.js'; import '../util/legacy-support'; import '../util/roboto.js'; import hassCallApi from '../util/hass-call-api.js'; @@ -108,7 +108,7 @@ class HomeAssistant extends PolymerElement { } loadResources(fragment) { - window.getTranslation(fragment).then((result) => { + getTranslation(fragment).then((result) => { this._updateResources(result.language, result.data); }); } @@ -167,7 +167,7 @@ class HomeAssistant extends PolymerElement { themes: null, panelUrl: this.panelUrl, - language: window.getActiveTranslation(), + language: getActiveTranslation(), // If resources are already loaded, don't discard them resources: (this.hass && this.hass.resources) || null, diff --git a/src/util/hass-translation.js b/src/util/hass-translation.js index e95ce5d675..ea86d4f910 100644 --- a/src/util/hass-translation.js +++ b/src/util/hass-translation.js @@ -1,6 +1,6 @@ import translationMetadata from '../../build-translations/translationMetadata.json'; -window.getActiveTranslation = function () { +export function getActiveTranslation() { // Perform case-insenstive comparison since browser isn't required to // report languages with specific cases. const lookup = {}; @@ -58,18 +58,18 @@ window.getActiveTranslation = function () { // Final fallback return 'en'; -}; +} // Store loaded translations in memory so translations are available immediately // when DOM is created in Polymer. Even a cache lookup creates noticeable latency. const translations = {}; -window.getTranslation = function (fragment, translationInput) { +export function getTranslation(fragment, translationInput) { const translation = translationInput || getActiveTranslation(); const metadata = translationMetadata.translations[translation]; if (!metadata) { if (translationInput !== 'en') { - return window.getTranslation(fragment, 'en'); + return getTranslation(fragment, 'en'); } return Promise.reject(new Error('Language en not found in metadata')); } @@ -89,14 +89,14 @@ window.getTranslation = function (fragment, translationInput) { delete translations[translationFingerprint]; if (translationInput !== 'en') { // Couldn't load selected translation. Try a fall back to en before failing. - return window.getTranslation(fragment, 'en'); + return getTranslation(fragment, 'en'); } return Promise.reject(error); }); } return translations[translationFingerprint]; -}; +} // Load selected translation into memory immediately so it is ready when Polymer // initializes. -window.getTranslation(); +getTranslation();