# Comment ce template modelise le contenu

La regle est simple : si un visiteur peut le lire, un editeur peut le changer sans redeployer. Cela vaut pour le blog, pour les pages legales, et pour chaque libelle de bouton.

## Les sept collections

| Collection | Role |
| --- | --- |
| `languages` | Locales activees et locale par defaut |
| `global_settings` | Marque, SEO par defaut, societe et coordonnees |
| `ui_strings` | Tous les libelles d'interface, traduits |
| `legal_pages` | Documents legaux en Markdown |
| `categories` | Rubriques du blog et leur gabarit editorial |
| `authors` | Signatures |
| `articles` | Articles du blog en Markdown |

## Pourquoi les traductions vivent dans une table fille

Les traductions natives de Directus stockent une ligne par locale dans une table compagnon. Un article est donc une entite unique avec une ligne par langue, ce qui donne :

1. Un slug par locale, pour des URL naturelles dans chaque langue.
2. Une seule relation vers la rubrique, partagee par toutes les traductions.
3. Une traduction manquante devient un trou visible, pas un repli silencieux vers la mauvaise langue.

### Ce qui reste non traduit

Les cles stables, les relations, les dates et les images restent sur la ligne parente. Seul le texte redactionnel part dans la traduction.

> Une cle est un contrat avec le code. Un libelle est un contrat avec le lecteur. Ne jamais melanger les deux dans un meme champ.

## Etendre le modele

Ajoute le champ dans le fichier JSON de `cms/schema/`, puis relance le provisionnement :

```sh
npm run setup:directus
```

Le script ne cree que ce qui manque : tu peux le relancer aussi souvent que tu veux.

## Questions frequentes

**Peut-on supprimer une collection ?** Oui, mais retire-la d'abord de `cms/schema/index.json`, sinon la prochaine execution la recreera.

**Peut-on partir d'une autre langue que l'anglais ?** Oui. Definis `CMS_DEFAULT_LOCALE` et `CMS_LOCALES` avant la premiere execution.
