Comment puis-je obtenir la langue actuelle dans le fil de discussion actuel dans un modèle ou dans l'administrateur?
python
django
internationalization
diegueus9
la source
la source
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 .la source
Ou vous pouvez également obtenir cela dans vos vues
la source
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 toujourssettings.LANGUAGE_CODE
lorsque les traductions étaient désactivées. Si vous souhaitez remplacer manuellement le langage du thread, vous pouvez utiliser les fonctionsoverride()
ouactivate()
, qui ne sont pas nommées très explicitement, mais qui restent utiles: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>
vswww.example.com/fr/<somepath>
, utilisezdjango.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.
la source
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()
etdjango.utils.translation.get_language_from_request(request, check_path)
. Si en vue, vous devriez utiliser ce dernier aveccheck_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.la source
vous pouvez utiliser ceci
la source
Vous pouvez lire le système
locale
pour obtenir des informations sur la langue.la source