Multilingue
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
Traduction du thème
Le thème est traduit en anglais et portugais. Les fichiers se trouvent dans osuny/i18n/
.
Vous pouvez modifier les clés en override en ajoutant un dossier dans votre site /i18n/
. Hugo fusionne les clés, vous pouvez alors ajouter ou modifier uniquement les clés souhaitées (sans copier-coller tout le fichier de traduction).
Recherche d’une préférence de langue et redirection automatique
On redirige automatiquement les utilisateurices vers la langue de leur navigateur si le site est traduit dans cette même langue.
Dans le fichier alias.html
:
- on récupère la langue préférée du navigateur
- on vérifie qu’on est sur la page d’accueil
- on cherche une correspondance dans les langues disponibles du site avec la langue du navigateur
- si il y a une correspondance, on redirige sur la page d’accueil dans la bonne langue
- sinon, on redirige sur la langue par défaut (la master du site)
Merci à nanmu42 ! https://nanmu.me/en/posts/2020/hugo-i18n-automatic-language-redirection/