Comment traduire son site web basé avec Django?

Published: 24 février 2021

Tags: Django; Translation; gettext;

DMCA.com Protection Status

Un guide rapide sur la façon de traduire son site Web avec Django:

Modifiez le fichier settings.py

Supposons que nous souhaitons que notre site Web django soit disponible en anglais et en français. Première étape, éditons le fichier settings.py en ajoutant les lignes suivantes:

from django.utils.translation import ugettext_lazy as _

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

LANGUAGES = (
    ('en-us', _('English')),
    ('fr', _('French')),
)

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

ici par défaut le site est en anglais (LANGUAGE_CODE = 'en-us').

Creer un dossier appelé locale

Etape suivante créer un dossier nommé "locale" à la racine du projet django:

mkdir locale

votre projet devrait ressembler à ceci:

locale
myproject/
    settings.py
    urls.py
myapps/
    templates/
    models.py
    views.py

Modifier les templates

Ensuite, dans tous les templates (par exemple home.html), indiquez le texte que vous souhaitez traduire:

{% trans 'text' %}

par exemples

{% trans 'Hello everyone !' %}

ou

{% trans 'search' %}

Modifier le fichier views.py

Dans le fichier views.py, ajoutez la ligne suivante:

 from django.utils.translation import gettext

puis indiquez le texte que vous souhaitez traduire comme ceci

text = gettext("text")

par exemple avec un message d'erreur:

err_msg = gettext("Oups somehting went wrong")

Créer les fichiers de traduction

Nous pouvons maintenant commencer à créer les fichiers de traduction qui seront stockés dans le dossier local que nous avons créé juste au-dessus. Pour cela, il est nécessaire d'installer gettext. L'installation dépend de votre système actuel, par exemple sur mac (voir Comment installer gettext sur MacOS X ) avec homebrew:

brew unlink gettext && brew link --force gettext

Pour vérifier où gettext a été installé (par exemple /usr/local/Cellar/gettext/0.21):

brew info gettext

puis entrez:

PATH="/usr/local/Cellar/gettext/0.21/bin:$PATH"

pour éviter l'erreur suivante lorsque vous essayez de compiler les messages (voir django i18n ne fonctionne pas sous mac ):

CommandError: errors happened while running msguniq
msguniq: Cannot convert from "ASCII" to "UTF-8". msguniq relies on iconv(). This version was built without iconv().

Maintenant, dans votre terminal, allez à la racine de votre projet:

/locale
/myproject
/myapps

et entrez les commandes suivantes:

django-admin.py makemessages -l fr
django-admin compilemessages

Il devrait ensuite créer les fichiers suivants dans le dossier locale:

django.po
django.mo

Editez le fichier .po

Modifiez ensuite le fichier .po pour traduire le texte.

Remarque: pour éditer le fichier .po, il existe des éditeur sde texte comme poedit.

Changer la langue

Deux options (définir la langue dans une vue django, définir explicitement la langue active, Impossible de changer la langue dans django):

Option (1) dans le fichier settings.py changez:

LANGUAGE_CODE = 'en-us'

en

LANGUAGE_CODE = 'fr'

Option (2) dans le fichier views.py ajoutez la ligne suivante

from django.utils import translation

vous pouvez maintenant changer du français

language = 'fr' 
translation.activate(language)

ou anglais dans une vue django

language = 'en-us' 
translation.activate(language)

Remarque: peut être utile si vous souhaitez laisser le visiteur choisir sa langue préférée. Créez un lien:

/myapps/?language=fr

et dans vue views.py

if 'language' in request.GET and request.GET['language']:
    language = request.GET['language']
    if language in ['fr','en']:
        if language == 'fr': 
            translation.activate(language)
        if language == 'en': 
            translation.activate(language)

Références