{"version":3,"file":"TranslationContext-d7mvuDlb.js","sources":["../../src/utils/translations.ts","../../src/context/TranslationContext/TranslationContext.tsx"],"sourcesContent":["import de from \"@Resources/translations/de.json\";\nimport rm from \"@Resources/translations/rm.json\";\n\nexport const languages = {\n de: de,\n rm: rm,\n};\n\nconst DEFAULT_LANGUAGE = \"de\";\ntype LanguageKey = keyof typeof languages;\n\nexport const getTranslations = (language = DEFAULT_LANGUAGE) => {\n return languages[language as LanguageKey];\n};\n","import { getTranslations, languages } from \"@Utils/translations\";\nimport { ReactNode, createContext, useContext, useState } from \"react\";\n\nexport const GERMAN = \"de\";\nexport const ROMANSH = \"rm\";\nexport const DEFAULT_LANGUAGE = GERMAN;\n\nconst LOCALES: { [key: string]: string } = {\n [GERMAN]: \"de-CH\",\n [ROMANSH]: \"rm\",\n};\n\nexport const LOCALES_TO_LANGUAGE: { [key: string]: string } = {\n \"de-CH\": GERMAN,\n rm: ROMANSH,\n};\n\nexport const LANGUAGE_CODE: { [key: string]: number } = {\n [GERMAN]: 49,\n [ROMANSH]: 4181,\n};\n\nexport type TFunction = (key: string, context?: object) => string;\n\nconst INITIAL_STATE: {\n currentLanguage: string;\n currentLocale: string;\n currentLanguageCode: number;\n setLanguage: (language: string) => void;\n t: TFunction;\n} = {\n currentLanguage: DEFAULT_LANGUAGE,\n currentLocale: LOCALES[DEFAULT_LANGUAGE],\n currentLanguageCode: LANGUAGE_CODE[DEFAULT_LANGUAGE],\n setLanguage: (_language: string) => {},\n t: (key: string, _context?: object) => {\n return key;\n },\n};\n\nconst TranslationsContext = createContext(INITIAL_STATE);\n\ntype Props = {\n children: ReactNode;\n language?: string;\n devMode: boolean;\n};\nexport const TranslationsProvider = ({\n children,\n language,\n devMode,\n}: Props) => {\n const [translations, setTranslations] = useState(getTranslations(language));\n const [currentLanguage, setCurrentLanguage] = useState(\n language || DEFAULT_LANGUAGE,\n );\n const [currentLocale, setCurrentLocale] = useState(\n LOCALES[currentLanguage],\n );\n const [currentLanguageCode, setCurrentLanguageCode] = useState(\n LANGUAGE_CODE[currentLanguage],\n );\n\n const setLanguage = (language: string) => {\n if (Object.prototype.hasOwnProperty.call(languages, language)) {\n setTranslations(getTranslations(language));\n setCurrentLanguage(language);\n setCurrentLocale(LOCALES[language]);\n setCurrentLanguageCode(LANGUAGE_CODE[language]);\n return;\n }\n\n setTranslations(getTranslations(DEFAULT_LANGUAGE));\n setCurrentLanguage(DEFAULT_LANGUAGE);\n setCurrentLocale(LOCALES[DEFAULT_LANGUAGE]);\n setCurrentLanguageCode(LANGUAGE_CODE[DEFAULT_LANGUAGE]);\n };\n\n const t = (key: string, context?: object) => {\n const properties = key.split(\".\");\n\n let translation = properties.reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (prev: any, curr) => prev?.[curr],\n translations,\n );\n\n if (!translation) {\n if (devMode) {\n // eslint-disable-next-line no-console\n console.warn(\n `Translation not found for ${key} in ${translations.currentLang}`,\n );\n }\n\n return key;\n }\n\n if (context) {\n // Replace/interpolate variables in the translation string\n Object.entries(context).forEach(([key, value]) => {\n translation = translation.replace(\n `\\${${key}}`,\n value?.toString() ?? \"\",\n );\n });\n }\n\n return translation;\n };\n\n return (\n \n {children}\n \n );\n};\n\nexport const useTranslations = () => useContext(TranslationsContext);\n"],"names":["languages","de","rm","DEFAULT_LANGUAGE","getTranslations","language","GERMAN","ROMANSH","LOCALES","LOCALES_TO_LANGUAGE","LANGUAGE_CODE","INITIAL_STATE","_language","key","_context","TranslationsContext","createContext","TranslationsProvider","children","devMode","translations","setTranslations","useState","currentLanguage","setCurrentLanguage","currentLocale","setCurrentLocale","currentLanguageCode","setCurrentLanguageCode","setLanguage","t","context","translation","prev","curr","value","jsx","useTranslations","useContext"],"mappings":"o4eAGaA,EAAY,CACvB,GAAAC,EACA,GAAAC,EACF,EAEMC,GAAmB,KAGZC,EAAkB,CAACC,EAAWF,KAClCH,EAAUK,CAAuB,ECT7BC,EAAS,KACTC,EAAU,KACVJ,EAAmBG,EAE1BE,EAAqC,CACzC,CAACF,CAAM,EAAG,QACV,CAACC,CAAO,EAAG,IACb,EAEaE,GAAiD,CAC5D,QAASH,EACT,GAAIC,CACN,EAEaG,EAA2C,CACtD,CAACJ,CAAM,EAAG,GACV,CAACC,CAAO,EAAG,IACb,EAIMI,GAMF,CACF,gBAAiBR,EACjB,cAAeK,EAAQL,CAAgB,EACvC,oBAAqBO,EAAcP,CAAgB,EACnD,YAAcS,GAAsB,CAAC,EACrC,EAAG,CAACC,EAAaC,IACRD,CAEX,EAEME,EAAsBC,gBAAcL,EAAa,EAO1CM,GAAuB,CAAC,CACnC,SAAAC,EACA,SAAAb,EACA,QAAAc,CACF,IAAa,CACX,KAAM,CAACC,EAAcC,CAAe,EAAIC,EAAAA,SAASlB,EAAgBC,CAAQ,CAAC,EACpE,CAACkB,EAAiBC,CAAkB,EAAIF,EAAA,SAC5CjB,GAAYF,CACd,EACM,CAACsB,EAAeC,CAAgB,EAAIJ,EAAA,SACxCd,EAAQe,CAAe,CACzB,EACM,CAACI,EAAqBC,CAAsB,EAAIN,EAAA,SACpDZ,EAAca,CAAe,CAC/B,EAEMM,EAAexB,GAAqB,CACxC,GAAI,OAAO,UAAU,eAAe,KAAKL,EAAWK,CAAQ,EAAG,CAC7CgB,EAAAjB,EAAgBC,CAAQ,CAAC,EACzCmB,EAAmBnB,CAAQ,EACVqB,EAAAlB,EAAQH,CAAQ,CAAC,EACXuB,EAAAlB,EAAcL,CAAQ,CAAC,EAC9C,MAAA,CAGcgB,EAAAjB,EAAgBD,CAAgB,CAAC,EACjDqB,EAAmBrB,CAAgB,EAClBuB,EAAAlB,EAAQL,CAAgB,CAAC,EACnByB,EAAAlB,EAAcP,CAAgB,CAAC,CACxD,EAEM2B,EAAI,CAACjB,EAAakB,IAAqB,CAG3C,IAAIC,EAFenB,EAAI,MAAM,GAAG,EAEH,OAE3B,CAACoB,EAAWC,IAASD,GAAA,YAAAA,EAAOC,GAC5Bd,CACF,EAEA,OAAKY,GAWDD,GAEK,OAAA,QAAQA,CAAO,EAAE,QAAQ,CAAC,CAAClB,EAAKsB,CAAK,IAAM,CAChDH,EAAcA,EAAY,QACxB,MAAMnB,CAAG,KACTsB,GAAA,YAAAA,EAAO,aAAc,EACvB,CAAA,CACD,EAGIH,IApBDb,GAEM,QAAA,KACN,6BAA6BN,CAAG,OAAOO,EAAa,WAAW,EACjE,EAGKP,EAcX,EAGE,OAAAuB,EAAA,IAACrB,EAAoB,SAApB,CACC,MAAO,CACL,YAAAc,EACA,EAAAC,EACA,gBAAAP,EACA,cAAAE,EACA,oBAAAE,CACF,EACC,SAAAT,CAAA,CACH,CAEJ,EAEamB,GAAkB,IAAMC,EAAAA,WAAWvB,CAAmB"}