django traduire à contenu variable dans le modèle
Je suis en utilisant {% trans %} balise de modèle. Django docs disent:
L' {% trans %} balise de modèle se traduit par une constante chaîne de caractères (entre guillemets simples ou doubles) ou à contenu variable:
{% trans "C'est le titre." %}
{% trans myvar %}
https://docs.djangoproject.com/en/1.3/topics/i18n/internationalization/#trans-template-tag
J'ai trouvé qu'il est impossible de le faire {% trans myvar %}, car myvar simplement ne pas apparaître dans django.fichier po après l'exécution de makemessages commande.
Suis-je à l'aide de ce mal? Certains pourraient m'aider?
- Avez-vous vérifier floue mots-clés dans votre éditeur ? Alors que j'étais à l'aide de Rosetta application en tant que traducteur, de nombreux mots-clés ont été gardés comme floue.
- Il traduit à contenu variable comme indiqué dans l'une des réponses, mais vous avez besoin d'avoir que le contenu traduit dans
django.po
fichier et compilé.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
blocktrans
balise de modèle dans ce cas:{% trans myvar %}
fonctionne, tout simplement. Donc, vérifiez votre fichier PO pour s'assurer que la valeur demyvar
est dans les PO msgid.Par exemple, si
myvar
contient"Some Publisher"
vous pouvez écrire le code suivant dans le fichier PO:Assurez-vous également que vous avez couru:
Django ne pouvez pas deviner ce qui est dans cette variable, de sorte que vous avez à traduire vous-même en ajoutant à la fois l'anglais (
msgid
) et localisés (msgstr
) les chaînes de caractères.noop
être utilisé dans ce cas? De la documentation,noop
crée une chaîne de traduction dans le fichier po, ce qui n'est pas directement utilisé n'importe où sur le site. De cette façon, vous n'avez pas besoin d'éviter l'exécutionmakemessages
.Mon expérience ici est que la variable de traduction ne fonctionne pas dans les modèles de sa propre. Cependant, je suis arrivé à une solution adaptée lorsque le contenu des variables est connue (je veux dire qu'ils ne sont pas libres de texte, mais un ensemble de choix que vous définissez dans la base de données).
Vous devez de la force de la traduction dans la vue ou dans un filtre tag.
Pour résumer:
blocktrans
dans vos templates.po
fichierL'histoire est comme ceci:
views.py
templates/i18n_test.html
Et quand j'ai rendu le modèle, il montre toujours Hola selon la langue actuelle est.
À la force de la traduction, dans l'avis que nous avons besoin d'utiliser ugettext.
Cependant, il n'est pas toujours possible d'accéder à la vue. Donc, je préfère utiliser un filtre de ce genre.
templatetags/i18n_extras.py
Et le modèle devient
Et produit Hola, Hello, Ciao, Salut en fonction de la langue courante.
L'inconvénient (comme indiqué dans le docs ), c'est que
makemessages
ne signifie pas automatiquement que ces traductions, nous avons donc besoin de les inclure manuellement. Dans django.fichier po:locales/fr/django.po
Vous pouvez traduire la variable dans le code python comme ici pour
settings.SITE_NAME
:C'est un complexe élégant solution qui peut aider si vous essayez de traduire les valeurs de champs de modèle: http://django-modeltranslation.readthedocs.org
"Modeltranslation
La modeltranslation application est utilisé pour traduire le contenu dynamique de l'existant Django modèles à un nombre arbitraire de langues, sans avoir à changer de modèle de classes."
Pour moi, ce qui s'est passé quand j'ai eu l'
TEMPLATES.DIRS
à l'extérieur de mon projet Django répertoire. Chercher les modèles dans le répertoire du projet a résolu le problème.faire propres balises
modèle:
dans django.po