Comment j'ai créé un blog multilingue avec Django, Celery et Redis

How I Built a Multilingual Blog with Django, Celery, and Redis

Table of Contents

    Je suis ravi de vous annoncer que mon blog prend désormais en charge les traductions automatiques dans plusieurs langues ! Ce fut l'un des projets les plus enrichissants sur lesquels j'ai travaillé, combinant une variété de technologies pour rendre mon contenu accessible à un public mondial. Ce qui a commencé comme une simple idée s'est rapidement transformé en une plongée profonde dans Django, la gestion des tâches avec Celery et la gestion dynamique des langues. Laissez-moi vous guider tout au long du parcours.

    Construire les fondations : modèle de traduction et langues

    La première étape a consisté à créer une base solide. J'ai créé un modèle de traduction dans Django pour stocker les versions traduites de chaque article. Ce modèle permet de conserver le contenu traduit séparément tout en le reliant à l'article d'origine. Chaque traduction est liée à une langue spécifique, ce qui facilite la gestion des mises à jour et des modifications.

    J'ai également configuré Django pour qu'il prenne en charge plusieurs langues à l'aide du paramètre LANGUAGES . Cela m'a permis de spécifier une liste des principales langues du monde dans lesquelles traduire les articles, tout en excluant soigneusement l'anglais (ma langue par défaut). Il n'était pas nécessaire de créer un répertoire /en ou une traduction en anglais puisque l'article d'origine remplit déjà cet objectif.

    Automatiser les traductions avec Celery et Redis

    La vraie magie s'est produite lorsque j'ai automatisé le processus de traduction. En utilisant Celery pour la gestion des tâches et Redis comme courtier de messages, j'ai créé un système qui traduit automatiquement les messages lorsque je les crée ou les mets à jour. Voici comment cela fonctionne :

    • Lorsqu'un nouveau message est enregistré ou qu'un message existant est modifié, un signal déclenche une tâche Celery.
    • La tâche communique avec une API de traduction externe pour générer des traductions pour le titre et le corps.
    • Le contenu traduit est enregistré dans la base de données, soit en tant que nouvelle traduction, soit en mettant à jour une traduction existante.

    Cette configuration permet aux traductions de s'exécuter en arrière-plan sans affecter les performances de mon site. L'intégration transparente de Celery avec Django et Redis a rendu ce processus incroyablement efficace, même pour un environnement de production.

    Créer un sélecteur de langue dynamique

    Pour améliorer l'expérience utilisateur, j'ai ajouté un sélecteur de langue à chaque article. Ce sélecteur permet aux visiteurs de basculer entre les langues sans effort. À l'aide de Bulma CSS , j'ai stylisé le sélecteur pour qu'il soit clair et intuitif. Le nom de chaque langue est affiché à côté du drapeau du pays correspondant, ce qui permet aux lecteurs d'identifier facilement leur option préférée.

    Lors de la consultation d'un article traduit, le sélecteur de langue inclut un lien vers la version anglaise d'origine. Cela permet aux visiteurs de naviguer facilement entre le contenu par défaut et le contenu traduit.

    Déploiement en production sur AWS EC2

    Le déploiement de l'ensemble sur mon instance AWS EC2 a été une étape cruciale. Mon pipeline de déploiement automatise la majeure partie du travail :

    1. Récupération du dernier code.
    2. Exécution des migrations de bases de données.
    3. Redémarrage du serveur et des services associés.

    J'ai configuré Redis et Celery comme services système pour garantir qu'ils s'exécutent automatiquement au redémarrage et restent stables en production. Avec cette configuration, les traductions sont générées et mises à jour en temps réel sans aucune intervention manuelle.

    Gestion du référencement et des plans de site

    Pour garantir que les moteurs de recherche puissent indexer mon blog efficacement, j'ai mis à jour le plan du site pour inclure toutes les pages traduites. Cela signifie que chaque version linguistique d'un article est détectable et accessible, ce qui donne au site un coup de pouce SEO significatif. J'ai également pris soin d'éviter les problèmes de contenu dupliqué en excluant les traductions en anglais et en conservant l'article original comme version canonique.

    Leçons apprises et projets futurs

    Ce projet m'a beaucoup appris sur la création de systèmes multilingues évolutifs. J'ai relevé des défis tels que l'évitement du contenu dupliqué, la gestion des exclusions linguistiques et la garantie du bon fonctionnement de la production. Ce fut un parcours enrichissant, et voir des visiteurs du monde entier accéder à mon contenu dans leur langue préférée est incroyablement satisfaisant.

    Je réfléchis déjà à des améliorations futures, comme l'ajout de nouvelles langues ou l'affinement du processus de traduction. Si vous êtes curieux de savoir comment j'ai mis cela en œuvre ou si vous souhaitez ajouter un support multilingue à votre propre site, n'hésitez pas à me contacter.

    Published: 1 month, 3 weeks ago.