{ "common": { "you": "You", "confirm": "Confirm", "cancel": "Cancel", "loading": "Loading..." }, "home": { "slogan": "Generative Learning in Multi-Agent Interactive Classroom", "greetingWithName": "Hi, {{name}}" }, "toolbar": { "pdfParser": "Parser", "pdfUpload": "Upload PDF", "removePdf": "Remove file", "webSearchOn": "Enabled", "webSearchOff": "Click to enable", "webSearchDesc": "Search the web for up-to-date information before generation", "webSearchProvider": "Search engine", "webSearchNoProvider": "Configure search API key in Settings", "selectProvider": "Select provider", "configureProvider": "Set up model", "configureProviderHint": "Configure at least one model provider to generate courses", "enterClassroom": "Enter Classroom", "advancedSettings": "Advanced Settings", "thinking": "Thinking", "thinkingBudget": "Budget", "default": "Default", "on": "On", "off": "Off", "auto": "Auto", "dynamic": "Dynamic", "ttsTitle": "Text-to-Speech", "ttsHint": "Choose a voice for the AI teacher", "ttsPreview": "Preview", "ttsPreviewing": "Playing...", "interactiveModeHint": "Enable interactive-first mode for more hands-on content", "interactiveModeLabel": "Interactive Mode" }, "export": { "pptx": "Export PPTX", "resourcePack": "Export Resource Pack", "resourcePackDesc": "PPTX + interactive pages", "exporting": "Exporting...", "exportSuccess": "Export successful", "exportFailed": "Export failed", "classroomZip": "Export Classroom ZIP", "classroomZipDesc": "Course structure + media files" }, "import": { "classroom": "Import Classroom", "parsing": "Parsing ZIP...", "validating": "Validating data...", "writingMedia": "Writing media files...", "writingCourse": "Writing course data...", "success": "Classroom imported successfully", "error": { "invalidZip": "Invalid file. Please select a valid .maic.zip file.", "invalidManifest": "Invalid classroom file: manifest.json is missing or corrupted.", "missingData": "Invalid classroom file: missing required course data.", "storageFull": "Import failed: browser storage is full. Try clearing old classrooms." } }, "chat": { "lecture": "Lecture", "noConversations": "No conversations", "startConversation": "Type a message below to begin chatting", "noMessages": "No messages yet", "ended": "ended", "unknown": "Unknown", "stopDiscussion": "Stop Discussion", "endQA": "End Q&A", "tabs": { "lecture": "Notes", "chat": "Chat" }, "lectureNotes": { "empty": "Notes will appear here after lecture playback", "emptyHint": "Press play to start the lecture", "pageLabel": "Page {{n}}", "currentPage": "Current" }, "badge": { "qa": "Q&A", "discussion": "DISC", "lecture": "LEC" } }, "actions": { "names": { "spotlight": "Spotlight", "laser": "Laser", "wb_open": "Open Whiteboard", "wb_draw_text": "Whiteboard Text", "wb_draw_shape": "Whiteboard Shape", "wb_draw_chart": "Whiteboard Chart", "wb_draw_latex": "Whiteboard Formula", "wb_draw_table": "Whiteboard Table", "wb_draw_line": "Whiteboard Line", "wb_clear": "Clear Whiteboard", "wb_delete": "Delete Element", "wb_close": "Close Whiteboard", "discussion": "Discussion" }, "status": { "inputStreaming": "Waiting", "inputAvailable": "Executing", "outputAvailable": "Completed", "outputError": "Error", "outputDenied": "Denied", "running": "Executing", "result": "Completed", "error": "Error" } }, "agentBar": { "readyToLearn": "Ready to learn together?", "expandedTitle": "Classroom Role Config", "configTooltip": "Click to configure classroom roles", "voiceLabel": "Voice", "voiceLoading": "Loading...", "voiceAutoAssign": "Voices will be auto-assigned", "searchVoice": "Search voices", "noMatchingVoices": "No matching voices" }, "proactiveCard": { "discussion": "Discussion", "join": "Join", "skip": "Skip", "pause": "Pause", "resume": "Resume" }, "voice": { "startListening": "Voice input", "stopListening": "Stop recording" }, "stage": { "currentScene": "Current Scene", "generating": "Generating...", "paused": "Paused", "generationFailed": "Generation failed", "confirmSwitchTitle": "Switch Scene", "confirmSwitchMessage": "A topic is currently in progress. Switching scenes will end the current topic. Are you sure?", "generatingNextPage": "Scene is being generated, please wait...", "courseComplete": "Course complete", "fullscreen": "Fullscreen", "exitFullscreen": "Exit Fullscreen" }, "classroomComplete": { "title": "Course complete", "trailLabels": { "slide": "pages", "quiz": "quizzes", "interactive": "interactives", "pbl": "projects" }, "quizScoreLabel": "{{correct}} / {{total}} correct", "encouragement": { "high": "Outstanding — you nailed it.", "mid": "Solid work — keep it up.", "low": "A good start — review and try again." } }, "whiteboard": { "title": "Interactive Whiteboard", "open": "Open Whiteboard", "clear": "Clear Whiteboard", "minimize": "Minimize Whiteboard", "ready": "Whiteboard is ready", "readyHint": "Elements will appear here when added by AI", "clearSuccess": "Whiteboard cleared successfully", "clearError": "Failed to clear whiteboard: ", "resetView": "Reset View", "restoreError": "Failed to restore whiteboard: ", "history": "History", "restore": "Restore", "noHistory": "No history yet", "restored": "Whiteboard restored", "elementCount": "{{count}} elements" }, "quiz": { "title": "Quiz", "subtitle": "Test your knowledge", "questionsCount": "questions", "totalPrefix": "", "pointsSuffix": "pts", "startQuiz": "Start Quiz", "multipleChoiceHint": "(Multiple choice — select all correct answers)", "inputPlaceholder": "Type your answer here...", "charCount": "chars", "yourAnswer": "Your answer:", "notAnswered": "Not answered", "aiComment": "AI Feedback", "singleChoice": "Single", "multipleChoice": "Multiple", "shortAnswer": "Short answer", "analysis": "Analysis: ", "excellent": "Excellent!", "keepGoing": "Keep going!", "needsReview": "Needs review", "correct": "correct", "incorrect": "incorrect", "answering": "In Progress", "submitAnswers": "Submit Answers", "aiGrading": "AI is grading...", "aiGradingWait": "Please wait, analyzing your answers", "quizReport": "Quiz Report", "retry": "Retry" }, "roundtable": { "teacher": "TEACHER", "you": "YOU", "inputPlaceholder": "Type your message...", "listening": "Listening...", "processing": "Processing...", "noSpeechDetected": "No speech detected, please try again", "discussionEnded": "Discussion ended", "qaEnded": "Q&A ended", "thinking": "Thinking", "yourTurn": "Your turn", "stopDiscussion": "Stop Discussion", "autoPlay": "Auto-play", "autoPlayOff": "Stop auto-play", "speed": "Speed", "voiceInput": "Voice input", "voiceInputDisabled": "Voice input disabled", "textInput": "Text input", "stopRecording": "Stop recording", "startRecording": "Start recording" }, "pbl": { "legacyFormat": "This PBL scene uses a legacy format. Please regenerate the course.", "emptyProject": "PBL project has not been generated yet. Please create via course generation.", "roleSelection": { "title": "Choose Your Role", "description": "Select a role to start collaborating on the project" }, "workspace": { "restart": "Restart", "confirmRestart": "Reset all progress?", "confirm": "Confirm", "cancel": "Cancel" }, "issueboard": { "title": "Issue Board", "noIssues": "No issues yet", "statusDone": "Done", "statusActive": "Active", "statusPending": "Pending" }, "chat": { "title": "Project Discussion", "currentIssue": "Current Issue", "mentionHint": "Use @question to ask, @judge to submit for review", "placeholder": "Type a message...", "send": "Send", "issueCompleteMessage": "Issue \"{{completed}}\" completed! Moving to next issue: \"{{next}}\"", "allCompleteMessage": "🎉 All issues completed! Great work on the project!" }, "guide": { "howItWorks": "How it works", "help": "Help", "title": "Help", "step1": { "title": "Step 1: Choose a Role", "desc": "After the project is generated, select a role from the list (non-system roles marked with 🟢)" }, "step2": { "title": "Step 2: Complete Issues", "desc": "Each issue represents a learning task:", "s1": { "title": "View current Issue", "desc": "Check the issue's title, description, and assignee" }, "s2": { "title": "Get guidance", "example": "@question Where should I start?\n@question How do I implement this feature?", "desc": "The Question Agent provides guiding questions and hints (no direct answers)" }, "s3": { "title": "Submit your work", "example": "@judge I'm done, please check my Notes", "desc": "The Judge Agent evaluates your work and gives feedback:", "complete": "Automatically moves to the next issue", "revision": "Improve based on feedback" } }, "step3": { "title": "Step 3: Complete the Project", "desc": "When all issues are done, the system displays \"🎉 Project Complete!\"" } } }, "share": { "notReady": "Available after generation completes" }, "classroom": { "recentClassrooms": "Recent", "today": "Today", "yesterday": "Yesterday", "daysAgo": "days ago", "slides": "slides", "nameCopied": "Name copied", "deleteConfirmTitle": "Delete", "delete": "Delete", "rename": "Rename", "renamePlaceholder": "Enter classroom name", "renameFailed": "Failed to rename classroom", "searchPlaceholder": "Search courses...", "searchAriaLabel": "Search courses", "clearSearch": "Clear", "searchEmpty": "No courses match your search" }, "upload": { "pdfSizeLimit": "Supports PDF files up to 50MB", "generateFailed": "Failed to generate classroom, please try again", "requirementPlaceholder": "Tell me anything you want to learn, e.g.\n\"Teach me Python from scratch in 30 minutes\"\n\"Explain Fourier Transform on the whiteboard\"\n\"How to play the board game Avalon\"", "requirementRequired": "Please enter course requirements", "fileTooLarge": "File too large. Please select a PDF file smaller than 50MB" }, "generation": { "analyzingPdf": "Analyzing PDF Document", "analyzingPdfDesc": "Extracting document structure and content...", "pdfLoadFailed": "Failed to load PDF file, please try again", "pdfParseFailed": "PDF parsing failed", "streamNotReadable": "Unable to read generation stream", "generatingOutlines": "Drafting Course Outline", "generatingOutlinesDesc": "Structuring the learning path...", "generatingSlideContent": "Generating Page Content", "generatingSlideContentDesc": "Creating slides, quizzes, and interactive content...", "generatingActions": "Generating Teaching Actions", "generatingActionsDesc": "Orchestrating narration, spotlights, and interactions...", "generationComplete": "Generation complete!", "generationFailed": "Generation failed", "generatingCourse": "Generating course", "openingClassroom": "Opening classroom...", "outlineReady": "Course outline generated", "generatingFirstPage": "Generating first page...", "firstPageReady": "First page ready! Opening classroom...", "speechFailed": "Speech generation failed", "retryScene": "Retry", "retryingScene": "Regenerating...", "backToHome": "Back to Home", "sessionNotFound": "Session Not Found", "sessionNotFoundDesc": "Please fill in course requirements to start the generation process.", "goBackAndRetry": "Go Back and Retry", "classroomReady": "Your personalized AI learning environment has been generated successfully.", "aiWorking": "AI Agents Working...", "textTruncated": "Document text is long, using first {{n}} characters for generation", "imageTruncated": "{{total}} images found, exceeding the {{max}} image limit. Extra images will use text descriptions only", "agentGeneration": "Generating Classroom Roles", "agentGenerationDesc": "Generating roles based on course content...", "agentRevealTitle": "Your Classroom Roles", "viewAgents": "View Roles", "continue": "Continue", "outlineRetrying": "Outline generation issue, retrying...", "outlineEmptyResponse": "Model returned no valid outlines. Please check model configuration and try again", "outlineGenerateFailed": "Outline generation failed, please try again later", "webSearching": "Web Search", "webSearchingDesc": "Searching the web for up-to-date information", "webSearchFailed": "Web search failed" }, "settings": { "title": "Settings", "description": "Configure application settings", "language": "Language", "languageDesc": "Select interface language", "theme": "Theme", "themeDesc": "Select theme mode (Light/Dark/System)", "themeOptions": { "light": "Light", "dark": "Dark", "system": "System" }, "apiKey": "API Key", "apiKeyDesc": "Configure your API key", "apiBaseUrl": "API Endpoint URL", "apiBaseUrlDesc": "Configure your API endpoint URL", "apiKeyRequired": "API key cannot be empty", "model": "Model Configuration", "modelDesc": "Configure AI models", "modelPlaceholder": "Enter or select model name", "ttsModel": "TTS Model", "ttsModelDesc": "Configure TTS models", "ttsModelPlaceholder": "Enter or select TTS model name", "ttsModelOptions": { "openaiTts": "OpenAI TTS", "azureTts": "Azure TTS" }, "availableModels": "Available Models", "modelSelectedViaVoice": "Model is determined by voice selection", "testConnection": "Test Connection", "testConnectionDesc": "Test current API configuration is available", "testing": "Testing...", "agentSettings": "Agent Settings", "agentSettingsDesc": "Select the agents to participate in the conversation. Select 1 for single agent mode, select multiple for multi-agent collaborative mode.", "agentMode": "Agent Mode", "agentModePreset": "Preset", "agentModeAuto": "Auto-generate", "agentModeAutoDesc": "AI will automatically generate appropriate roles", "autoAgentCount": "Agent Count", "autoAgentCountDesc": "Number of agents to auto-generate (including teacher)", "atLeastOneAgent": "Please select at least 1 agent", "singleAgentMode": "Single Agent Mode", "directAnswer": "Direct Answer", "multiAgentMode": "Multi-Agent Mode", "agentsCollaborating": "Collaborative Discussion", "agentsCollaboratingCount": "{{count}} agents selected for collaborative discussion", "maxTurns": "Max Discussion Turns", "maxTurnsDesc": "The maximum number of discussion turns between agents (each agent completes actions and reply counts as one turn)", "priority": "Priority", "actions": "Actions", "actionCount": "{{count}} actions", "selectedAgent": "Selected Agent", "selectedAgents": "Selected Agents", "required": "Required", "agentNames": { "default-1": "AI Teacher", "default-2": "AI Assistant", "default-3": "Class Clown", "default-4": "Curious Mind", "default-5": "Note Taker", "default-6": "Deep Thinker" }, "agentRoles": { "teacher": "Teacher", "assistant": "Assistant", "student": "Student" }, "agentDescriptions": { "default-1": "Lead teacher with clear and structured explanations", "default-2": "Supports learning and helps clarify key points", "default-3": "Brings humor and energy to the classroom", "default-4": "Always curious, loves asking why and how", "default-5": "Diligently records and organizes class notes", "default-6": "Thinks deeply and explores the essence of topics" }, "close": "Close", "save": "Save", "providers": "LLM", "addProviderDescription": "Add custom model providers to extend available AI models", "providerNames": { "openai": "OpenAI", "anthropic": "Claude", "google": "Gemini", "deepseek": "DeepSeek", "qwen": "Qwen", "kimi": "Kimi", "minimax": "MiniMax", "glm": "GLM", "siliconflow": "SiliconFlow", "doubao": "Doubao", "openrouter": "OpenRouter", "grok": "Grok", "tencent-hunyuan": "Tencent Hunyuan", "xiaomi": "Xiaomi MiMo", "ollama": "Ollama (Local)" }, "providerTypes": { "openai": "OpenAI Protocol", "anthropic": "Claude Protocol", "google": "Gemini Protocol" }, "modelCount": "models", "modelSingular": "model", "defaultModel": "Default Model", "webSearch": "Web Search", "mcp": "MCP", "knowledgeBase": "Knowledge Base", "documentParser": "Document Parser", "conversationSettings": "Conversation", "keyboardShortcuts": "Shortcuts", "generalSettings": "General", "systemSettings": "System", "addProvider": "Add", "importFromClipboard": "Import from Clipboard", "apiSecret": "API Key", "apiHost": "Base URL", "baseUrlRegion": { "china": "China", "international": "International" }, "requestUrl": "Request URL", "models": "Models", "addModel": "Add", "reset": "Reset", "fetch": "Fetch", "connectionSuccess": "Connection successful", "connectionFailed": "Connection failed", "capabilities": { "vision": "Vision", "tools": "Tools", "streaming": "Streaming" }, "contextWindow": "Context", "contextShort": "ctx", "outputWindow": "Output", "addProviderButton": "Add", "addProviderDialog": "Add Model Provider", "providerName": "Name", "providerNamePlaceholder": "e.g., My OpenAI Proxy", "providerNameRequired": "Please enter provider name", "providerApiMode": "API Mode", "apiModeOpenAI": "OpenAI Protocol", "apiModeAnthropic": "Claude Protocol", "apiModeGoogle": "Gemini Protocol", "defaultBaseUrl": "Default Base URL", "providerIcon": "Provider Icon URL", "requiresApiKey": "Requires API Key", "deleteProvider": "Delete Provider", "deleteProviderConfirm": "Are you sure you want to delete this provider?", "addCustomTTSProvider": "Add Custom TTS Provider", "addCustomASRProvider": "Add Custom ASR Provider", "addCustomAudioProviderDescription": "Add a custom OpenAI-compatible audio provider", "customVoices": "Voices", "voiceIdPlaceholder": "Voice ID (e.g. alloy)", "voiceNamePlaceholder": "Display Name", "addVoice": "Add", "modelNamePlaceholder": "Optional", "defaultModelHint": "Model name sent in API requests (e.g. kokoro, tts-1)", "noVoicesAdded": "No voices added yet. Add voices below for per-agent selection.", "noModelsAdded": "No models added yet. Add models below to enable model selection.", "noModelsWarning": "Please add at least one model below before using this provider.", "asrNoTranscription": "No transcription generated. Try speaking louder or longer.", "cannotDeleteBuiltIn": "Cannot delete built-in provider", "resetToDefault": "Reset to Default", "resetToDefaultDescription": "Restore model list to default configuration (API key and Base URL will be preserved)", "resetConfirmDescription": "This will remove all custom models and restore the built-in default model list. API key and Base URL will be preserved.", "confirmReset": "Confirm Reset", "resetSuccess": "Successfully reset to default configuration", "saveSuccess": "Settings saved", "saveFailed": "Failed to save settings, please try again", "cannotDeleteBuiltInModel": "Cannot delete built-in model", "cannotEditBuiltInModel": "Cannot edit built-in model", "modelIdRequired": "Please enter model ID", "noModelsAvailable": "No models available for testing", "providerMetadata": "Provider Metadata", "editModel": "Edit Model", "editModelDescription": "Edit model configuration and capabilities", "addNewModel": "New Model", "modelsManagementDescription": "Manage the models and capabilities available for this provider.", "addNewModelDescription": "Add a new model configuration", "modelId": "Model ID", "modelIdPlaceholder": "e.g., gpt-4o", "modelName": "Display Name", "modelCapabilities": "Capabilities", "advancedSettings": "Advanced Settings", "contextWindowLabel": "Context Window", "contextWindowPlaceholder": "e.g., 128000", "outputWindowLabel": "Max Output Tokens", "outputWindowPlaceholder": "e.g., 4096", "testModel": "Test Model", "deleteModel": "Delete", "cancelEdit": "Cancel", "saveModel": "Save", "howToUse": "How to Use", "step1ConfigureProvider": "Go to \"Model Providers\", select or add a provider, and configure connection settings (API key, Base URL, etc.)", "step2SelectModel": "Select the model you want to use in \"Active Model\" below", "step3StartUsing": "After saving, the system will use your selected model", "activeModel": "Active Model", "activeModelDescription": "Select the model for AI conversations and content generation", "selectModel": "Select Model", "searchModels": "Search models", "noModelsFound": "No matching models found", "noConfiguredProviders": "No configured providers", "configureProvidersFirst": "Please configure provider connection settings in \"Model Providers\" on the left", "currentlyUsing": "Currently using", "ttsSettings": "Text-to-Speech", "asrSettings": "Speech Recognition", "audioSettings": "Audio Settings", "ttsSection": "Text-to-Speech (TTS)", "asrSection": "Automatic Speech Recognition (ASR)", "ttsDescription": "TTS (Text-to-Speech) - Convert text to speech", "asrDescription": "ASR (Automatic Speech Recognition) - Convert speech to text", "enableTTS": "Enable Text-to-Speech", "ttsEnabledDescription": "When enabled, speech audio will be generated during course creation", "ttsVoiceConfigHint": "Per-agent voice can be configured in \"Classroom Role Config\" on the homepage", "enableASR": "Enable Speech Recognition", "asrEnabledDescription": "When enabled, students can use microphone for voice input", "ttsProvider": "TTS Provider", "ttsLanguageFilter": "Language Filter", "allLanguages": "All Languages", "ttsVoice": "Voice", "ttsSpeed": "Speed", "ttsBaseUrl": "Base URL", "ttsApiKey": "API Key", "doubaoAppId": "App ID", "doubaoAccessKey": "Access Key", "asrProvider": "ASR Provider", "asrLanguage": "Recognition Language", "asrBaseUrl": "Base URL", "asrApiKey": "API Key", "enterApiKey": "Enter API Key", "enterCustomBaseUrl": "Enter custom Base URL", "browserNativeNote": "Browser Native ASR requires no configuration and is completely free", "providerOpenAITTS": "OpenAI TTS (gpt-4o-mini-tts)", "providerAzureTTS": "Azure TTS", "providerGLMTTS": "GLM TTS", "providerQwenTTS": "Qwen TTS (Alibaba Cloud Bailian)", "providerVoxCPMTTS": "VoxCPM2", "providerDoubaoTTS": "Doubao TTS 2.0 (Volcengine)", "providerElevenLabsTTS": "ElevenLabs TTS", "providerMiniMaxTTS": "MiniMax TTS", "providerBrowserNativeTTS": "Browser Native TTS", "voxcpmBackend": "Backend", "voxcpmBaseUrlPending": "Enter a Base URL to generate the request URL", "voxcpmAutoVoiceNoPreview": "Auto Voice is generated from agent context and cannot be previewed directly", "voxcpmVoicesTitle": "VoxCPM Voices", "voxcpmVoicesDescription": "Saved in this browser and added to the shared Agent Bar voice pool.", "voxcpmAutoVoicePrivacyNote": "Auto Voice sends the agent persona to your configured VoxCPM backend as the voice prompt.", "voxcpmPromptCount": "Prompt {{count}}", "voxcpmCloneCount": "Clone {{count}}", "voxcpmCloneUnsupported": "Current backend does not support cloning", "voxcpmVoicePool": "Voice Pool", "voxcpmVoiceCount": "{{count}} voices", "voxcpmAutoVoice": "Auto Voice", "voxcpmAutoVoiceDescription": "Use the agent persona as the voice prompt", "voxcpmUnavailable": "Unavailable", "voxcpmClone": "Clone", "voxcpmCloneUnsupportedDetail": "Current backend does not support cloning", "voxcpmNoCustomVoices": "No custom voices yet", "voxcpmCloneSaveOnly": "Saved only for this backend", "voxcpmVoiceNamePlaceholder": "Voice name", "voxcpmPromptPlaceholder": "Example: clear, natural teacher voice with moderate pace", "voxcpmAddVoice": "Add Voice", "voxcpmCloneVoiceNamePlaceholder": "Cloned voice name", "voxcpmUploadReferenceAudio": "Upload reference audio", "voxcpmRecord": "Record", "voxcpmReferenceAudioLimitHint": "Reference audio must be 10 MB / 60 seconds or smaller and is converted to WAV before saving.", "voxcpmReferenceTextPlaceholder": "Reference audio transcript, optional", "voxcpmVoiceDescriptionPlaceholder": "Voice description, optional", "voxcpmAddClone": "Add Clone", "voxcpmRecordingUnsupported": "This browser does not support recording", "voxcpmRecordedVoiceName": "Recorded Voice", "voxcpmRecordingFailed": "Recording conversion failed", "voxcpmRecordingStartFailed": "Unable to start recording", "voxcpmBaseUrlRequired": "Enter a VoxCPM Base URL first", "voxcpmPreviewFailed": "Preview failed", "voxcpmVoiceSaved": "VoxCPM voice saved", "voxcpmVoiceSaveFailed": "Failed to save voice", "voxcpmReferenceAudioInvalid": "Invalid reference audio", "voxcpmCloneSaved": "VoxCPM cloned voice saved", "voxcpmCloneSaveFailed": "Failed to save cloned voice", "voxcpmStopPreview": "Stop preview", "voxcpmPreviewVoice": "Preview voice", "voxcpmDeleteVoice": "Delete voice", "providerOpenAIWhisper": "OpenAI ASR (gpt-4o-mini-transcribe)", "providerBrowserNative": "Browser Native ASR", "providerQwenASR": "Qwen ASR (Alibaba Cloud Bailian)", "providerUnpdf": "unpdf (Built-in)", "providerMinerU": "MinerU", "providerMinerUCloud": "MinerU (Cloud)", "browserNativeTTSNote": "Browser Native TTS requires no configuration and is completely free, using system built-in voices", "testTTS": "Test TTS", "testASR": "Test ASR", "testSuccess": "Test Successful", "testFailed": "Test Failed", "ttsTestText": "TTS Test Text", "ttsTestSuccess": "TTS test successful, audio played", "ttsTestFailed": "TTS test failed", "asrTestSuccess": "Speech recognition successful", "asrTestFailed": "Speech recognition failed", "asrProcessing": "Processing...", "asrResult": "Recognition Result", "asrNotSupported": "Browser does not support Speech Recognition API", "browserTTSNotSupported": "Browser does not support Speech Synthesis API", "browserTTSNoVoices": "Current browser has no available TTS voices", "microphoneAccessDenied": "Microphone access denied", "microphoneAccessFailed": "Failed to access microphone", "asrResultPlaceholder": "Recognition result will be displayed after recording", "useThisProvider": "Use This Provider", "fetchVoices": "Fetch Voice List", "fetchingVoices": "Fetching...", "voicesFetched": "Voices fetched", "fetchVoicesFailed": "Failed to fetch voices", "voiceApiKeyRequired": "API Key required", "voiceBaseUrlRequired": "Base URL required", "ttsTestTextPlaceholder": "Enter text to convert", "ttsTestTextDefault": "Hello, this is a test speech.", "startRecording": "Start Recording", "stopRecording": "Stop Recording", "recording": "Recording...", "transcribing": "Transcribing...", "transcriptionResult": "Transcription Result", "noTranscriptionResult": "No transcription result", "baseUrlOptional": "Base URL (Optional)", "defaultValue": "Default", "voiceMarin": "Recommended - Best Quality", "voiceCedar": "Recommended - Best Quality", "voiceAlloy": "Neutral, Balanced", "voiceAsh": "Steady, Professional", "voiceBallad": "Elegant, Lyrical", "voiceCoral": "Warm, Friendly", "voiceEcho": "Male, Clear", "voiceFable": "Narrative, Vivid", "voiceNova": "Female, Bright", "voiceOnyx": "Male, Deep", "voiceSage": "Wise, Composed", "voiceShimmer": "Female, Soft", "voiceVerse": "Natural, Smooth", "glmVoiceTongtong": "Default voice", "glmVoiceChuichui": "Chuichui voice", "glmVoiceXiaochen": "Xiaochen voice", "glmVoiceJam": "Jam voice", "glmVoiceKazi": "Kazi voice", "glmVoiceDouji": "Douji voice", "glmVoiceLuodo": "Luodo voice", "qwenVoiceCherry": "Sunny, warm and natural", "qwenVoiceSerena": "Gentle and soft", "qwenVoiceEthan": "Energetic and vibrant", "qwenVoiceChelsie": "Anime virtual girlfriend", "qwenVoiceMomo": "Playful and cheerful", "qwenVoiceVivian": "Cute and sassy", "qwenVoiceMoon": "Cool and handsome", "qwenVoiceMaia": "Intellectual and gentle", "qwenVoiceKai": "A SPA for your ears", "qwenVoiceNofish": "Designer who can't pronounce retroflex sounds", "qwenVoiceBella": "Little loli who doesn't get drunk", "qwenVoiceJennifer": "Brand-level, cinematic American female voice", "qwenVoiceRyan": "Fast-paced, dramatic performance", "qwenVoiceKaterina": "Mature lady with memorable rhythm", "qwenVoiceAiden": "American boy who masters cooking", "qwenVoiceEldricSage": "Steady and wise elder", "qwenVoiceMia": "Gentle as spring water, well-behaved as snow", "qwenVoiceMochi": "Smart little adult with childlike innocence", "qwenVoiceBellona": "Loud voice, clear pronunciation, vivid characters", "qwenVoiceVincent": "Unique hoarse voice telling tales of war and honor", "qwenVoiceBunny": "Super cute loli", "qwenVoiceNeil": "Professional news anchor", "qwenVoiceElias": "Professional instructor", "qwenVoiceArthur": "Simple voice soaked by years and dry tobacco", "qwenVoiceNini": "Soft and sticky voice like glutinous rice cake", "qwenVoiceEbona": "Her whisper is like a rusty key", "qwenVoiceSeren": "Gentle and soothing voice to help you sleep", "qwenVoicePip": "Naughty but full of childlike innocence", "qwenVoiceStella": "Sweet confused girl voice that becomes just when shouting", "qwenVoiceBodega": "Enthusiastic Spanish uncle", "qwenVoiceSonrisa": "Enthusiastic Latin American lady", "qwenVoiceAlek": "Cold of battle nation, warm under woolen coat", "qwenVoiceDolce": "Lazy Italian uncle", "qwenVoiceSohee": "Gentle, cheerful Korean unnie", "qwenVoiceOnoAnna": "Mischievous childhood friend", "qwenVoiceLenn": "Rational German youth who wears suit and listens to post-punk", "qwenVoiceEmilien": "Romantic French big brother", "qwenVoiceAndre": "Magnetic, natural and calm male voice", "qwenVoiceRadioGol": "Football poet Rádio Gol!", "qwenVoiceJada": "Lively Shanghai lady", "qwenVoiceDylan": "Beijing boy", "qwenVoiceLi": "Patient yoga teacher", "qwenVoiceMarcus": "Broad face, short words, solid heart - old Shaanxi taste", "qwenVoiceRoy": "Humorous and straightforward Taiwanese boy", "qwenVoicePeter": "Tianjin cross-talk professional supporter", "qwenVoiceSunny": "Sweet Sichuan girl", "qwenVoiceEric": "Chengdu gentleman", "qwenVoiceRocky": "Humorous Hong Kong guy", "qwenVoiceKiki": "Sweet Hong Kong girl", "lang_auto": "Auto Detect", "lang_zh": "中文", "lang_yue": "粤語", "lang_en": "English", "lang_ja": "日本語", "lang_ko": "한국어", "lang_es": "Español", "lang_fr": "Français", "lang_de": "Deutsch", "lang_ru": "Русский", "lang_ar": "العربية", "lang_pt": "Português", "lang_it": "Italiano", "lang_af": "Afrikaans", "lang_hy": "Հայերեն", "lang_az": "Azərbaycan", "lang_be": "Беларуская", "lang_bs": "Bosanski", "lang_bg": "Български", "lang_ca": "Català", "lang_hr": "Hrvatski", "lang_cs": "Čeština", "lang_da": "Dansk", "lang_nl": "Nederlands", "lang_et": "Eesti", "lang_fi": "Suomi", "lang_gl": "Galego", "lang_el": "Ελληνικά", "lang_he": "עברית", "lang_hi": "हिन्दी", "lang_hu": "Magyar", "lang_is": "Íslenska", "lang_id": "Bahasa Indonesia", "lang_kn": "ಕನ್ನಡ", "lang_kk": "Қазақша", "lang_lv": "Latviešu", "lang_lt": "Lietuvių", "lang_mk": "Македонски", "lang_ms": "Bahasa Melayu", "lang_mr": "मराठी", "lang_mi": "Te Reo Māori", "lang_ne": "नेपाली", "lang_no": "Norsk", "lang_fa": "فارسی", "lang_pl": "Polski", "lang_ro": "Română", "lang_sr": "Српски", "lang_sk": "Slovenčina", "lang_sl": "Slovenščina", "lang_sw": "Kiswahili", "lang_sv": "Svenska", "lang_tl": "Tagalog", "lang_fil": "Filipino", "lang_ta": "தமிழ்", "lang_th": "ไทย", "lang_tr": "Türkçe", "lang_uk": "Українська", "lang_ur": "اردو", "lang_vi": "Tiếng Việt", "lang_cy": "Cymraeg", "lang_zh-CN": "中文(简体,中国)", "lang_zh-TW": "中文(繁體,台灣)", "lang_zh-HK": "粵語(香港)", "lang_yue-Hant-HK": "粵語(繁體)", "lang_en-US": "English (United States)", "lang_en-GB": "English (United Kingdom)", "lang_en-AU": "English (Australia)", "lang_en-CA": "English (Canada)", "lang_en-IN": "English (India)", "lang_en-NZ": "English (New Zealand)", "lang_en-ZA": "English (South Africa)", "lang_ja-JP": "日本語(日本)", "lang_ko-KR": "한국어(대한민국)", "lang_de-DE": "Deutsch (Deutschland)", "lang_fr-FR": "Français (France)", "lang_es-ES": "Español (España)", "lang_es-MX": "Español (México)", "lang_es-AR": "Español (Argentina)", "lang_es-CO": "Español (Colombia)", "lang_it-IT": "Italiano (Italia)", "lang_pt-BR": "Português (Brasil)", "lang_pt-PT": "Português (Portugal)", "lang_ru-RU": "Русский (Россия)", "lang_nl-NL": "Nederlands (Nederland)", "lang_pl-PL": "Polski (Polska)", "lang_cs-CZ": "Čeština (Česko)", "lang_da-DK": "Dansk (Danmark)", "lang_fi-FI": "Suomi (Suomi)", "lang_sv-SE": "Svenska (Sverige)", "lang_no-NO": "Norsk (Norge)", "lang_tr-TR": "Türkçe (Türkiye)", "lang_el-GR": "Ελληνικά (Ελλάδα)", "lang_hu-HU": "Magyar (Magyarország)", "lang_ro-RO": "Română (România)", "lang_sk-SK": "Slovenčina (Slovensko)", "lang_bg-BG": "Български (България)", "lang_hr-HR": "Hrvatski (Hrvatska)", "lang_ca-ES": "Català (Espanya)", "lang_ar-SA": "العربية (السعودية)", "lang_ar-EG": "العربية (مصر)", "lang_he-IL": "עברית (ישראל)", "lang_hi-IN": "हिन्दी (भारत)", "lang_th-TH": "ไทย (ประเทศไทย)", "lang_vi-VN": "Tiếng Việt (Việt Nam)", "lang_id-ID": "Bahasa Indonesia (Indonesia)", "lang_ms-MY": "Bahasa Melayu (Malaysia)", "lang_fil-PH": "Filipino (Pilipinas)", "lang_af-ZA": "Afrikaans (Suid-Afrika)", "lang_uk-UA": "Українська (Україна)", "pdfSettings": "PDF Parsing", "pdfParsingSettings": "PDF Parsing Settings", "pdfDescription": "Choose PDF parsing engine with support for text extraction, image processing, and table recognition", "pdfProvider": "PDF Parser", "pdfFeatures": "Supported Features", "pdfApiKey": "API Key", "pdfBaseUrl": "Base URL", "mineruDescription": "MinerU is a commercial PDF parsing service that supports advanced features such as table extraction, formula recognition, and layout analysis.", "mineruApiKeyRequired": "You need to apply for an API Key on the MinerU website before use.", "mineruWarning": "Warning", "mineruCostWarning": "MinerU is a commercial service and may incur fees. Please check the MinerU website for pricing details.", "enterMinerUApiKey": "Enter MinerU API Key", "mineruLocalDescription": "MinerU supports local deployment with advanced PDF parsing (tables, formulas, layout analysis). Requires deploying MinerU service first.", "mineruServerAddress": "Local MinerU server address (e.g., http://localhost:8080)", "mineruApiKeyOptional": "Only required if server has authentication enabled", "mineruCloudApiKeyPlaceholder": "Enter MinerU Cloud API Key", "optionalApiKey": "Optional API Key", "featureText": "Text Extraction", "featureImages": "Image Extraction", "featureTables": "Table Extraction", "featureFormulas": "Formula Recognition", "featureLayoutAnalysis": "Layout Analysis", "featureMetadata": "Metadata", "enableImageGeneration": "Enable AI Image Generation", "imageGenerationDisabledHint": "When enabled, images will be auto-generated during course creation", "imageSettings": "Image Generation", "imageSection": "Text to Image", "imageProvider": "Image Generation Provider", "imageModel": "Image Generation Model", "providerSeedream": "Seedream (ByteDance)", "providerOpenAIImage": "OpenAI Image", "providerQwenImage": "Qwen Image (Alibaba)", "providerNanoBanana": "Nano Banana (Gemini)", "providerMiniMaxImage": "MiniMax Image", "providerGrokImage": "Grok Image (xAI)", "testImageGeneration": "Test Image Generation", "testImageConnectivity": "Test Connection", "imageConnectivitySuccess": "Image service connected successfully", "imageConnectivityFailed": "Image service connection failed", "imageTestSuccess": "Image generation test succeeded", "imageTestFailed": "Image generation test failed", "imageTestPromptPlaceholder": "Enter image description to test", "imageTestPromptDefault": "A cute cat sitting on a desk", "imageGenerating": "Generating image...", "imageGenerationFailed": "Image generation failed", "enableVideoGeneration": "Enable AI Video Generation", "videoGenerationDisabledHint": "When enabled, videos will be auto-generated during course creation", "videoSettings": "Video Generation", "videoSection": "Text to Video", "videoProvider": "Video Generation Provider", "videoModel": "Video Generation Model", "providerSeedance": "Seedance (ByteDance)", "providerKling": "Kling (Kuaishou)", "providerVeo": "Veo (Google)", "providerSora": "Sora (OpenAI)", "providerMiniMaxVideo": "MiniMax Video", "providerGrokVideo": "Grok Video (xAI)", "testVideoGeneration": "Test Video Generation", "testVideoConnectivity": "Test Connection", "videoConnectivitySuccess": "Video service connected successfully", "videoConnectivityFailed": "Video service connection failed", "testingConnection": "Testing...", "videoTestSuccess": "Video generation test succeeded", "videoTestFailed": "Video generation test failed", "videoTestPromptDefault": "A cute cat walking on a desk", "videoGenerating": "Generating video (est. 1-2 min)...", "videoGenerationWarning": "Video generation usually takes 1-2 minutes, please be patient", "mediaRetry": "Retry", "mediaContentSensitive": "Sorry, this content triggered a safety check.", "mediaGenerationDisabled": "Generation disabled in settings", "singleAgent": "Single Agent", "multiAgent": "Multi-Agent", "selectAgents": "Select Agents", "noVisionWarning": "Current model does not support vision. Images can still be placed in slides, but the model cannot understand image content to optimize selection and layout", "serverConfigured": "Server", "serverConfiguredNotice": "Admin has configured an API key for this provider on the server. You can use it directly or enter your own key to override.", "optionalOverride": "Optional — leave empty to use server config", "setupNeeded": "Setup required", "modelNotConfigured": "Please select a model to get started", "dangerZone": "Danger Zone", "clearCache": "Clear Local Cache", "clearCacheDescription": "Delete all locally stored data, including classroom records, chat history, audio cache, and app settings. This action cannot be undone.", "clearCacheConfirmTitle": "Are you sure you want to clear all cache?", "clearCacheConfirmDescription": "This will permanently delete all of the following data and cannot be recovered:", "clearCacheConfirmItems": "Classrooms & scenes, Chat history, Audio & image cache, App settings & preferences", "clearCacheConfirmInput": "Type \"DELETE\" to continue", "clearCacheConfirmPhrase": "DELETE", "clearCacheButton": "Permanently Delete All Data", "clearCacheSuccess": "Cache cleared, page will refresh shortly", "clearCacheFailed": "Failed to clear cache, please try again", "webSearchSettings": "Web Search", "webSearchApiKey": "Tavily API Key", "webSearchApiKeyPlaceholder": "Enter your Tavily API Key", "webSearchApiKeyPlaceholderServer": "Server key configured, optionally override", "webSearchApiKeyHint": "Get an API key from tavily.com for web search", "webSearchBaseUrl": "Base URL", "webSearchServerConfigured": "Server-side Tavily API key is configured", "optional": "Optional" }, "profile": { "title": "Profile", "defaultNickname": "Learner", "chooseAvatar": "Choose Avatar", "uploadAvatar": "Upload", "bioPlaceholder": "Tell us about yourself — the AI teacher will personalize lessons for you...", "avatarHint": "Your avatar will appear in classroom discussions and chats", "fileTooLarge": "Image too large — please choose one under 5 MB", "invalidFileType": "Please select an image file", "editTooltip": "Click to edit profile" }, "media": { "imageCapability": "Image Generation", "imageHint": "Generate images in slides", "videoCapability": "Video Generation", "videoHint": "Generate videos in slides", "ttsCapability": "Text-to-Speech", "ttsHint": "AI teacher speaks aloud", "asrCapability": "Speech Recognition", "asrHint": "Voice input for discussion", "provider": "Provider", "model": "Model", "voice": "Voice", "speed": "Speed", "language": "Language" }, "accessCode": { "title": "Enter Access Code", "placeholder": "Access code", "error": "Invalid access code. Please try again." } }