12
votes

Comment ajouter correctement les entrées pour les valeurs calculées au fichier de messages d'internationalisation de Django?

Documentation Django STATS:

La mise en garde avec des variables ou des valeurs calculées, comme dans la précédente Deux exemples, est que l'utilitaire de détection de chaînes de traduction de Django, Django-admin.py Makemessages, ne pourra pas trouver ces chaînes. p> BlockQuote>

C'est bien avec moi, je suis prêt à fournir des traductions pour toutes les valeurs possibles de la variable traduite à la main. Mais comment faire cela? P>

Disons que j'ai dans mon code de modèle comme ceci: p> xxx pré>

Le var est extrait de la base de données, et je sais Toutes les valeurs possibles de celui-ci - disons que les valeurs possibles sont "Alice" et "Bob". P>

Je pensais que tout ce que je dois faire est de fournir des entrées comme celles-ci: P>

#~ msgid "Alice"
#~ msgstr "Alicja"


0 commentaires

3 Réponses :


11
votes

Nous sommes actuellement en train de comprendre cela aussi. Bien que nous n'ayons pas fait si bien, nous avons un piratage plutôt ennuyeux pour se déplacer.

Nous définissons simplement une fonction "factice" quelque part dans le code (par exemple vos modèles.py ou même les paramètres.py) et remplissez-le avec toutes les cordes que nous devons avoir une traduction pour. xxx

Cette fonction n'est jamais appelée mais simplement définir cela empêche les chaînes de message d'être commentées par Makemessages.

Pas la solution la plus élégante mais ça marche.


3 commentaires

Il semble qu'il n'y ait pas de "élégante" "correcte" et une solution largement acceptée. Une pitié. Le tien semble optimal pour moi, merci!


Vous pouvez également utiliser un modèle pour cela (vous n'avez même pas besoin d'utiliser ce modèle n'importe où dans vos applications). Voir ce gist pour un exemple. Veuillez également noter que vous pouvez utiliser des packages spéciaux lorsque vous gérez la traduction de l'objet modèle (ils vous permettent même de modifier la traduction à l'aide du site d'administration). J'ai ajouté quelques liens dans un commentaire vers le gist.


Je pense que cela est bon uniquement pour les chaînes, qui ne figurent dans aucun code du tout (ni dans les appareils, etc.), comme une chaîne complètement "de l'extérieur" - comme d'un service Web Stranger, etc. sinon il y a d'autres solutions ( voir ma réponse).



1
votes

Il y a une belle façon de faire ça! (Je sais, parce que je travaille sur le même code).

Tout d'abord - cette valeur est calculée quelque part. Donc, dans votre action, vous pouvez avoir: xxx

et ultérieur dans le modèle: xxx

Vous pouvez avoir des différents Les valeurs, qui peuvent devenir peu pratiques ... à moins que vous n'utilisez cette astuce: xxx

Vous devez faire _ quelque chose de local si vous ne voulez pas Pour affronter avec ugettext_lazy , etc.

De cette façon, vous n'êtes pas:

  • Traduire prématurément
  • en utilisant une fonction redondante "factice" boiteuse "liste" sur "Lister" vos chaînes traduites
  • Messing Up, et devoir abandonner Manage.py Makemessages

0 commentaires

0
votes

J'ai fini par résoudre celui-ci avec une solution similaire suggérée dans la réponse @stfs.

Lorsque j'ai utilisé pGgetext ("type de prévision", "une chaîne") , puis vous utilisez {% trans varname%} dans mon modèle retourne toujours " Certaines chaînes "au lieu de" nouveau texte "pour la traduction.

J'ai donc changé la syntaxe dans la fonction vers gettext ("String") .

maintenant en utilisant {% Trans Varname%} donnerait "nouveau texte" dans mon modèle.


2 commentaires

Pourquoi pour vous dire que cela ne répond pas à la question? Il permettra d'ajouter une chaîne qui ne sera pas commentée dans le fichier de traduction. Alors qu'est-ce que j'ai manqué?


Cela ressemble davantage d'une amélioration de la réponse de STFS qu'une réponse en soi. Il aurait donc été bon s'il était inclus dans la réponse de STFS que de l'avoir ici. Cependant, je supprime mon commentaire pour le moment et je formatage un peu votre réponse.