diff --git a/src/i18n.ts b/src/i18n.ts index e8c1d51..f7ecb30 100644 --- a/src/i18n.ts +++ b/src/i18n.ts @@ -1,6 +1,19 @@ import { getRequestConfig } from 'next-intl/server' import { getUserLocale } from './lib/locale' +function mergeDeep(target: T, source: Partial): T { + for (const key in source) { + const value = (source as any)[key] + if (value && typeof value === 'object' && !Array.isArray(value)) { + ;(target as any)[key] = mergeDeep((target as any)[key] || {}, value) + } else { + ;(target as any)[key] = value + } + } + return target +} + + export const localeLabels = { 'en-US': 'English', fi: 'Suomi', @@ -29,8 +42,14 @@ export const defaultLocale: Locale = 'en-US' export default getRequestConfig(async () => { const locale = await getUserLocale() + const defaultMessages = (await import('../messages/en-US.json')).default + const localeMessages = (await import(`../messages/${locale}.json`)).default + + const messages = mergeDeep(structuredClone(defaultMessages), localeMessages) + + return { - locale, - messages: (await import(`../messages/${locale}.json`)).default, + locale, + messages, } })