Frontend : squelette React + Vite + TS + Tailwind

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
This commit is contained in:
AdamThomas
2026-09-09 23:16:38 +02:00
co-authored by Claude Sonnet 5
parent 49ac6a4726
commit 5154a3c61b
23 changed files with 4673 additions and 9 deletions
+21
View File
@@ -0,0 +1,21 @@
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}}`,
);
}