Search code examples
pythonflaskjinja2gettextflask-babel

Flask-Babel how to use translation in Jinja template file


In my Flask application, in main.py file, I defined:

from flaskext.babel import gettext
....
def somefun():
    return render_template('some.html', messages=messages)

in template file some.html, I used:

<input type='text' name='keywords' value='{{ keywords|default('') }}' placeholder='{{ gettext('Search...') }}' />

This gives an error:

<input type='text' name='keywords' value='{{ keywords|default('') }}' placeholder='{{ gettext('Search...') }}' />
UndefinedError: 'gettext' is undefined

How to import this function for template use?


Solution

  • Unfortunately this is not documented at all, but Flask-Babel is transparently using Jinja2's i18n extension. This means that by default, following functions for expressions are available: gettext, ngettext and _.

    There's also possibility to use template tags:

    {% trans %}foo{% endtrans%}
    
    {% trans num %}
    There is {{ num }} object.
    {% pluralize %}
    There are {{ num }} objects.
    {% endtrans %}
    

    And the bug report about missing docs that's waiting for patches ;)