Pages et gabarits
Chaque page est un petit fichier d'en-tête dans src/content/en/ ou
src/content/fr/ qui pointe vers un gabarit de src/_includes/layouts/. Par exemple,
src/content/fr/tarifs.njk :
---
layout: layouts/pricing.njk
permalink: /fr/tarifs/index.html
locale: fr
title: Tarifs
altLangUrl: /pricing/
altLangLocale: en
---
Le gabarit contient le balisage, partagé par les deux langues. altLangUrl relie
chaque page à sa traduction, ce qui alimente le sélecteur de langue et les balises
hreflang.
Traductions
Les textes de l'interface se trouvent dans src/_data/i18n.js sous forme de clés
simples, avec un dictionnaire par langue. Les gabarits utilisent le filtre t :
<h1>{{ "pricing.page_title" | t(locale) }}</h1>
L'application navigateur utilise le même dictionnaire grâce à t() dans
src/js/app.js. bun run i18n:check échoue s'il manque une clé, un article ou une
page dans l'une des deux langues.
Ajouter une page
- Créez le gabarit, par exemple
src/_includes/layouts/about.njk, qui étendlayouts/base.njk. - Ajoutez
src/content/en/about.njketsrc/content/fr/a-propos.njkavec des valeursaltLangUrlqui se répondent. - Ajoutez ses textes aux deux dictionnaires de
i18n.js. - Ajoutez-la à
src/_data/navigation.jssi elle doit figurer dans l'en-tête.
Les pages à ne pas indexer, comme les pages de compte et de paiement, utilisent
noindex: true. Elles sont exclues du plan du site mais gardent leurs liens
canoniques.
Articles et guides
Les articles du blogue sont des fichiers Markdown dans content/<langue>/blog/, et
chacun partage une translationKey avec sa traduction. Les guides se trouvent dans
content/<langue>/guides/ et sont regroupés dans le menu latéral selon leurs champs
section et order.
L'application navigateur
src/js/app.js est un petit module. Un seul gestionnaire de clics traite les
attributs data-action, et render() met la page à jour à partir d'un seul objet
state. Le code propre à une page peut vivre dans src/js/pages/ : il est déclaré
dans PAGE_MODULES et chargé séparément, seulement sur les pages dont le gabarit
définit pageModule.