Skip to main content

Adds internationalization (i18n) support to ASGI applications (Asyncio_ / Trio_)

Project description

asgi-babel – Adds internationalization (i18n) support to ASGI applications (Asyncio / Trio / Curio)

Tests Status PYPI Version Python Versions

Requirements

  • python >= 3.7

Installation

asgi-babel should be installed using pip:

pip install asgi-babel

Usage

Common ASGI applications:

from asgi_babel import BabelMiddleware, current_locale, gettext

async def my_app(scope, receive, send):
    """Get a current locale."""
    locale = current_locale.get().language.encode()
    hello_world = gettext('Hello World!').encode()

    await send({"type": "http.response.start", "status": 200})
    await send({"type": "http.response.body", "body": b"Current locale is %s\n" % locale})
    await send({"type": "http.response.body", "body": hello_world})

app = BabelMiddleware(my_app, locales_dirs=['tests/locales'])

# http GET /
#
# Current_locale is en
# Hello World!

# http GET / "accept-language: ft-CH, fr;q-0.9"
#
# Current_locale is fr
# Bonjour le monde!

As ASGI-Tools Internal middleware

from asgi_tools import App
from asgi_babel import BabelMiddleware, gettext

app = App()
app.middleware(BabelMiddleware.setup(locales_dirs=['tests/locales']))

@app.route('/')
async def index(request):
    return gettext('Hello World!')

@app.route('/locale')
async def locale(request):
    return current_locale.get().language

Usage with Curio async library

The asgi-babel uses context variable to set current locale. To enable the context variables with curio you have to run Curio with contextvars support:

from curio.task import ContextTask

curio.run(main, taskcls=ContextTask)

Options

The middleware’s options with default values:

from asgi_babel import BabelMiddleware

app = BabelMiddleware(

     # Your ASGI application
     app,

     # Default locale
     default_locale='en',

     # A path to find translations
     locales_dirs=['locales']

     # A function with type: typing.Callable[[asgi_tools.Request], t.Awaitable[t.Optional[str]]]
     # which takes a request and default locale and return current locale
     locale_selector=asgi_babel.select_locale_by_request,

)

How to extract & compile locales:

http://babel.pocoo.org/en/latest/messages.html

http://babel.pocoo.org/en/latest/cmdline.html

Bug tracker

If you have any suggestions, bug reports or annoyances please report them to the issue tracker at https://github.com/klen/asgi-babel/issues

Contributing

Development of the project happens at: https://github.com/klen/asgi-babel

License

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.

Source Distribution

asgi-babel-0.6.1.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

asgi_babel-0.6.1-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file asgi-babel-0.6.1.tar.gz.

File metadata

  • Download URL: asgi-babel-0.6.1.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for asgi-babel-0.6.1.tar.gz
Algorithm Hash digest
SHA256 8b772581360de9a6d25e67fd2cb909caec9a5d1b75c84111531320eb02dd0e6c
MD5 8ebbf9d4fc167d2f25cb29442a2758f6
BLAKE2b-256 b46de25caa146db5685361b098e7b7bb8505ccc3bfb4d5726c12ccd90b289425

See more details on using hashes here.

File details

Details for the file asgi_babel-0.6.1-py3-none-any.whl.

File metadata

  • Download URL: asgi_babel-0.6.1-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for asgi_babel-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 de95f9a3ae6c9e3e7c6ef9be2f8bdda0c2c0c3be68446b59a1e7e50ffbb96553
MD5 7c79cd57c8e88afb88f7f65f01ccd89d
BLAKE2b-256 e300b47dbba7ba845c4c1c851a50ceb82dc39b4f34d22d5e1aa18c18af667561

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page