Django, internationaliser un "template tag"

Publié le 01 avril 2010 par Samuel Martin

Voici une courte astuce vous permettant de bénéficier du support i18n au sein d'un "template tag" personalisé.

De base la commande python manage.py makemessages -l fr permet de générer un fichier .po contenant les chaines à traduire. C'est pratique et puissant, car très rapidement, toutes chaines prêtes à être traduite dans les actions (views.py), les formulaires (forms.py), les modèles (models.py), les templates (*.html).. se retrouvent listées. Le hic, c'est que cette commande est incapable de détecter les chaines à traduire dans nos templates tag perso. Il faut alors ajouter la bonne expression régulière au sein du code Django.

Modifier le code Django

Il y a probablement beaucoup plus propre mais voici la démarche :

  1. Localiser l'installation de django dans votre système ( via locate django)
  2. Localiser le fichier trans_real.pyc
  3. Ajouter une nouvelle expression régulière dans ce fichier
  4. Ajouter l'appel à l'expression régulière
  1. Editer le fichier : sudo vim /usr/local/lib/python2.6/dist-packages/django/utils/translation
  2. Ligne 406 ajouter : voir code -> permet de détecter les chaines de la forme {% sheet_field mon_objet "chaine à traduire" %}
  3. Ligne 462 ajouter : imatch2 = inline_re2.match(t.contents)
  4. Ligne 469 ajouter : voir code

Logiquement via la commande python manage.py makemessages -l fr de nouvelles chaines doivent être repérées. Sinon la compilation du fichier .po en fichier .mo reste identique via la commande python manage.py compilemessages . PS : J'utilise généralement poedit ou un simple éditeur de texte pour traduire les chaines et vous ?