Flask-Language is a Flask extension providing a simple mechanism to handle a client-side language cookie.
It is somewhat loosely based on this snippet: http://flask.pocoo.org/snippets/128
Install the extension with with pipenv (recommended):
$ pipenv install flask-language
Or with pip:
$ pip install flask-language
Initialize the Flask-Language extension (also compatible with the Application Factories pattern):
from flask import Flask, jsonify from flask_language import Language, current_language app = Flask(__name__) lang = Language(app)
Define the language hooks:
@lang.allowed_languages def get_allowed_languages(): return ['en', 'fr'] @lang.default_language def get_default_language(): return 'en'
Define the desired end-points to retrieve and manipulate the current language:
@app.route('/api/language') def get_language(): return jsonify({ 'language': str(current_language), }) @app.route('/api/language', methods=['POST']) def set_language(): req = request.get_json() language = req.get('language', None) lang.change_language(language) return jsonify({ 'language': str(current_language), })
Before each request, Flask-Language will automatically determine the current language in the following order:
- The language cookie (if any and matching the allowed languages)
- The
Accept-Language
HTTP header (if any and matching the allowed languages) - The provided default language
During each request context, the current language can be accessed using
current_language
.
After each request, the current language will be stored in the language cookie.
Flask-Language is configurable via the following configuration variables:
LANGUAGE_COOKIE_NAME
: name for the cookie language (default:'lang'
)LANGUAGE_COOKIE_TIMEOUT
: validity duration of the cookie language (default:datetime.timedelta(days=365)
)LANGUAGE_COOKIE_DOMAIN
: domain for the cookie language (default:None
)LANGUAGE_COOKIE_SECURE
: set secure option for the cookie language (default:False
)LANGUAGE_COOKIE_HTTPONLY
: set HTTP-only for the cookie language (default:False
)
The Sphinx-compiled documentation is available on ReadTheDocs.
The MIT License (MIT)
Copyright (c) 2018 Romain Clement