Metadata-Version: 2.4
Name: auto-i18n-lib
Version: 1.0.1
Summary: Post-render HTML and frontend UI dictionary translation for Python projects with OpenAI-backed caching
Author-email: Andrey Bondarenko <bona.plus2030@gmail.com>
License: MIT
Project-URL: Homepage, https://bona-plus.ru
Project-URL: Source, https://github.com/Aalam2000/autoi18n
Project-URL: Issues, https://github.com/Aalam2000/autoi18n/issues
Keywords: i18n,l10n,translation,html,fastapi,flask,jinja2,openai
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Text Processing :: Linguistic
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: openai>=1.0.0
Dynamic: license-file


# auto-i18n-lib

Библиотека для перевода HTML, UI-словарей и бэкенд-фраз без синхронных вызовов OpenAI во время рендеринга.

---

## Установка

```bash
pip install auto-i18n-lib


Требуется Python 3.9+ и `OPENAI_API_KEY`.

---

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

```python
from autoi18n import Translator

t = Translator(
    cache_dir="./translations",
    source_lang="ru",
    target_langs=["en", "az", "tr"],
)
```

---

## Методы

| Метод | Что делает |
|-------|------------|
| `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)` | Регистрирует исходные бэкенд-фразы. |
| `process_all_translations(batch_size=50)` | Обрабатывает все очереди (воркер). |
| `run_translation_loop(interval, batch_size)` | Запускает фоновый цикл обработки. |
| `extract_js_keys(js_globs, namespace)` | Извлекает строки из JS/JSX и ставит в очередь. |
| `build_frontend_runtime(lang, namespace)` | Генерирует JS-рантайм для клиента. |

---

## Примеры

### HTML

```python
html = "<h1>Главная</h1><button>Сохранить</button>"
translated = t.translate_html(html, "en", "home")
```

### UI-словарь

```python
ui = {"title": "Грузы", "filters": {"search": "Поиск"}}
translated_ui = t.translate_dict("cargo", "table", ui, "en")
```

### Бэкенд-ключи

```python
t.register_keys({"bot.welcome": "Добро пожаловать"}, dict_name="bot")
text = t.translate_key("bot.welcome", "en", "Добро пожаловать", "bot")
```

### React/JS

```python
# Извлечь строки из кода
t.extract_js_keys(js_globs=["src/**/*.{js,jsx,tsx}"])
# Обработать очередь
t.process_all_translations()
# Сгенерировать рантайм
script = t.build_frontend_runtime("en")
```

В браузере:
```js
window.autoI18n.translateKey('ui.title', 'Заголовок')
```

---

## Структура кэша

```
translations/
  en.json               # общий кэш
  _pending.json         # очередь
  backend/
    bot.en.json         # бэкенд-словари
    _pending_bot.json
```

---

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

- `OPENAI_API_KEY` – обязательный
- `SOURCE_LANG` – исходный язык (по умолчанию `ru`)
- `AUTO_I18N_TARGET_LANGS` – список целевых языков через запятую
- `AUTO_I18N_JS_SCAN_ENABLED` – включить сканирование JS
- `AUTO_I18N_JS_GLOBS` – JSON-массив glob-паттернов
- `AUTO_I18N_DYNAMIC_DOM_ENABLED` – включить MutationObserver

---

## Лицензия

MIT
```
