Ajouter des fonctionnalités i18n
Dans cette recette, vous apprendrez à utiliser les collections de contenus et le routage dynamique pour construire votre propre solution d’internationalisation (i18n) et servir votre contenu dans différentes langues.
Dans la version 4.0, Astro a ajouté un support intégré pour le routage i18n permettant de configurer les langues par défaut et prises en charge, mais aussi, inclut des fonctions d’aide précieuses pour vous aider à servir un public international. Si vous souhaitez l’utiliser à la place, consultez notre guide d’internationalisation pour en savoir plus sur ces fonctionnalités.
Cet exemple sert chaque langue dans son propre sous-chemin, par exemple example.com/en/blog
pour l’anglais et example.com/fr/blog
pour le français.
Si vous préférez que la langue par défaut ne soit pas visible dans l’URL contrairement aux autres langues, vous trouverez des instructions pour masquer la langue par défaut ci-dessous.
Méthode
Titre de la section MéthodeCréer des pages pour chaque langue
Titre de la section Créer des pages pour chaque langue- Créez un répertoire pour chaque langue que vous voulez supporter. Par exemple,
en/
etfr/
si vous supportez l’anglais et le français :
Répertoiresrc/
- …
Répertoirepages/
- …
Répertoireen/
- …
- about.astro
- index.astro
Répertoirefr/
- …
- about.astro
- index.astro
- index.astro
- Configurez
src/pages/index.Astro
pour rediriger vers votre langue par défaut.
Cette approche utilise un meta refresh et fonctionnera quelle que soit la manière dont vous déployez votre site. Certains hôtes statiques vous permettent également de configurer les redirections du serveur à l’aide d’un fichier de configuration personnalisé. Consultez la documentation de votre plateforme de déploiement pour plus de détails.
Si vous utilisez un adaptateur SSR, vous pouvez utiliser Astro.redirect
pour rediriger vers la langue par défaut sur le serveur.
Utiliser des collections pour le contenu traduit
Titre de la section Utiliser des collections pour le contenu traduit- Créez un dossier dans
src/content/
pour chaque type de contenu que vous voulez inclure et ajoutez des sous-répertoires pour chaque langue supportée. Par exemple, pour prendre en charge les articles de blog en anglais et en français :
Répertoiresrc/
- …
Répertoirecontent/
- …
Répertoireblog/
- …
Répertoireen/ Articles de blog en anglais
- …
- post-1.md
- post-2.md
Répertoirefr/ Articles de blog en français
- …
- post-1.md
- post-2.md
- Créer un fichier
src/content/config.ts
et exporter une collection pour chaque type de contenu.
- Utilisez dynamic routes pour récupérer et rendre le contenu en fonction d’un paramètre
lang
et d’un paramètreslug
.
En mode de rendu statique, utilisez getStaticPaths
pour faire correspondre chaque entrée de contenu à une page :
En mode SSR, recherchez directement l’entrée demandée :
L’exemple ci-dessus utilise la méthode intégrée de mise en forme de la date toLocaleString()
pour créer une chaîne lisible par un humain à partir de la date de la page d’accueil.
Cela permet de s’assurer que la date et l’heure sont formatées pour correspondre à la langue de l’utilisateur.
Traduire les chaînes de l’interface utilisateur
Titre de la section Traduire les chaînes de l’interface utilisateurCréez des dictionnaires de vocabulaire pour traduire les appellations des éléments de l’interface utilisateur de votre site. Cela permet à vos visiteurs de découvrir votre site dans leur langue.
- Créez un fichier
src/i18n/ui.ts
pour stocker vos chaînes de traduction :
- Créer deux fonctions d’aide : une pour détecter la langue de la page basée sur l’URL courante, et une pour obtenir les chaînes de traduction pour les différentes parties de l’interface utilisateur dans
src/i18n/utils.ts
:
A l’étape 1, la chaîne nav.twitter
n’a pas été traduite en français. Il se peut que vous ne souhaitiez pas que tous les mots soient traduits, comme les noms propres ou les expressions courantes de la profession. L’aide useTranslations
renvoie la valeur de la langue par défaut si une clé n’est pas traduite. Dans cet exemple, les utilisateurs français verront également “Twitter” dans la barre de navigation.
- Importez les aides là où elles sont nécessaires et utilisez-les pour choisir la chaîne de l’interface utilisateur qui correspond à la langue actuelle. Par exemple, un composant de navigation peut ressembler à ce qui suit :
- Chaque page doit avoir un attribut
lang
sur l’élément<html>
qui correspond à la langue de la page. Dans cet exemple, un layout réutilisable extrait la langue de la route actuelle :
Vous pouvez ensuite utiliser ce modèle de base pour vous assurer que les pages utilisent automatiquement l’attribut lang
correct.
Permettre aux utilisateurs de passer d’une langue à l’autre
Titre de la section Permettre aux utilisateurs de passer d’une langue à l’autreCréez des liens vers les différentes langues que vous prenez en charge afin que les utilisateurs puissent choisir la langue dans laquelle ils souhaitent lire votre site.
- Créez un composant pour afficher un lien pour chaque langue :
- Ajoutez
<LanguagePicker />
à votre site pour qu’il apparaisse sur chaque page. L’exemple ci-dessous l’ajoute au pied de page du site dans une disposition de base :
Masquer la langue par défaut dans l’URL
Titre de la section Masquer la langue par défaut dans l’URL- Créez un répertoire pour chaque langue à l’exception de la langue par défaut. Par exemple, stockez vos pages dans la langue par défaut directement dans
pages/
, et vos pages traduites dansfr/
:
Répertoiresrc/
- …
Répertoirepages/
- …
- about.astro
- index.astro
Répertoirefr/
- …
- about.astro
- index.astro
- Ajoutez une autre ligne au fichier
src/i18n/ui.ts
pour basculer la fonctionnalité :
- Ajouter une fonction d’aide à
src/i18n/utils.ts
, pour traduire les chemins en fonction de la langue courante :
- Importez l’aide là où c’est nécessaire. Par exemple, un composant
nav
peut ressembler à ceci :
- La fonction d’aide peut également être utilisée pour traduire des chemins d’accès dans une langue spécifique. Par exemple, lorsque les utilisateurs passent d’une langue à l’autre :
Traduire les routes
Titre de la section Traduire les routesTraduisez les routes de vos pages pour chaque langue.
- Ajouter les mappings de routes à
src/i18n/ui.ts
:
- Mettre à jour la fonction d’aide
useTranslatedPath
danssrc/i18n/utils.ts
pour ajouter la logique de traduction du routeur.
- Créer une fonction d’aide pour obtenir la route, si elle existe en fonction de l’URL actuelle, dans
src/i18n/utils.ts
:
- La fonction d’aide peut être utilisée pour obtenir une route traduite. Par exemple, si aucune route traduite n’est défini, l’utilisateur sera redirigé vers la page d’accueil :
Ressources
Titre de la section RessourcesBibliothèques communautaires
Titre de la section Bibliothèques communautaires- astro-i18next — Une intégration d’Astro pour i18next comprenant quelques composants utilitaires.
- astro-i18n — Une bibliothèque d’internationalisation en premier lieu TypeScript pour Astro.
- astro-i18n-aut — Une intégration Astro pour i18n qui supporte le
defaultLocale
sans génération de page. L’intégration est indépendante de l’adaptateur et du Framework UI. - paraglide — Une bibliothèque i18n entièrement sécurisée, spécialement conçue pour les modèles d’hydratation partielle tels que les îles Astro.