Localisation
La couche fournit sept locales, et chaque chaîne configurée prend trois formes.
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.
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 :
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’habillage 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é :
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.
/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 :
- la locale elle-même —
fr-FRlitfr-FR - sa langue de base —
fr-FRlit un arbrefr, ce qui permet à un dossierpt/de servir à la foispt-PTetpt-BR - une sœur de la même langue —
pt-BRlitpt-PTavant de sortir du portugais fallbackLocalede vue-i18n, la valeur même par laquelle se résout une chaîne absente- 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.