WSGI Language Middleware
Why?
This Wsgi middleware, takes the language from urls similiar to "/es/documents" or from the Accept language header.
Instalation
Prerequisites:
- Python >= 2.6
- Ludibrio (for the tests)
Install
python setup.py install
Test
python setup.py -q test
Usage
Basic
from language_middleware import LanguageMiddleware
application = my_wsgi_app()
application = LanguageMiddleware(application, default_language = 'es', valid_languages = ('en', 'es', 'fr'))
Call to the url /fr/documents, and my_wsgi_app will receive:
environ['HTTP_ACTIVE_LANGUAGE'] = 'fr'
Call to the url /documents/1, and my_wsgi_app will receive:
environ['HTTP_ACTIVE_LANGUAGE'] = 'es'
Clean URL
The clean_url option, removes the language info from the URL.
from language_middleware import LanguageMiddleware
application = my_wsgi_app()
application = LanguageMiddleware(application, default_language = 'es', valid_languages = ('en', 'es', 'fr'), clean_url = True)
Call to the url /fr/documents, and my_wsgi_app will receive:
environ['PATH_INFO'] = '/documents'
environ['HTTP_ACTIVE_LANGUAGE'] = 'fr'
Call to the url /documents/1, and my_wsgi_app will receive:
environ['PATH_INFO'] = '/documents/1'
environ['HTTP_ACTIVE_LANGUAGE'] = 'es'
With locale
If you have the following locale directory
/home/user/locale/es/LC_MESSAGES/hello.po
/home/user/locale/es/LC_MESSAGES/hello.mo
/home/user/locale/en/LC_MESSAGES/hello.po
/home/user/locale/en/LC_MESSAGES/hello.mo
You can set an option to active the language, check the test from more info:+
IMPORTANT: Default language locale path must exists, if not last successfully used locale will be used (if any)
from language_middleware import LanguageMiddleware
application = my_wsgi_app()
application = LanguageMiddleware(
application,
default_language = 'es',
valid_languages = ('en', 'es', 'fr')
clean_url = True,
locale_path = '/home/user/locale',
locale_name = 'hello'
)
Set Script Name
Starting with wsgi-language-middleware 0.4 you can pass set_script_name to LanguageMiddleware, it will set the SCRIPT_NAME to a slash followed by the chosen language (e.g. /es)
This can help you if your application uses url-creation helpers (e.g. pylons h.url()), which do rely on the script name and should automatically prepend links with the given locale.
Switching off global gettext translation installation
If you want to take care of the locale loading yourself (e.g. by inspecting environ['HTTP_ACTIVE_LANGUAGE'] later on) or do not use gettext, you can suppress the installation of the gettext translation by using do_gettext_install=False in LanguageMiddleware() .