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:
co-authored by
Claude Sonnet 5
parent
49ac6a4726
commit
5154a3c61b
@@ -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}}`,
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user