CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-flask-babel

Adds i18n/l10n support for Flask applications.

Pending
Overview
Eval results
Files

configuration.mddocs/

Application Configuration

Configuration and setup of Flask-Babel for Flask applications, including the main Babel class, domain management, and context utilities.

Types

from typing import List, Optional, Callable, Union
from babel import Locale
from babel.support import Translations, NullTranslations
from pytz import timezone
from werkzeug.datastructures import ImmutableDict

Capabilities

Main Babel Class

The central controller class for configuring Flask-Babel behavior in Flask applications.

class Babel:
    def __init__(self, app=None, date_formats=None, configure_jinja=True, *args, **kwargs):
        """
        Creates a new Babel instance.
        
        Parameters:
        - app: Flask application instance (optional)
        - date_formats: Custom date format mappings (optional)
        - configure_jinja: Whether to configure Jinja2 filters automatically (default: True)
        """
    
    def init_app(self, app, default_locale='en', default_domain='messages',
                 default_translation_directories='translations', default_timezone='UTC',
                 locale_selector=None, timezone_selector=None):
        """
        Initialize Babel for a specific Flask application.
        
        Parameters:
        - app: Flask application to configure
        - default_locale: Default locale string (default: 'en')
        - default_domain: Default message domain (default: 'messages')
        - default_translation_directories: Translation directories (default: 'translations')
        - default_timezone: Default timezone string (default: 'UTC')
        - locale_selector: Function to select locale for requests (optional)
        - timezone_selector: Function to select timezone for requests (optional)
        """
    
    def list_translations(self):
        """
        Returns list of all locales that have translations.
        
        Returns:
        List of babel.Locale objects for available translations
        """
    
    @property
    def default_locale(self):
        """Default locale as babel.Locale object"""
    
    @property
    def default_timezone(self):
        """Default timezone as pytz.timezone object"""
    
    @property
    def domain(self):
        """Message domain as string"""
    
    @property
    def domain_instance(self):
        """Domain instance for this Babel configuration"""
    
    default_date_formats: ImmutableDict
        """
        Default date format mappings for datetime formatting.
        
        Contains format defaults for datetime, date, time formatting including
        short, medium, long, and full format variants.
        """

Domain Management

Manage translation domains for organizing message catalogs.

class Domain:
    def __init__(self, translation_directories=None, domain='messages'):
        """
        Create a localization domain.
        
        Parameters:
        - translation_directories: List of directories containing translations
        - domain: Domain name string (default: 'messages')
        """
    
    def as_default(self):
        """Set this domain as default for current request"""
    
    def gettext(self, string, **variables):
        """Translate string in this domain"""
    
    def ngettext(self, singular, plural, num, **variables):
        """Translate plural string in this domain"""
    
    def pgettext(self, context, string, **variables):
        """Translate string with context in this domain"""
    
    def lazy_gettext(self, string, **variables):
        """Return lazy-evaluated translation in this domain"""
    
    def lazy_ngettext(self, singular, plural, num, **variables):
        """Return lazy-evaluated plural translation in this domain"""
    
    def npgettext(self, context, singular, plural, num, **variables):
        """Translate string with context and plural forms in this domain"""
    
    def get_translations(self):
        """
        Get translations object for this domain.
        
        Returns:
        babel.support.Translations or NullTranslations object
        """
    
    def get_translations_cache(self, ctx):
        """
        Get translations cache for this domain.
        
        Parameters:
        - ctx: Request context
        
        Returns:
        Dictionary-like cache object
        """
    
    @property
    def translation_directories(self):
        """List of translation directories for this domain"""

Context and Configuration Access

Access current configuration and context information.

def get_babel(app=None):
    """
    Get BabelConfiguration for app.
    
    Parameters:
    - app: Flask app (optional, uses current_app if None)
    
    Returns:
    BabelConfiguration instance
    """

def get_locale():
    """
    Get current locale for request.
    
    Returns:
    babel.Locale object or None if outside request context
    """

def get_timezone():
    """
    Get current timezone for request.
    
    Returns:
    pytz.timezone object or None if outside request context
    """

def get_domain():
    """
    Get current Domain instance.
    
    Returns:
    Domain object for current request
    """

def refresh():
    """
    Refresh cached locale and timezone information.
    Useful when changing locale/timezone mid-request.
    """

Context Management

Temporarily override locale settings.

def force_locale(locale):
    """
    Context manager to temporarily override locale.
    
    Parameters:
    - locale: Locale string (e.g., 'en_US', 'de_DE')
    
    Usage:
    with force_locale('de_DE'):
        message = gettext('Hello')  # Returns German translation
    """

Configuration Data Classes

Internal configuration structures.

@dataclass
class BabelConfiguration:
    """Application-specific Babel configuration"""
    default_locale: str
    default_timezone: str
    default_domain: str
    default_directories: List[str]
    translation_directories: List[str]
    instance: Babel
    locale_selector: Optional[Callable] = None
    timezone_selector: Optional[Callable] = None

Usage Examples

Application Factory Pattern

from flask import Flask
from flask_babel import Babel

babel = Babel()

def create_app():
    app = Flask(__name__)
    app.config['BABEL_DEFAULT_LOCALE'] = 'en'
    
    babel.init_app(app)
    return app

Custom Locale Selector

from flask import request
from flask_babel import Babel

app = Flask(__name__)

@babel.localeselector
def get_locale():
    # Check URL parameter first
    if 'lang' in request.args:
        return request.args['lang']
    # Fall back to browser preference
    return request.accept_languages.best_match(['en', 'es', 'fr', 'de'])

Multiple Domains

from flask_babel import Domain

# Create domains for different parts of application
admin_domain = Domain(domain='admin')
user_domain = Domain(domain='user')

# Use specific domain
admin_message = admin_domain.gettext('Admin Dashboard')
user_message = user_domain.gettext('Welcome')

Install with Tessl CLI

npx tessl i tessl/pypi-flask-babel

docs

configuration.md

formatting.md

index.md

translation.md

tile.json