Files
MineGeo/lib/i18n.ts

32 lines
969 B
TypeScript

import "server-only";
import { cache } from "react";
import { cookies, headers } from "next/headers";
import {
detectLocale,
languageCookie,
localeTag,
resolveLocale,
translator,
type LanguagePreference,
} from "@/shared/i18n";
export const getI18n = cache(async () => {
const [jar, requestHeaders] = await Promise.all([cookies(), headers()]);
const preference = jar.get(languageCookie)?.value;
const locale = resolveLocale(
preference,
requestHeaders.get("accept-language"),
);
const languagePreference: LanguagePreference =
preference === "en" || preference === "ru" ? preference : "auto";
return {
locale,
preference: languagePreference,
detectedLocale: detectLocale(requestHeaders.get("accept-language")),
t: translator(locale),
formatNumber: (value: number) => value.toLocaleString(localeTag(locale)),
formatDate: (value: string) =>
new Date(value).toLocaleDateString(localeTag(locale)),
};
});