Files
tg_bot_language/locales/ru.json
mamonov.ep eb666ec9bc feat: мульти-провайдер AI, выбор типов заданий, настройка количества
- Добавлена поддержка нескольких AI провайдеров (OpenAI, Google Gemini)
- Добавлена админ-панель (/admin) для переключения AI моделей
- Добавлен AIModelService для управления моделями в БД
- Добавлен выбор типа заданий (микс, перевод слов, подстановка, перевод предложений)
- Добавлена настройка количества заданий (5-15)
- ai_service динамически выбирает провайдера на основе активной модели
- Обработка ограничений моделей (temperature, response_format)
- Очистка markdown обёртки из ответов Gemini

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-08 15:16:24 +03:00

335 lines
26 KiB
JSON
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"menu": {
"add": " Добавить слово",
"vocab": "📚 Словарь",
"task": "🧠 Задание",
"practice": "💬 Практика",
"words": "🎯 Тематические слова",
"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": "Отправь мне текст на выбранном языке обучения, и я извлеку из него полезные слова для изучения.",
"can_send": "Можно отправить:\n• Отрывок из книги или статьи\n• Текст песни\n• Описание чего-либо\n• Любой интересный текст",
"cancel_hint": "Отправь /cancel для отмены.",
"too_short": "⚠️ Текст слишком короткий. Отправь текст минимум из 50 символов.\nИли используй /cancel для отмены.",
"too_long": "⚠️ Текст слишком длинный (максимум 3000 символов).\nОтправь текст покороче или используй /cancel для отмены.",
"processing": "🔄 Анализирую текст и извлекаю слова...",
"failed": "❌ Не удалось извлечь слова из текста. Попробуй другой текст или повтори позже.",
"found_header": "📚 <b>Найдено слов: {n}</b>",
"added_single": "✅ Слово '{word}' добавлено в словарь",
"added_count": "✅ Добавлено слов: <b>{n}</b>",
"skipped_count": "⚠️ Пропущено (уже в словаре): {n}"
},
"start": {
"new_intro": "👋 Привет, {first_name}!\n\nЯ бот для изучения английского языка. Помогу тебе:\n📚 Пополнять словарный запас (ручное/тематическое/из текста)\n✍ Выполнять интерактивные задания\n💬 Практиковать язык в диалоге с AI\n📊 Отслеживать свой прогресс\n\n<b>Команды:</b>\n• /add [слово] - добавить слово\n• /words [тема] - тематическая подборка\n• /import - импорт из текста\n• /vocabulary - мой словарь\n• /task - задания\n• /practice - диалог с AI\n• /stats - статистика\n• /settings - настройки\n• /reminder - напоминания\n• /help - полная справка",
"offer_test": "🎯 <b>Определим твой уровень?</b>\n\nКороткий тест (7 вопросов) поможет подобрать задания под твой уровень.\nЭто займёт 2-3 минуты.\n\nИли можешь пропустить и установить уровень вручную позже в /settings",
"return": "С возвращением, {first_name}! 👋\n\nГотов продолжить обучение?\n\n<b>Быстрый доступ:</b>\n• /vocabulary - посмотреть словарь\n• /task - получить задание\n• /practice - практика диалога\n• /words [тема] - тематическая подборка\n• /stats - статистика\n• /help - все команды",
"help": "<b>📖 Справка по командам:</b>\n\n<b>Управление словарём:</b>\n• /add [слово] - добавить слово в словарь\n• /vocabulary - просмотр словаря\n• /words [тема] - тематическая подборка слов\n• /import - импортировать слова из текста\n\n<b>Обучение:</b>\n• /task - задание (перевод, заполнение пропусков)\n• /practice - диалог с ИИ (6 сценариев)\n• /level_test - тест определения уровня\n\n<b>Статистика:</b>\n• /stats - твой прогресс\n\n<b>Настройки:</b>\n• /settings - уровень и язык\n• /reminder - ежедневные напоминания\n\n💡 Ты также можешь просто отправить мне слово, и я предложу добавить его в словарь!",
"offer_btn": "📊 Пройти тест уровня",
"skip_btn": "➡️ Пропустить",
"skip_msg": "✅ Хорошо!\n\nТы можешь пройти тест позже командой /level_test\nили установить уровень вручную в /settings\n\nДавай начнём! Попробуй:\n• /words travel - тематическая подборка\n• /practice - диалог с AI\n• /add hello - добавить слово"
},
"add": {
"prompt": "Отправь слово, которое хочешь добавить:\nНапример: <code>/add elephant</code>\n\nИли просто отправь слово без команды!",
"searching": "⏳ Ищу перевод и примеры...",
"examples_header": "<b>Примеры:</b>",
"translations_header": "<b>Переводы:</b>",
"translation_label": "Перевод",
"category_label": "Категория",
"level_label": "Уровень",
"confirm_question": "Добавить это слово в словарь?",
"btn_add": "✅ Добавить",
"btn_cancel": "❌ Отмена",
"exists": "Слово '<b>{word}</b>' уже есть в твоём словаре!\nПеревод: {translation}",
"added_success": "✅ Слово '<b>{word}</b>' добавлено!\n\nВсего слов в словаре: {count}\n\nПродолжай добавлять новые слова или используй /task для практики!",
"cancelled": "Отменено. Можешь добавить другое слово командой /add"
},
"vocab": {
"empty": "📚 Твой словарь пока пуст!\n\nДобавь первое слово командой /add или просто отправь мне слово.",
"header": "<b>📚 Твой словарь:</b>",
"accuracy_inline": "({n}% точность)",
"shown_last": "<i>Показаны последние 10 из {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Выбери сценарий:",
"hints": "💡 <b>Подсказки:</b>",
"write_or_stop": "\n📝 Напиши свой ответ на английском или используй /stop для завершения",
"show_translation_btn": "👁️ Показать перевод",
"stop_btn": "🔚 Завершить диалог",
"scenario": {
"restaurant": "🍽️ Ресторан",
"shopping": "🛍️ Магазин",
"travel": "✈️ Путешествие",
"work": "💼 Работа",
"doctor": "🏥 Врач",
"casual": "💬 Общение"
},
"thinking_prepare": "🤔 AI готовится к диалогу...",
"empty_prompt": "Напиши что-нибудь на языке обучения или используй /stop для завершения",
"thinking": "🤔 AI думает...",
"corrections": "<b>Исправления:</b>",
"end_title": "✅ <b>Диалог завершён!</b>",
"end_exchanged": "Сообщений обменено: <b>{n}</b>",
"end_keep": "Отличная работа! Продолжай практиковаться.",
"end_hint": "Используй /practice для нового диалога.",
"translation_unavailable": "Перевод недоступен",
"translation_already": "Перевод уже показан",
"custom_scenario_btn": "✏️ Свой сценарий",
"custom_scenario_prompt": "✏️ <b>Опиши свой сценарий</b>\n\nНапиши тему или ситуацию для разговора.\n\nПримеры:\n• Собеседование на работу программистом\n• Заказ пиццы по телефону\n• Обсуждение фильма с другом\n• Планирование путешествия в Японию",
"custom_scenario_too_short": "⚠️ Слишком короткое описание. Напиши хотя бы несколько слов о сценарии.",
"new_practice_btn": "🔄 Новый диалог",
"to_tasks_btn": "🧠 Задания",
"to_words_btn": "🎯 Слова",
"go_tasks_hint": "Используй /task для тренировки слов",
"go_words_hint": "Используй /words [тема] для подборки слов"
},
"tasks": {
"choose_mode": "🧠 <b>Выбери режим заданий:</b>",
"mode_vocabulary": "📚 Слова из словаря",
"mode_new_words": "✨ Новые слова",
"choose_type": "📋 <b>Выбери тип заданий:</b>",
"type_mix": "🎲 Микс (все типы)",
"type_word_translate": "📝 Перевод слов",
"type_fill_blank": "✏️ Подстановка слова",
"type_sentence_translate": "📖 Перевод предложений",
"generating_new": "🔄 Генерирую новые слова...",
"generate_failed": "❌ Не удалось сгенерировать слова. Попробуй позже.",
"translate_to": "Переведи на {lang_name}",
"no_words": "📚 У тебя пока нет слов для практики!\n\nДобавь несколько слов командой /add, а затем возвращайся.",
"stopped": "Задания остановлены. Используй /task, чтобы начать заново.",
"finished": "Задания завершены. Используй /task, чтобы начать заново.",
"header": "📝 <b>Задание {i} из {n}</b>",
"write_answer": "\n💡 Напиши свой ответ:",
"checking": "⏳ Проверяю ответ...",
"correct": "✅ <b>Правильно!</b>",
"incorrect": "❌ <b>Неправильно</b>",
"your_answer": "Твой ответ",
"right_answer": "Правильный ответ",
"next_btn": "➡️ Следующее задание",
"stop_btn": "🔚 Завершить",
"add_word_btn": " Добавить слово",
"word_added": "✅ Слово '{word}' добавлено в словарь!",
"word_already_exists": "Слово '{word}' уже в словаре",
"example_label": "Пример",
"cancelled": "Отменено. Можешь вернуться к заданиям командой /task.",
"finish_title": "{emoji} <b>Задание завершено!</b>",
"correct_of": "Правильных ответов: <b>{correct}</b> из {total}",
"accuracy": "Точность: <b>{accuracy}%</b>",
"use_task": "Используй /task для нового задания",
"use_stats": "Используй /stats для просмотра статистики",
"comment": {
"excellent": "Отличный результат!",
"good": "Хорошая работа!",
"average": "Неплохо, продолжай практиковаться!",
"poor": "Повтори эти слова еще раз!"
}
},
"reminder": {
"title": "⏰ <b>Напоминания</b>",
"status_on": "✅ Включены",
"status_off": "❌ Выключены",
"time_not_set": "Не установлено",
"status_line": "Статус: {status}",
"time_line": "Время: {time} UTC",
"desc1": "Напоминания помогут не забывать о ежедневной практике.",
"desc2": "Бот будет присылать сообщение в выбранное время каждый день.",
"btn_enable": "✅ Включить",
"btn_disable": "❌ Выключить",
"btn_change_time": "⏰ Изменить время",
"set_time_first": "Сначала установи время напоминаний!",
"enabled_toast": "✅ Напоминания включены!",
"enabled_title": "✅ <b>Напоминания включены!</b>",
"enabled_desc": "Ты будешь получать ежедневные напоминания о практике.",
"disabled_toast": "❌ Напоминания выключены",
"disabled_title": "❌ <b>Напоминания выключены</b>",
"disabled_desc": "Используй /reminder чтобы включить их снова.",
"set_title": "⏰ <b>Установка времени напоминаний</b>",
"set_desc": "Отправь время в формате <b>HH:MM</b> (UTC)",
"set_examples": "Примеры:\n• <code>09:00</code> - 9 утра по UTC\n• <code>18:30</code> - 18:30 по UTC\n• <code>20:00</code> - 8 вечера по UTC",
"set_utc_hint": "💡 UTC = МСК - 3 часа\n(если хочешь 12:00 по МСК, введи 09:00)",
"cancel_hint": "Отправь /cancel для отмены",
"cancelled": "❌ Установка времени отменена",
"invalid_format": "❌ Неверный формат времени!\n\nИспользуй формат <b>HH:MM</b> (например, 09:00 или 18:30)\nИли отправь /cancel для отмены",
"time_set_title": "✅ <b>Время установлено!</b>",
"status_on_line": "Статус: <b>Включены</b>",
"use_settings": "Используй /reminder для изменения настроек."
},
"stats": {
"header": "📊 <b>Твоя статистика</b>",
"total_words": "📚 Слов в словаре: <b>{n}</b>",
"studied_words": "📖 Слов изучено: <b>{n}</b>",
"total_tasks": "✍️ Заданий выполнено: <b>{n}</b>",
"correct_tasks": "✅ Правильных ответов: <b>{n}</b>",
"accuracy": "🎯 Точность: <b>{n}%</b>",
"hint_add_words": "Добавь слова командой /add чтобы начать обучение!",
"hint_first_task": "Выполни первое задание командой /task!",
"hint_keep_practice": "Продолжай практиковаться! 💪"
},
"level_test": {
"show_translation_btn": "👁️ Показать перевод вопроса",
"intro": "📊 <b>Тест определения уровня</b>\n\nЭтот короткий тест поможет определить твой уровень английского.\n\n📋 Тест включает 7 вопросов:\n• Грамматика\n• Лексика\n• Понимание\n\n⏱ Займёт около 2-3 минут\n\nГотов начать?",
"start_btn": "✅ Начать тест",
"cancel_btn": "❌ Отмена",
"press_button": "Нажми кнопку когда будешь готов:",
"cancelled": "❌ Тест отменён",
"q_header": "❓ <b>Вопрос {i} из {n}</b>"
},
"settings": {
"title": "⚙️ <b>Настройки</b>\n\n",
"level_prefix": "📊 Уровень: ",
"learning_prefix": "🎯 Язык изучения: ",
"interface_prefix": "🌐 Язык интерфейса: ",
"translation_prefix": "💬 Язык перевода: ",
"choose": "Выбери, что хочешь изменить:",
"close": "❌ Закрыть",
"back": "⬅️ Назад",
"back_to_settings": "⬅️ К настройкам",
"level_title": "📊 <b>Выбери свой уровень:</b>\n\n",
"level_groups": "<b>A1-A2</b> - Начинающий\n<b>B1-B2</b> - Средний\n<b>C1-C2</b> - Продвинутый\n\n",
"level_hint": "Это влияет на сложность предлагаемых слов и заданий.",
"level": {
"a1": "A1 - Начальный",
"a2": "A2 - Элементарный",
"b1": "B1 - Средний",
"b2": "B2 - Выше среднего",
"c1": "C1 - Продвинутый",
"c2": "C2 - Профессиональный"
},
"jlpt": {
"n5": "N5 - Базовый",
"n4": "N4 - Начальный",
"n3": "N3 - Средний",
"n2": "N2 - Продвинутый",
"n1": "N1 - Свободный"
},
"jlpt_groups": "<b>N5-N4</b> - Начинающий\n<b>N3</b> - Средний\n<b>N2-N1</b> - Продвинутый\n\n",
"level_changed": "✅ Уровень изменен на <b>{level}</b>\n\n",
"level_changed_hint": "Теперь ты будешь получать слова и задания, соответствующие твоему уровню!",
"lang_title": "🌐 <b>Выбери язык интерфейса:</b>\n\n",
"lang_desc": "Это изменит язык всех сообщений бота.",
"lang_changed": "✅ Язык интерфейса: <b>Русский</b>",
"learning_title": "🎯 <b>Выбери язык изучения:</b>\n\n",
"learning_changed": "✅ Язык изучения: <b>{code}</b>",
"translation_title": "💬 <b>Выбери язык перевода:</b>\n\n",
"translation_desc": "На этот язык будут переводиться слова.\nЭто может отличаться от языка интерфейса.",
"translation_changed": "✅ Язык перевода: <b>{lang_name}</b>",
"tasks_count_prefix": "🔢 Заданий: ",
"tasks_count_title": "🔢 <b>Количество заданий:</b>\n\n",
"tasks_count_desc": "Сколько заданий генерировать за один раз.\nМинимум 5, максимум 15.",
"tasks_count_changed": "✅ Количество заданий: <b>{count}</b>",
"menu_updated": "Клавиатура обновлена ⤵️",
"lang_name": {
"ru": "🇷🇺 Русский",
"en": "🇬🇧 English",
"ja": "🇯🇵 日本語"
},
"learning_lang": {
"en": "🇬🇧 Английский",
"es": "🇪🇸 Испанский",
"de": "🇩🇪 Немецкий",
"fr": "🇫🇷 Французский",
"ja": "🇯🇵 Японский"
}
},
"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 для ручной установки уровня.",
"translation_unavailable": "Перевод недоступен",
"translation_marker": "Перевод вопроса:",
"translation_already": "Перевод уже показан",
"correct": "✅ Правильно!",
"incorrect": "❌ Неправильно",
"correct_answer": "Правильный ответ: <b>{answer}</b>",
"result_title": "🎉 <b>Тест завершён!</b>\n\n",
"results_header": "📊 Результаты:\n",
"correct_count": "Правильных ответов: <b>{correct}</b> из {total}\n",
"accuracy": "Точность: <b>{accuracy}%</b>\n\n",
"your_level": "🎯 Твой уровень: <b>{level}</b>\n",
"level_set_hint": "Теперь задания и материалы будут подбираться под твой уровень!\nТы можешь изменить уровень в любое время через /settings",
"level_desc": {
"A1": "Начальный - понимаешь основные фразы и можешь представиться",
"A2": "Элементарный - можешь общаться на простые темы",
"B1": "Средний - можешь поддержать беседу на знакомые темы",
"B2": "Выше среднего - свободно общаешься в большинстве ситуаций",
"C1": "Продвинутый - используешь язык гибко и эффективно",
"C2": "Профессиональный - владеешь языком на уровне носителя",
"N5": "Базовый - понимаешь хирагану, катакану и базовые кандзи",
"N4": "Начальный - понимаешь повседневные разговоры",
"N3": "Средний - понимаешь обычные тексты и разговоры",
"N2": "Продвинутый - понимаешь большинство контента",
"N1": "Свободный - полное владение японским языком"
}
},
"onboarding": {
"step2_title": "🎯 Какой язык хочешь изучать?",
"step3_title": "💬 На какой язык переводить слова?",
"complete": "✅ Настройки сохранены!",
"lang_en": "🇬🇧 Английский",
"lang_ja": "🇯🇵 Японский"
},
"words": {
"generating": "🔄 Генерирую подборку слов по теме '{theme}'...",
"generate_failed": "❌ Не удалось сгенерировать подборку. Попробуй позже.",
"header": "📚 <b>Подборка слов: {theme}</b>",
"choose": "Выбери слова, которые хочешь добавить в словарь:",
"add_all_btn": "✅ Добавить все",
"close_btn": "❌ Закрыть",
"help_title": "📚 <b>Тематические подборки слов</b>",
"help_usage": "Используй: <code>/words [тема]</code>",
"help_examples": "Примеры:\n• <code>/words travel</code> - путешествия\n• <code>/words food</code> - еда\n• <code>/words work</code> - работа\n• <code>/words nature</code> - природа\n• <code>/words technology</code> - технологии",
"help_note": "Я сгенерирую 10 слов по теме, подходящих для твоего уровня!",
"popular": "Популярные темы:",
"topic_travel": "✈️ Путешествия",
"topic_food": "🍔 Еда",
"topic_work": "💼 Работа",
"topic_nature": "🌿 Природа",
"topic_technology": "💻 Технологии",
"err_not_found": "❌ Ошибка: слово не найдено",
"already_exists": "Слово '{word}' уже в словаре",
"added_single": "✅ Слово '{word}' добавлено в словарь"
}
}