feat: wire i18n services and shared UI
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import type { TextDirection } from "../../lib/i18n";
|
||||
|
||||
export const LOCALE_COOKIE = "neta_locale";
|
||||
export const LOCALE_COOKIE_MAX_AGE = 60 * 60 * 24 * 365;
|
||||
export const DEFAULT_TEXT_DIRECTION: TextDirection = "ltr";
|
||||
|
||||
export function normalizeLocaleCode(value: string | null | undefined): string | null {
|
||||
if (!value) return null;
|
||||
const normalized = value.trim();
|
||||
return /^[a-z]{2}(?:-[A-Z]{2}[0-9]?)?$/.test(normalized) ? normalized : null;
|
||||
}
|
||||
|
||||
export function directionForLocale(locale: string, explicit?: TextDirection | null): TextDirection {
|
||||
if (explicit) return explicit;
|
||||
return /^(ar|fa|he|ur)(-|$)/.test(locale) ? "rtl" : DEFAULT_TEXT_DIRECTION;
|
||||
}
|
||||
|
||||
export function buildLocaleCookie(value: string) {
|
||||
return {
|
||||
name: LOCALE_COOKIE,
|
||||
value,
|
||||
maxAge: LOCALE_COOKIE_MAX_AGE,
|
||||
sameSite: "lax" as const,
|
||||
path: "/",
|
||||
httpOnly: false,
|
||||
secure: process.env.NODE_ENV === "production",
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user