Skip to main content

Localization support for the Muffin Framework

Project description

Muffin-Babel – an extension to Muffin that adds localization support with help of Babel.

Tests Status PYPI Version Python Versions


  • python >= 3.7


Muffin-Babel should be installed using pip:

pip install muffin-babel


Initialize and setup the plugin:

import muffin
import muffin_babel

# Create Muffin Application
app = muffin.Application('example')

# Initialize the plugin
# As alternative: babel = muffin_babel.Plugin(app, **options)
babel = muffin_babel.Plugin()
babel.setup(app, template_folders=['src/templates'])

# Use it inside your handlers
async def index(request):
    # Get current locale
    assert babel.current_locale
    # Translate a text
    return babel.gettext('Hello World!')

Setup a locale selector function (by default the plugin is parsing accept-language header):

async def get_locale(request):
    """ Return locale either from request.query or from request headers. """
    locale = request.query.get('lang')
    if not locale:
        return await muffin_babel.select_locale_by_request(request, default)
    return locale

Use babel.gettext, babel.pgettext callables in your code:

def index(request):
    return babel.gettext('Hello!')


The Muffin-Babel has integration with Muffin-Jinja2, so if you have muffin_jinja2 plugin enabled, the plugin provides gettext and ngettext function inside the Jinja2 templates’ context.


Name Default Value Description
AUTO_DETECT_LOCALE True Installs a middleware to automatically detect users locales
CONFIGURE_JINJA2 True Installs i18n support for jinja2 templates (through muffin-jinja)
DEFAULT_LOCALE "en" Default locale
DOMAIN "messages" Default localization domain
SOURCES_MAP   Babel sources map
OPTIONS_MAP   Babel options map

You are able to provide the options when you are initiliazing the plugin:

babel.setup(app, default_locale='fr')

Or setup it inside Muffin.Application config using the BABEL_ prefix:


Muffin.Application configuration options are case insensitive


The plugin adds two commands to your Muffin application.

Extract messages

Extract strings from your application to locales:

$ muffin app_package babel_extract_messages [OPTIONS] appdir

Translate .po files and compile translations:

$ muffin app_package babel_compile_messages [OPTIONS]

Bug tracker

If you have any suggestions, bug reports or annoyances please report them to the issue tracker at


Development of Muffin-Babel happens at:


  • klen (Kirill Klenov)


Licensed under a MIT license.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for muffin-babel, version 1.1.0
Filename, size File type Python version Upload date Hashes
Filename, size muffin_babel-1.1.0-py3-none-any.whl (6.6 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size muffin-babel-1.1.0.tar.gz (7.2 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page