Веб-приложение для перевода Word-документов с русского на английский (и между любыми языками) через Groq API, с полным сохранением форматирования.
- ✅ Inline-стили (жирный, курсив, подчёркивание, цвет шрифта, размер)
- ✅ Таблицы (включая вложенные)
- ✅ Картинки и их расположение
- ✅ Колонтитулы (хедеры и футеры)
- ✅ Стили параграфов (заголовки, списки, отступы)
- ✅ Нумерация страниц, поля, ориентация
Ключевая идея — перевод на уровне runs (ранов). Каждый параграф в .docx состоит из ранов, где каждый хранит своё форматирование. Приложение:
- Извлекает текст из каждого рана
- Отправляет массив фрагментов в Groq API как JSON-массив
- Получает обратно массив той же длины с переводами
- Записывает переведённый текст обратно в раны, не трогая XML-атрибуты форматирования
Картинки остаются нетронутыми — они хранятся как бинарные части в .docx архиве.
# Клонировать/скачать проект
cd docx-translator
# Создать виртуальное окружение
python -m venv .venv
source .venv/bin/activate # Linux/Mac
# .venv\Scripts\activate # Windows
# Установить зависимости
pip install -r requirements.txt# Вариант 1: API-ключ через переменную окружения
export GROQ_API_KEY="gsk_..."
python app.py
# Вариант 2: ввести ключ через веб-интерфейс
python app.pyОткрыть в браузере: http://localhost:5000
| Переменная | По умолчанию | Описание |
|---|---|---|
GROQ_API_KEY |
— | API-ключ Groq |
GROQ_MODEL |
llama-3.3-70b-versatile |
Модель для перевода |
PORT |
5000 |
Порт веб-сервера |
FLASK_DEBUG |
0 |
Режим отладки (1 = вкл.) |
SECRET_KEY |
встроенный | Секрет Flask-сессий |
- Зарегистрироваться на console.groq.com
- Перейти в API Keys → Create API Key
- Скопировать ключ (
gsk_...)
Бесплатный тариф: ~30 req/min, 14,400 req/day — хватает для документов до ~50 страниц.
| Модель | Качество | Скорость | Когда использовать |
|---|---|---|---|
| Llama 3.3 70B | ⭐⭐⭐⭐⭐ | ⚡⚡⚡ | Основной выбор |
| DeepSeek R1 70B | ⭐⭐⭐⭐⭐ | ⚡⚡ | Сложные тексты |
| Mixtral 8x7B | ⭐⭐⭐⭐ | ⚡⚡⚡⚡ | Баланс цена/качество |
| Llama 3.1 8B | ⭐⭐⭐ | ⚡⚡⚡⚡⚡ | Быстрый черновик |
- Текст внутри встроенных объектов (SmartArt, диаграммы) не переводится
- Текст на картинках не переводится (нужен OCR)
- Очень длинные параграфы могут упираться в лимит токенов модели
- Синхронная обработка — большие документы блокируют сервер (для продакшена нужен Celery/RQ)