Les réglages se font dans le setting.py
from django.utils.translation import gettext as _ [...] USE_I18N = True LANGUAGE_CODE = 'en' LANGUAGES = ( ('en', _('English')), ('fr', _('Français')), ) DEFAULT_LANGUAGE = 1 [...] MIDDLEWARE_CLASSES = ( [...] 'django.middleware.locale.LocaleMiddleware', ) TEMPLATE_CONTEXT_PROCESSORS = ( 'django.contrib.auth.context_processors.auth', 'django.core.context_processors.i18n', )
from django.utils.translation import gettext_lazy as _
MACHAINE = 'Une belle chaîne de caractères'
devient
MACHAINE = _('Une belle chaîne de caractères')
{% load i18n %}
{% trans "Ma chaine de caractères" %} {% blocktrans %}Cette chaîne contient en plus une {{ variable }}.{% endblocktrans %}
Ou pour un bloc complet
{% blocktrans %} [...] {% endblocktrans %}
La création des fichiers de traduction est faite grâce à gettext que l'on trouve dans toutes les bonnes crèmeries. Les fichiers sont créés au niveau de l'application
cd monApplication mkdir locale django-admin.py makemessages -l CODE_LANGUE
→ Génère un fichier .po pour la langue CODE_LANGUE. Ce fichier se trouvera dans locale/CODE_LANGUE/LC_MESSAGES
Une fois la(es) traduction(s) réalisée, il suffit de compiler les fichiers .po pour générer le fichier .mo :
django-admin.py compilemessages
Lors de la génération des fichiers d'internationalisation avec gettext, le message suivant peut apparaître :
Unknown encoding "utf8". Proceeding with ASCII instead.
Le même en français
Encodage « utf8 » inconnu. Traitement effectué en ASCII.
Ce message vient d'un problème de déclaration de l'encodage des fichiers source. Il semble de Python traite la déclaration d'encodage utf8 comme un alias à utf-8. Pour corriger le problème, il suffit de parcourir l'ensemble des fichiers source et de remplacer
# -*- coding: utf8 -*-
par
# -*- coding: utf-8 -*-
Ces deux fonctions permettent de traduire des chaînes de caractères :
Je n'ai pas encore tout compris mais de ce que je lis ici et là, il semble que ce soit la bonne manière de faire.