i18n : Le multilingue avec Django

Publié le 5 Jul. 2017 | Django | 9 comments

L' I18n ou l'internationalisation consiste a adapter son application pour supporter plusieurs langages et/ou cultures.

Nous allons voir en 3 étapes comment configurer son application avec django pour l'internationalisation.

 

1 . Configuration de i18n :

Activation dans le fichier settings.py :

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                ...
                'django.template.context_processors.i18n',
            ],
        },
    },
]

Ajout du Locale Middleware qui va determiner les preferences de langue de l'utilisateur selon le contexte : 

MIDDLEWARE_CLASSES = (
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
)

 Mise a jour des urls :

# -*- coding: utf-8 -*-
from django.conf.urls import include, url
from django.contrib import admin
from django.conf.urls.i18n import i18n_patterns
from .views import home, home_files
 
# Ici les urls pour les pages qu'on ne veux pas traduire
urlpatterns = [
    url(r'^(?P<filename>(robots.txt)|(humans.txt))$',
        home_files, name='home-files'),
]
 
# On ajoute dans i18n_patterns la liste des urls des pages a traduire
urlpatterns += i18n_patterns(
    url(r'^$', home, name='home'),
    url(r'^admin/', include(admin.site.urls)),

 

2 . Configuration des templates

Il faut maintenant adapter le code du site pour l'internationalisation. On va indiquer, dans les templates et grace aux tags, ce que nous voulons traduire. La traduction de texte se fera quand a elle seulement a la 3e etape.
 

Nous allons utiliser 2 differents tags que nous allons importer :

  • {% trans %} pour traduire des chaines de characteres comme des titres
  • {% blocktrans %} pour des paragraphes ou tout texte sur plusieurs lignes ou contenant des variables

Pour ceci il faut ajouter le bloc {% load i18n %} au debut de chaque template que l'on veut traduire.

{% extends 'base.html' %}
{% load i18n %}

On peut aussi laisser des notes pour aider les traducteurs :

{# Translators: Titre du site, affiché sur la page d'accueil #}
{% trans "Développeuse Back-End / Front-End, Intégratrice" %}
{% trans "Spécialisée dans le développement d'applications Web modernes" %}

 

3 . Traduction

Maintenant que nous avons la bonne configuration et que nous avons ajouté les tags pour indiquer le texte a traduire nous allons enfin passer a la traduction. Pour cela nous allons creer le dossier "locale" qui va contenir les fichiers de traduction et indiquer le chemin dans les parametres :

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

Django utilise la bibliotheque gettext pour l'internationalisation. La traduction se fait à partir de fichiers d'extention ".po" generés a partir de la commande suivante qui contiendront le texte a traduire : (commande à executer a la racine de votre projet)

python manage.py makemessages -l en
 

Cette commande va créer les fichiers de traduction dans un sous dossier pour chaque langue à traduire, sauf la langue par defaut.

Si vous n'avez pas installé gettext, un message d'erreur apparait.
 
Pour installer la bibliothèque vous pouvez télécharger la dernière version à partir du site de GNU ici. Les instructions d'installation se trouvent dans le zip dans le fichier INSTALL.
 

Ou avec brew sur Mac :

brew install gettext 
 

Le texte traduit se Il suffit ensuite d'ajouter les traductions dans les lignes msgstr correspondant aux msgid :

msgid "Développeuse Back-End / Front-End, Intégratrice"
msgstr "Fullstack web developper"
...
msgid "À propos"
msgstr "About"

Une fois les traductions faites, une derniere commande permet de les compiler :

python manage.py compilemessages -l en
 

Comments

There are currently no comments

required

required (not published)

optional

About

Développeuse web passionnée par les nouvelles technologies et internet, j'ai eu mon premier ordinateur sous Windows 95 à l'age de 6 ans.
L'apparentissage du html et du langage C, avec l'arrivée d'internet, a été le début d'une longue aventure.
Maintenant titulaire d'une licence professionnelle en systèmes informatiques et logiciels, je continue à me former à distance. Je mets mes compétences à votre service pour le développement de votre site et/ou application web.

Categories

Tags