Django internationalisation des codes de langue [fermé]
-
12-09-2020 - |
Question
Où puis-je trouver la liste des langues et language_code comme ça.
(Swedish,sv)
(English,en)
La solution
Autres conseils
Si vous voulez quelque chose que vous pouvez utiliser à partir de l'intérieur de django, essayez:
from django.conf import settings
ce sera dans le format ci-dessus, le rendant parfait pour affectation dans l'un de vos modèles de choix= champs.(c'est à dire user_language = models.CharField(max_length=7, choices=settings.LANGUAGES)
)
LANGUAGES = (
('ar', gettext_noop('Arabic')),
('bg', gettext_noop('Bulgarian')),
('bn', gettext_noop('Bengali')),
etc....
)
Remarque sur l'utilisation de paramètres:
Les réponses précédentes ne citer que se LANGUAGE
à partir de settings.py, hovewer il ya une grande chance que cette variable sera remplacée.Ainsi, vous pouvez obtenir la liste complète de django.conf.global_settings.LANGUAGES
from django.db import models
from django.conf.global_settings import LANGUAGES
class ModelWithLanguage(models.Model):
language = models.CharField(max_length=7, choices=LANGUAGES)
from django.conf import settings
#note settings is an object , hence you cannot import its contents
settings.configure()
#note LANGUAGES is a tuple of tuples
lang_dict = dict(settings.LANGUAGES)
#use lang_dict for your query.
print lang_dict['en']
Cordialement
Sachin
J'ai compris à partir de Projet Django vous pouvez uniquement utiliser un mannequin gettext fonction:
Si vous définissez une coutume LANGUES, ainsi qu'il est expliqué dans le point précédent, c'est OK pour marquer les langues comme des chaînes de traduction -- mais l'utilisation d'une "dummy"
ugettext()
la fonction, et non dansdjango.utils.translation
.Vous ne devriez jamais importationdjango.utils.translation
à partir de votre fichier de paramètres, parce que le module en lui-même dépend des paramètres, et qui serait la cause d'une circulaire de l'importation.".
Il m'a fallu un certain temps pour trouver la solution, mais j'ai finalement obtenu;le choix du modèle de terrain a besoin d'avoir un tuple avec de vraies fonctions gettext, avec une fonction lambda le mannequin peut être enveloppé dans le réel gettext fonctions comme suit:
from django.utils.translation import ugettext_lazy as _
language = models.CharField(max_length=5, choices=map(lambda (k,v): (k, _(v)), settings.LANGUAGES), verbose_name=_('language'))