Skip to content

I18n — Продвинутая локализация

Система локализации в codex-bot построена на базе Project Fluent и предоставляет инструменты для удобного управления переводами в сложных многомодульных проектах.


💎 Ключевые преимущества

1. Децентрализованное хранение

В отличие от классических систем, где все переводы лежат в одном огромном файле, codex-bot позволяет разбивать их на множество мелких .ftl файлов. Вы можете держать переводы прямо внутри папок с фичами, что упрощает поддержку кода.

2. Изоляция локалей (Path Hashing)

При запуске бота движок выполняет автоматическую компиляцию всех найденных файлов в одну временную директорию. - Механика: Путь к временной папке формируется как MD5(абсолютный_путь_к_проекту). - Зачем это нужно: Это гарантирует, что если на одном сервере запущено несколько разных ботов, они не будут конфликтовать и перезаписывать переводы друг друга в системной /tmp папке.

3. Автоматическая компиляция

Вам не нужно вручную запускать скрипты сборки. Метод compile_locales() вызывается автоматически при инициализации бота, собирая все разрозненные .ftl файлы в единые словари для каждого языка.


✍️ Как использовать

Определение переводов

Создайте файл greeting.ftl в папке вашей фичи:

# greeting.ftl
hello-user = Привет, {$name}! Добро пожаловать.

Использование в коде

Благодаря I18nMiddleware, объект для работы с переводами доступен глобально или через контекст:

# В оркестраторе или хендлере
from aiogram_i18n import I18nContext

async def render_content(self, payload, director: Director):
    i18n: I18nContext = director.container.i18n # или через контекст запроса
    text = i18n.get("hello-user", name="Alice")

    return ViewResultDTO(text=text)

⚙️ Настройка в проекте

В файле core/factory.py происходит связка компилятора и мидлвари:

from codex_bot.engine.i18n import compile_locales

# 1. Собираем все локали в изолированную папку
locales_path = compile_locales(pathlib.Path("resources/locales"))

# 2. Подключаем к aiogram
i18n_middleware = I18nMiddleware(
    core=FluentRuntimeCore(path=locales_path),
    manager=FSMContextI18nManager(),
)

🧭 Связанные разделы

  • Middlewares — подключение i18n в конвейер обработки.
  • API: Locales Compiler — технические детали процесса сборки.