Comment puis-je obtenir la langue actuelle dans le fil de discussion actuel dans un modèle ou dans l'administrateur?
Réponses:
Les fonctions particulièrement intéressantes sont celles django.utils.translation.get_language()
qui retournent la langue utilisée dans le thread actuel. Consultez la documentation .
Ou vous pouvez également obtenir cela dans vos vues
request.LANGUAGE_CODE
django.utils.translation.get_language()
django.utils.translation.get_language()
c'est toujours une meilleure solution.
Faites attention à la méthode que vous utilisez pour obtenir la langue . En fonction de la méthode, Django utilisera différentes méthodes et informations pour déterminer la bonne langue à utiliser.
Lors de l'utilisation de la django.utils.translation.get_language()
fonction, elle est liée au langage du fil . Avant Django 1.8, il revenait toujours settings.LANGUAGE_CODE
lorsque les traductions étaient désactivées. Si vous souhaitez remplacer manuellement le langage du thread, vous pouvez utiliser les fonctions override()
ou activate()
, qui ne sont pas nommées très explicitement, mais qui restent utiles:
from django.utils import translation
with translation.override('fr'):
print(_("Hello")) # <= will be translated inside the with block
translation.activate('fr') # <= will change the language for the whole thread.
# You then have to manually "restore" the language with another activate()
translation.activate('en') # <= change languages manually
Si vous voulez que django vérifie le chemin et / ou la requête (cookie de langue, ...) , ce qui est beaucoup plus courant par exemple www.example.com/en/<somepath>
vs www.example.com/fr/<somepath>
, utilisez django.utils.translation.get_language_from_request(request, check_path=False)
. En outre, il renverra toujours une langue valide définie danssettings.LANGUAGES
J'ai trouvé qu'il n'était pas très facile de trouver ces différences via Google à ce sujet, alors les voici pour référence ultérieure.
django.utils.translation
pas des traductions. Il y a une faute d'orthographe dans le lien fourni. Dans l'extrait de code, c'est correct.
django.utils.translation.get_language()
et django.utils.translation.get_language_from_request(request, check_path)
. Si en vue, vous devriez utiliser ce dernier avec check_path = True
pour obtenir la langue dans laquelle votre modèle sera rendu.
Juste pour ajouter que si vous utilisez, django.utils.translation.get_language()
vous devez garder à l'esprit que si cette section de code est appelée de manière asynchrone (par exemple en tant que tâche de céleri), cette approche ne fonctionnera pas car elle s'exécute dans un thread différent.
vous pouvez utiliser ceci
from django.utils import translation
translation.get_language()
Vous pouvez lire le système locale
pour obtenir des informations sur la langue.