Skip to main content

auto-i18n-lib

Автоматическая библиотека для перевода интерфейсов без ручного сбора строк.


Что содержит библиотека

  • Класс Translator – публичное API для рендеринга и управления переводом.
  • Воркер – фоновый процесс, который:
    • сканирует указанные файлы и папки (HTML, JS/JSX/TSX, UI-словари),
    • извлекает все тексты интерфейса,
    • переводит их через OpenAI,
    • сохраняет в JSON-кэш,
    • обновляет переводы при изменении кода.
  • Парсеры для HTML, JSX/TSX, UI-словарей (рекурсивный обход).
  • Клиентский рантайм – готовый JavaScript с функциями translateKey() и setLanguage() для динамического перевода DOM.
  • Storage – атомарное управление кэшем и очередями.

Что выполняет библиотека

  • В фоне – автоматически находит все строки в проекте, переводит на целевые языки, поддерживает кэш актуальным.
  • При рендеринге – методы translate_html, translate_dict, translate_key мгновенно отдают готовые переводы из локального кэша (без синхронных вызовов OpenAI).
  • На клиенте – смена языка подгружает новый JSON и перерисовывает интерфейс без перезагрузки страницы.

Быстрый старт

from autoi18n import Translator

t = Translator(
    api_key="YOUR_OPENAI_API_KEY",
    source_lang="ru",
    target_langs=["en", "uk", "az", "tr"],
    # Пути для сканирования
    js_globs=["frontend/src/**/*.{js,jsx,tsx}"],
    html_globs=["templates/**/*.html"],
)

# Запустить воркер (один раз или в фоновом потоке)
t.run_translation_loop(interval=300)  # каждые 5 минут

Поиск файлов для перевода (scan_paths)

Библиотека сама решает, какие файлы сканировать. Список путей собирается из трёх источников, в порядке приоритета:

  1. Аргумент scan_paths в конструкторе:

    t = Translator(scan_paths=[
        {"path": "frontend/src/**/*.{js,jsx,tsx}", "type": "js"},
        {"path": "backend/templates/**/*.html",     "type": "html"},
        {"path": "content/**/*",                    "type": "auto"},
    ])
    
  2. Env-переменная AUTO_I18N_SCAN_PATHS (JSON-массив) — если аргумент не задан:

    AUTO_I18N_SCAN_PATHS=[{"path":"/app/frontend_src/**/*.js","type":"js"},{"path":"/app/templates/**/*.html","type":"html"}]
    
  3. Стандартный набор путей (DEFAULT_SCAN_PATHS) — если ни аргумент, ни env не заданы:

    [
        {"path": "frontend/src/**/*.{js,jsx,tsx}",  "type": "js"},
        {"path": "src/**/*.{js,jsx,tsx}",           "type": "js"},
        {"path": "app/**/*.{js,jsx,tsx}",           "type": "js"},
        {"path": "templates/**/*.html",             "type": "html"},
        {"path": "app/templates/**/*.html",         "type": "html"},
        {"path": "backend/templates/**/*.html",     "type": "html"},
    ]
    

Типы файлов

type Что делает
js JS/JSX/TSX: только t('key', 'текст'), JSX-текст, JSX-атрибуты (label, placeholder, title, aria-label).
html HTML-шаблоны (Jinja/Django/FastAPI): видимый текст, атрибуты, а также <script> внутри — через JS-парсер.
auto По расширению: .html → HTML, .js/.jsx/.tsx/.ts → JS.

Когда что использовать

  • 0 конфига — если у вас стандартный проект (React в frontend/, Jinja в templates/), ничего указывать не надо.
  • Через .env — если на dev и prod пути разные (например, внутри контейнера /app/frontend_src вместо frontend/src). Env полностью заменяет дефолт.
  • Через аргумент — если пути нестандартные (content/, docs/, внешние папки).

Метод extract_keys()

Единая точка входа для обхода всех путей:

report = t.extract_keys()
# {'files': 28, 'extracted': 142, 'queued': 568}

Старый extract_js_keys(js_globs=[...]) сохранён для обратной совместимости.

Методы рендеринга

