Muffin-Babel is an extension for the Muffin web framework that adds internationalization (i18n) support using Babel.
- Python >= 3.10
Install via pip:
pip install muffin-babelimport muffin
import muffin_babel
app = muffin.Application("example")
# Initialize the plugin
babel = muffin_babel.Plugin()
babel.setup(app, local_folders=["src/locale"])@app.route("/")
async def index(request):
assert babel.current_locale
return babel.gettext("Hello World!")By default, locale is detected via the Accept-Language header. You can override it:
@babel.locale_selector
async def get_locale(request):
return request.query.get("lang") or await muffin_babel.select_locale_by_request(request, default="en")@app.route("/")
def index(request):
return babel.gettext("Hello!")If you're using the muffin-jinja2 plugin, Muffin-Babel automatically injects gettext and ngettext functions into your Jinja2 templates.
| Option | Default | Description |
|---|---|---|
AUTO_DETECT_LOCALE |
True |
Middleware for automatic locale detection |
CONFIGURE_JINJA2 |
True |
Enable i18n support in Jinja2 templates |
DEFAULT_LOCALE |
"en" |
Default fallback locale |
DOMAIN |
"messages" |
Default domain name for translation files |
SOURCES_MAP |
— | File pattern to extractor method mapping |
OPTIONS_MAP |
— | Options for extractor (e.g., encoding) |
LOCAL_FOLDERS |
["locales"] |
Folders to search for translation files |
Options can be passed directly during setup:
babel.setup(app, default_locale="fr")Or set via Muffin application config using the BABEL_ prefix:
BABEL_DEFAULT_LOCALE = "fr"Note: Muffin config keys are case-insensitive.
The plugin adds commands to your Muffin app for message management.
Extract localizable strings from your app source:
$ muffin app_package babel_extract_messages [OPTIONS] appdirCompile .po files into .mo binaries:
$ muffin app_package babel_compile_messages [OPTIONS]You can also export your .po files to CSV:
$ muffin app_package babel_export_csvThis helps with sending strings to translators or spreadsheets.
Development happens at: https://github.com/klen/muffin-babel
Feel free to open issues or pull requests.
Found a bug? Have a suggestion? Report it here: 👉 https://github.com/klen/muffin-babel/issues
Licensed under the MIT license
klen (Kirill Klenov)