Muffin-Babel

Muffin-Babel is an extension for the Muffin web framework that adds internationalization (i18n) support using Babel.
Requirements
Installation
Install via pip:
pip install muffin-babel
Usage
Basic Setup
import muffin
import muffin_babel
app = muffin.Application("example")
babel = muffin_babel.Plugin()
babel.setup(app, local_folders=["src/locale"])
Inside a Route
@app.route("/")
async def index(request):
assert babel.current_locale
return babel.gettext("Hello World!")
Locale Selector
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")
Direct Use
@app.route("/")
def index(request):
return babel.gettext("Hello!")
Jinja2 Integration
If you're using the muffin-jinja2
plugin, Muffin-Babel
automatically injects gettext
and ngettext
functions into your Jinja2 templates.
Plugin Options
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.
Commands
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] appdir
Compile Messages
Compile .po
files into .mo
binaries:
$ muffin app_package babel_compile_messages [OPTIONS]
Export as CSV
You can also export your .po
files to CSV:
$ muffin app_package babel_export_csv
This helps with sending strings to translators or spreadsheets.
Contributing
Development happens at: https://github.com/klen/muffin-babel
Feel free to open issues or pull requests.
Bug Tracker
Found a bug? Have a suggestion? Report it here:
👉 https://github.com/klen/muffin-babel/issues
License
Licensed under the MIT license
Author
klen (Kirill Klenov)