Scaffold de base en attendant l'intégration du design Claude Design (« Bénévoles Festival.dc.html ») : routage, plomberie i18n (t() + locales/fr.json), client API avec proxy Vite vers le backend. Build et lint passent. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AwswqSChc3Rwtu61pRXiY2
22 lines
734 B
TypeScript
22 lines
734 B
TypeScript
import fr from './locales/fr.json';
|
|
|
|
type Messages = Record<string, string>;
|
|
|
|
// Monolingue pour l'instant (français). La structure permet d'ajouter des
|
|
// locales sans toucher aux appelants.
|
|
const messages: Messages = fr;
|
|
|
|
export type TranslationKey = keyof typeof fr;
|
|
|
|
/**
|
|
* Traduit une clé. Les paramètres `{nom}` présents dans le message sont
|
|
* remplacés par `params.nom`. Aucun texte visible en dur ailleurs dans l'app.
|
|
*/
|
|
export function t(key: TranslationKey | string, params?: Record<string, string | number>): string {
|
|
const template = messages[key] ?? key;
|
|
if (!params) return template;
|
|
return template.replace(/\{(\w+)\}/g, (_, name: string) =>
|
|
name in params ? String(params[name]) : `{${name}}`,
|
|
);
|
|
}
|