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• 1行に1単語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>{n} 語のうち最新の10語を表示</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シナリオを選択",
@@ -84,6 +103,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 で新しく始めましょう。",
@@ -96,6 +121,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}",
@@ -211,6 +239,18 @@
"import_extra": {
"cancelled": "❌ インポートを中止しました。"
},
"import_file": {
"unsupported_format": "❌ サポートされていないファイル形式です。\n\n対応形式: .txt, .md\n\nファイル形式:\n<code>単語 - 翻訳</code>\n<code>単語 : 翻訳</code>",
"too_large": "❌ ファイルが大きすぎます最大1MB",
"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 でレベルを手動設定してください。",