File size: 1,157 Bytes
ad19202
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import { config } from "@repo/config";
import deepmerge from "deepmerge";
import type { Messages } from "../types";

// Turbopack/Next needs statically analyzable imports; map locales explicitly.
const localeImports = {
	en: () => import("../translations/en.json"),
	de: () => import("../translations/de.json"),
} as const;

type SupportedLocale = keyof typeof localeImports;

function resolveLocale(locale: string): SupportedLocale {
	if (locale in localeImports) {
		return locale as SupportedLocale;
	}
	// Fallback to default if requested locale is unsupported.
	return config.i18n.defaultLocale as SupportedLocale;
}

export const importLocale = async (locale: string): Promise<Messages> => {
	const resolved = resolveLocale(locale);
	return (await localeImports[resolved]()).default as Messages;
};

export const getMessagesForLocale = async (
	locale: string,
): Promise<Messages> => {
	const localeMessages = await importLocale(locale);
	if (locale === config.i18n.defaultLocale) {
		return localeMessages;
	}
	const defaultLocaleMessages = await importLocale(config.i18n.defaultLocale);
	return deepmerge(defaultLocaleMessages, localeMessages);
};