2029 lines
88 KiB
JSON
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."
|
|
}
|
|
}
|
|
}
|