de Django Documentation: P>
Si vous définissez une langue
personnalisée code> réglage, il est correct de marquer les langues comme cordes de traduction (comme dans le Valeur par défaut affichée ci-dessus) - mais Utilisez un "factice"
gettext () code> fonction, pas celui dans
django.utils.translation code>. Vous ne devriez jamais importer
django.utils.translation code> de l'intérieur votre fichier de paramètres, parce que Le module en soi dépend de la paramètres, et cela causerait un Importation circulaire. La solution est de Utilisez un "factice"
gettext () code> fonction. Voici un exemple de fichier de paramètres: p>
gettext = lambda s: S Langues = ( code>
('de', gettext ('allemand')), code>
('fr', gettext ('français')), code>
) code> p>
avec cet arrangement,
django-admin.py Makemessages code> trouvera toujours et marquera ces cordes pour la traduction, mais La traduction n'arrivera pas à Runtime - vous devrez donc vous souvenir envelopper les langues dans le vrai
gettext () code> dans n'importe quel code qui utilise
Langues CODE> AU RUNTIME. P> blockQuote>
Qu'est-ce que cela signifie exactement pour envelopper les langues dans réel
gettext () code>? Comment cela devrait-il être appelé dans le code? P>
4 Réponses :
exactement ce qu'il dit: appelez gettext () sur les noms de langue lorsque vous les utilisez réellement ou les afficher à l'utilisateur:
{% for lang in LANGUAGES %} {% blocktrans %}{{ lang.1 }}{% endblocktrans %} {% endfor %}
Cette méthode est assez transparente et compréhensible. Mais dans ce cas, quel est le point d'utiliser un wrapper factice dans les paramètres.Languages? Depuis que vous devez envelopper toutes les lignes dans le code, quel est le point de la fonction wrapper suggérée par le didacticiel.
Étant donné que lorsque vous exécutez l'outil GetText Commandline sur votre arborescence source (probablement via ./Manage.py Makemessages), vous souhaitez que cela reconnaisse ces chaînes comme "Besoin d'une traduction" afin de les ajouter à votre fichier PO.
C'est vraiment un commentaire et une explication plus poussée sur le Q & A ci-dessus. Je ne pouvais pas obtenir mes traductions au travail, lire et relire les docs, recherchés des heures en ligne et, après avoir lu ce message, je me suis rendu compte de cela:
J'ai initialement: P>
ugettext = lambda s: s LANGUAGES = ( ('en', ugettext('English')), ('nl', ugettext('Dutch')), )
Dans le modèle, vous pouvez simplement faire ce qui suit:
{% for lang in LANGUAGES %} {% trans lang.1 %} {% endfor %}
Selon le Dernières documents Vous pouvez utiliser ugettext_lazy code> dans les paramètres sans provoquer des importations circulaires: