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