Aller au contenu
DocPensieve
Menu de la documentation

Langues

Une version peut être publiée en plusieurs langues. Chacune est un dossier de pages à elle, posé à côté de la version qu'elle traduit.

Déclarer une traduction

lang: 'en',
versions: [
  {
    slug: 'latest',
    name: '1.0',
    folder: 'docs/v1.0',
    current: true,
    translations: { fr: 'docs/v1.0-fr' },
  },
],

lang est la langue du site — celle dans laquelle vos pages sont écrites. Chaque entrée de translations nomme une langue et le dossier qui porte cette traduction.

docs/
├── v1.0/          la langue du site
│   ├── index.md
│   └── guide/
└── v1.0-fr/       sa traduction française
    ├── index.md
    └── guide/

Les adresses

La langue du site garde les adresses qu'elle a ; une traduction est servie sous son code :

PageAdresse
La langue du site/versions/latest/guide/install/
Sa jumelle française/versions/latest/fr/guide/install/

Rien de publié ne bouge, et c'est bien l'intérêt : un lien partagé l'an dernier mène toujours là où il menait. La traduction vit à l'intérieur de la version, si bien qu'une version reste un dossier, une branche orpheline, une feuille de style.

Une page que personne n'a traduite

Elle n'existe pas dans cette langue. Elle est absente du menu de cette langue et du plan du site, aucun hreflang ne la promet, et le sélecteur de langue nomme la langue sans la proposer — un lecteur apprend que le site a une version française, et ne reçoit jamais de l'anglais sous une adresse française.

C'est ce qui permet de commencer une traduction par cinq pages. Traduisez d'abord ce qui compte ; le reste demeure dans la langue où il a été écrit jusqu'à ce que quelqu'un s'en occupe.

Les mots autour de vos pages

Le menu, les bandeaux, le champ de recherche et les dates suivent la langue de la page. L'anglais et le français sont livrés avec l'outil.

Une langue qu'il ne livre pas garde les mots anglais, et le champ ui est là où un projet écrit les siens — ou corrige un mot :

lang: 'de',
ui: {
  de: { search: 'Suchen', onThisPage: 'Auf dieser Seite' },
},

Ce qui est omis reste en anglais plutôt que vide : une demi-traduction reste une page lisible. Une clé qui n'existe pas arrête la génération, en listant celles qui existent — une faute de frappe y laisserait le mot livré en place, sans un mot.

Compter, dans les pluriels de la langue

Une clé n'est pas un mot mais un ensemble : pages, qui suit un nombre.

ui: {
  pl: { pages: { one: 'strona', few: 'strony', many: 'stron', other: 'stron' } },
},

Les catégories sont celles de CLDR, la référence que portent les navigateurs et Node : l'anglais en a deux — one et other —, le français met zéro au singulier, le polonais en a quatre et l'arabe six. La génération choisit la bonne par Intl.PluralRules plutôt qu'en comparant le compte à un, ce qui est une règle anglaise.

Remplissez other au minimum : c'est la catégorie que toute langue possède, et elle répond pour celles qu'une traduction laisse de côté.

Ce que la langue décide d'elle-même

Trois choses découlent du seul code, sans rien à déclarer :

Depuis la langueCe qu'elle règle
Le sens d'écrituredir="rtl" sur <html> pour l'arabe, l'hébreu, le persan…
Le pluriel d'un compteLes catégories CLDR ci-dessus
La date d'une signatureÉcrite selon les conventions de cette langue

Les codes eux-mêmes sont des étiquettes BCP 47fr, pt-BR, zh-Hans — la norme qu'attendent <html lang> et hreflang. Une étiquette qui n'en est pas une arrête la génération : elle poserait sinon dans le balisage une valeur qu'aucun navigateur ni lecteur d'écran ne sait lire.

Les moteurs de recherche reçoivent aussi hreflang="x-default", qui désigne la langue dans laquelle les pages sont écrites : c'est l'adresse à servir à un lecteur dont le site n'a pas la langue.

Ce que chaque langue a en propre

En proprePartagé avec la version
Pages, menu, page de rechercheLa feuille de style
Fichier d'auteurs et images de son dossierLe logo et la favicone
Les mots de la coquilleLe bandeau de version et son numéro

Le fichier d'auteurs est lu dans chaque dossier : une biographie peut donc être traduite avec les pages qu'elle signe.

Ce qui est refusé

Trois erreurs arrêtent la génération plutôt que de publier quelque chose de faux en silence :

ÉcritPourquoi c'est refusé
translations à la racine du fichierIl appartient à une version — c'est une version qui a des pages
lang sur une versionLe site a une langue ; une version en porte les traductions
Une étiquette qui ne nomme rien — francaisElle atterrirait dans le balisage en lang="francais"

La troisième mérite un mot. BCP 47 autorise une sous-étiquette de langue de cinq à huit lettres : francais est donc bien formée — elle n'est simplement pas une langue. Laissée passer, elle servirait des mots anglais sous une adresse française, sans que rien ne le dise.

Ce qu'il faut vérifier

  • Un dossier de traduction nommé mais absent arrête la génération, en nommant la langue plutôt que le seul dossier.
  • check après l'arrivée d'une traduction : une page ajoutée d'un côté et liée depuis l'autre est le premier lien mort habituel.
  • Employez les mêmes chemins de page des deux côtés. Une page traduite sous un autre nom de fichier est une autre page : elle n'a pas de jumelle, et le sélecteur le dit.