Files
openmaic/OpenMAIC/lib/i18n/locales/en-US.json
T

2029 lines
88 KiB
JSON

{
"common": {
"you": "You",
"confirm": "Confirm",
"cancel": "Cancel",
"loading": "Loading...",
"back": "Back"
},
"home": {
"slogan": "Generative Learning in Multi-Agent Interactive Classroom"
},
"toolbar": {
"pdfParser": "Parser",
"pdfUpload": "Upload PDF",
"removePdf": "Remove file",
"documentExtractor": "Extractor",
"courseMaterialUpload": "Upload course material",
"courseMaterialsSelected": "{{n}} materials selected",
"courseMaterialMergeOrder": "Materials are merged in the order shown below.",
"removeCourseMaterial": "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",
"inlinePartial": "{{count}} external asset(s) couldn't be bundled; the course may not display correctly offline.",
"video": "Export Video",
"videoDesc": "Self-contained Hyperframes project (render to MP4)",
"videoNoScenes": "No scenes available to export.",
"videoCompiling": "Compiling video timeline...",
"videoRendering": "Rendering slides and collecting assets...",
"videoPackaging": "Packaging video project...",
"videoSuccess": "Video project exported",
"videoFailed": "Video export failed",
"videoWarnings": "{{assets}} asset(s) missing and {{diagnostics}} issue(s) in the export report.",
"videoMp4Success": "Video rendered",
"videoServiceUnavailable": "Render service not configured — downloaded the project ZIP for local rendering.",
"videoResolution": "Resolution",
"videoFps": "Frame rate",
"videoQuality": "Quality",
"videoQuality_draft": "Draft",
"videoQuality_standard": "Standard",
"videoQuality_high": "High",
"videoProgress": "{{percent}}%",
"videoProgressWithEta": "{{percent}}% · about {{remaining}} left",
"videoEtaMinSec": "{{min}} min {{sec}} sec",
"videoEtaSec": "{{sec}} sec",
"videoRenderMp4": "Render MP4",
"videoDownloadZip": "Download project ZIP",
"videoServiceHint": "MP4 rendering needs the render service. Download the ZIP to render locally.",
"videoBurnSubtitles": "Burn in subtitles",
"videoBurnSubtitlesDesc": "Off: export a clean video and add the subtitle file in your editor.",
"videoQuizCtaPrompt": "Want to try an interactive quiz?",
"videoPblCtaPrompt": "Want to explore project-based learning?",
"videoCtaVisit": "Visit",
"videoDownloadSubtitles": "Download subtitles (.srt)",
"subtitlesCompiling": "Compiling subtitles...",
"subtitlesSuccess": "Subtitles downloaded",
"subtitlesEmpty": "No narration to make subtitles from",
"subtitlesFailed": "Subtitle download failed",
"noSlides": "No slides to export",
"noSlidesSkipped": "No slides in this course — PPTX skipped",
"nothingToExport": "Nothing to export"
},
"import": {
"classroom": "Import Classroom",
"pptx": "Import PPTX",
"parsing": "Parsing ZIP...",
"parsingPptx": "Parsing PPTX...",
"validating": "Validating data...",
"writingMedia": "Writing media files...",
"writingCourse": "Writing course data...",
"success": "Classroom imported successfully",
"pptxSuccess": "PPTX parsed successfully ({{count}} slides, output logged to console)",
"error": {
"invalidZip": "Invalid file. Please select a valid .maic.zip file.",
"invalidPptx": "Failed to parse PPTX. Please check the file is valid.",
"parserUnavailable": "PPTX import is unavailable: the parser bundle is not deployed. Re-run install/sync.",
"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",
"softClosing": "Continue discussion",
"error": {
"emptyAgentResponses": "Agents returned empty responses; discussion stopped. Try again or check your model settings.",
"streamInterrupted": "Stream ended unexpectedly; discussion didn't complete. Please try again."
},
"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",
"jumpToLine": "Jump to this line",
"jumpUnavailable": "Jump unavailable for this line"
},
"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",
"noVoice": "No voice"
},
"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",
"editCourse": "Edit course",
"doneEditing": "Done editing",
"proModeDisabledHint": "Editing isn't available on this page — open a course slide to edit with Pro mode."
},
"edit": {
"proMode": "Pro",
"undo": "Undo",
"redo": "Redo",
"delete": "Delete",
"title": "Editing · {{type}}",
"unsupportedScene": "{{type}} is not editable yet",
"readOnlyBadge": "{{type}} · view-only",
"sceneType": {
"slide": "Slide",
"quiz": "Quiz",
"interactive": "Interactive",
"pbl": "PBL"
},
"multiTab": {
"conflict": {
"title": "Another tab is editing this course",
"body": "Editing is locked to a single tab to avoid conflicting changes. Close the other tab (or wait for its session to time out) before entering edit mode here.",
"actionDismiss": "Got it"
}
},
"text": {
"toolbar": "Text toolbar",
"label": "Text",
"font": "Font",
"fontDefault": "Default",
"sizeUp": "Increase size",
"sizeDown": "Decrease size",
"fontSize": "Font size",
"bold": "Bold",
"italic": "Italic",
"underline": "Underline",
"color": "Text color",
"alignLeft": "Align left",
"alignCenter": "Align center",
"alignRight": "Align right",
"bullet": "Bulleted list",
"colorHex": "Color value"
},
"line": {
"toolbar": "Line toolbar",
"kind": "Line type",
"color": "Line color",
"width": "Line width",
"style": "Line style",
"start": "Start marker",
"end": "End marker",
"straight": "Straight",
"broken": "Broken line",
"broken2": "Double broken line",
"curve": "Curve",
"cubic": "Cubic curve",
"solid": "Solid",
"dashed": "Dashed",
"dotted": "Dotted",
"none": "None",
"arrow": "Arrow",
"dot": "Dot"
},
"insert": {
"toolbar": "Insert toolbar",
"textBox": "Text box",
"line": "Line",
"linePresets": {
"straight": "Straight line",
"dashed": "Dashed line",
"arrow": "Arrow line",
"dashedArrow": "Dashed arrow line",
"dottedEnd": "Dot end line",
"broken": "Broken line",
"doubleBroken": "Double broken line",
"curve": "Curve",
"cubic": "Cubic curve"
},
"table": "Table",
"formula": "Formula",
"chart": "Chart",
"chartBar": "Bar chart",
"chartLine": "Line chart",
"chartPie": "Pie chart",
"tableDimensions": "{{rows}} x {{columns}} Table",
"dragToolbar": "Move insert tools",
"dragToolbarKeyboard": "Move insert tools: press Enter or Space, then use the arrow keys",
"image": "Image",
"imageDrop": "Drop an image or click to choose a file",
"imageOr": "or paste an image URL",
"imageUrlPlaceholder": "https://…",
"imageInsert": "Insert",
"video": "Video",
"videoDrop": "Drop a video or click to choose a file",
"videoOr": "or paste a video URL",
"videoUrlPlaceholder": "https://…",
"videoInsert": "Insert",
"audio": "Audio",
"audioDrop": "Drop audio or click to choose a file",
"audioOr": "or paste an audio URL",
"audioUrlPlaceholder": "https://…",
"audioInsert": "Insert"
},
"asset": {
"drop": "Drop a file or click to choose",
"orUrl": "or paste a file URL",
"urlPlaceholder": "https://…",
"insert": "Insert",
"invalidType": "Unsupported file type",
"readFailed": "Unable to read file"
},
"latex": {
"toolbar": "Formula toolbar",
"editFormula": "Edit formula",
"dialog": "Formula editor",
"source": "LaTeX source",
"preview": "Preview",
"symbols": "Symbols",
"presets": "Presets",
"invalidSource": "The LaTeX source is invalid."
},
"video": {
"toolbar": "Video toolbar",
"poster": "Set poster"
},
"audio": {
"toolbar": "Audio toolbar",
"preview": "Preview audio",
"pause": "Pause preview",
"loop": "Loop"
},
"table": {
"doubleClickToEdit": "Double-click to edit"
},
"nav": {
"addSlide": "Add slide",
"duplicate": "Duplicate",
"delete": "Delete",
"deleted": "Deleted",
"undo": "Undo",
"copySuffix": "(copy)",
"untitledSlide": "Untitled slide",
"collapse": "Collapse rail",
"expand": "Expand rail",
"dragHandle": "Drag to reorder",
"deckLabel": "Scenes",
"moreActions": "More actions",
"rename": "Rename",
"sceneIncomplete": "This page has incomplete content"
},
"zorder": {
"toFront": "Bring to front",
"toBack": "Send to back"
},
"image": {
"toolbar": "Image toolbar",
"replace": "Replace image",
"flipH": "Flip horizontal",
"flipV": "Flip vertical",
"crop": "Crop image"
},
"contextMenu": {
"horizontalAlignment": "Horizontal alignment",
"verticalAlignment": "Vertical alignment",
"selectAll": "Select all",
"copy": "Copy",
"cut": "Cut",
"paste": "Paste",
"unlock": "Unlock",
"lock": "Lock",
"group": "Group",
"ungroup": "Ungroup",
"bringForward": "Bring forward",
"sendBackward": "Send backward",
"alignTop": "Align top",
"alignMiddle": "Align middle",
"alignBottom": "Align bottom"
},
"background": {
"label": "Background",
"solid": "Solid",
"image": "Image",
"color": "Color"
},
"common": {
"cancel": "Cancel",
"confirm": "Confirm"
},
"quiz": {
"addQuestion": "Add question",
"reorder": "Drag to reorder",
"deleteQuestion": "Delete question",
"untitledQuestion": "Untitled question",
"questionLabel": "Question",
"questionPlaceholder": "Enter the question…",
"typeLabel": "Type",
"pointsLabel": "Points",
"optionsLabel": "Options",
"optionPlaceholder": "Option text",
"addOption": "Add option",
"deleteOption": "Remove option",
"markCorrect": "Mark as correct answer",
"moveUp": "Move up",
"moveDown": "Move down",
"analysisLabel": "Explanation",
"analysisPlaceholder": "Shown after the question is graded…",
"commentPromptLabel": "Grading guidance",
"commentPromptPlaceholder": "How should this open response be graded?",
"empty": "No questions yet",
"emptyHint": "Use “Add question” to create the first one.",
"type": {
"single": "Single choice",
"multiple": "Multiple choice",
"short_answer": "Short answer"
},
"shortAnswerGradingNote": "Short answers are always graded by AI from the guidance below.",
"hint": {
"emptyText": "Question {{n}}: add question text",
"fewOptions": "Question {{n}}: add at least two options",
"emptyOption": "Question {{n}}: an option label is empty",
"noCorrect": "Question {{n}}: mark a correct answer"
}
},
"cue": {
"speech": "Narration",
"spotlight": "Spotlight",
"laser": "Laser",
"whiteboardOpen": "Whiteboard",
"whiteboardText": "Writing",
"whiteboardShape": "Shape",
"whiteboardLatex": "Formula",
"whiteboardTable": "Table",
"action": "Action",
"discussion": "Discussion"
},
"element": {
"toolbar": "Element toolbar",
"text": "Text",
"image": "Image",
"shape": "Shape",
"line": "Line",
"chart": "Chart",
"table": "Table",
"latex": "Formula",
"video": "Video",
"audio": "Audio",
"code": "Code"
},
"agent": {
"expand": "Expand AI assistant",
"collapse": "Collapse",
"stopped": "Stopped",
"emptyTitle": "What would you like to change?",
"emptyHint": "After editing this slide on the canvas, let AI regenerate narration that matches the content.",
"placeholder": "Describe your changes to this slide…",
"stop": "Stop generating",
"empty": {
"lead": "Tell me how to change this slide — I'll redo the content and re-align the narration.",
"boundary": "For fine-grained edits use the editor; add / delete / reorder slides from the left nav.",
"comingSoon": "More capabilities coming soon."
},
"interactive": {
"emptyTitle": "What needs fixing on this page?",
"lead": "Describe a bug on this interactive page — e.g. a button that does nothing — and I'll fix just that, keeping everything else.",
"placeholder": "Describe the bug on this interactive page…",
"boundary": "I make targeted fixes to the page; I won't rebuild the whole page. Switch scenes from the left nav."
},
"cap": {
"content": {
"label": "Regenerate the slide",
"examples": "“Condense to 3 points”, “Add a real-world example”"
},
"narration": {
"label": "Regenerate the narration script",
"examples": "“Make it more conversational”, “Align with my canvas edits”"
},
"fixHtml": {
"label": "Fix a bug on the page",
"examples": "“The start button does nothing”, “Panels overlap on mobile”"
},
"elements": {
"label": "Tweak selected elements",
"examples": "“Make the title blue and move it up”, “Make this figure smaller”"
}
},
"newConversation": "New conversation",
"sessionHistory": "History",
"sessionUntitled": "Untitled chat",
"sessionDelete": "Delete",
"sessionEmpty": "No past conversations",
"thinking": "Thinking…",
"reasoning": "Reasoning",
"thought": "Thought for",
"title": "Edit with AI"
},
"timeline": {
"title": "Narration script",
"regenAllTts": "Regenerate all voiceover",
"voiceAll": "Voice all",
"counts": "{{speech}} narration · {{cue}} cues",
"panLeft": "Pan left",
"panRight": "Pan right",
"collapseAxis": "Collapse to axis",
"expandTrack": "Expand track",
"emptyHint": "Drag actions onto the axis to start, or let MAIC Agent generate narration.",
"speechPlaceholder": "Enter this narration line…",
"reorder": "Drag to reorder",
"moveLeft": "Move left",
"moveRight": "Move right",
"pickElement": "Pick element",
"bound": "Bound",
"fieldAction": "Action",
"fieldElement": "Element",
"fieldContent": "Content",
"addDiscussionExists": "Only one discussion per scene",
"discussionTerminal": "END",
"discussionTerminalHint": "A discussion stays at the end of the scene (one per scene)",
"discussionTopicPlaceholder": "Discussion topic (required)",
"discussionPromptPlaceholder": "Guidance prompt (optional)",
"discussionAgent": "Initiator",
"discussionAgentUnset": "Unspecified",
"addAction": "Add action"
},
"picker": {
"title": "Insert action",
"speechDesc": "Speak a line — can auto-voice",
"spotlightDesc": "Highlight an element on the canvas",
"laserDesc": "Point a laser at an element",
"discussionDesc": "Pose a question, pick who starts it"
},
"tts": {
"preview": "Preview",
"regenerate": "Regenerate voiceover",
"statusReady": "Voiced",
"statusNone": "Not voiced",
"statusGenerating": "Generating",
"statusError": "Failed"
},
"pick": {
"pickFor": "Pick an element for \"{{label}}\"",
"pickHint": "Click a highlighted element or the list below · Esc to cancel",
"pageElements": "Page elements · {{count}}",
"expand": "Expand",
"collapse": "Collapse",
"noElements": "No locatable elements on this slide.",
"bindHint": "Click a highlighted element on the canvas to bind"
},
"regen": {
"title": "Regenerate narration",
"running": "Generating…",
"noActions": "No actions generated",
"actionsCount": "{{count}} actions",
"generating": "Generating",
"notGenerated": "Not generated",
"updated": "Updated"
},
"regenScene": {
"title": "Regenerate slide",
"generating": "Generating",
"updated": "Updated",
"notGenerated": "Not generated",
"elementsCount": "{{count}} elements",
"restore": "Restore previous",
"restored": "Restored",
"resume": "Resume"
},
"fixHtml": {
"title": "Fix interactive page",
"fixing": "Fixing",
"fixed": "Fixed",
"notFixed": "Not fixed",
"editsCount": "{{count}} edit(s)"
},
"readCard": {
"title": "Read slide content",
"reading": "Reading",
"done": "Read",
"failed": "Not read"
},
"editElements": {
"title": "Edit elements",
"editing": "Editing",
"applied": "Applied",
"notApplied": "Not applied",
"applyFailed": "The editor could not apply the element edit. Nothing was changed.",
"applyPartiallyFailed": "The editor could not apply one or more element edits. Other edits may have been applied."
},
"roster": {
"title": "Class roster",
"count": "{{count}} members",
"editHint": "Click a member to edit",
"personaLabel": "Persona",
"personaPlaceholder": "Describe the role personality, teaching style, and tasks...",
"noPersona": "No persona yet",
"unnamed": "Untitled",
"teacherBadge": "Lead",
"moveUp": "Move up",
"moveDown": "Move down",
"removeFromClass": "Remove from class",
"aiClassmates": "AI classmates · {{count}}",
"addRole": "Add role"
}
},
"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",
"softClosing": "Continue discussion",
"autoPlay": "Auto-play",
"autoPlayOff": "Stop auto-play",
"speed": "Speed",
"previousLine": "Previous line",
"nextLine": "Next line",
"lineProgress": "Line {{current}} / {{total}}",
"voiceInput": "Voice input",
"voiceInputDisabled": "Voice input disabled",
"textInput": "Text input",
"stopRecording": "Stop recording",
"startRecording": "Start recording"
},
"pbl": {
"emptyProject": "PBL project has not been generated yet. Please create via course generation.",
"v2": {
"hero": {
"title": "Project-Based Learning",
"stage": "Stages",
"task": "Tasks",
"tutor": "Tutor",
"greetingBanner": "Your tutor is saying hello…",
"startProject": "Start Project",
"continueProject": "Continue Project",
"resetProgress": "Reset learning progress",
"resetConfirmTitle": "Reset learning progress?",
"resetConfirmDescription": "This clears all progress for this project — chat history, submissions, and stage status — and you'll start over from the beginning. This can't be undone.",
"resetConfirmConfirm": "Reset",
"resetConfirmCancel": "Cancel",
"startHint": "Click to enter the workspace. {{name}} will guide you through each stage.",
"startError": "Unable to start: {{error}}",
"youWillLearn": "What you'll gain",
"instructorTagline": "Guides you through the whole project",
"scenarioCharacter": "Role-play character",
"scenarioCharacterTagline": "The character you'll interact with in the scenario",
"scenarioFlow": "Flow",
"close": "Close"
},
"sidebar": {
"title": "Project Roadmap",
"summary": "{{completed}} / {{total}} tasks · {{stages}} stages",
"enterScenario": "Enter the scene",
"advanceScene": "Advance the scene",
"continueScene": "Next stage",
"stagePrep": "Prep",
"stageRoleplay": "Simulation",
"stageWrapup": "Debrief",
"completeAct": "Finish this act",
"completeTask": "Done"
},
"workspace": {
"progressLabel": "Progress",
"resizeSidebar": "Resize sidebar and chat",
"resizeSubmission": "Resize chat and submission panel",
"enterFullscreen": "Expand to fullscreen workspace",
"exitFullscreen": "Exit fullscreen workspace",
"exitNativeFullscreen": "Exit fullscreen",
"returnToHero": "Back to project overview",
"breadcrumbOverview": "Overview",
"breadcrumbCurrent": "Workspace"
},
"chat": {
"placeholder": "Chat with {{name}} about your progress...",
"placeholderCompleted": "Project complete. Check out your report.",
"send": "Send",
"voiceInput": "Voice input",
"keyboardHint": "Enter to send · Shift+Enter for newline",
"readingSubmission": "Reading submission…",
"generatingMilestoneFeedback": "Generating milestone feedback…",
"generatingFinalEval": "Generating final evaluation…",
"readingSubmissionWithTitle": "Reading latest submission for \"{{title}}\"…",
"evaluatingTask": "{{name}} · Reviewing task",
"evaluatingFinal": "{{name}} · Final evaluation",
"narrating": "Setting the scene…",
"choosePrompt": "Pick an option",
"choiceOrType": "Pick one, or type your own…",
"suggestionsToggle": "Need ideas? See some ways to respond",
"guidancePointer": "Stuck? Check this act's goal and tips in the panel on the right.",
"roleplayHistoryTitle": "Role-play history",
"coachHint": "Coach tip",
"thinking": "{{name}} · Thinking",
"typing": "{{name}} · Typing…",
"submitted": "Work submitted",
"evaluatingSubmission": "Evaluating your submission…",
"evaluatingSubmissionDetail": "Task: \"{{title}}\". Feedback on this submission will appear here once evaluation is complete.",
"milestoneFeedbackPending": "The milestone feedback will appear once ready.",
"emptyChat": "No messages yet.",
"emptyChatHint": "Your project walkthrough with {{name}} will start here.",
"continueError": "Unable to continue: {{error}}",
"stillTyping": "Still typing",
"handoverHint": "Click \"Continue to Next Stage\" to keep going."
},
"scene": {
"expand": "Expand",
"collapse": "Collapse",
"greetHint": "Tap to say hi",
"label": "The scene"
},
"milestoneCard": {
"title": "Milestone Review",
"youLearned": "What you learned",
"nextStage": "Next stage:",
"continueHint": "Click Continue to enter the next stage.",
"alreadyEntered": "Next stage entered",
"continueToNext": "Continue to Next Stage",
"projectAlmostDone": "🎉 Project almost done — awaiting completion report"
},
"taskEvalCard": {
"title": "Submission Feedback",
"strengths": "What went well",
"improvements": "Next steps"
},
"briefing": {
"intro": "The premise introduced during prep — kept here so you can revisit it anytime in the scene.",
"tablistLabel": "Right panel tabs",
"submissionTab": "Submit",
"briefingTab": "Briefing",
"setting": "Setting",
"learnerRole": "Your role",
"goal": "Goal",
"rules": "Rules",
"cast": "Cast",
"identity": "Identity",
"situation": "Situation"
},
"submission": {
"textSubmission": "Text submission",
"fileTooLarge": "File exceeds 5 MB limit. Try splitting or compressing.",
"contentRequired": "Content cannot be empty",
"readFileFailed": "Failed to read file: {{error}}",
"parsingPdf": "Parsing PDF…",
"parsePdfFailed": "Failed to parse PDF: {{error}}",
"pdfNoText": "No extractable text found in this PDF.",
"imageUploadFailed": "Failed to upload image: {{error}}",
"imageTooLargeNoStorage": "Image too large to attach without storage configured (max 2 MB locally).",
"imageNeedsCaptionNoVision": "The current model can't read images. Add a text description of the image before submitting, or switch to a vision-capable model in Settings.",
"unsupportedFileType": "Unsupported file type. Only text files (.txt, .md, .csv, .json, .py, …) and PDF are accepted.",
"pasteTab": "Paste text / image",
"uploadTab": "Upload file",
"pastePlaceholder": "Paste your code, document, answer — or an image / screenshot — here…",
"uploadPlaceholder": "Uploaded content will appear here. Edit before submitting…",
"imageCaptionPlaceholder": "Add an optional caption for this image…",
"imageSelectedReplace": "Image selected · click to replace",
"removeImage": "Remove image",
"processing": "Processing…",
"cancelProcessingConfirm": "A file is still being processed. Cancel and discard this upload?",
"currentTask": "Current Task",
"hints": "Hints",
"submitOutput": "Submit",
"evaluating": "Evaluating submission…",
"lockedWhileStreaming": "The instructor is replying — please wait before submitting.",
"evalFailed": "Evaluation failed: {{error}}",
"submittedCount": "{{count}} submitted",
"submissionHistory": "Submission History",
"fromTask": "Task: {{title}}",
"download": "Download",
"viewSubmission": "View submission",
"noActiveTask": "No active task.",
"canceling": "Cancel",
"submitting": "Submitting…",
"selectFileHint": "Choose a file · Max 5 MB · Text, PDF or image",
"modalTitle": "Submit your work",
"modalTaskLabel": "Task: {{title}}",
"fileRead": "Read: {{filename}} · {{size}} KB",
"submittedBadge": "Submitted ({{count}})",
"receiptFile": "File: {{filename}}",
"receiptTemplate": "Submitted work for this task ({{label}})."
},
"agentTabs": {
"noAgent": "No AI agent configured for this project."
},
"completion": {
"noWhatsNext": "The final evaluation hasn't been written yet.",
"backToWorkspace": "Back to Workspace",
"completionCta": "View Report",
"title": "Completion Report",
"whatYouBuilt": "What you built",
"whatYouLearned": "What you learned",
"whatsNext": "What's next",
"noDataFallback": "Not yet written",
"stageReview": "Stage Reviews",
"summary": "You completed {{completed}} of {{total}} tasks across {{stages}} stages.",
"statConcepts": "Concepts mastered",
"statTurns": "Messages exchanged",
"statScope": "Stages · Tasks",
"statDuration": "Time spent",
"statSubmissions": "Work submitted",
"coreStageBadge": "Core",
"conceptsInStageLabel": "Concepts:",
"submissionsInStage": "Submitted {{count}} piece(s) of work",
"coreConceptGrasp": "Core concept \"{{concept}}\" — {{quality}}",
"stageNoData": "No recorded output in this stage.",
"scenario": {
"summary": "You completed all {{acts}} acts of this scenario. Here's how the role-play went.",
"whatYouDidWell": "What you did well",
"skillsPracticed": "Skills you practised",
"statGoals": "Goals met",
"statActs": "Acts completed",
"goalReviewTitle": "Act-by-act review",
"goalReviewHint": "This scenario set a few key goals for each act. Here's a look back at how your conversation actually went — you met {{achieved}} of {{total}} this time.",
"goalListTitle": "What each act asked of you",
"goalListHint": "This scenario set a few key goals for each act. Here's a look back at what each act asked you to do.",
"goalAchieved": "achieved",
"goalPartial": "partly done",
"goalMissed": "not done",
"statGoodDecisions": "Strong choices",
"statScore": "Decision score",
"statBeats": "Acts completed",
"decisionReviewTitle": "Decision review",
"good": "strong",
"ok": "okay",
"poor": "to improve",
"decisionScore": "Decision score {{score}}",
"castLabel": "You interacted with: {{names}}"
},
"highlightsTitle": "Highlights",
"highlight": {
"independence": "You demonstrated {{unlocks}}/{{total}} concepts on your own — no prompting needed. Solid understanding.",
"resilience": "In \"{{title}}\" you overcame {{errors}} errors, tackling each one — real grit.",
"resilienceGeneral": "You overcame {{errors}} errors, tackling each one — real grit.",
"completion": "You completed every task. Steady progress all the way through."
},
"synthesisQuality": {
"strong": "Strong understanding ✅",
"ok": "Good grasp 👍",
"weak": "Room to grow 💪"
},
"durationMinutes": "{{m}} min",
"durationHours": "{{h}} hr",
"durationHoursMinutes": "{{h}} hr {{m}} min"
},
"completionCard": {
"title": "Project Complete · Completion",
"subtitle": "Congratulations! You finished the entire project.",
"description": "Based on your performance data (time spent, conversations, error recovery, concepts unlocked…), we have generated a completion report showing what you built, what you learned, and where to go next."
}
}
},
"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",
"newFolderTitle": "New folder",
"newFolderDesc": "Group courses by topic or use for easier access.",
"newFolderInline": "New folder…",
"folderNameLabel": "Folder name",
"folderNamePlaceholder": "e.g. Math, English, Major courses",
"folderNameHint": "CJK and Latin both OK; spaces count.",
"folderNameExists": "A folder with this name already exists",
"folderCountLimit": "Folder count limit reached",
"folderWidth": "Width {{width}}/{{max}}",
"folderCreate": "Create",
"folderBadge": "Folder",
"folderCourseCountUnit": "courses",
"deleteFolderTitle": "Delete folder \"{{name}}\"",
"deleteFolderEmptyDesc": "This folder is empty. Deletion cannot be undone.",
"deleteFolderUngroupDesc": "Courses stay in \"My courses\", just unfiled.",
"moveToFolder": "Move to folder",
"moveToFolderLabel": "Move to…",
"ungrouped": "Ungrouped",
"searchResults": "Search results",
"folderCreateFailed": "Failed to create folder",
"folderRenameFailed": "Failed to rename folder",
"folderDeleteFailed": "Failed to delete folder",
"moveFailed": "Failed to move course",
"emptyFolderHint": "This folder is empty",
"emptyLibraryHint": "No courses yet — create one above, or import a course.",
"folderNameEmpty": "Folder name cannot be empty",
"deleteFolderOnly": "Delete folder only",
"deleteFolderAndCourses": "Delete folder and {{count}} course",
"deleteFolderAndCourses_other": "Delete folder and {{count}} courses",
"deleteFolderConfirmRemove": "This removes the folder and its courses, including chat history."
},
"upload": {
"pdfSizeLimit": "Supports PDF files up to 50MB",
"courseMaterialSizeLimit": "Documents, slides, spreadsheets, images, and plain text — up to 50MB (accepted formats depend on the selected extractor)",
"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 file smaller than 50MB",
"courseMaterialCountLimit": "You can upload up to 5 course material files",
"courseMaterialTotalSizeLimit": "Total course material size must be under 150MB",
"unsupportedCourseMaterial": "This format isn't supported by the current extractor. Switch the extractor or pick a different file."
},
"generation": {
"modeLabel": "Generation mode",
"normalMode": "Standard generation",
"largeMode": "Large task",
"pdfLoadFailed": "Failed to load PDF file, please try again",
"pdfParseFailed": "PDF parsing failed",
"analyzingCourseMaterial": "Analyzing documents",
"analyzingCourseMaterialDesc": "Extracting document structure and content...",
"courseMaterialLoadFailed": "Failed to load course material, please try again",
"courseMaterialParseFailed": "Course material 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",
"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",
"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",
"sceneGenerateFailed": "Scene generation failed, please try again later",
"sceneGenerateAuthFailed": "Scene generation failed because the model provider rejected the credentials. Please check your model configuration.",
"sceneGenerateRateLimited": "Scene generation is rate limited. Please wait a moment and try again.",
"sceneGenerateProviderUnavailable": "The model provider is temporarily unavailable. Please try again later.",
"sceneGenerateInvalidResponse": "The model did not return valid scene content. Please try a different model or adjust the course requirements.",
"reviewOutlineTitle": "Review your outline",
"reviewOutlineDesc": "Edit, reorder, remove, or add scenes before content generation begins.",
"reviewOutlineAutoContinue": "Generation will continue automatically unless you review the outline.",
"outlineEditorTitle": "Scene outline",
"outlineEditorSummary": "{{count}} scenes total. You can edit, add, remove, or reorder them before generation starts.",
"addFirstScene": "Add first scene",
"noOutlines": "No scene outlines yet",
"sceneTitlePlaceholder": "Scene title",
"sceneTypeSlide": "Slide",
"sceneTypeQuiz": "Quiz",
"sceneTypeInteractive": "Interactive",
"sceneTypePbl": "PBL",
"sceneDescriptionPlaceholder": "Briefly describe the purpose and content of this scene",
"quizQuestionCount": "Question count",
"quizDifficulty": "Difficulty",
"quizType": "Question type",
"quizDifficultyEasy": "Easy",
"quizDifficultyMedium": "Medium",
"quizDifficultyHard": "Hard",
"quizTypeSingle": "Single choice",
"quizTypeMultiple": "Multiple choice",
"quizTypeText": "Short answer",
"alwaysReviewOutlines": "Always review outlines before generation",
"outlineEditorEyebrow": "AI-generated outline",
"outlineEditorStreamingProgress": "Streaming · {{count}} scenes ready",
"outlineEditorStreamingWaiting": "Waiting for the first scene to arrive…",
"outlineEditorWaitingConfirm": "Waiting for outlines…",
"outlineExpandHint": "Tap to review",
"reviewOutlineStreamingDesc": "Outline is still streaming in. You can edit once it's complete.",
"addKeyPoint": "Add key point",
"removeKeyPoint": "Remove key point",
"insertSceneHere": "Insert a scene here",
"deleteSceneConfirm": "Delete this scene?",
"deleteSceneConfirmDesc": "This scene and its key points will be removed from the outline.",
"deleteSceneConfirmAction": "Delete",
"collapseEditor": "Collapse",
"quizConfigSummary": "{{count}} questions",
"interactiveWidgetKind": "Widget kind",
"widgetSimulation": "Simulation",
"widgetDiagram": "Diagram",
"widgetCode": "Code",
"widgetGame": "Game",
"widgetVisualization3d": "3D",
"interactiveConcept": "Concept",
"interactiveConceptPlaceholder": "Concept to explore",
"pblConfigSummary": "Project",
"pblSubtype": "PBL type",
"pblSubtypeProject": "Project",
"pblSubtypeScenario": "Scenario",
"pblProjectTopic": "Project topic",
"pblProjectTopicPlaceholder": "Project topic",
"pblProjectDescription": "Description",
"pblProjectDescriptionPlaceholder": "What students will build",
"pblScenarioBrief": "Scenario brief",
"pblScenarioBriefPlaceholder": "Situation, characters, and practice goal",
"pblTargetSkills": "Target skills",
"pblAddSkill": "Add skill",
"widgetProceduralSkill": "Procedural skill",
"removeSkill": "Remove skill",
"dragSceneHint": "Drag to reorder; or focus and press Ctrl/⌘ + ↑ / ↓",
"deleteScene": "Delete scene",
"backToRequirements": "Back to requirements",
"confirmAndGenerateCourse": "Confirm and generate course",
"generatingInProgress": "Generating...",
"webSearching": "Web Search",
"webSearchingDesc": "Searching the web for up-to-date information",
"webSearchFailed": "Web search failed",
"outlinesReadyCount": "{{ready}} / {{total}} sections ready",
"jumpToBlankTitle": "Jump to a section that still needs a title",
"analyzingMediaMaterial": "Analyzing audio/video"
},
"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",
"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",
"azure": "Azure OpenAI",
"anthropic": "Claude",
"google": "Gemini",
"bedrock": "Amazon Bedrock",
"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",
"lemonade": "Lemonade (Local)",
"ollama": "Ollama (Local)",
"tavily": "Tavily",
"bocha": "Bocha",
"brave": "Brave Search",
"baidu": "Baidu",
"claude": "Claude",
"searxng": "SearXNG"
},
"providerTypes": {
"openai": "OpenAI Protocol",
"azure": "Azure OpenAI",
"anthropic": "Claude Protocol",
"google": "Gemini Protocol",
"bedrock": "Amazon Bedrock"
},
"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",
"azureDeploymentHint": "Enter your Azure OpenAI endpoint above, then add each Azure deployment name as a model.",
"baseUrlRegion": {
"china": "China",
"international": "International",
"xiaomiPayg": "Pay-as-you-go",
"xiaomiTokenPlanCN": "Token Plan CN",
"xiaomiTokenPlanSGP": "Token Plan SG",
"xiaomiTokenPlanEU": "Token Plan EU"
},
"requestUrl": "Request URL",
"models": "Models",
"comfyuiWorkflows": "Workflows",
"comfyuiRefresh": "Refresh",
"comfyuiNoWorkflowsFoundPrefix": "No workflow JSON files found in",
"comfyuiAddWorkflowPrefix": "Add a",
"comfyuiAddWorkflowSuffix": "file to get started.",
"comfyuiFolderHintPrefix": "Place workflow JSON files in your",
"comfyuiFolderHintMiddle": "folder. The filename becomes the display name — e.g.",
"comfyuiLoadError": "Failed to load workflows: {error}",
"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",
"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",
"providerLemonadeTTS": "Lemonade TTS (Local)",
"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)",
"providerFunASRASR": "FunASR (Local)",
"providerLemonadeASR": "Lemonade ASR (Local)",
"providerAzureASR": "Azure STT",
"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",
"documentParsingSettings": "Document Parsing",
"supportedFormats": "Supported Formats",
"mineruSelfHostFormatsNote": "PDF and image parsing require the mineru[pipeline] or mineru[core] extras on your MinerU server. Lightweight mineru-api installs may only handle Office documents.",
"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)",
"providerComfyUIImage": "ComfyUI Image",
"providerLemonadeImage": "Lemonade Image (Local)",
"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)",
"providerHappyHorse": "HappyHorse (Alibaba Cloud)",
"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": "This provider is managed by the server and can't be edited here. To use your own credentials, add a separate provider.",
"ttsProviderEnabledLabel": "Enable this provider",
"ttsProviderEnabledHint": "When off, this provider is hidden from the voice picker and never auto-assigned.",
"ttsProviderUnavailableHint": "Configure this provider before enabling it.",
"ttsProviderDisabledByAdmin": "This provider has been disabled by the server administrator and cannot be enabled.",
"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",
"clearCacheBlockedByOtherTabs": "Close other app tabs and retry.",
"persistUnavailable": "Your changes aren't being saved because the app can't access its stored data. If reloading doesn't help, clear the local cache in Settings.",
"persistChangesLost": "Storage is working again, but changes you made while it was unavailable could not be saved and have been replaced by the last saved version.",
"webSearchSettings": "Web Search",
"webSearchApiKey": "Search API Key",
"webSearchApiKeyPlaceholder": "Enter your search API key",
"webSearchApiKeyPlaceholderServer": "Server key configured, optionally override",
"webSearchApiKeyHint": "Get an API key from the selected search provider",
"claudeSearchModel": "Search Model",
"claudeSearchModelHint": "The Claude model that runs web searches and summarizes results.",
"webSearchApiKeyOptional": "API key is optional. Without one, public page scraping will be used as a fallback.",
"searxngServerOnlyNotice": "SearXNG must be configured on the server. Set the SEARXNG_BASE_URL environment variable (or the web-search section in server-providers.yml). Client-supplied instance URLs are not accepted.",
"baiduSubSources": "Baidu Search Sources",
"baiduSubSourcesDescription": "Choose at least one Baidu source to query.",
"baiduSubSourceWeb": "Web Search",
"baiduSubSourceWebDescription": "General web pages from Baidu AI Search.",
"baiduSubSourceBaike": "Baidu Baike",
"baiduSubSourceBaikeDescription": "Encyclopedia entries from Baidu Baike.",
"baiduSubSourceScholar": "Baidu Scholar",
"baiduSubSourceScholarDescription": "Academic papers from Baidu Scholar.",
"viewDocs": "API Docs",
"webSearchBaseUrl": "Base URL",
"webSearchServerConfigured": "Server-side search API key is configured",
"optional": "Optional",
"selectProvider": "Select Provider",
"customProvider": "Custom",
"presetPickHint": "Picking a provider auto-fills its base URL and protocol; enter your key then click \"Fetch Models\". Not listed? Use \"Custom\".",
"presetCategory": {
"tokenPlan": "Token Plans",
"aggregator": "Aggregators",
"thirdParty": "Vendors",
"official": "Official"
},
"fetchModels": "Fetch Models",
"fetchModelsResult": "Fetched {total} models, added {added}",
"fetchModelsNoEndpoint": "This provider has no model list endpoint — add models manually",
"fetchModelsAuthError": "API key is invalid or expired",
"fetchModelsFailed": "Failed to fetch models",
"usage": {
"title": "Usage",
"refresh": "Refresh",
"disclaimer": "Usage is system-tracked; only server-side calls are counted.",
"totalRequests": "Requests",
"totalTokens": "LLM Tokens",
"dailyTrend": "Daily Token Trend",
"tokens": "Tokens",
"byModel": "By Model",
"model": "Model",
"type": "Type",
"reqs": "Reqs",
"usage": "Usage",
"empty": "No usage data yet",
"kindLlm": "LLM",
"kindImage": "Image",
"kindVideo": "Video",
"kindTts": "Speech",
"kindAsr": "ASR",
"unitToken": "tokens",
"unitImage": "images",
"unitSecond": "sec",
"unitCharacter": "chars"
},
"tokenPlan": {
"nav": "Token Plan",
"title": "Token Plan Setup",
"desc": "Pick your token plan provider and enter the key — it auto-configures every adapted modality (LLM/image/video/speech/web search).",
"selectPlan": "Select Provider",
"apiKey": "API Key",
"enable": "Enable",
"updateKey": "Update key",
"modelsCount": "{{n}} models",
"capabilities": "Capabilities offered",
"offeredNote": "Models offered by this plan. Pick the ones you want on the generation bar — availability depends on your plan tier, and unsupported models will error at generation time."
},
"ttsBrowserNativeTimelineNotice": "Browser-native TTS doesn't support the editor timeline's audio features (preview, regenerate, and bulk voiceover). Switch to a managed TTS provider to generate and manage per-line audio.",
"alidocmindAccessKeyId": "AccessKey ID",
"alidocmindAccessKeySecret": "AccessKey Secret"
},
"profile": {
"title": "Profile",
"defaultNickname": "Learner"
},
"media": {
"imageCapability": "Image Generation",
"imageShort": "Image",
"imageHint": "Generate images in slides",
"videoCapability": "Video Generation",
"videoShort": "Video",
"videoHint": "Generate videos in slides",
"ttsCapability": "Text-to-Speech",
"ttsShort": "Voice",
"ttsHint": "AI teacher speaks aloud",
"asrCapability": "Speech Recognition",
"asrShort": "Mic",
"asrHint": "Voice input for discussion",
"webSearchShort": "Search",
"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."
},
"publish": {
"title": "Publish courseware",
"menuDesc": "Freeze and publish to the courseware registry",
"desc": "Freezes the current classroom into an immutable bundle and uploads it to the courseware registry (server). Published courseware plays directly on the learner end with no runtime generation.",
"freezeHint": "A completeness gate runs before publish: every narration audio and scene media must resolve, or the publish fails.",
"publish": "Publish",
"packaging": "Packaging courseware…",
"uploading": "Uploading to the courseware registry…",
"success": "Published",
"failed": "Publish failed",
"retry": "Retry",
"errorHint": "Add the missing resources and publish again. If the issue persists, check the ops and registry publish configuration (COURSEWARE_PUBLISH_TOKEN).",
"coursewareId": "Courseware ID",
"version": "Version",
"scenes": "Scenes",
"quizScenes": "Quiz scenes",
"copyUrl": "Copy URL",
"copied": "Copied",
"untitled": "Untitled courseware",
"sceneCount": "{{count}} scenes",
"manageLink": "Open publish management",
"manageTitle": "Courseware publish management",
"manageDesc": "Versions published to the courseware registry",
"backToApp": "Back to app",
"refresh": "Refresh",
"loading": "Loading…",
"loadFailed": "Load failed",
"empty": "Nothing published yet. Use “Publish courseware” in the classroom export menu.",
"learnerUrl": "Learner URL",
"learnerUrlHint": "Users open this link to start learning"
},
"learner": {
"resolving": "Resolving courseware…",
"downloading": "Downloading courseware (first visit)…",
"opening": "Opening courseware…",
"loadFailed": "Failed to load courseware",
"retry": "Retry",
"backHome": "Back to home",
"onceHint": "The courseware downloads once on first visit; later visits play from the local cache.",
"catalogBrand": "MAILUO Learning",
"catalogTitle": "Course Catalog",
"catalogDesc": "High-quality courseware, ready to learn. Ask the AI assistant anytime.",
"catalogCount": "{{count}} courses",
"catalogEmpty": "No courses published yet. Check back later.",
"quizCount": "{{count}} quizzes",
"publishedAt": "Published",
"openCatalog": "Open learner catalog"
},
"qa": {
"title": "AI Assistant",
"toggle": "Toggle AI assistant",
"welcome": "Hi, I'm this course's AI assistant 👋\nAsk me anything about the course content,\nor let me search the web for up-to-date info.",
"placeholder": "Type your question…",
"streaming": "Thinking…",
"searched": "Web search used",
"sceneRef": "Course scene",
"error": "Error",
"voiceOn": "Read-aloud on",
"voiceOff": "Read-aloud off"
},
"resume": {
"title": "Resuming courseware generation",
"sceneProgress": "Scene {{done}}/{{total}}",
"generatingScene": "Generating: {{title}}",
"moreScenes": "…{{count}} more scenes queued",
"mediaResume": "Polishing courseware (generating missing media)…",
"failedTitle": "Some scenes failed to generate",
"failedHint": "Retry the failed scenes, or enter the classroom to see what is ready",
"retry": "Retry",
"enterClassroom": "Enter classroom",
"backHome": "Back to home"
},
"jobs": {
"title": "Background generation",
"subtitle": "Runs on the server — close the page and it keeps going",
"backgroundMode": "Background",
"started": "Generation started in the background; you can leave this page",
"viewTasks": "View tasks",
"statusQueued": "Queued",
"statusRunning": "Generating",
"statusSucceeded": "Done",
"statusFailed": "Failed",
"statusCancelled": "Cancelled",
"cancel": "Cancel",
"open": "Open",
"deleteConfirm": "Delete this job? Its generated courseware will be removed too.",
"sceneProgress": "Scene {{done}}/{{total}}",
"empty": "No background generation jobs",
"loadFailed": "Failed to load jobs",
"foregroundFallback": "Uploaded materials or interactive mode active — using foreground generation (background mode does not support these yet)",
"generateBackground": "Background",
"generateForeground": "Foreground",
"backgroundHint": "Runs on the server — close the page and it keeps going; manage it in the task panel below",
"foregroundHint": "Interactive generation: outline review + per-scene progress (supports materials & interactive mode)",
"resume": "Resume"
},
"course": {
"createTitle": "Create a large course",
"createPlaceholder": "Describe your large topic, e.g. Introduction to Machine Learning — from linear regression to neural networks, covering supervised/unsupervised learning, model evaluation and tuning, for absolute beginners…\nThe system will first plan a course framework (4-15 modules) for your review; only after you confirm will it generate a complete courseware for each module.",
"createAction": "Create & build framework",
"webSearch": "Web research",
"imageGen": "Generate images",
"videoGen": "Generate videos",
"tts": "Generate audio",
"listTitle": "Courses",
"empty": "No large courses yet — create your first one with the form above.",
"modulesProgress": "Modules {{succeeded}}/{{total}}",
"status": {
"queued": "Queued",
"framework_generating": "Building framework",
"framework_ready": "Awaiting confirmation",
"generating": "Generating modules",
"completed": "Completed",
"failed": "Failed",
"cancelled": "Cancelled"
},
"frameworkGenerating": "Building the course framework…",
"frameworkGeneratingHint": "The topic is being decomposed into modules (~1 minute). You will review and confirm it before modules are generated.",
"frameworkReviewTitle": "Framework ready — please confirm",
"frameworkReviewHint": "No module courseware is generated until you confirm; you can regenerate the framework if needed.",
"targetAudience": "Target learners",
"languageDirectiveLabel": "Teaching language & terminology",
"courseGoals": "Whole-course goals",
"continuityContract": "Cross-module continuity contract (click to expand)",
"terminology": "Terminology rules",
"teachingStyle": "Teaching style",
"difficultyProgression": "Difficulty progression",
"assessmentStrategy": "Assessment strategy",
"moduleGenerationDetails": "Review module goals, knowledge boundaries & generation prompt",
"learningObjectives": "Learning objectives",
"prerequisites": "Prerequisites",
"incomingKnowledge": "Assumed incoming knowledge",
"outgoingKnowledge": "Knowledge handed to later modules",
"excludedTopics": "Topics excluded from this module",
"generationPrompt": "Master-agent generation prompt",
"none": "None",
"actualOutput": "Actual generated output",
"scenesUnit": "scenes",
"semanticHash": "Semantic hash",
"actualCoverage": "Actual coverage",
"actualInteractions": "Actual interactions",
"actualAssessments": "Actual assessments",
"startModulesAction": "Confirm & generate modules",
"regenerateFrameworkAction": "Regenerate framework",
"confirmCostHint": "After confirming, {{count}} module coursewares will be generated one by one — track progress, cancel, or regenerate an ordered tail from any module.",
"awaitingConfirmHint": "Framework ready — awaiting confirmation",
"moduleGenerating": "Generating module {{index}}: {{title}}",
"jobSceneProgress": "Scenes {{done}}/{{total}}",
"panelTitle": "Large courses",
"progressTitle": "Generation progress",
"publishedCount": "{{count}} modules published",
"progressHint": "Modules are generated strictly in order. A failure pauses later modules until it is fixed, so they can continue from actual prior output.",
"frameworkTitle": "Course framework",
"languageDirective": "Language directive (click to expand)",
"modulesTitle": "Modules (in learning order)",
"noModules": "The framework is still generating — the module list will appear shortly…",
"moduleStatus": {
"pending": "Pending",
"generating": "Generating",
"succeeded": "Done",
"failed": "Failed"
},
"publishedBadge": "Published",
"openClassroom": "Open courseware",
"previewLearner": "Learner preview",
"regenerateModule": "Regenerate from here",
"regenerateModuleCascadeHint": "This module's actual output affects continuity, so this module and every later module will be regenerated in order.",
"cancelAction": "Cancel",
"resumeAction": "Resume",
"publishAction": "Publish course",
"learnerLink": "Learner link",
"copied": "Copied",
"backToList": "Back to courses",
"createdAt": "Created",
"actionDone": {
"publish": "Course published",
"start": "Module generation started",
"resume": "Generation resumed",
"cancel": "Cancellation requested",
"regenerate": "This module and its downstream modules are regenerating in order",
"frameworkRegenerate": "Framework regeneration started"
},
"learner": {
"brand": "Large Course",
"backToCatalog": "Back to catalog",
"backToCourse": "Back to course",
"catalogCourses": "Large courses (learn module by module)",
"catalogCoursewares": "Single-courseware courses",
"moduleCount": "{{count}} modules",
"progress": "Learning progress",
"progressHint": "Module progress is stored on this device; mark a module complete after finishing it.",
"moduleStatus": {
"notStarted": "Not started",
"inProgress": "In progress",
"completed": "Completed"
},
"enterModule": "Start learning",
"markDone": "Mark complete",
"undoDone": "Unmark",
"notFound": "Course not found or not published yet."
}
}
}