feat: JLPT levels for Japanese, custom practice scenarios, UI improvements
- Add separate level systems: CEFR (A1-C2) for European languages, JLPT (N5-N1) for Japanese - Store levels per language in new `levels_by_language` JSON field - Add custom scenario option in AI practice mode - Show action buttons after practice ends (new dialogue, tasks, words) - Fix level display across all handlers to use correct level system - Add Alembic migration for levels_by_language field - Update all locale files (ru, en, ja) with new keys 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -81,7 +81,15 @@
|
||||
"end_keep": "Great job! Keep practicing.",
|
||||
"end_hint": "Use /practice to start a new dialogue.",
|
||||
"translation_unavailable": "Translation unavailable",
|
||||
"translation_already": "Translation already shown"
|
||||
"translation_already": "Translation already shown",
|
||||
"custom_scenario_btn": "✏️ Custom scenario",
|
||||
"custom_scenario_prompt": "✏️ <b>Describe your scenario</b>\n\nWrite a topic or situation for the conversation.\n\nExamples:\n• Job interview for a programmer position\n• Ordering pizza by phone\n• Discussing a movie with a friend\n• Planning a trip to Japan",
|
||||
"custom_scenario_too_short": "⚠️ Description too short. Write at least a few words about the scenario.",
|
||||
"new_practice_btn": "🔄 New dialogue",
|
||||
"to_tasks_btn": "🧠 Tasks",
|
||||
"to_words_btn": "🎯 Words",
|
||||
"go_tasks_hint": "Use /task to practice words",
|
||||
"go_words_hint": "Use /words [topic] for word sets"
|
||||
},
|
||||
"tasks": {
|
||||
"no_words": "📚 You don't have words to practice yet!\n\nAdd some words with /add and come back.",
|
||||
@@ -159,6 +167,87 @@
|
||||
"cancelled": "❌ Test cancelled",
|
||||
"q_header": "❓ <b>Question {i} of {n}</b>"
|
||||
},
|
||||
"settings": {
|
||||
"title": "⚙️ <b>Settings</b>\n\n",
|
||||
"level_prefix": "📊 Level: ",
|
||||
"learning_prefix": "🎯 Learning language: ",
|
||||
"interface_prefix": "🌐 Interface language: ",
|
||||
"choose": "Choose what to change:",
|
||||
"close": "❌ Close",
|
||||
"back": "⬅️ Back",
|
||||
"back_to_settings": "⬅️ Back to settings",
|
||||
"level_title": "📊 <b>Choose your level:</b>\n\n",
|
||||
"level_groups": "<b>A1-A2</b> - Beginner\n<b>B1-B2</b> - Intermediate\n<b>C1-C2</b> - Advanced\n\n",
|
||||
"level_hint": "This affects difficulty of suggested words and tasks.",
|
||||
"level": {
|
||||
"a1": "A1 - Beginner",
|
||||
"a2": "A2 - Elementary",
|
||||
"b1": "B1 - Intermediate",
|
||||
"b2": "B2 - Upper-intermediate",
|
||||
"c1": "C1 - Advanced",
|
||||
"c2": "C2 - Proficient"
|
||||
},
|
||||
"jlpt": {
|
||||
"n5": "N5 - Basic",
|
||||
"n4": "N4 - Elementary",
|
||||
"n3": "N3 - Intermediate",
|
||||
"n2": "N2 - Advanced",
|
||||
"n1": "N1 - Fluent"
|
||||
},
|
||||
"jlpt_groups": "<b>N5-N4</b> - Beginner\n<b>N3</b> - Intermediate\n<b>N2-N1</b> - Advanced\n\n",
|
||||
"level_changed": "✅ Level changed to <b>{level}</b>\n\n",
|
||||
"level_changed_hint": "You will now receive words and tasks matching your level!",
|
||||
"lang_title": "🌐 <b>Select interface language:</b>\n\n",
|
||||
"lang_desc": "This will change the language of bot messages.",
|
||||
"lang_changed": "✅ Interface language: <b>English</b>",
|
||||
"learning_title": "🎯 <b>Select learning language:</b>\n\n",
|
||||
"learning_changed": "✅ Learning language: <b>{code}</b>",
|
||||
"menu_updated": "Main menu updated ⤵️",
|
||||
"lang_name": {
|
||||
"ru": "🇷🇺 Русский",
|
||||
"en": "🇬🇧 English",
|
||||
"ja": "🇯🇵 日本語"
|
||||
},
|
||||
"learning_lang": {
|
||||
"en": "🇬🇧 English",
|
||||
"es": "🇪🇸 Spanish",
|
||||
"de": "🇩🇪 German",
|
||||
"fr": "🇫🇷 French",
|
||||
"ja": "🇯🇵 Japanese"
|
||||
}
|
||||
},
|
||||
"import_extra": {
|
||||
"cancelled": "❌ Import cancelled."
|
||||
},
|
||||
"level_test_extra": {
|
||||
"generating": "🔄 Generating questions...",
|
||||
"generate_failed": "❌ Failed to generate test. Try later or use /settings to set level manually.",
|
||||
"translation_unavailable": "Translation unavailable",
|
||||
"translation_marker": "Question translation:",
|
||||
"translation_already": "Translation already shown",
|
||||
"correct": "✅ Correct!",
|
||||
"incorrect": "❌ Incorrect",
|
||||
"correct_answer": "Correct answer: <b>{answer}</b>",
|
||||
"result_title": "🎉 <b>Test completed!</b>\n\n",
|
||||
"results_header": "📊 Results:\n",
|
||||
"correct_count": "Correct answers: <b>{correct}</b> of {total}\n",
|
||||
"accuracy": "Accuracy: <b>{accuracy}%</b>\n\n",
|
||||
"your_level": "🎯 Your level: <b>{level}</b>\n",
|
||||
"level_set_hint": "Tasks and materials will now be tailored to your level!\nYou can change the level anytime via /settings",
|
||||
"level_desc": {
|
||||
"A1": "Beginner - understand basic phrases and can introduce yourself",
|
||||
"A2": "Elementary - can communicate on simple topics",
|
||||
"B1": "Intermediate - can maintain conversations on familiar topics",
|
||||
"B2": "Upper-intermediate - fluent in most situations",
|
||||
"C1": "Advanced - use language flexibly and effectively",
|
||||
"C2": "Proficient - mastery at native level",
|
||||
"N5": "Basic - understand hiragana, katakana and basic kanji",
|
||||
"N4": "Elementary - understand everyday conversations",
|
||||
"N3": "Intermediate - understand common texts and conversations",
|
||||
"N2": "Advanced - understand most content",
|
||||
"N1": "Fluent - full proficiency in Japanese"
|
||||
}
|
||||
},
|
||||
"words": {
|
||||
"generating": "🔄 Generating words for topic '{theme}'...",
|
||||
"generate_failed": "❌ Failed to generate words. Please try again later.",
|
||||
|
||||
Reference in New Issue
Block a user