Multilingue
Parti-pris sur la gestion des langues
L’aspect back-office du multilingue est documenté dans la partie admin.
Nous partons du multilingue tel qu’il fonctionne dans les sites Hugo pour générer des fichiers corrects depuis Osuny.
La configuration
Nous utilisons un fichier languages.yml
ar:
title: مدونتي
contentDir: content/ar
languagedirection: rtl
languageCode: ar
languageName: العربية
en:
title: My blog
contentDir: content/en
languageCode: en
languageName: English
fr:
title: Mon blogue
contentDir: content/fr
languageCode: fr
languageName: Français
pt-pt:
title: O meu blog
contentDir: content/pt-pt
languageCode: pt-PT
languageName: Portugues
Il faut aussi d’autres options de configuration qui sont regroupées dans les fichiers production/config.yaml
et development/config.yaml
.
## LANGUAGE
defaultContentLanguage: fr
defaultContentLanguageInSubdir: true
Ça permet de rediriger la racine du site “/” vers la langue par défaut “/fr/”.
Si on est sur un site avec une seule langue le paramètre defaultContentLanguageInSubdir
est simplement ignoré par Hugo (du moins actuellement en version 0.108).
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.
Les clés de traduction
Dans le thème on a un dossier i18n
dans lequel on pose un fichier par langue.
Ces fichiers (ou juste certains termes) peuvent éventuellement être overwrite dans un thème précis.
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