templates2.Base.Next/lib/i18n.ts
w4c-templates 219be916cb
Some checks are pending
CI / quality (push) Waiting to run
chore(template): publish Base.Next
2026-10-11 23:23:30 +03:00

20 lines
790 B
TypeScript

import en from '@/messages/en.json';
export const DEFAULT_LOCALE = 'en';
export const messages = { en } as const;
export type Locale = keyof typeof messages;
type Vars = Record<string, string | number>;
/** Tiny dictionary lookup: t('nav.pricing') with optional {name} interpolation. */
export function t(key: string, vars?: Vars, locale: Locale = DEFAULT_LOCALE): string {
const dict = messages[locale] as Record<string, unknown>;
const value = key.split('.').reduce<unknown>((acc, part) => {
if (acc && typeof acc === 'object') return (acc as Record<string, unknown>)[part];
return undefined;
}, dict);
if (typeof value !== 'string') return key;
if (!vars) return value;
return value.replace(/\{(\w+)\}/g, (_, name: string) => String(vars[name] ?? `{${name}}`));
}