i18n — Internationalization engine
Tools for bot localization and translation management.
Locales Compiler
Utility for automated collection and merging of .ftl files from feature directories.
compile_locales(features_path)
Discovers and compiles .ftl files from features into an isolated tmp directory.
Algorithm:
1. Scans features_path for any subdirectories named locales.
2. Inside each locales, finds language folders (e.g., ru, en).
3. Merges all *.ftl files for each language into a single messages.ftl.
4. Places results in /tmp/bot_locales_{hash}/{locale}/messages.ftl.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
features_path
|
Path
|
Root path to the features directory (e.g. src/my_bot/features). |
required |
Returns:
| Type | Description |
|---|---|
str
|
Path template string for FluentRuntimeCore: |
Source code in src/codex_bot/engine/i18n/locales_compiler.py
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | |
Middlewares
FSMContextI18nManager
Bases: BaseManager
Language manager via FSM storage (Redis).
Locale determination priority: 1. FSM storage (key "locale") — user explicitly selected a language. 2. Telegram language_code — if it's in the allowed_locales list. 3. default_locale — fallback.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
allowed_locales
|
list[str] | None
|
List of allowed language codes (e.g., ["ru", "en", "de"]). |
None
|
default_locale
|
str
|
Default language if nothing matches. |
'en'
|
Example
from aiogram_i18n import I18nMiddleware
from aiogram_i18n.cores import FluentRuntimeCore
i18n = I18nMiddleware(
core=FluentRuntimeCore(path="locales/{locale}"),
manager=FSMContextI18nManager(allowed_locales=["ru", "en"], default_locale="en"),
default_locale="en",
)
i18n.setup(dp)
Source code in src/codex_bot/engine/middlewares/i18n.py
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | |
Functions
get_locale(event_from_user=None, **kwargs)
async
Determines the user's current locale.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
event_from_user
|
User | None
|
Telegram user. |
None
|
**kwargs
|
Any
|
aiogram-i18n context (includes "state"). |
{}
|
Returns:
| Type | Description |
|---|---|
str
|
String locale code (e.g., "ru"). |
Source code in src/codex_bot/engine/middlewares/i18n.py
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | |
set_locale(locale, **kwargs)
async
Saves the selected locale to FSM.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
locale
|
str
|
Language code to save. |
required |
**kwargs
|
Any
|
Context (includes "state"). |
{}
|
Source code in src/codex_bot/engine/middlewares/i18n.py
81 82 83 84 85 86 87 88 89 90 91 | |