784 lines
51 KiB
JSON
784 lines
51 KiB
JSON
{
|
||
"app": {
|
||
"title": "TiniX Story 1.0",
|
||
"window_title": "TiniX Story 1.0 - Production Edition",
|
||
"subtitle": "_Production-ready intelligent novel generation system v1.0_",
|
||
"startup_log": "TiniX Story 1.0 started",
|
||
"port_in_use": "Port {port} is in use, using port {new_port}",
|
||
"backends_loaded": "Loaded {count} backends",
|
||
"no_backends_warning": "⚠️ No backend enabled! Please add API configuration in settings",
|
||
"init_failed": "Initialization failed: {error}",
|
||
"gradio_start": "Starting Gradio app... (Port: {port})",
|
||
"gradio_failed": "Gradio startup failed: {error}"
|
||
},
|
||
"tabs": {
|
||
"rewrite": "📝 Novel Rewrite",
|
||
"polish": "✨ Novel Polish",
|
||
"create": "✍️ Create from Scratch",
|
||
"continue_tab": "📖 Continue Project",
|
||
"export": "💾 Export & Share",
|
||
"projects": "📂 Project Management",
|
||
"settings": "⚙️ System Settings",
|
||
"about": "ℹ️ About"
|
||
},
|
||
"rewrite": {
|
||
"header": "### Upload Novel → Select Mode → Smart Process",
|
||
"mode_rewrite": "Rewrite Mode",
|
||
"mode_continue": "Continue Mode",
|
||
"mode_label": "Feature Mode",
|
||
"rewrite_header": "#### 🔄 Rewrite Mode: Upload Novel → Select Style → Smart Rewrite",
|
||
"upload_file": "📤 Upload File (txt/pdf/epub/md/docx)",
|
||
"split_method_label": "Split Method",
|
||
"split_auto": "Auto Split",
|
||
"split_by_words": "Split by Words",
|
||
"split_by_pattern": "Split by Pattern",
|
||
"words_per_segment": "Words per Segment",
|
||
"words_per_segment_info": "Split evenly by word count",
|
||
"pattern_label": "Split Pattern Marker",
|
||
"pattern_placeholder": "Supports variables: %章 (Chapter), %节 (Section), %回 (Episode), or custom text like ---, ***",
|
||
"pattern_info": "Use %章 to match 'Chapter X', %节 to match 'Section X', %回 for 'Episode X'",
|
||
"keep_marker": "Keep Split Marker",
|
||
"keep_marker_info": "Whether to keep the marker text in the segments",
|
||
"parse_file_btn": "Parse File",
|
||
"preset_style": "Preset Style",
|
||
"parse_status": "Parse Status",
|
||
"start_rewrite": "Start Rewrite",
|
||
"stop_rewrite": "Stop Rewrite",
|
||
"live_preview": "Live Preview",
|
||
"full_rewritten": "Full Rewritten Text (Editable)",
|
||
"progress_stats": "Progress Stats",
|
||
"continue_header": "#### ✍️ Continue Mode: Upload Existing Novel → AI Smart Continue",
|
||
"upload_existing": "📤 Upload Existing Novel (txt/pdf/epub/md/docx)",
|
||
"novel_title": "📖 Novel Title",
|
||
"novel_title_placeholder": "Enter novel title",
|
||
"target_words": "📊 Target Words",
|
||
"char_setting": "👥 Character Setting",
|
||
"char_setting_placeholder": "Protagonist name, personality, background, etc. (Optional)",
|
||
"world_setting": "🌍 World Setting",
|
||
"world_setting_placeholder": "Era background, world rules, etc. (Optional)",
|
||
"plot_idea": "📖 Main Plot Idea",
|
||
"plot_idea_placeholder": "Core conflict, development direction, ending, etc. (Optional)",
|
||
"existing_content": "Existing Content (Editable)",
|
||
"continue_result": "Continue Result",
|
||
"continue_status": "Continue Status",
|
||
"start_continue": "Start Continue"
|
||
},
|
||
"polish": {
|
||
"header": "### Upload Novel → Select Polish Type → Smart Optimize",
|
||
"upload_file": "📤 Upload File (txt/pdf/epub/md/docx)",
|
||
"polish_type_label": "Polish Type",
|
||
"polish_general": "General Polish",
|
||
"polish_find_errors": "Find Errors",
|
||
"polish_suggestions": "Improvement Suggestions",
|
||
"polish_direct": "Direct Edit",
|
||
"polish_remove_ai": "Remove AI Tone",
|
||
"polish_enhance": "Enhance Details",
|
||
"polish_dialogue": "Optimize Dialogue",
|
||
"polish_pacing": "Improve Pacing",
|
||
"custom_req": "Custom Requirements (Optional)",
|
||
"custom_req_placeholder": "E.g., Strengthen character descriptions, enhance atmosphere, improve dialog flow...",
|
||
"parse_status": "Parse Status",
|
||
"start_polish": "Start Polish",
|
||
"polish_suggest_btn": "Polish and Provide Suggestions",
|
||
"original_text": "Original Text (Editable)",
|
||
"polished_text": "Polished Result",
|
||
"suggestions_label": "Improvement Suggestions",
|
||
"polish_status": "Polish Status"
|
||
},
|
||
"create": {
|
||
"header": "### Fill Settings → Generate Outline → Auto Create (Supports Continue & Pause)",
|
||
"novel_title": "📖 Novel Title",
|
||
"novel_title_default": "Untitled Novel",
|
||
"genre_label": "📚 Novel Genre",
|
||
"sub_genres_label": "🏷️ Sub-Themes / Tags",
|
||
"suggested_titles_list": "Suggested List (Editable here)",
|
||
"suggested_titles_radio": "Select a Title",
|
||
"suggested_titles_help": "You can freely edit the text above, the options below will update automatically.",
|
||
"sub_genres": [
|
||
"Harem", "1v1", "NP", "Cross-dressing Female", "Cross-dressing Male",
|
||
"Time Travel", "Transmigration into Book", "Rebirth", "System", "Golden Finger",
|
||
"Portable Dimension", "Spiritual Spring", "Mind Reading", "Invincible Flow",
|
||
"Gou Dao (Surviving Low Profile)", "Hot-blooded", "Comedy", "Satisfying Read (Shuangwen)",
|
||
"Sweet Pet", "Angst/Abusive Romance", "Reunion after Breakup", "Love after Marriage",
|
||
"Bickering Lovers", "Childhood Sweethearts", "Wealthy Family/Affluent Class",
|
||
"CEO", "Celebrity", "Entertainment Industry", "Campus", "Top Student",
|
||
"Online Gaming", "Esports", "Live Streaming", "Gourmet", "Farm", "Farming/Building",
|
||
"Raising Kids", "Getting Rich", "Palace Intrigue", "House Intrigue", "Political Schemes",
|
||
"Strong Female Target", "Strong Male Target", "Virgin/Pure Couple", "Trash to Top Tier",
|
||
"Genius Flow", "Broken Engagement Flow", "Spiritual Energy Revival", "Apocalyptic",
|
||
"Mecha", "Interstellar", "ABO", "Werewolf", "Vampire", "Western Fantasy", "Magic",
|
||
"Sword and Magic", "Mage", "Playing Pig to Eat Tiger", "Tragedy", "Healing",
|
||
"Dark", "Gothic", "Psychological", "Schizophrenia", "Multiple Personalities",
|
||
"Suspense", "Crime Solving", "Tomb Raiding", "Zombie", "Rule-based Weirdness",
|
||
"Infinite Flow", "Quick Transmigration", "Colonization", "Manufacturing", "Lord",
|
||
"Planting", "Fishing", "Beast Taming", "Pokémon", "Anime", "Harry Potter", "Marvel",
|
||
"Sea of Stars", "Urban Legend", "Ancient Times", "Republican Era", "70s", "80s", "90s",
|
||
"Otherworld", "Continent", "Tribal", "Primitive", "Cultivation/Xianxia", "Revenge",
|
||
"Cannon Fodder", "Villain", "Prophet", "Spells"
|
||
],
|
||
"genres": [
|
||
"Eastern Fantasy/Xianxia", "Urban Romance", "Sci-Fi", "Wuxia/Martial Arts", "Suspense",
|
||
"Historical", "Military", "Video Games", "Horror", "Time Travel/Rebirth", "System",
|
||
"Fanfiction", "Apocalyptic", "Farming/Comedy", "Ancient Romance", "Western Fantasy",
|
||
"Strong Female Lead", "CEO", "Youth Campus", "Palace Intrigue", "House Intrigue",
|
||
"Primordial Myths", "Gaming Romance", "Urban Superpowers", "Paranormal Suspense",
|
||
"Boys Love (BL)", "Girls Love (GL)", "Tomb Raiding Adventure", "Otherworld Continent",
|
||
"Ancient Farming", "Portable Dimension", "ABO", "Vampire", "Sports/Competitive",
|
||
"Anime Fanfiction", "Infinite Flow", "Other"
|
||
],
|
||
"char_setting": "👥 Character Setting",
|
||
"char_setting_placeholder": "Protagonist name, personality, background, etc.",
|
||
"world_setting": "🌍 World Setting",
|
||
"world_setting_placeholder": "Era background, world rules, special settings, etc.",
|
||
"plot_idea": "📖 Main Plot Idea",
|
||
"plot_idea_placeholder": "Core conflict, development direction, ending, etc.",
|
||
"num_main_chars": "Number of Main Characters",
|
||
"num_sub_chars": "Number of Supporting/Villain Characters",
|
||
"custom_prompt_label": "Additional Requirements (Optional)",
|
||
"custom_prompt_placeholder": "Enter extra requirements (e.g., Urban superpowers style...)",
|
||
"suggest_title_btn": "✨ Generate Titles",
|
||
"suggest_btn": "✨ AI Inspiration",
|
||
"suggest_plot_btn": "✨ AI Main Plot Idea",
|
||
"suggesting_status": "Generating ideas...",
|
||
"chapter_count": "📊 Chapter Count (Leave empty for 20)",
|
||
"gen_outline_btn": "Generate Outline",
|
||
"outline_display": "📋 Outline (Manually Editable)",
|
||
"context_header": "### 🔄 Context Enhancement Settings (Optional)",
|
||
"enable_context": "Enable Context Enhancement",
|
||
"enable_context_info": "When enabled, uses previous chapters' summaries/full text as context for generating new chapters",
|
||
"context_mode_label": "Context Mode",
|
||
"context_summary_mode": "Summary Mode",
|
||
"context_full_mode": "Full Text Mode",
|
||
"context_mode_info": "Summary Mode: uses previous chapters' summaries. Full Text Mode: uses full content of all previous chapters.",
|
||
"context_chapters": "Context Chapter Count",
|
||
"context_chapters_info": "How many previous chapters' summaries to use as context",
|
||
"context_max_length": "Context Max Length",
|
||
"context_max_length_info": "Maximum character count for the context",
|
||
"outline_format_help": "#### 📝 Outline Format Help\nPlease write the outline in the following format (choose one):\n\n**Format 1** (Recommended):\n- Chapter 1: Beginning - Introduction of protagonist and world\n- Chapter 2: Conflict - The first major challenge\n\n**Format 2**:\n- 1. Beginning - Introduction of protagonist and world\n- 2. Conflict - The first major challenge\n\n**Note**: Title and description are separated by a hyphen `-`, one chapter per line",
|
||
"start_gen_btn": "Start Generating / Continue",
|
||
"pause_gen_btn": "Pause Generation",
|
||
"cache_status": "💾 Cache Status",
|
||
"cache_status_default": "No Cache",
|
||
"cache_timestamp": "⏰ Cache Time",
|
||
"export_format_label": "📄 Export Format",
|
||
"export_format_word": "Word (.docx)",
|
||
"export_format_txt": "Text (.txt)",
|
||
"export_format_md": "Markdown (.md)",
|
||
"export_format_html": "HTML (.html)",
|
||
"export_progress_btn": "📥 Export Current Progress",
|
||
"download_file": "Download File",
|
||
"export_status": "Export Status",
|
||
"novel_display": "📚 Novel Full Text (Live Update)",
|
||
"gen_status": "Generation Status",
|
||
"gen_status_default": "Ready"
|
||
},
|
||
"export": {
|
||
"header": "### Export to Multiple Formats",
|
||
"paste_content": "Paste Novel Content",
|
||
"paste_placeholder": "Copy and paste the full novel text from the creation page",
|
||
"novel_title": "Novel Title",
|
||
"novel_title_placeholder": "Used for filename",
|
||
"export_word": "Export as Word (.docx)",
|
||
"export_txt": "Export as Plain Text (.txt)",
|
||
"export_md": "Export as Markdown (.md)",
|
||
"export_html": "Export as HTML (.html)",
|
||
"download_file": "Download File",
|
||
"export_status": "Export Status",
|
||
"recent_exports": "Recently Exported Files",
|
||
"refresh_files": "Refresh File List",
|
||
"empty_content": "Content is empty"
|
||
},
|
||
"continue_tab": {
|
||
"header": "### Select Project → Check Progress → Continue Creating",
|
||
"select_project": "📖 Select Project to Continue",
|
||
"load_btn": "📥 Load Project",
|
||
"project_info": "Project Info",
|
||
"no_project_loaded": "_No project selected. Please pick from the list and load._",
|
||
"info_template": "**📖 {title}** | 📚 {genre}\n\n✅ Completed: **{completed}/{total} Chapters** ({percent}%)\n\n👤 Characters: {char}\n\n🌍 World: {world}\n\n📖 Plot: {plot}",
|
||
"outline_label": "📋 Project Outline (✅ = Completed, ⬜ = Unwritten)",
|
||
"novel_label": "📚 Written Content",
|
||
"context_header": "### 🔄 Context Settings",
|
||
"continue_gen_btn": "▶️ Continue Generating Chapters",
|
||
"pause_btn": "⏸️ Pause",
|
||
"gen_status": "Status",
|
||
"gen_status_default": "Ready - Select a project to continue",
|
||
"select_first": "❌ Please select and load a project first",
|
||
"loaded_ok": "✅ Project '{title}' loaded - {completed}/{total} chapters completed",
|
||
"all_complete": "✅ Project '{title}' has completed all chapters!",
|
||
"no_project_selected": "❌ Please select a project",
|
||
"project_not_found": "❌ Project not found",
|
||
"load_failed": "❌ Failed to load project: {error}",
|
||
"no_outline": "❌ Project has no outline. Please use the create tab first.",
|
||
"continue_starting": "▶️ Resuming generation from chapter {chapter}..."
|
||
},
|
||
"projects": {
|
||
"header": "### Manage All Projects",
|
||
"refresh_btn": "🔄 Refresh Project List",
|
||
"projects_table": "My Projects",
|
||
"status_label": "Status",
|
||
"export_header": "### 📥 Export Project",
|
||
"select_project": "📖 Select Project to Export",
|
||
"export_format": "📄 Export Format",
|
||
"export_btn": "📤 Prepare Download File",
|
||
"download_file": "Download File",
|
||
"export_status": "Status",
|
||
"recent_exports": "Recently Exported Files",
|
||
"refresh_files": "Refresh File List",
|
||
"delete_header": "### 🗑️ Delete Project",
|
||
"delete_select_project": "Select Project to Delete",
|
||
"delete_btn": "🗑️ Permanently Delete Project",
|
||
"delete_confirm": "⚠️ Are you sure you want to delete this project? This action cannot be reversed.",
|
||
"delete_success": "✅ Project deleted successfully",
|
||
"delete_failed": "❌ Failed to delete project: {error}",
|
||
"actions_header": "### ✍️ Project Actions",
|
||
"select_project_action": "📖 Select Project",
|
||
"continue_btn": "✍️ Continue",
|
||
"rewrite_btn": "🔄 Rewrite",
|
||
"polish_btn": "✨ Polish",
|
||
"select_project_first": "❌ Please select a project first",
|
||
"project_not_found": "❌ Project not found",
|
||
"loaded_to_create": "✅ Project '{title}' loaded to Create tab",
|
||
"loaded_to_rewrite": "✅ Project '{title}' content loaded to Rewrite tab",
|
||
"loaded_to_polish": "✅ Project '{title}' content loaded to Polish tab",
|
||
"action_status": "Status",
|
||
"ai_illustration_header": "AI Chapter Illustration Creation",
|
||
"gen_illustration_btn": "Generate Illustration",
|
||
"illustration_label": "Chapter Illustration",
|
||
"select_chapter": "Please select a chapter",
|
||
"invalid_chapter": "Invalid chapter",
|
||
"chapter_not_found": "Chapter not found"
|
||
},
|
||
"settings": {
|
||
"header": "### 🔧 API Configuration & Generation Parameters",
|
||
"tab_backends": "🌐 Interface Management",
|
||
"tab_params": "📝 Generation Parameters",
|
||
"tab_cache": "💾 Cache Management",
|
||
"backends_header": "#### 📋 Configure Backend APIs",
|
||
"refresh_list": "🔄 Refresh List",
|
||
"test_all": "✅ Test All Endpoints",
|
||
"backends_table": "Configured Backends List",
|
||
"add_backend_header": "#### ➕ Add New API",
|
||
"provider_label": "API Provider",
|
||
"provider_info": "Selecting a provider automatically fills default config",
|
||
"backend_name": "Backend Name*",
|
||
"backend_name_placeholder": "E.g., My OpenAI",
|
||
"backend_type": "Backend Type*",
|
||
"base_url": "Base URL",
|
||
"base_url_placeholder": "E.g., https://api.example.com/v1 (For OpenAI compatible ones only)",
|
||
"model_name": "Model Name*",
|
||
"model_name_placeholder": "Auto-fills when provider selected, can be modified",
|
||
"api_key": "API Key (Ollama can be empty)*",
|
||
"api_key_placeholder": "Enter your API key (will not be saved as plaintext)",
|
||
"timeout": "Timeout (seconds)",
|
||
"retry_count": "Retry Count",
|
||
"enable_backend": "Enable this backend",
|
||
"add_btn": "➕ Add Backend",
|
||
"operation_result": "Operation Result",
|
||
"test_manage_header": "#### 🔍 Test & Manage",
|
||
"test_backend_name": "Backend Name to Test",
|
||
"test_backend_placeholder": "Enter backend name to test connection",
|
||
"test_btn": "🧪 Test Connection",
|
||
"test_result": "Test Result",
|
||
"delete_backend_name": "Backend Name to Delete",
|
||
"delete_backend_placeholder": "Enter backend name to delete",
|
||
"delete_btn": "🗑️ Delete Backend",
|
||
"delete_result": "Delete Result",
|
||
"params_header": "#### Adjust Novel Generation Parameters",
|
||
"temperature_label": "Temperature (Creativity)",
|
||
"temperature_info": "Higher means more creative, lower is more conservative",
|
||
"top_p_info": "Controls output diversity",
|
||
"top_k_info": "Selects from top K most likely tokens",
|
||
"max_tokens_info": "Max tokens per generation",
|
||
"chapter_target_words": "Target words per chapter",
|
||
"writing_style": "Writing Style",
|
||
"writing_styles": [
|
||
"Fluent and natural, tight plot, delicate characterization",
|
||
"Beautiful writing, profound artistic conception",
|
||
"Fast-paced, full of twists and turns",
|
||
"Delicate descriptions, rich emotions",
|
||
"Humorous, relaxed and lively"
|
||
],
|
||
"tone_label": "Tone",
|
||
"tones": [
|
||
"Neutral",
|
||
"Serious",
|
||
"Relaxed",
|
||
"Skeptical",
|
||
"Gentle",
|
||
"Passionate"
|
||
],
|
||
"char_dev_label": "Character Development",
|
||
"char_dev_options": [
|
||
"Detailed",
|
||
"Medium",
|
||
"Concise"
|
||
],
|
||
"plot_complexity_label": "Plot Complexity",
|
||
"plot_complexity_options": [
|
||
"Simple",
|
||
"Medium",
|
||
"Complex"
|
||
],
|
||
"save_params_btn": "💾 Save Generation Parameters",
|
||
"save_status": "Save Status",
|
||
"cache_header": "#### 📋 Manage Generation Cache",
|
||
"cache_size": "Cache Size",
|
||
"refresh_cache": "🔄 Refresh Cache List",
|
||
"get_cache_size": "📊 Get Cache Size",
|
||
"cache_table": "Cache List",
|
||
"clear_selected": "🗑️ Clear Selected Cache",
|
||
"clear_all": "🗑️ Clear All Caches",
|
||
"cache_op_status": "Operation Status",
|
||
"summary_cache_header": "#### 📋 Manage Context Summary Cache",
|
||
"summary_cache_size": "Summary Cache Size",
|
||
"refresh_summary": "🔄 Refresh Summary List",
|
||
"get_summary_size": "📊 Get Summary Size",
|
||
"summary_cache_table": "Summary Cache List",
|
||
"clear_summary_cache": "🗑️ Clear All Summary Caches",
|
||
"tab_genre": "📚 Genre Management",
|
||
"genre_desc": "Add, edit, or delete novel genres and write detailed descriptions/guidelines. The AI uses this as a system prompt when writing this genre.",
|
||
"genre_select": "Select genre to modify",
|
||
"genre_name": "Genre Name",
|
||
"genre_name_placeholder": "Eastern Fantasy, Sci-Fi...",
|
||
"genre_description": "Description / Writing Guideline",
|
||
"genre_description_placeholder": "Enter writing style, tone, and features for this genre...",
|
||
"genre_add_btn": "➕ Add",
|
||
"genre_update_btn": "💾 Update",
|
||
"genre_delete_btn": "🗑️ Delete",
|
||
"genre_op_status": "Operation Status",
|
||
"genre_err_name_empty": "Please enter a genre name!",
|
||
"genre_err_exists": "This genre name already exists!",
|
||
"genre_add_success": "New genre successfully added!",
|
||
"genre_err_none_selected": "Please select a genre!",
|
||
"genre_update_success": "Genre updated successfully!",
|
||
"genre_err_update": "Error updating or name conflict!",
|
||
"genre_delete_success": "Genre deleted successfully!",
|
||
"genre_err_delete": "Deletion failed!",
|
||
"tab_sub_genre": "🏷️ Sub-Theme Management (Tag)",
|
||
"sub_genre_desc": "Add, edit, or delete sub-themes and describe them. The AI merges them as a system prompt for generating content.",
|
||
"sub_genre_select": "Select sub-theme to modify",
|
||
"sub_genre_name": "Sub-Theme Name",
|
||
"sub_genre_name_placeholder": "System, Fast Transmigration...",
|
||
"sub_genre_description": "Description / Writing Guideline",
|
||
"sub_genre_description_placeholder": "Enter details like character traits or background settings...",
|
||
"sub_genre_add_btn": "➕ Add",
|
||
"sub_genre_update_btn": "💾 Update",
|
||
"sub_genre_delete_btn": "🗑️ Delete",
|
||
"sub_genre_op_status": "Operation Status",
|
||
"sub_genre_err_name_empty": "Please enter a sub-theme name!",
|
||
"sub_genre_err_exists": "This sub-theme name already exists!",
|
||
"sub_genre_add_success": "New sub-theme successfully added!",
|
||
"sub_genre_err_none_selected": "Please select a sub-theme!",
|
||
"sub_genre_update_success": "Sub-theme updated successfully!",
|
||
"sub_genre_err_update": "Error updating or name conflict!",
|
||
"sub_genre_delete_success": "Sub-theme deleted successfully!",
|
||
"sub_genre_err_delete": "Deletion failed!"
|
||
},
|
||
"about": {
|
||
"content": "# TiniX Story 1.0\n## Production-ready Intelligent Novel Generation System\n\n### 🌟 Core Features\n- **Smart Creation**: Write novels from scratch with custom outlines.\n- **Resume Capability**: Supports pausing. Saves every chapter automatically, can be resumed in Project Management.\n- **Smart Rewrite**: Upload text, rewrite using 17 preset high-quality styles.\n- **Smart Continue**: Upload partially written novels; AI will automatically resume writing.\n- **Novel Polish**: Polishing tools with 8 modes like full edit, finding errors, removing AI tone, etc.\n- **Flexible Parsing**: Supports custom chapter templates, reads varied formats.\n- **Multi-Format Export**: Word, TXT, Markdown, HTML ready for download.\n- **Project Management**: Control multiple projects, track progress, auto-save states.\n- **Flexible Configuration**: Use multiple APIs, fine-tune writing parameters.\n- **Error Retry**: Retries automatically if a generated chapter has 0 words.\n- **Port Auto-detection**: Finds an available port if the default is in use.\n\n### 🔧 Tech Specs\n- **Error Recovery**: Robust error handling & logging.\n- **Caching**: Smart cache saves repeated API calls.\n- **Rate Limiting**: Built-in token bucket to prevent rate limits.\n- **Load Balancing**: Auto round-robin for backends.\n- **Performance**: Thread-safe concurrency.\n\n### ⚖️ License\nMIT License"
|
||
},
|
||
"messages": {
|
||
"no_content_polish": "No content to polish",
|
||
"no_content_rewrite": "No content to rewrite",
|
||
"no_content_continue": "No content to continue",
|
||
"no_title": "Please enter novel title",
|
||
"no_file": "No file uploaded",
|
||
"polish_success": "Polish successful",
|
||
"polish_complete": "Polish complete",
|
||
"polish_complete_saved": "Polish complete | Saved to project manager",
|
||
"polish_failed": "Polish failed: {error}",
|
||
"polish_invalid": "Polish returned invalid content (Length: {length} words)",
|
||
"polish_status_msg": "Polish returned a status instead of actual content: '{content}'",
|
||
"polish_segment_failed": "Polish failed for segment {num}: {error}",
|
||
"polish_segment_invalid": "Polish returned invalid content for segment {num} (Length: {length} words)",
|
||
"polish_segment_progress": "Polishing segment {current}/{total}",
|
||
"polish_auto_split": "Text too long ({length} words), enabling auto split",
|
||
"polish_split_done": "Split into {count} segments, polishing piece by piece",
|
||
"polish_all_done": "Segment polishing complete, {count} segments, {total} words total",
|
||
"polish_save_success": "Polish result saved to: {id}",
|
||
"polish_save_failed": "Failed to save polish result: {msg}",
|
||
"rewrite_success": "Rewrite successful",
|
||
"rewrite_complete": "Rewrite complete",
|
||
"rewrite_paused": "Paused - Completed {done}/{total} segments",
|
||
"rewrite_progress": "Progress {done}/{total} | ~{words} words",
|
||
"rewrite_segment_failed": "Rewrite failed for segment {num}: {error}",
|
||
"rewrite_invalid": "Rewrite returned invalid content for segment {num} (Length: {length} words)",
|
||
"rewrite_status_msg": "Rewrite returned status instead of content on segment {num}: '{content}'",
|
||
"rewrite_segment_progress": "Rewriting segment {current}/{total}",
|
||
"rewrite_save_success": "Rewrite result saved to: {id}",
|
||
"rewrite_save_failed": "Failed to save rewrite result: {msg}",
|
||
"continue_success": "Continue successful",
|
||
"continue_complete": "Continue complete",
|
||
"continue_complete_saved": "Continue complete | Saved to project manager",
|
||
"continue_failed": "Continue failed: {error}",
|
||
"continue_invalid": "Continue returned invalid content (Length: {length} words)",
|
||
"continue_status_msg": "Continue returned status instead of actual content: '{content}'",
|
||
"continue_save_success": "Continue result saved to: {id}",
|
||
"continue_save_failed": "Failed to save continue result: {msg}",
|
||
"gen_success": "Generation successful",
|
||
"gen_outline_empty": "Error: empty outline",
|
||
"gen_outline_failed": "Failed to parse outline: {msg}",
|
||
"gen_paused": "Paused - Completed {done}/{total} chapters, project saved",
|
||
"gen_chapter_progress": "Generating Chapter {current}/{total}: {title}",
|
||
"gen_chapter_skip": "Completed {num}/{total} chapters (Restored from cache)",
|
||
"gen_chapter_retry": "Chapter {num} failed or zero words (Attempt {attempt}/{max}), retrying...",
|
||
"gen_summarizing": "Summarizing previous chapters for context...",
|
||
"gen_constructing_prompt": "Constructing prompt for chapter {num}...",
|
||
"gen_waiting_ai": "Waiting for AI response on chapter {num}...",
|
||
"gen_saving_db": "Saving chapter {num} to database...",
|
||
"gen_chapter_failed": "Generation failed: Chapter {num} failed (retried {max} times)",
|
||
"gen_complete": "Complete | {total} chapters | ~{words} words | Project saved",
|
||
"gen_save_success": "Project saved: {id}",
|
||
"gen_save_failed": "Failed to save project: {msg}",
|
||
"cache_found": "Found cache: {msg}",
|
||
"cache_chapter_restore": "Restored chapter {num} from cache: {words} words",
|
||
"stop_requested": "Stop requested (Will stop after current chapter)",
|
||
"user_stop_requested": "User requested generation to stop",
|
||
"split_words_done": "Split by words done, {count} segments, ~{words} words each",
|
||
"split_pattern_done": "Split by pattern done, {count} segments",
|
||
"split_failed": "Split failed: {error}",
|
||
"split_no_pattern": "Please enter a split pattern",
|
||
"export_complete": "Export complete",
|
||
"export_failed": "Export failed: {error}",
|
||
"image_cover_base": "Professional high-quality novel cover design for '{title}', genre '{genre}'. Cinematic lighting, epic, highly detailed.",
|
||
"image_illustration_base": "Beautiful illustration for novel chapter '{title}'. Scene: {summary}. Digital art, highly detailed."
|
||
},
|
||
"templates": {
|
||
"default": "Rewrite with vivid and delicate strokes, beautiful language, retaining original meaning and plot, adding more detail and inner monologues.",
|
||
"xianxia": "Rewrite in classical Eastern Fantasy (Xianxia) style, elegant ancient sentences, emphasizing magical items, spiritual states, and cultivation.",
|
||
"romance": "Rewrite in modern urban romance style, sweet or angsty, enhancing romantic interactions, emotional psychology, and daily life details.",
|
||
"thriller": "Rewrite as a suspense thriller, create a tense atmosphere, boost psychological horror, clue foreshadowing, and twists.",
|
||
"scifi": "Hard sci-fi rewrite, professional rigorous language, focusing on scientific principles, high-tech details, logical consistency.",
|
||
"wuxia": "Classic Martial Arts (Wuxia) rewrite, heroic language, focusing on sword moves, brotherhood, Jianghu grudges, martial spirit.",
|
||
"palace": "Ancient Palace Intrigue rewrite, elegant language, describing court etiquette, political scheming, complex and subtle character dynamics.",
|
||
"military": "Modern Military rewrite, tough and resolute tone, describing tactics, weaponry, camp life, and soldierly spirit.",
|
||
"historical": "Historical Epic rewrite, archaic and solemn tone, providing historical ambiance, biographical feel, macro-historical perspective.",
|
||
"supernatural": "Supernatural fantasy rewrite, mysterious and eerie tone, paranormal elements, occult, Yin-Yang interactions.",
|
||
"campus": "Youth Campus rewrite, fresh and lively tone, school life details, youthful romance, pure elements.",
|
||
"business": "Corporate Business rewrite, pragmatic language, focusing on strategy, psychological warfare, corporate intelligence.",
|
||
"cyberpunk": "Cyberpunk rewrite, high-tech tone, virtual reality, AI, dystopian neon atmosphere.",
|
||
"fantasy": "Western Fantasy rewrite, epic tone, magic systems, mythological references, medieval fantasy style.",
|
||
"horror": "Horror Thriller rewrite, gloomy tone, jump scares, psychological pressure, terrifying imagery.",
|
||
"humor": "Humorous comedy rewrite, witty language, exaggerations, funny scenarios, relaxed energy.",
|
||
"literary": "Literary style rewrite, poetic and artistic language, deep emotional reflections.",
|
||
"adventure": "Hot-blooded adventure rewrite, passionate tone, battle scenes, friendship bonds, energetic storytelling.",
|
||
"name_default": "Rewrite Style - Default",
|
||
"name_xianxia": "Rewrite Style - Xianxia",
|
||
"name_romance": "Rewrite Style - Urban Romance",
|
||
"name_thriller": "Rewrite Style - Thriller Suspense",
|
||
"name_scifi": "Rewrite Style - Hard Sci-Fi",
|
||
"name_wuxia": "Rewrite Style - Wuxia",
|
||
"name_palace": "Rewrite Style - Palace Intrigue",
|
||
"name_military": "Rewrite Style - Modern Military",
|
||
"name_historical": "Rewrite Style - Historical Epic",
|
||
"name_supernatural": "Rewrite Style - Supernatural",
|
||
"name_campus": "Rewrite Style - Youth Campus",
|
||
"name_business": "Rewrite Style - Corporate Business",
|
||
"name_cyberpunk": "Rewrite Style - Cyberpunk",
|
||
"name_fantasy": "Rewrite Style - Western Fantasy",
|
||
"name_horror": "Rewrite Style - Horror Suspense",
|
||
"name_humor": "Rewrite Style - Humor Comedy",
|
||
"name_literary": "Rewrite Style - Poetic Literary",
|
||
"name_adventure": "Rewrite Style - Hot-blooded Adventure"
|
||
},
|
||
"prompts": {
|
||
"outline_system": "You are a professional novel outline planner and plot architect.",
|
||
"outline_user": "Please generate a full outline for a {genre} novel, Title: 《{title}》.\n\nCharacters: {character_setting}\n\nWorld: {world_setting}\n\nPlot: {plot_idea}\n\nStyle: {style_desc}\n\nRequirements:\n1. Total chapters: ~{total_chapters}\n2. Strict chapter format: Chapter X: Title - Brief plot description (50-100 words)\n3. Coherent plot, logical character development\n4. ONLY OUTPUT the outline list\n5. Must be captivating with good suspense\n6. Follow 3-act structure (25% beginning, 50% middle, 25% end)\n7. Every chapter needs a conflict or progress, no filler",
|
||
"chapter_system": "You are a top-tier novelist crafting captivating stories. Use natural human writing style. Avoid common AI clichés like starting with 'However', 'Furthermore'; overly perfect/preachy endings; relying purely on 'adverb+verb'; or grouping emotions in threes.",
|
||
"chapter_user": "Write chapter {chapter_num} for the novel 《{novel_title}》.\n\nChapter Title: {chapter_title}\nChapter Plan: {chapter_desc}\n\nCharacters: {character_setting}\nWorld: {world_setting}\nPlot Idea: {plot_idea}\n\nStyle: {style_desc}\n\nRequirements:\n1. Around {target_words} words\n2. Stick strictly to the chapter plan\n3. Dialogues must be natural and fit character profiles\n4. Leave a hook or suspense at the end\n5. 'Show, don't tell' principle for emotions\n6. Balance action, dialog, and thoughts\n7. ONLY OUTPUT the actual story text, no titles or meta-commentary{continuity_prompt}{context_prompt}",
|
||
"continuity_prompt": "\n\n【Previous Context】\n{previous_content}\n\n【Continuity Checklist】\n✓ Keep plot direction consistent\n✓ Match character states and positions\n✓ Continue to push forward established suspense\n✓ Dialog style is consistent\n✓ Do not repeat established info\n✓ Keep sub-plots advancing\n\nPlease ensure the content connects smoothly with the previous text.",
|
||
"context_prompt": "\n\n{context_summary}\n\nPlease read this summary of previous chapters to ensure narrative continuity.",
|
||
"rewrite_system": "You are a skilled fiction editor, excellent at rewriting text to be vivid and detailed.",
|
||
"rewrite_user": "Rewrite the following text based on this style, keeping the original plot but adding details:\n\nStyle: {style}\n\nOriginal Text:\n{text}\n\n【Crucial Specs】\n1. Output FULL rewritten text roughly as long as the original.\n2. NEVER output just 'Rewrite success' or similar status confirmed messages.\n3. Add multi-sensory details (smell, taste, touch).\n4. Enhance environmental descriptions to match moods.\n5. Do not include meta text or commentary.",
|
||
"summary_system": "You are an expert editor excelling at summarizing narratives.",
|
||
"summary_user": "Write a concise summary of the following text under {max_length} words.\n\nText:\n{text}\n\nSummary:",
|
||
"polish_system": "You are an elite literary editor, fine-tuning narrative text for flow and emotion.",
|
||
"polish_general": "Please thoroughly polish the following text, improving the prose, flow, and narrative quality.",
|
||
"polish_find_errors": "Please examine the text for typos, grammar flaws, logical plot holes, and propose fixes.",
|
||
"polish_suggest": "Read the text and propose actionable improvements on pacing, dialogue, character depth, etc.",
|
||
"polish_direct": "Directly edit and optimize the text, upgrading the prose to a professional author's level.",
|
||
"polish_remove_ai": "Remove the obvious AI tone from this text. Make it read 100% human, messy but authentic.",
|
||
"polish_enhance": "Enhance text details, expand descriptions, spatial awareness, and sensory inputs.",
|
||
"polish_dialogue": "Focus on optimizing dialogue, bringing out character voices and distinct personalities.",
|
||
"polish_pacing": "Adjust the pacing of this text, speeding up or slowing down where appropriate to draw the reader in.",
|
||
"polish_extra_req": "\n\nExtra Requests: {custom_requirements}",
|
||
"polish_output_only": "\n\nOriginal Text:\n{text}\n\nONLY output the requested polished result or suggestions.",
|
||
"polish_suggest_system": "You are a professional literary editor, expert at error-finding and stylistic improvements.",
|
||
"polish_suggest_user": "Analyze and optimize this text:\n\n1. Find errors (grammar, logic)\n2. Suggest improvements\n3. Direct revision (the final polished text)\n\nOriginal:\n{text}\n\n{extra_req}\n\nOutput format:\n---\n【Errors Found】\n...\n【Suggestions】\n...\n【Polished Text】\n...\n---",
|
||
"suggest_system": "You are a creative planner, building worlds and concepts for intriguing novels.",
|
||
"suggest_title_user": "Suggest about 10 titles for a fiction book.\n\nGenre: {genre}\n\nConditions:\n- Catchy, memorable.\n- Provide a short 1-line logline for each.\n- STRICT JSON OUTPUT ONLY: {\"suggestions\": [{\"title\": \"Title 1\", \"description\": \"Desc\"}]}\n- No markdown tags, no chatting.",
|
||
"suggest_char_user": "Create a detailed cast setting.\n\nTitle Concept: {title}\nGenre: {genre}\nNeed:\n- {num_main_chars} Main\n- {num_sub_chars} Villain/Support\n\nProvide names, traits, abilities, and deep motivations. Just output the content.",
|
||
"suggest_world_user": "Design a world setting (150-200 words).\n\nTitle Concept: {title}\nGenre: {genre}\n\nOutput details of rules, powers, history, and social structures. Just the content.",
|
||
"suggest_plot_user": "Design the core main plot (200-250 words).\n\nTitle: {title}\nGenre: {genre}\nCharacters: {character_setting}\nWorld: {world_setting}\n\nInclude a hook, mid-point twist, and climax. Just output the plot.",
|
||
"continue_system": "You are an amazing long-form novelist. Your narratives flow beautifully from scene to scene.",
|
||
"continue_user": "Continue the next chapter of 《{novel_title}》.\n\n【Base Lore】\nChar: {character_setting}\nWorld: {world_setting}\nPlot: {plot_idea}\n\n【Style】\n{style_desc}\n\n【Recent Text】(~1500 words)\n{previous_content}\n\n【Rules】\n1. Continue naturally\n2. Match previous tone, dialogue, state\n3. ~{target_words} words\n4. DO NOT repeat\n5. ONLY actual text, no titles.",
|
||
"chapter_summary_system": "You are an editor, summarizing key plot points.",
|
||
"chapter_summary_user": "Summarize this chapter (100-200 words).\n\nTitle: {chapter_title}\n\nContent:\n{chapter_content}\n\nMust include all critical conflicts and character reveals. Only output the summary.",
|
||
"style_description": "Style: {writing_style}\nTone: {writing_tone}\nCharacterization: {character_development}\nComplexity: {plot_complexity}",
|
||
"context_header": "【Context Summary】\n",
|
||
"chapter_context_line": "Chapter {chapter_num}: {summary}\n",
|
||
"found_errors_header": "Errors Found",
|
||
"suggestions_header": "Suggestions",
|
||
"polished_text_header": "Polished Text",
|
||
"ai_no_format": "AI did not follow formatting, check results."
|
||
},
|
||
"generator": {
|
||
"title_empty": "Novel title cannot be empty",
|
||
"char_empty": "Character setting cannot be empty",
|
||
"world_empty": "World setting cannot be empty",
|
||
"plot_empty": "Plot setting cannot be empty",
|
||
"outline_empty": "Outline is empty",
|
||
"outline_parse_failed": "Failed to parse any chapters from outline, check formatting",
|
||
"outline_parse_success": "Parse successful, {count} chapters",
|
||
"outline_gen_success": "Outline generated successfully",
|
||
"gen_success": "Generation successful",
|
||
"suggest_success": "Inspiration generated",
|
||
"text_empty": "Text is empty",
|
||
"text_too_long_rewrite": "Text too long (>20000 words), please split",
|
||
"text_too_long_polish": "Text too long (>10000 words), please split",
|
||
"existing_text_empty": "Existing text is empty",
|
||
"chapter_content_empty": "Chapter content is empty",
|
||
"api_empty_content": "API returned empty content",
|
||
"api_status_msg": "API returned status msg instead of content",
|
||
"rewrite_success": "Rewrite successful",
|
||
"rewrite_too_short": "Rewrite too short ({length} chars)",
|
||
"rewrite_failed_retries": "Rewrite failed after {max} retries",
|
||
"polish_success": "Polish successful",
|
||
"polish_too_short": "Polished too short ({length} chars)",
|
||
"polish_failed_retries": "Polish failed after {max} retries",
|
||
"continue_success": "Continue successful",
|
||
"continue_too_short": "Continue too short ({length} chars)",
|
||
"continue_failed_retries": "Continue failed after {max} retries",
|
||
"summary_success": "Success",
|
||
"summary_gen_success": "Summary generated",
|
||
"summary_gen_failed": "Summary failed",
|
||
"summary_gen_error": "Error creating summary: {error}",
|
||
"cache_id_empty": "Project ID cannot be empty",
|
||
"cache_data_empty": "Cache data cannot be empty",
|
||
"cache_save_success": "Cache saved",
|
||
"cache_save_failed": "Cache save failed: {error}",
|
||
"cache_not_found": "Cache not found",
|
||
"cache_load_success": "Cache loaded",
|
||
"cache_load_failed": "Cache load failed: {error}",
|
||
"cache_clear_success": "Cache cleared",
|
||
"cache_clear_failed": "Cache clear failed: {error}",
|
||
"summary_empty": "Summary cannot be empty",
|
||
"summary_save_success": "Summary saved",
|
||
"summary_save_failed": "Summary save failed: {error}",
|
||
"summary_dir_not_found": "Summary directory not found",
|
||
"summary_load_done": "Loaded {count} chapter summaries",
|
||
"summary_load_failed": "Summary load failed: {error}",
|
||
"summary_clear_success": "Summary cache cleared",
|
||
"summary_clear_failed": "Summary clear failed: {error}",
|
||
"unknown_title": "Unknown"
|
||
},
|
||
"exporter": {
|
||
"no_content": "No content to export",
|
||
"no_chapters": "Could not extract chapters from text",
|
||
"export_success": "Export successful: {filename}",
|
||
"export_failed": "Export failed: {error}",
|
||
"missing_docx": "Error: python-docx missing. Run: pip install python-docx",
|
||
"missing_markdown": "Error: markdown missing. Run: pip install markdown",
|
||
"generated_at": "Generated at: {datetime}",
|
||
"generated_date": "Generated date: {date}",
|
||
"first_chapter": "Chapter 1",
|
||
"body_font": "Arial",
|
||
"title_font": "Arial Black"
|
||
},
|
||
"config_api": {
|
||
"name_required": "Name is required",
|
||
"type_required": "Type is required",
|
||
"model_required": "Model is required",
|
||
"name_exists": "Backend '{name}' already exists",
|
||
"add_success": "Backend '{name}' added",
|
||
"add_failed": "Failed to add backend: {error}",
|
||
"update_success": "Backend '{name}' updated",
|
||
"update_not_found": "Backend not found: {name}",
|
||
"update_failed": "Update failed: {error}",
|
||
"delete_success": "Backend '{name}' deleted",
|
||
"delete_not_found": "Backend not found: {name}",
|
||
"delete_failed": "Delete failed: {error}",
|
||
"toggle_success": "Backend '{name}' is {status}",
|
||
"toggle_enabled": "Enabled",
|
||
"toggle_disabled": "Disabled",
|
||
"toggle_not_found": "Backend not found: {name}",
|
||
"toggle_failed": "Toggle failed: {error}",
|
||
"test_success": "Backend '{name}' tested OK",
|
||
"test_not_found": "Backend not found: {name}",
|
||
"test_failed": "Test failed: {error}",
|
||
"test_prompt": "Please reply 'OK' to confirm API connection.",
|
||
"export_success": "Config exported to: {filepath}",
|
||
"export_failed": "Export config failed: {error}",
|
||
"default_success": "Set '{name}' as default backend",
|
||
"default_failed": "Failed to set default: {error}"
|
||
},
|
||
"project_manager": {
|
||
"create_success": "Project '{title}' created",
|
||
"create_failed": "Create project failed: {error}",
|
||
"save_success": "Project '{title}' saved",
|
||
"save_failed": "Save project failed: {error}",
|
||
"load_success": "Project loaded",
|
||
"load_not_found": "Project not found: {id}",
|
||
"load_failed": "Load failed: {error}",
|
||
"delete_success": "Project deleted",
|
||
"delete_not_found": "Project not found: {id}",
|
||
"delete_failed": "Delete failed: {error}",
|
||
"export_success": "Exported to: {filepath}",
|
||
"export_failed": "Export failed: {error}"
|
||
},
|
||
"ui": {
|
||
"col_project_name": "Project Name",
|
||
"col_type": "Type",
|
||
"col_created_at": "Created At",
|
||
"col_updated_at": "Updated At",
|
||
"col_chapters": "Chapters",
|
||
"col_completion": "Completion",
|
||
"col_current_chapter": "Current Chap",
|
||
"col_total_chapters": "Total Chaps",
|
||
"col_status": "Status",
|
||
"col_cache_time": "Cache Time",
|
||
"col_size_kb": "Size(KB)",
|
||
"col_project_id": "Project ID",
|
||
"col_chapter_count": "Chap Count",
|
||
"col_name": "Name",
|
||
"col_backend_type": "Type",
|
||
"col_model": "Model",
|
||
"col_enabled": "Enabled",
|
||
"col_timeout": "Timeout(s)",
|
||
"col_retry_times": "Retries",
|
||
"col_test": "🧪 Test",
|
||
"col_default": "⭐ Default",
|
||
"no_projects": "No projects",
|
||
"no_cache": "No caches",
|
||
"no_summary_cache": "No summary caches",
|
||
"found_projects": "Found {count} projects",
|
||
"found_caches": "Found {count} caches",
|
||
"found_summary_caches": "Found {count} summary caches",
|
||
"cache_total_size_kb": "Total cache: {size} KB",
|
||
"cache_total_size_mb": "Total cache: {size} MB",
|
||
"summary_total_size_kb": "Total summary cache: {size} KB",
|
||
"summary_total_size_mb": "Total summary cache: {size} MB",
|
||
"get_cache_size_failed": "Failed to get cache size",
|
||
"get_summary_size_failed": "Failed to get summary size",
|
||
"cleared_caches": "✅ Cleared {cleared}/{total} caches",
|
||
"cleared_summary_caches": "✅ Cleared {cleared}/{total} summary caches",
|
||
"no_cache_to_clear": "❌ No cache to clear",
|
||
"no_summary_to_clear": "❌ No summary to clear",
|
||
"select_cache_to_clear": "❌ Select a cache to clear",
|
||
"cache_found_info": "Cache found: {current}/{total} chaps done",
|
||
"cache_timestamp_info": "Cached at: {time}",
|
||
"cache_check_failed": "Check failed",
|
||
"no_content_export": "❌ No content to export",
|
||
"no_title_export": "❌ Please provide a title",
|
||
"unsupported_format": "❌ Unsupported format: {format}",
|
||
"export_success": "✅ Export success!",
|
||
"export_failed": "❌ Export fail: {error}",
|
||
"export_error": "❌ Export error: {error}",
|
||
"select_project": "❌ Please select a project",
|
||
"project_not_exist": "❌ Project '{title}' not found",
|
||
"metadata_not_exist": "❌ Project metadata file not found: {file}",
|
||
"no_exportable_content": "❌ No exportable content",
|
||
"file_not_exist": "❌ File not found: {file}",
|
||
"export_no_filepath": "❌ Export failed: no path returned",
|
||
"fill_required_fields": "❌ Fill all required fields (Name, Type, Model)",
|
||
"api_key_required": "❌ API Key required for this type",
|
||
"enter_backend_name": "❌ Enter backend name",
|
||
"enter_delete_name": "❌ Enter backend to delete",
|
||
"refreshed_backends": "✅ Backends refreshed",
|
||
"backend_loaded_for_edit": "✅ Backend '{name}' loaded for edit",
|
||
"backend_test_header": "Backend Connection Test:\n",
|
||
"backend_available": "✓ Available",
|
||
"backend_unavailable": "✗ Unavailable",
|
||
"save_success": "Saved successfully",
|
||
"save_failed": "Save failed: {error}",
|
||
"no_file": "No file",
|
||
"perf_no_data": "No performance data",
|
||
"perf_report_header": "=== Performance Report ===\n",
|
||
"perf_stat_line": "{name}: avg={avg:.2f}ms, max={max:.2f}ms, min={min:.2f}ms, count={count}\n",
|
||
"validation_api_key_empty": "API Key cannot be empty",
|
||
"validation_unknown_provider": "Unknown provider",
|
||
"validation_openai_key_format": "OpenAI key must start with 'sk-'",
|
||
"validation_anthropic_key_format": "Anthropic key must start with 'sk-ant-'",
|
||
"validation_google_key_format": "Invalid Google key format",
|
||
"validation_key_format_invalid": "Invalid API key format",
|
||
"validation_key_passed": "Key validated",
|
||
"validation_model_empty": "Model empty",
|
||
"validation_model_invalid": "Invalid model characters",
|
||
"validation_model_passed": "Model validated",
|
||
"outline_chapter_format": "<details>\n<summary><b>Chapter {num}: {title}</b> <i>(Click to expand)</i></summary>\n<br>\n\n{content}\n\n</details>\n\n",
|
||
"outline_chapter_format_open": "<details open>\n<summary><b>Chapter {num}: {title}</b> <i>(Click to expand)</i></summary>\n<br>\n\n{content}\n\n</details>\n\n",
|
||
"segment_format": "<details open>\n<summary><b>Segment {num}</b> <i>(Click to expand)</i></summary>\n<br>\n\n{content}\n\n</details>\n\n",
|
||
"content_format": "<details open>\n<summary><b>Content</b> <i>(Click to expand)</i></summary>\n<br>\n\n{content}\n\n</details>\n\n",
|
||
"rewritten_segments_summary": "All Segments",
|
||
"view_all": "🔍 View All",
|
||
"chapter": "Chapter",
|
||
"segment": "Segment",
|
||
"select_chapter_to_view": "📑 Select Chapter to View",
|
||
"select_segment_to_view": "📑 Select Segment to View"
|
||
},
|
||
"api_client": {
|
||
"no_backends": "Error: No backends enabled",
|
||
"invalid_messages": "Error: messages must be a non-empty list",
|
||
"no_api_client": "Error: No API client loaded",
|
||
"invalid_content": "API returned invalid content ({length} chars)",
|
||
"error_prefix": "Error: {error}",
|
||
"retry_failed": "Failed after {max} retries",
|
||
"rate_limit_error": "Rate limit: {error}",
|
||
"auth_error": "Auth Error: Check your API Key ({error})",
|
||
"connection_error": "Connection error: {error}",
|
||
"api_error": "API Error: {error}",
|
||
"test_prompt": "You are a helpful assistant",
|
||
"test_hello": "Hello",
|
||
"gen_image_success": "Image generated",
|
||
"gen_image_failed": "Image generation failed: {error}",
|
||
"image_gen_unsupported": "This provider does not support image generation."
|
||
},
|
||
"file_parser": {
|
||
"no_file": "No file",
|
||
"file_too_large": "File too large ({size}MB > 50MB)",
|
||
"parse_complete": "Parse complete, {count} segments, ~{chars} chars",
|
||
"read_failed": "Read failed: {error}",
|
||
"missing_pymupdf": "Missing PyMuPDF. Run: pip install PyMuPDF",
|
||
"missing_ebooklib": "Missing ebooklib/bs4. Run: pip install ebooklib beautifulsoup4",
|
||
"missing_docx": "Missing python-docx. Run: pip install python-docx",
|
||
"unsupported_format": "Unsupported format (supports txt/pdf/epub/md/docx)",
|
||
"unsupported_chapter_format": "Unsupported chapter format",
|
||
"chapter_parse_complete": "Parse complete, {count} chapters",
|
||
"chapter_parse_failed": "Parse failed: {error}",
|
||
"split_word_done": "Split by word done, {count} segments, ~{words} chars each",
|
||
"split_pattern_empty": "Split pattern cannot be empty",
|
||
"word_count_positive": "Word count must be >0",
|
||
"invalid_regex": "Invalid regex: {error}",
|
||
"file_not_exist": "File not found: {path}",
|
||
"upload_read_failed": "Upload read failed: {error}"
|
||
},
|
||
"config": {
|
||
"backend_name_empty": "Backend name empty",
|
||
"unsupported_type": "Unsupported type: {type}",
|
||
"base_url_invalid": "Base URL must start with http/https",
|
||
"api_key_empty": "API Key empty",
|
||
"model_empty": "Model empty",
|
||
"timeout_range": "Timeout must be 5-10000",
|
||
"retry_range": "Retry must be 1-10",
|
||
"temp_range": "Temperature must be 0.1-2.0",
|
||
"top_p_range": "Top_p must be 0.1-1.0",
|
||
"max_tokens_range": "Max tokens must be 100-100000",
|
||
"chapter_words_range": "Chapter words must be 500-65536",
|
||
"backend_exists": "Backend '{name}' already exists",
|
||
"backend_add_success": "Backend added",
|
||
"backend_update_success": "Backend updated",
|
||
"backend_not_found": "Backend '{name}' not found",
|
||
"backend_delete_success": "Backend '{name}' deleted",
|
||
"gen_params_update_success": "Params updated",
|
||
"config_export_success": "Exported to {filepath}",
|
||
"config_export_failed": "Export failed: {error}",
|
||
"config_save_success": "Config saved",
|
||
"config_save_failed": "Config save failed: {error}",
|
||
"config_load_success": "Config loaded",
|
||
"config_file_not_found": "No config found, using default",
|
||
"config_load_failed": "Config load failed: {error}",
|
||
"config_file_missing": "Config missing: {path}",
|
||
"config_format_unsupported": "Format unsupported: {ext}",
|
||
"default_backend_name": "Local Ollama"
|
||
}
|
||
} |