2017-09-29 1 views
0

J'essaye depuis plusieurs heures de faire fonctionner les choses, mais toujours sans succès. J'utilise Jinja2 avec Django (https://docs.djangoproject.com/en/1.11/topics/templates/#django.template.backends.jinja2.Jinja2) et maintenant j'essaie d'activer les traductions. Jinja2 docs suggèrent (http://jinja.pocoo.org/docs/2.9/extensions/#i18n-extension) l'extension existante (jinja2.ext.i18n). Donc, ma configuration ressemble à ceci:Django + Jinja2 + i18n: jinja2.exceptions.UndefinedError: 'gettext' est indéfini

settings.py

TEMPLATES = [ 
{ 
    "BACKEND": "django.template.backends.jinja2.Jinja2", 
    "DIRS": [os.path.join(BASE_DIR, 'templates')], 
    "APP_DIRS": False, 
    'OPTIONS' : { 
     'environment': 'config.jinja2.environment' 
    } 
}] 

jinja2.py:

def environment(**options): 
    env = Environment(**options, extensions=['jinja2.ext.i18n']) 
    env.globals.update({ 
     'static': staticfiles_storage.url, 
     'url': reverse, 
     'dj': defaultfilters 
    }) 
    return env 

Le template:

{{ gettext('...') }} 

Résultat:

jinja2.exceptions.UndefinedError: 'gettext' is undefined 

Est-ce que quelqu'un sait quel est le problème et qu'est-ce qui me manque? Merci d'avance pour votre aide!

Répondre

1

Voici ma solution après de nombreuses tentatives. Le « jinja2.ext.i18n » n'installe pas gettext automatiquement, donc vous devez l'ajouter en premier à l'environnement par l'intermédiaire install_gettext_callables:

from django.utils.translation import gettext, ngettext 

def environment(**options): 
    env = Environment(**options, extensions=['jinja2.ext.i18n']) 

    env.install_gettext_callables(gettext=gettext, ngettext=ngettext, newstyle=True) 

    env.globals.update({ 
     'static': staticfiles_storage.url, 
     'url': reverse, 
     'dj': defaultfilters 
    }) 
    return env