J'utilise {% Trans%} Tag. Django DOCS Dites:
La balise de modèle {% TRANS%} traduit soit une chaîne constante (ci-jointe dans des guillemets simples ou doubles) ou une teneur variable:
{% Trans "C'est le titre." %} {% trans myvar%}
https://docs.djangoproject.com/fr/1.3/topics/i18n/internationalization/#trans-template-tag
J'ai trouvé impossible de faire {% Trans myvar%} parce que Myvar ne s'affiche tout simplement pas dans le fichier Django.po après avoir exécuté la commande Makemessages.
Est-ce que je l'utilise mal? Est-ce que certains pourraient m'aider avec ça?
Vous pouvez utiliser l'étiquette de modèle blocktrans
dans ce cas:
{% blocktrans %} This is the title: {{ myvar }} {% endblocktrans %}
{% trans myvar %}
fonctionne juste. Vérifiez donc votre fichier PO pour vous assurer que la valeur de myvar
est en msgstr.
<title>{% trans myvar %}</title>
Par exemple, si myvar
contient "Some Publisher"
Vous pouvez écrire ce qui suit dans le fichier PO:
msgid "Some Publisher"
msgstr "কিছু প্রকাশক"
Assurez-vous également que vous avez couru:
python manage.py compilemessages
Django ne peut pas deviner ce qui est dans cette variable, vous devez donc la traduire vous-même en ajoutant les deux anglais (msgid
) et les chaînes localisées (msgstr
).
Mon expérience ici est que la traduction variable ne fonctionne pas dans les modèles par son propre . Cependant, je suis arrivé à une solution appropriée lorsque le contenu des variables est connu (je veux dire qu'ils ne sont pas de texte libre, mais un ensemble de choix que vous avez définis dans la base de données).
Vous devez forcer la traduction dans la vue ou dans une étiquette de filtre.
Pour résumer:
blocktrans
dans vos modèles.po
déposerL'histoire est comme ceci:
vues.py
def my_view(request):
return render(request, 'i18n_test.html', {'salutation':"Hola"})
Templates/I18N_TEST.HTML
...
{% blocktrans %}{{ salutation }}{% endblocktrans %}
...
Et quand je rends le modèle, il montre toujours Hola Quelle que soit la langue actuelle.
Pour forcer la traduction, dans la vue, nous devons utiliser ugetText.
def my_view(request):
return render(request, 'i18n_test.html', {'salutation':ugettext("Hola")})
Cependant, il n'est pas toujours possible d'accéder à la vue. Donc, je préfère utiliser un filtre comme celui-ci.
templateTags/i18n_extras.py
@register.filter(name='translate')
def translate(text):
try:
return ugettext(text)
Et le modèle devient
...
{% blocktrans s=salutation|translate %}{{ s }}{% endblocktrans %}
...
Et produit Hola, Bonjour, Ciao, Salut Selon la langue actuelle.
L'inconvénient (comme indiqué dans le - Docs ) est que makemessages
_ n'inclut pas automatiquement ces traductions. Nous devons donc les inclure manuellement. Dans django.po fichier:
locals/fr/django.po
...
msgid "Hola"
msgstr "Hello"
...
Vous pouvez traduire la variable dans le python code comme ici pour settings.SITE_NAME
:
from Django.conf import settings
from Django.utils.translation import ugettext_lazy as _
def processor004(request):
my_dict = {
'site_id004': settings.SITE_ID,
'site_name004': _(settings.SITE_NAME),
'installed_apps004': settings.INSTALLED_APPS,
'embedded_widget004': settings.EMBEDDED_WIDGET,
'base_template004': settings.BASE_TEMPLATE,
}
return my_dict
C'est une solution élégante complexe qui peut aider si vous traduisez des valeurs des champs modèles: http://django-modeltranslation.readthedocs.org
"ModelTranslation
L'application Modeltranslation est utilisée pour traduire le contenu dynamique des modèles existants Django vers un nombre arbitraire de langues sans avoir à modifier les classes de modèle d'origine. "
faire des tags
from Django.utils.translation import ugettext as _
@register.simple_tag
def trans2(tr, *args, **kwargs):
# print(':', kwargs)
trans = _(tr)
trans_str = trans.format(**kwargs)
return trans_str
dans le modèle:
{% trans2 columns_once.res_data.message with value=columns_once.res_data.recommend%}
à django.po
#: default_content.py:136
msgid "_audit_recommend_speed"
msgstr "Рекомендованная скорость до {value} сек"
Pour moi, cela s'est passé quand j'avais le TEMPLATES.DIRS
En dehors de mon Django répertoire de projet. La récupération des modèles dans le répertoire de projet a résolu le problème.