@method_decorator(
reponse_toast_decorator(Toast(message=gettext("Votre nouveau document a été créé.")), data_field_name="document"),
name="create",
)
@method_decorator(
reponse_toast_decorator(Toast(message=gettext("Le document a bien été mis à jour.")), data_field_name="document"),
name="update",
)
@method_decorator(reponse_toast_decorator(Toast(message=gettext("Le document a bien été supprimé."))), name="destroy")
class DocumentViewSet(viewsets.ModelViewSet):
I've generate po and mo with german translation. All worked fine except messages passed trough decorator method, which wasn't translated in language of user's browser. So translation went about settings of project(Language_code). To fix that, i had to use gettext in addition of my class properties called on my decorator. Like this :
class Toast:
def __init__(self, message, titre="", delai=2000, statut="succes", langue="", erreur=""):
self.message = message
self.statut = statut
self.titre = titre
self.langue = langue
self.erreur = erreur
self.delai = delai
@property
def data(self):
cur_langue = get_language()
self.langue = cur_langue[0:2].upper() # Formatage pour le Front
return {
"statut": self.statut,
"message": gettext(self.message),
"titre": self.titre,
"langue": self.langue,
"erreur": self.erreur,
"delai": self.delai,
}
def reponse_toast_decorator(toast=None, data_field_name=""):
"""Décorateur permettant de modifier la response d'une vue"""
"""Afin de conserver le réglage de langue de l'utilisateur
renvoyé dans la requête, il est nécessaire de transmettre cette requète à la classe Toast.
"""
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
# language = request.LANGUAGE_CODE
# print(language)
# Toast.request = request
# print(Toast.request)
response = func(*args, **kwargs)
# print(response)
if not isinstance(toast, Toast):
raise ValueError("L'argument 'toast' doit être une instance de la classe Toast")
if isinstance(response, Response):
if response.status_code == status.HTTP_204_NO_CONTENT:
response.status_code = status.HTTP_200_OK
if response.data is None:
response.data = {}
if not data_field_name:
response.data.update({"toast": toast.data})
return response
response.data = {data_field_name: response.data, "toast": toast.data}
return response
return wrapper
return decorator
So i don't understand why i need to write this way to make translation work about user language. Could someone explain me please ?
-- You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/208b1c13-9670-47a6-9b09-f10157224e40n%40googlegroups.com.
No comments:
Post a Comment