6
votes

Utilisation des paramètres.Langues avec des noms correctement traduits à l'aide de GetText ()

de Django Documentation:

Si vous définissez une langue personnalisée 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 () fonction, pas celui dans django.utils.translation . Vous ne devriez jamais importer django.utils.translation 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 () fonction. Voici un exemple de fichier de paramètres:

gettext = lambda s: S Langues = ( ('de', gettext ('allemand')), ('fr', gettext ('français')), )

avec cet arrangement, django-admin.py Makemessages 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 () dans n'importe quel code qui utilise Langues AU RUNTIME.

Qu'est-ce que cela signifie exactement pour envelopper les langues dans réel gettext () ? Comment cela devrait-il être appelé dans le code?


0 commentaires

4 Réponses :


3
votes

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 %}


2 commentaires

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.



0
votes

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')),
    )


0 commentaires

0
votes

Dans le modèle, vous pouvez simplement faire ce qui suit:

{% for lang in LANGUAGES %}
      {% trans lang.1 %}
{% endfor %}


0 commentaires

5
votes

Selon le Dernières documents Vous pouvez utiliser ugettext_lazy dans les paramètres sans provoquer des importations circulaires: xxx


0 commentaires