/** * earth-now.co * Author: Simon-Pierre Boucher * Contact: contact@spboucher.ai * File: apps/web/lib/messages.ts * Purpose: Pure locale/message helpers (fr + en UI strings) usable from both server and client components */ import fr from "../messages/fr.json"; import en from "../messages/en.json"; import type { Locale } from "./api"; export type MessageKey = keyof typeof fr; export type Messages = Record; const MESSAGES: Record = { fr, en }; export const DEFAULT_LOCALE: Locale = "fr"; export function isLocale(value: unknown): value is Locale { return value === "fr" || value === "en"; } export function getMessages(locale: Locale): Messages { return MESSAGES[locale]; } /** Translate a key for a locale — usable server-side (pages) and client-side (via useI18n). */ export function translate(locale: Locale, key: MessageKey): string { return MESSAGES[locale][key]; } /** Format an ISO date for display (UTC, no hand-rolled date arithmetic). */ export function formatDateUtc(iso: string, locale: Locale): string { const ms = Date.parse(iso); if (Number.isNaN(ms)) return iso; return new Intl.DateTimeFormat(locale === "fr" ? "fr-FR" : "en-GB", { dateStyle: "medium", timeZone: "UTC", }).format(new Date(ms)); }