diff --git a/src/state/translations-mixin.ts b/src/state/translations-mixin.ts index 72f07f2bdc..fef6eb4792 100644 --- a/src/state/translations-mixin.ts +++ b/src/state/translations-mixin.ts @@ -210,7 +210,7 @@ export default >(superClass: T) => this.__coreProgress = language; try { const result = await getTranslation(null, language); - this._updateResources(result.language, result.data); + await this._updateResources(result.language, result.data); } finally { this.__coreProgress = undefined; } @@ -226,18 +226,26 @@ export default >(superClass: T) => // before this.hass is even created. In this case our base state comes // from this._pendingHass instead. Otherwise the first set of strings is // overwritten when we call _updateHass the second time! - const baseHass = this.hass ?? this._pendingHass; + + if (language !== (this.hass ?? this._pendingHass).language) { + // the language was changed, abort + return; + } + const resources = { [language]: { - ...baseHass?.resources?.[language], + ...(this.hass ?? this._pendingHass)?.resources?.[language], ...data, }, }; - const changes: Partial = { resources }; - if (this.hass && language === this.hass.language) { - changes.localize = await computeLocalize(this, language, resources); + const changes: Partial = { + resources, + localize: await computeLocalize(this, language, resources), + }; + + if (language === (this.hass ?? this._pendingHass).language) { + this._updateHass(changes); } - this._updateHass(changes); } private _refetchCachedHassTranslations(