diff --git a/packages/common/i18next.js b/packages/common/i18next.js index 5f56097cfd5a5db5d726441879dabe86cc3c2195..4dd7ce2e34c05a92917b398c317ffaf4650a4b08 100644 --- a/packages/common/i18next.js +++ b/packages/common/i18next.js @@ -9,8 +9,14 @@ async function fetchOverridesByLanguage(overrides, lng) { fetch(overrides + lng +'/translation.json', { headers: {'Content-Type': 'application/json'}, }); - let json = await result.json(); - return json; + + // throw error if response is not json + try { + let json = await result.json(); + return json; + } catch(e) { + throw new Error("Could not parse response as json: " + e); + } } // handles translation cache promises @@ -165,21 +171,26 @@ export async function setOverridesByGlobalCache(i18n, element) { // to the original one. This way we an change the overrides at runtime // and can even remove them. - - // The scoped mixin saves the real tag name under data-tag-name let tagName = ((element.dataset && element.dataset.tagName) || element.tagName).toLowerCase(); let namespace = i18n.options.fallbackNS; let overrideNamespace = getOverrideNamespace(namespace); let hasOverrides = false; for (let lng of i18n.languages) { - cacheOverrides(element.langDir, lng); - translationCache[lng] = await translationCache[lng]; - i18n.removeResourceBundle(lng, overrideNamespace); - if (translationCache[lng] === undefined || translationCache[lng][tagName] === undefined) continue; - let resources = translationCache[lng][tagName]; - hasOverrides = true; - i18n.addResourceBundle(lng, overrideNamespace, resources); + // check if cacheOverrides throws error + try { + cacheOverrides(element.langDir, lng); + translationCache[lng] = await translationCache[lng]; + i18n.removeResourceBundle(lng, overrideNamespace); + if (translationCache[lng] === undefined || translationCache[lng][tagName] === undefined) continue; + let resources = translationCache[lng][tagName]; + hasOverrides = true; + i18n.addResourceBundle(lng, overrideNamespace, resources); + } catch(e) { + // leave loop and use default translations if error is thrown + hasOverrides = false; + break; + } } i18n.setDefaultNamespace(hasOverrides ? overrideNamespace : namespace); element.requestUpdate();