Les pages satellites n’avaient pas de sélecteur de langue — le correctif
Contexte. L’accueil du portfolio utilise un modèle i18n
hybride (français dans le HTML, i18n.json pour l’anglais,
langue stockée dans localStorage). Les pages journal, services
et mentions reprenaient la même barre visuellement mais
sans script.js et sans
sélecteur FR/EN. Si vous aviez choisi l’anglais sur l’accueil, le clic sur
« Journal technique » ouvrait une coquille uniquement en anglais,
sans retour vers le français dans l’interface — déroutant.
Ce qui posait problème
-
L’état de langue ne vivait que là où
script.jss’exécutait (index.htmlprincipal), pas sur les routes secondaires. -
updateDocumentTitleFromI18npouvait écraser les titres des pages satellites avec le méta-titre de l’accueil — autre aspérité.
Ce que j’ai changé
-
Charger le même
script.jssurbuild-log.html,services.htmletmentions-legales.html, avec les liens de nav et le pied de page endata-i18ncomme l’accueil, plus le sélecteur FR/EN. -
Ajout de clés dans
i18n.json(nav.home,nav.toggleAria,subpage.backToHome) et incrément du paramètre de cache JSON. -
Limitation des mises à jour du titre document à l’accueil (présence de
#heroSlides) pour que « Build Log | … » reste correct.
Résultat
Les visiteurs gardent une préférence de langue cohérente sur le site statique ; la navigation et le chrome suivent FR/EN comme partout ailleurs.
Enseignement. Si vous persistez la langue d’interface côté client, chaque route HTML qui partage le chrome doit charger le même bootstrap — sinon vous livrez une porte piégée.
Context. The portfolio home uses a hybrid i18n model
(French in HTML, i18n.json for English, language stored in
localStorage). The journal, services, and legal pages reused
the same nav visually but shipped without
script.js and without the FR/EN control. If you
had chosen English on the home page, clicking “Journal technique” landed you
on an English-only shell with no way back to French from the
UI — confusing and easy to mistake for “the whole site is EN only”.
What was going wrong
-
Language state lived only where
script.jsran (mainindex.html), not on secondary routes. -
updateDocumentTitleFromI18ncould overwrite satellite page titles with the home meta title when i18n applied — another rough edge.
What I changed
-
Load the same
script.jsonbuild-log.html,services.html, andmentions-legales.html, with nav links and footer wired throughdata-i18nlike the home page, plus the FR/EN switch. -
Added keys in
i18n.json(nav.home,nav.toggleAria,subpage.backToHome) and bumped the JSON cache query string. -
Restricted document-title updates from i18n to the home page (presence of
#heroSlides) so “Build Log | …” stays correct.
Result
Users keep one consistent language preference across the static site; navigation and chrome follow FR/EN everywhere (including full article bodies in both languages on this page).
Takeaway. If you persist UI language client-side, every top-level HTML route that shares chrome must load the same bootstrap — or you ship a trap door.