From 68ee78a577fae88c705ec7e12172d190b7e17bc2 Mon Sep 17 00:00:00 2001 From: Manuel Kocher <manuel.kocher@tugraz.at> Date: Mon, 11 Jul 2022 10:51:23 +0200 Subject: [PATCH] add missing file error handling to translation-overrides --- packages/common/i18next.js | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/packages/common/i18next.js b/packages/common/i18next.js index 5f56097c..4dd7ce2e 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(); -- GitLab