Multilingue
Les contenus
Il y a 2 façons de gérer les contenus multilingues dans Hugo :
- toutes les langues d’un contenu dans le même répertoire
- un répertoire par langue contenant tous les contenus
Nous utilisons le second système.
On range les contenus dans un dossier /content/fr/
.
Chaque fichier a son url inclue. Il faut penser à préfixer toutes les urls par la langue (/fr/actualites/2022-01-01-mon-article
)
Les menus
Nous n’utilisons pas les menus natifs de Hugo mais un système parallèle.
On range les menus pour chaque langue dans un dossier /data/menus/fr/
. Tous les target doivent être préfixés avec la langue.
Questions / réponses sur le monolingue
Q: Doit-on forcer le choix d’au moins une langue pour un site web ?
A: Conceptuellement un site a toujours une langue donc ça semble bien.
Q: Si on choisit une seule langue, doit-on écrire quand même les contenus (et les menus) dans /fr/ ?
A: Ca ne semble pas poser de problème.
Q: En cas de monolingue quel pattern d’url utiliser ?
A: Si une seule langue il vaut mieux que les urls ne soient pas préfixées par la langue.
Dans ce cas les fichiers générés ne doivent pas avoir le /:lang
dans leurs url. Idem pour les target des menus bien sûr.
Si on est monolingue le paramètre defaultContentLanguageInSubdir
est de toute façon ignoré par Hugo.
En cas d’activation d’une seconde langue a posteriori le jeu d’alias des permalinks permettra de tout transférer sur /fr/
En résumé
Cas site monolingue (fr)
- contenu dans
/content/fr
- url des contenus NON préfixés par /fr (idems urls des children)
- menus dans
/menus/fr
avec des target NON préfixés par /fr config/languages.yaml
contenant
fr:
title: Titre du site
contentDir: content/fr
languageCode: fr
languageName: Français
config/production/config.yaml
etconfig/development/config.yaml
contenant (entre autres…)
## LANGUAGE
defaultContentLanguage: fr
defaultContentLanguageInSubdir: false
(ce dernier paramètre est actuellement ignoré par Hugo si une seule langue, mais on ne sait jamais pour l’avenir…)
- tout le site est consultable sans /fr dans les urls
Cas site multilingue (fr / en, default fr)
- contenu FR dans /content/fr
- contenu EN dans /content/en
- url des contenus préfixés par /:lang/ (idems urls des children)
- menus FR dans /menus/fr avec des target préfixés par /fr/
- menus EN dans /menus/en avec des target préfixés par /en/
- config/languages.yaml contenant
fr:
title: Titre du site
contentDir: content/fr
languageCode: fr
languageName: Français
en:
title: Site title
contentDir: content/en
languageCode: en
languageName: English
config/production/config.yaml
etconfig/development/config.yaml
contenant (entre autres…)
## LANGUAGE
defaultContentLanguage: fr
defaultContentLanguageInSubdir: true
- tout le site est consultable avec /:lang dans les urls
- la racine du site renvoie sur /fr