import enUS from './en-US.json'; import deCH from './de-CH.json'; import frFR from './fr-FR.json'; import jaJP from './ja-JP.json'; const translations = { enUS, deCH, frFR, jaJP, }; const getNestedProp = (obj, path) => { const props = path.split('.'); try { let currentProp = obj[props.shift()]; while (props.length > 0) currentProp = currentProp[props.shift()]; return currentProp; } catch { return null; } }; const translateCodeProp = (code, prop, locale, fallbackLocale, html = false) => { const targetProp = html ? 'html' : 'content'; const title = code[prop].find((t) => t.lang === locale); const fallbackTitle = code[prop].find((t) => t.lang === fallbackLocale); if (title && title[targetProp]) code[prop] = title[targetProp]; else if (fallbackTitle && fallbackTitle[targetProp]) code[prop] = fallbackTitle[targetProp]; else code[prop] = null; }; const translateInternal = (identifier, locale) => { if (locale) { const localeId = locale.replace('-', ''); if (translations[localeId] != null) { const translatedAttribute = getNestedProp(translations[localeId], identifier); if (translatedAttribute) return translatedAttribute; } } return null; }; export const translate = (identifier, locale, fallbackLocale = 'en-US') => { const translatedAttribute = translateInternal(identifier, locale); if (translatedAttribute) return translatedAttribute; return translateInternal(identifier, fallbackLocale); }; export const translateCode = (code, locale, fallbackLocale = 'en-US') => { const cpy = {}; Object.assign(cpy, code); translateCodeProp(cpy, 'title', locale, fallbackLocale); translateCodeProp(cpy, 'description', locale, fallbackLocale, true); return cpy; };