diff --git a/src/context/i18n-context.tsx b/src/context/i18n-context.tsx index 5135b47..59a54ff 100644 --- a/src/context/i18n-context.tsx +++ b/src/context/i18n-context.tsx @@ -12,7 +12,7 @@ interface I18nContextType { const I18nContext = createContext(undefined); -const translations: { [key: string]: { [key: string]: string } } = { +const translations: { [key: string]: any } = { en, de, }; @@ -21,13 +21,21 @@ export function I18nProvider({ children }: { children: ReactNode }) { const [language, setLanguage] = useState('en'); const t = (key: string, params?: { [key: string]: string | number }) => { - let translation = translations[language]?.[key] || key; + const translation = key.split('.').reduce((acc, currentKey) => { + if (acc && typeof acc === 'object' && currentKey in acc) { + return acc[currentKey]; + } + return undefined; + }, translations[language]); + + let result = (typeof translation === 'string' ? translation : key); + if (params) { Object.keys(params).forEach(paramKey => { - translation = translation.replace(`{${paramKey}}`, String(params[paramKey])); + result = result.replace(`{${paramKey}}`, String(params[paramKey])); }); } - return translation; + return result; }; return (