0
# Flask-Babel
1
2
Flask-Babel provides internationalization (i18n) and localization (l10n) support for Flask web applications. Built on top of Python Babel and pytz libraries, it enables developers to create multi-language Flask applications with utilities for message translation, date/time formatting, number formatting, and locale-aware content rendering.
3
4
## Package Information
5
6
- **Package Name**: flask-babel
7
- **Language**: Python
8
- **Installation**: `pip install flask-babel`
9
10
## Core Imports
11
12
```python
13
from flask_babel import Babel, gettext, ngettext, format_datetime
14
```
15
16
Common pattern for Flask applications:
17
18
```python
19
from flask_babel import Babel
20
from flask_babel import gettext as _, ngettext, lazy_gettext
21
```
22
23
## Basic Usage
24
25
```python
26
from flask import Flask
27
from flask_babel import Babel, gettext, ngettext, get_locale
28
29
app = Flask(__name__)
30
app.config['BABEL_DEFAULT_LOCALE'] = 'en'
31
app.config['BABEL_DEFAULT_TIMEZONE'] = 'UTC'
32
33
babel = Babel(app)
34
35
@babel.localeselector
36
def get_locale():
37
return request.accept_languages.best_match(['en', 'es', 'fr'])
38
39
@app.route('/')
40
def index():
41
# Simple translation
42
message = gettext('Hello World!')
43
44
# Plural translation
45
count = 5
46
plural_message = ngettext(
47
'%(num)d item found',
48
'%(num)d items found',
49
count
50
)
51
52
# Date formatting
53
from datetime import datetime
54
from flask_babel import format_datetime
55
now = datetime.utcnow()
56
formatted_date = format_datetime(now, 'medium')
57
58
return f"{message}<br>{plural_message}<br>{formatted_date}"
59
```
60
61
## Architecture
62
63
Flask-Babel integrates with Flask's application context and provides:
64
65
- **Babel**: Main configuration class that initializes i18n support
66
- **Domain**: Manages translation catalogs and message domains
67
- **Context Integration**: Automatic locale detection and timezone handling via Flask's request context
68
- **Lazy Evaluation**: LazyString objects for translations that resolve at render time
69
- **Jinja2 Integration**: Automatic template filters and functions for formatting
70
71
## Capabilities
72
73
### Application Configuration
74
75
Initialize and configure Flask-Babel for your Flask application with locale selectors, timezone handling, and translation directory management.
76
77
```python { .api }
78
class Babel:
79
def __init__(self, app=None, date_formats=None, configure_jinja=True, *args, **kwargs): ...
80
def init_app(self, app, default_locale='en', default_domain='messages',
81
default_translation_directories='translations', default_timezone='UTC',
82
locale_selector=None, timezone_selector=None): ...
83
def list_translations(self): ...
84
```
85
86
[Configuration](./configuration.md)
87
88
### Translation Functions
89
90
Translate strings with support for pluralization, context, and lazy evaluation. Includes immediate and lazy translation functions for different use cases.
91
92
```python { .api }
93
def gettext(string, **variables): ...
94
def ngettext(singular, plural, num, **variables): ...
95
def pgettext(context, string, **variables): ...
96
def lazy_gettext(string, **variables): ...
97
def lazy_ngettext(singular, plural, num, **variables): ...
98
```
99
100
[Translation](./translation.md)
101
102
### Date, Time, and Number Formatting
103
104
Format dates, times, numbers, and currencies according to the current locale with support for custom formats and timezone conversion.
105
106
```python { .api }
107
def format_datetime(datetime=None, format=None, rebase=True): ...
108
def format_date(date=None, format=None, rebase=True): ...
109
def format_time(time=None, format=None, rebase=True): ...
110
def format_currency(number, currency, format=None, currency_digits=True, format_type='standard'): ...
111
def format_number(number): ...
112
```
113
114
[Formatting](./formatting.md)