Метод Назначение
translate_html(html, target_lang, page_name) Переводит готовый HTML (текст и атрибуты).
translate_dict(page_name, dict_name, source_dict, target_lang) Переводит вложенный словарь (UI).
translate_key(key, lang, default, dict_name) Возвращает перевод бэкенд-фразы по ключу.
register_keys(items, dict_name) Регистрирует исходные бэкенд-фразы.
build_frontend_runtime(lang) Генерирует JS-рантайм для клиента.

Пример интеграции с React

  1. Настройте Translator с путями к вашему фронтенду.

  2. Запустите воркер – он сам найдёт все строки в компонентах (включая JSX-тексты, атрибуты, вызовы t()).

  3. Вставьте сгенерированный рантайм в index.html:

    <script>
    // Результат t.build_frontend_runtime('ru')
    </script>
    
  4. В компонентах используйте:

    // Любой текст, обёрнутый в translateKey, будет автоматически переведён
    <h1>{window.autoI18n.translateKey('dashboard_welcome', 'Добро пожаловать')}</h1>
    

    Или атрибут data-i18n="dashboard_welcome" на любом элементе.

  5. Переключение языка:

    window.autoI18n.setLanguage('en');
    

Переменные окружения

Переменная Описание
OPENAI_API_KEY Обязательный API‑ключ
SOURCE_LANG Исходный язык (по умолчанию ru)
AUTO_I18N_TARGET_LANGS Целевые языки через запятую
AUTO_I18N_JS_GLOBS Glob-паттерны для JS/JSX (JSON-массив)
AUTO_I18N_HTML_GLOBS Glob-паттерны для HTML
AUTO_I18N_CACHE_DIR Папка для кэша (по умолчанию ./cache)
AUTO_I18N_DYNAMIC_DOM_ENABLED Включить MutationObserver

Требования к доработке (ТЗ)

Чтобы библиотека работала полностью автоматически, необходимо:

  1. Улучшенный JSX-парсер – должен находить все текстовые узлы в JSX, атрибуты (label, placeholder, title, aria-label), вызовы t() и translateKey() в любом синтаксисе (включая шаблонные строки и переменные).
  2. Автоматическое обновление переводов – воркер должен пересканивать файлы при их изменении (watch mode) и переводить только новые/изменённые строки.
  3. Клиентский рантайм – должен уметь подгружать переводы по требованию (lazy loading) и работать с React без дополнительных обёрток.
  4. Поддержка динамических атрибутовdata-i18n должен работать для любых атрибутов, а не только для текста.

Лицензия

MIT

Release files for auto-i18n-lib 1.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for auto-i18n-lib 1.2.0
File Size Uploaded
auto_i18n_lib-1.2.0.tar.gz 24.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for auto-i18n-lib 1.2.0
File Interpreter ABI Platform
auto_i18n_lib-1.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 53.5 kB

Release files / auto_i18n_lib-1.2.0.tar.gz

Download URL auto_i18n_lib-1.2.0.tar.gz
Size 24.2 kB
Tags Source
SHA-256 checksum
How to use checksums
23f3a7c814755a9fccc7fea78e30aa97f524a85aa19f649800cd1b44a568fa73
BLAKE2b-256 checksum
How to use checksums
8572c484e15acc1d845037585dba7abc3b9d552f2629bc291c9c45135d3a58a7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.0

Release files / auto_i18n_lib-1.2.0-py3-none-any.whl

Download URL auto_i18n_lib-1.2.0-py3-none-any.whl
Size 29.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
71f2118d0ca1f7dab2987c902d70d79d19531942ad3246f046f60002c1f050a3
BLAKE2b-256 checksum
How to use checksums
661ae09da037c720da56c0b2e862475d3f8689650970a96637ad4cd4765bcfaf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.0

Release history Release notifications | RSS feed

2.1.1

2 release files

2.0.9

2 release files

2.0.8

2 release files

2.0.7

2 release files

2.0.6

2 release files

2.0.5

2 release files

2.0.4

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

This release

1.2.0 This release

2 release files

1.1.9

2 release files

1.1.8

2 release files

1.1.7

2 release files

1.1.6

2 release files

1.1.5

2 release files

1.1.4

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page