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-babel
import 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] appdir
Compile .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_csv
This 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)