Training Menu

L'internationalisation (i18n) avec Django

Priscille mande
Priscille mande
Nov. 19, 2024 · 8.05 min read
0
Django
L'internationalisation (i18n) avec Django

Introduction


    Dans le développement web, fournir une expérience utilisateur multilingue est essentiel pour toucher un public international. Django, grâce à ses puissants outils d'internationalisation (abrégée i18n), simplifie ce processus. Cet article explique comment faire pour mettre en place l'internationalisation avec Django.

Développement 


Étape 1 : Configurer Django pour l’internationalisation


Commencez par activer l'internationalisation dans votre projet.
1. Mettre à jour settings.py : Ajoutez ou modifiez les paramètres suivants :

 

LANGUAGE_CODE = 'en'  # Langue par défaut
LANGUAGES = [
    ('en', _('English')),
    ('fr', _('French')),
    ('es', _('Spanish')),
]

USE_I18N = True
USE_L10N = True
USE_TZ = True

MIDDLEWARE = [
    'django.middleware.common.CommonMiddleware',
    'django.middleware.locale.LocaleMiddleware',  # Middleware pour la gestion des langues
    # Autres middlewares...
]

LOCALE_PATHS = [
    BASE_DIR / 'locale',  # Répertoire où les fichiers de traduction seront stockés
]
 

 

Étape 2 : Marquer les chaînes pour traduction


Django détecte automatiquement les chaînes marquées pour traduction. Utilisez les fonctions de balisage de Django pour indiquer quelles chaînes doivent être traduites. Voici les principales fonctions :
• gettext_lazy : pour les chaînes de caractères utilisées dans les fichiers de configuration
et de modèles.
• {% trans %} : balise pour traduire des chaînes dans les templates.
• {% blocktrans %} : pour des blocs de texte plus longs dans les templates.

1. Dans les fichiers Python : Utilisez gettext_lazy pour marquer les textes statiques.
2. Dans les Models : Utilisez ’_’ pour traduire les données de la base de données.

from django.db import models
from django.utils.translation import gettext_lazy as _
class Categorie(models.Model):
      name = models.CharField(max_length=100, verbose_name=_('name categorie'))
     Description = models.TextField(verbose_name=_('description caategorie'))
    def __str__(self):
          return self.name

3- Dans les templates HTML : Utilisez la balise {% trans %} pour traduire les
textes statiques.
<h1>{% trans "Welcome to our website!" %}</h1>
4- Pour les blocs de texte : Utilisez {% blocktrans %} pour des textes contenant des
variables.
{% blocktrans %}Hello {{ user.username }}, welcome back!{% endblocktrans %}

 

Étape 3 : Créer et mettre à jour les fichiers de traduction


Django utilise les fichiers .po pour stocker les traductions.
1. Générer les fichiers de traduction : Exécutez la commande suivante dans le terminal :
python manage.py makemessages -l fr -l es
NB : Cela crée des fichiers .po dans le dossier locale/.

2- Traduire les chaînes dans les fichiers .po : Ouvrez les fichiers générés (locale/fr/LC_MESSAGES/django.po, par exemple) et ajoutez la traduction :
msgid "Welcome to our website!"
msgstr "Bienvenue sur notre site !"
3- Compiler les fichiers de traduction : Une fois les traductions terminées, compilez-les en fichiers .mo :
python manage.py compilemessages.

 

Étape 4 : Ajouter un sélecteur de langue


Permettez aux utilisateurs de changer la langue via une URL dynamique ou un formulaire.
1. Ajoutez cette ligne dans urls.py :

from django.conf.urls.i18n import i18n_patterns
from django.urls import path, include

urlpatterns = [
    path('i18n/', include('django.conf.urls.i18n')),
]

urlpatterns += i18n_patterns(
    path('', include('apps.urls')),  # Remplacez par vos propres URLs
)

2- Créer un formulaire pour changer la langue : Dans votre template, utilisez un formulaire pour
changer dynamiquement la langue :

<form action="{% url 'set_language' %}" method="post">
    {% csrf_token %}
    <select name="language" onchange="this.form.submit()">
        {% get_current_language as LANGUAGE_CODE %}
        {% get_available_languages as LANGUAGES %}
        {% for lang_code, lang_name in LANGUAGES %}
            <option value="{{ lang_code }}" {% if lang_code == LANGUAGE_CODE %}selected{% endif %}>
                {{ lang_name }}
            </option>
        {% endfor %}
    </select>
</form>


3- Ajouter une URL dynamique pour inclure la langue dans le chemin : Les URLs multilingues (par exemple : /fr/page/accueil/) sont automatiquement gérées par i18n_patterns.

 

Conclusion


L’internationalisation avec Django est un processus structuré et efficace. En suivant ce guide, vous pouvez créer une application multilingue robuste et conviviale. Avec des outils comme gettext, des fichiers .po, et la puissance de Django, votre application sera prête pour un public mondial.

 

0

Applaudissez pour montrer votre soutien

Priscille mande

Priscille mande

3 Followers · Writer for Django

Je suis une jeune passionnée par le domaine de l'informatique, toujours prête à explorer de nouvelles technologies et à relever des défis.