feat: restructure menu and add file import

- Consolidate "Add word" menu with submenu (Manual, Thematic, Import)
- Add file import support (.txt, .md) with AI batch translation
- Add vocabulary pagination with navigation buttons
- Add "Add word" button in tasks for new words mode
- Fix undefined variables bug in vocabulary confirm handler
- Add localization keys for add_menu in ru/en/ja

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-05 20:15:47 +03:00
parent 2097950c60
commit 63e2615243
12 changed files with 883 additions and 47 deletions

View File

@@ -5,15 +5,32 @@
"task": "🧠 Задание",
"practice": "💬 Практика",
"words": "🎯 Тематические слова",
"import": "📖 Импорт из текста",
"import": "📖 Импорт",
"stats": "📊 Статистика",
"settings": "⚙️ Настройки",
"below": "Главное меню доступно ниже ⤵️"
},
"add_menu": {
"title": " <b>Добавление слов</b>\n\nВыберите способ:",
"manual": "📝 Вручную",
"thematic": "🎯 Тематические слова",
"import": "📖 Импорт"
},
"import_menu": {
"title": "📖 <b>Импорт слов</b>\n\nВыберите способ импорта:",
"from_text": "📝 Из текста",
"from_file": "📄 Из файла (.txt, .md)",
"file_hint": "📄 <b>Импорт из файла</b>\n\nОтправьте файл .txt или .md с вашими словами.\n\n<b>Форматы:</b>\n• По одному слову на строку (AI переведёт)\n• <code>слово - перевод</code>\n• <code>слово : перевод</code>"
},
"common": {
"start_first": "Сначала запусти бота командой /start",
"translation": "Перевод"
},
"lang": {
"ru": "русский",
"en": "английский",
"ja": "японский"
},
"import": {
"title": "📖 <b>Импорт слов из текста</b>",
"desc": "Отправь мне текст на выбранном языке обучения, и я извлеку из него полезные слова для изучения.",
@@ -56,7 +73,9 @@
"header": "<b>📚 Твой словарь:</b>",
"accuracy_inline": "({n}% точность)",
"shown_last": "<i>Показаны последние 10 из {n} слов</i>",
"total": "<i>Всего слов: {n}</i>"
"total": "<i>Всего слов: {n}</i>",
"page_info": "\n📖 Страница {page} из {total} • Всего слов: {count}",
"close_btn": "❌ Закрыть"
},
"practice": {
"start_text": "💬 <b>Диалоговая практика с AI</b>\n\nВыбери сценарий для разговора:\n\n• AI будет играть роль собеседника\n• Ты можешь общаться на английском\n• AI будет исправлять твои ошибки\n• Используй /stop для завершения диалога\n\nВыбери сценарий:",
@@ -92,6 +111,12 @@
"go_words_hint": "Используй /words [тема] для подборки слов"
},
"tasks": {
"choose_mode": "🧠 <b>Выбери режим заданий:</b>",
"mode_vocabulary": "📚 Слова из словаря",
"mode_new_words": "✨ Новые слова",
"generating_new": "🔄 Генерирую новые слова...",
"generate_failed": "❌ Не удалось сгенерировать слова. Попробуй позже.",
"translate_to": "Переведи на {lang_name}",
"no_words": "📚 У тебя пока нет слов для практики!\n\nДобавь несколько слов командой /add, а затем возвращайся.",
"stopped": "Задания остановлены. Используй /task, чтобы начать заново.",
"finished": "Задания завершены. Используй /task, чтобы начать заново.",
@@ -104,6 +129,9 @@
"right_answer": "Правильный ответ",
"next_btn": "➡️ Следующее задание",
"stop_btn": "🔚 Завершить",
"add_word_btn": " Добавить слово",
"word_added": "✅ Слово '{word}' добавлено в словарь!",
"word_already_exists": "Слово '{word}' уже в словаре",
"cancelled": "Отменено. Можешь вернуться к заданиям командой /task.",
"finish_title": "{emoji} <b>Задание завершено!</b>",
"correct_of": "Правильных ответов: <b>{correct}</b> из {total}",
@@ -219,6 +247,18 @@
"import_extra": {
"cancelled": "❌ Импорт отменён."
},
"import_file": {
"unsupported_format": "❌ Неподдерживаемый формат файла.\n\nПоддерживаются: .txt, .md\n\nФормат файла:\n<code>слово - перевод</code>\n<code>слово : перевод</code>",
"too_large": "❌ Файл слишком большой (макс. 1 МБ)",
"encoding_error": "❌ Ошибка кодировки. Убедитесь, что файл в UTF-8",
"download_error": "❌ Не удалось загрузить файл. Попробуйте ещё раз",
"no_words_found": "❌ Не найдено слов в файле.\n\nУбедитесь, что формат правильный:\n<code>слово - перевод</code>\n<code>слово : перевод</code>",
"truncated": "⚠️ Файл содержит больше {n} слов. Импортируем первые {n}.",
"found_header": "📄 <b>Найдено слов в файле: {n}</b>",
"choose_action": "Выберите действие:",
"add_all_btn": "✅ Добавить все ({n})",
"translating": "🔄 Перевожу слова через AI..."
},
"level_test_extra": {
"generating": "🔄 Генерирую вопросы...",
"generate_failed": "❌ Не удалось сгенерировать тест. Попробуй позже или используй /settings для ручной установки уровня.",