Les chaînes du thème lui-même — libellés de navigation, recherche, bandeau de
version, page 404 — sont livrées traduites en `en-GB`, `en-US`, `de-DE`,
`es-ES`, `fr-FR`, `pt-PT` et `pt-BR`. Un site choisit celles qu’il sert avec
`locales`, et `i18n.defaultLocale` décide laquelle est servie sans préfixe
d’URL.

`locales` est lu à la compilation : les locales déterminent les routes et
`hreflang`, pas seulement ce qu’un composant dessine — modifier la liste impose
donc une recompilation.

::callout{type="warning" title="Restreindre la liste passe par cette clé, pas par celle d’i18n"}
Le tableau `locales` d’i18n fusionne entre les couches au lieu de remplacer :
déclarer `['de-DE']` là n’ajoute ni ne retire rien — les six autres restent
routées, indexées et annoncées dans `hreflang`. `duxt.locales` est la clé qui la
réduit réellement.
::

## Chaque chaîne configurée prend trois formes

Tout ce que vous écrivez dans la configuration — un libellé, un titre, une
description — peut être un littéral, une clé i18n, ou un enregistrement d’une
chaîne par locale :

```ts
label: 'Repository'                                 // littéral
label: 'app.nav.repository'                         // votre propre clé
label: { 'en-GB': 'Repository', 'fr-FR': 'Dépôt' }  // par locale
```

Laquelle c’est se décide selon que la chaîne est une clé enregistrée. Un site
monolingue ne rencontre donc jamais les deux autres formes, et un site avec une
poignée de chaînes en cinq langues n’a besoin d’aucun fichier de locale — la
forme d’enregistrement se résout par la langue de base : `pt-PT` couvre `pt-BR`
et `en-GB` couvre `en-US`.

## N’allez pas puiser dans les clés de la couche

`duxt.defaults.*` traduit les valeurs par défaut que la couche fournit
elle-même. Ces clés sont internes : en renommer une n’est pas un changement
cassant de la couche, et i18n répond à une clé absente en affichant la clé —
celui qui en dépendrait l’apprendrait d’un lecteur, pas d’une compilation.
Utilisez un littéral, une clé à vous, ou la forme d’enregistrement.

## Chemins et liens

Seuls les chemins sont localisés. `useDuxtPath()` donne le chemin où se trouve
la **documentation**, sans le segment de locale ; `useDuxtLink()` le réécrit en
lien en rajoutant le segment. Une URL absolue, un lien mail ou une simple ancre
passent intacts. Tout ce qui calcule un chemin de documentation devrait passer
par cette paire plutôt que de lire la route directement.

## Pages traduites

L’interface et les pages sont deux décisions distinctes. Un site qui ne dit rien
sert un même arbre dans toutes les locales — l’interface change de langue, pas
le Markdown — et c’est la bonne forme pour la plupart des documentations.

`locales` sur une source ajoute la seconde moitié :

```ts [app/app.config.ts]
sources: [{ path: 'docs', locales: ['en-GB', 'fr'] }]
```

La locale par défaut est l’arbre de `path` lui-même, sans dossier propre :
ajouter cette clé ne déplace donc jamais une page déjà publiée. Toute autre
langue est un dossier à l’intérieur — `docs/fr/` — ou se trouve entièrement
ailleurs ; voir [Plusieurs langues](/guides/several-languages).

::callout{type="tip" title="La locale ne fait pas partie du chemin de contenu"}
`/fr-FR/guides/deploying` et `/guides/deploying` sont le même chemin de contenu
dans deux collections. Le segment appartient au routage d’i18n, jamais à une
collection — c’est pourquoi changer de langue garde le lecteur sur la même page,
et pourquoi une traduction manquante se règle par une requête de plus plutôt
que par une redirection.
::

## Quand une page n’a pas de traduction

Le lecteur reçoit la langue la plus proche qui l’a, avec un bandeau qui le dit,
et la page reste hors index sous `noindex`, avec un `canonical` pointant vers la
langue qui la porte réellement. La chaîne est celle que la couche applique déjà
aux chaînes de caractères :

1. la locale elle-même — `fr-FR` lit `fr-FR`
2. sa langue de base — `fr-FR` lit un arbre `fr`, ce qui permet à un dossier
   `pt/` de servir à la fois `pt-PT` et `pt-BR`
3. une sœur de la même langue — `pt-BR` lit `pt-PT` avant de sortir du portugais
4. `fallbackLocale` de vue-i18n, la valeur même par laquelle se résout une
   chaîne absente
5. l’original non traduit

Un 404 en est délibérément absent : un trou dans une traduction appartient à qui
l’écrit, et y répondre en cachant la page en punit le lecteur.

## Sens d’écriture

La locale active fournit aussi la direction du document. Les composants
utilisent des débuts et fins logiques : navigation, panneaux, flèches et
éléments de page se reflètent lorsqu’un consommateur ajoute une locale RTL. Le
contenu technique ne se reflète pas aveuglément : code, commandes, chemins,
noms d’API et autres syntaxes LTR gardent leur direction lisible.

duxt ne livre aujourd’hui aucune locale RTL. Direction-aware signifie qu’un
site peut en ajouter une sans forker le thème, pas que l’une des sept locales
intégrées soit RTL.