Skip to main content

Flask extension handling client-side language cookie

Project description

Flask-Language

PyPI Version PyPI License PyPI Versions Build Status Coverage Status Documentation Status

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

Installation

Install the extension with with pipenv (recommended):

$ pipenv install flask-language

Or with pip:

$ pip install flask-language

Usage

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:

  1. The language cookie (if any and matching the allowed languages)

  2. The Accept-Language HTTP header (if any and matching the allowed languages)

  3. 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.

Configuration

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)

Documentation

The Sphinx-compiled documentation is available on ReadTheDocs.

License

The MIT License (MIT)

Copyright (c) 2018 Romain Clement

Release History

0.1.0 (2018-03-07)

  • Initial release of Flask-Language

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

Flask-Language-0.1.0.tar.gz (9.2 kB view details)

Uploaded Source

File details

Details for the file Flask-Language-0.1.0.tar.gz.

File metadata

File hashes

Hashes for Flask-Language-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ff843fe5ff16095bc99923ecd958005fe52e743584e1679a3af95d7ee11b3736
MD5 cfce48a5bce81b5c23def63a04213157
BLAKE2b-256 a608e6ebf39e488ad5bc72f8f65a069b5bc9ce3f02cbb3a8cf364d0f62c9eca7

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