Bonjour à tous,
Je tombe sur un comportement des traductions qui me laisse perplexe. J’utilise Python 3.8 et Django 3.
Dans le code de mon fichier views.py
, j’ai une clé de traduction à traduire. La clé s’appelle users.views.login.success
.
Le code qui concerne cette clé est très simple :
from django.utils.translation import ugettext as _
from django.contrib.messages.views import SuccessMessageMixin
from django.contrib.auth.views import LoginView as BaseLoginView
class LoginView(SuccessMessageMixin, BaseLoginView):
template_name = 'users/login.html'
success_url = '/'
success_message = _('users.views.login.success')
Lorsque je lance python manage.py makemessages
, j’ai bien la clé qui apparaît dans mon fichier de langue. Par contre, lorsque j’affiche ce message sur mon site, il n’est pas traduit, ou plutôt, il est toujours en anglais (la langue par défaut du projet, en plus de laquelle je gère le français).
Donc je me suis dit, il faut peut-être marquer cette chaîne comme lazy.
J’ai donc remplacé le code par le suivant :
from django.utils.translation import ugettext_lazy as _lazy
from django.contrib.messages.views import SuccessMessageMixin
from django.contrib.auth.views import LoginView as BaseLoginView
class LoginView(SuccessMessageMixin, BaseLoginView):
template_name = 'users/login.html'
success_url = '/'
success_message = _lazy('users.views.login.success')
Et ô miracle, mon texte s’affiche bien en français !
Mais mais mais, lorsque je fais à nouveau un python manage.py makemessages
, la chaîne de traduction est enlevée par la commande ! Le résultat est le suivant :
#~ msgid "users.views.login.success"
#~ msgstr "Vous êtes maintenant connecté !"
Je ne comprends pas pourquoi la chaîne est retirée de mon fichier de traductions, ce comportement me semble très bizarre…
Quelqu’un saurait-il voir ce qui cloche ?
Merci à tous pour votre aide.