Fix translation errors and improve conversation flow
- Add proper German fallbacks for all user-facing text - Fix 'Share your thoughts', 'Submit', 'You' translations - Improve context sent to AI with originalTopic and context type - Reset conversation state properly to prevent duplicate messages - Add better German translations for welcome messages and fallback questions - Improve choice button translations and prompts - Fix weird AI responses by providing better context to server
This commit is contained in:
@@ -237,12 +237,13 @@ class KidsAIExplorer {
|
|||||||
// Show thinking section
|
// Show thinking section
|
||||||
this.thinkingSection.classList.remove('hidden');
|
this.thinkingSection.classList.remove('hidden');
|
||||||
|
|
||||||
// Clear previous content
|
// Clear previous content completely
|
||||||
this.thinkingSteps.innerHTML = '';
|
this.thinkingSteps.innerHTML = '';
|
||||||
|
|
||||||
// Initialize conversation state
|
// Reset conversation state
|
||||||
this.currentStep = 0;
|
this.currentStep = 0;
|
||||||
this.userAnswers = [];
|
this.userAnswers = [];
|
||||||
|
this.currentQuestionIndex = 0;
|
||||||
|
|
||||||
// Create conversation container
|
// Create conversation container
|
||||||
const conversationContainer = document.createElement('div');
|
const conversationContainer = document.createElement('div');
|
||||||
@@ -254,9 +255,9 @@ class KidsAIExplorer {
|
|||||||
welcomeStep.className = 'conversation-step visible';
|
welcomeStep.className = 'conversation-step visible';
|
||||||
|
|
||||||
// Get translations before creating HTML to avoid context issues
|
// Get translations before creating HTML to avoid context issues
|
||||||
const encouragementText = guidance.encouragement || this.getTranslation('default-encouragement') || "Great question! Let's explore this together step by step! 🚀";
|
const encouragementText = guidance.encouragement || this.getTranslation('default-encouragement') || (this.currentLanguage === 'de' ? "Fantastische Frage! Lass uns das gemeinsam Schritt für Schritt erforschen! 🚀" : "Great question! Let's explore this together step by step! 🚀");
|
||||||
const detectiveHelpText = this.getTranslation('detective-help') || "Instead of giving you the answer right away, I'll help you think through this like a detective! 🕵️";
|
const detectiveHelpText = this.getTranslation('detective-help') || (this.currentLanguage === 'de' ? "Anstatt dir die Antwort gleich zu geben, helfe ich dir dabei, wie ein Detektiv zu denken! 🕵️" : "Instead of giving you the answer right away, I'll help you think through this like a detective! 🕵️");
|
||||||
const aiTeacherText = this.getTranslation('ai-teacher') || "AI Teacher";
|
const aiTeacherText = this.getTranslation('ai-teacher') || (this.currentLanguage === 'de' ? "KI-Lehrer" : "AI Teacher");
|
||||||
|
|
||||||
welcomeStep.innerHTML = `
|
welcomeStep.innerHTML = `
|
||||||
<div class="ai-message">
|
<div class="ai-message">
|
||||||
@@ -274,15 +275,14 @@ class KidsAIExplorer {
|
|||||||
|
|
||||||
// Add thinking questions as interactive steps
|
// Add thinking questions as interactive steps
|
||||||
const questions = guidance.steps ? guidance.steps.map(step => step.text) : guidance.questions || [
|
const questions = guidance.steps ? guidance.steps.map(step => step.text) : guidance.questions || [
|
||||||
"What do you already know about this topic?",
|
this.currentLanguage === 'de' ? "Was weißt du bereits über dieses Thema?" : "What do you already know about this topic?",
|
||||||
"What do you think might be the reason for this?",
|
this.currentLanguage === 'de' ? "Was denkst du, könnte der Grund dafür sein?" : "What do you think might be the reason for this?",
|
||||||
"Can you think of any examples or similar situations?"
|
this.currentLanguage === 'de' ? "Kannst du dir Beispiele oder ähnliche Situationen vorstellen?" : "Can you think of any examples or similar situations?"
|
||||||
];
|
];
|
||||||
|
|
||||||
// Create chat interface
|
// Create chat interface
|
||||||
this.conversationContainer = conversationContainer;
|
this.conversationContainer = conversationContainer;
|
||||||
this.questions = questions;
|
this.questions = questions;
|
||||||
this.currentQuestionIndex = 0;
|
|
||||||
|
|
||||||
// Start the conversation with the first question
|
// Start the conversation with the first question
|
||||||
this.askNextQuestion();
|
this.askNextQuestion();
|
||||||
@@ -506,7 +506,10 @@ class KidsAIExplorer {
|
|||||||
? this.questions[questionIndex]
|
? this.questions[questionIndex]
|
||||||
: 'the current question';
|
: 'the current question';
|
||||||
|
|
||||||
console.log('📤 Sending chat request to /api/respond-to-answer:', { answer, currentQuestion });
|
// Get the original topic for better context
|
||||||
|
const originalQuestion = this.questionInput ? this.questionInput.value.trim() : '';
|
||||||
|
|
||||||
|
console.log('📤 Sending chat request to /api/respond-to-answer:', { answer, currentQuestion, originalQuestion });
|
||||||
|
|
||||||
// Call server API for contextual response
|
// Call server API for contextual response
|
||||||
const response = await fetch('/api/respond-to-answer', {
|
const response = await fetch('/api/respond-to-answer', {
|
||||||
@@ -517,8 +520,10 @@ class KidsAIExplorer {
|
|||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
answer: answer,
|
answer: answer,
|
||||||
question: currentQuestion,
|
question: currentQuestion,
|
||||||
|
originalTopic: originalQuestion,
|
||||||
language: this.currentLanguage,
|
language: this.currentLanguage,
|
||||||
stepIndex: questionIndex
|
stepIndex: questionIndex,
|
||||||
|
context: 'guided_learning_conversation'
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -592,16 +597,16 @@ class KidsAIExplorer {
|
|||||||
|
|
||||||
addContinueChoiceButtons() {
|
addContinueChoiceButtons() {
|
||||||
// Get translations before creating HTML to avoid context issues
|
// Get translations before creating HTML to avoid context issues
|
||||||
const exploreDeeperText = this.getTranslation('explore-deeper') || "I want to explore this deeper";
|
const exploreDeeperText = this.getTranslation('explore-deeper') || (this.currentLanguage === 'de' ? "Ich möchte das tiefer erforschen" : "I want to explore this deeper");
|
||||||
const continueLearningText = this.getTranslation('continue-learning') || "Continue with next topic";
|
const continueLearningText = this.getTranslation('continue-learning') || (this.currentLanguage === 'de' ? "Mit dem nächsten Thema fortfahren" : "Continue with next topic");
|
||||||
const tellMeMoreText = this.getTranslation('tell-me-more') || "Tell me more! 🤔";
|
const tellMeMoreText = this.getTranslation('tell-me-more') || (this.currentLanguage === 'de' ? "Erzähl mir mehr! 🤔" : "Tell me more! 🤔");
|
||||||
const nextQuestionText = this.getTranslation('next-question') || "Next question! ➡️";
|
const nextQuestionText = this.getTranslation('next-question') || (this.currentLanguage === 'de' ? "Nächste Frage! ➡️" : "Next question! ➡️");
|
||||||
|
|
||||||
const choiceContainer = document.createElement('div');
|
const choiceContainer = document.createElement('div');
|
||||||
choiceContainer.className = 'choice-container';
|
choiceContainer.className = 'choice-container';
|
||||||
choiceContainer.innerHTML = `
|
choiceContainer.innerHTML = `
|
||||||
<div class="choice-prompt">
|
<div class="choice-prompt">
|
||||||
<p>💭 ${exploreDeeperText} oder ${continueLearningText}?</p>
|
<p>💭 ${exploreDeeperText} ${this.currentLanguage === 'de' ? 'oder' : 'or'} ${continueLearningText}?</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="choice-buttons">
|
<div class="choice-buttons">
|
||||||
<button class="choice-btn explore-btn" onclick="kidsAI.exploreCurrentTopicDeeper()">
|
<button class="choice-btn explore-btn" onclick="kidsAI.exploreCurrentTopicDeeper()">
|
||||||
@@ -731,13 +736,13 @@ class KidsAIExplorer {
|
|||||||
inputContainer.className = 'user-input-container deeper-exploration';
|
inputContainer.className = 'user-input-container deeper-exploration';
|
||||||
inputContainer.innerHTML = `
|
inputContainer.innerHTML = `
|
||||||
<div class="input-prompt">
|
<div class="input-prompt">
|
||||||
<p>💭 ${this.getTranslation('share-thoughts') || 'Share your thoughts:'}</p>
|
<p>💭 ${this.getTranslation('share-thoughts') || (this.currentLanguage === 'de' ? 'Teile deine Gedanken mit:' : 'Share your thoughts:')}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-area">
|
<div class="input-area">
|
||||||
<textarea id="deeper-chat-input" placeholder="${this.getTranslation('type-thoughts') || 'Type your thoughts here...'}"
|
<textarea id="deeper-chat-input" placeholder="${this.getTranslation('type-thoughts') || (this.currentLanguage === 'de' ? 'Schreibe hier deine Gedanken...' : 'Type your thoughts here...')}"
|
||||||
rows="3" style="width: 100%; padding: 10px; border-radius: 8px; border: 2px solid #e2e8f0; font-size: 14px;"></textarea>
|
rows="3" style="width: 100%; padding: 10px; border-radius: 8px; border: 2px solid #e2e8f0; font-size: 14px;"></textarea>
|
||||||
<button onclick="kidsAI.submitDeeperExplorationAnswer()" class="submit-btn" style="margin-top: 10px; padding: 10px 20px; background: #4ade80; color: white; border: none; border-radius: 8px; cursor: pointer;">
|
<button onclick="kidsAI.submitDeeperExplorationAnswer()" class="submit-btn" style="margin-top: 10px; padding: 10px 20px; background: #4ade80; color: white; border: none; border-radius: 8px; cursor: pointer;">
|
||||||
${this.getTranslation('submit') || 'Submit'} 🚀
|
${this.getTranslation('submit') || (this.currentLanguage === 'de' ? 'Abschicken' : 'Submit')} 🚀
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
@@ -767,7 +772,7 @@ class KidsAIExplorer {
|
|||||||
|
|
||||||
const answer = textarea.value.trim();
|
const answer = textarea.value.trim();
|
||||||
if (!answer) {
|
if (!answer) {
|
||||||
const message = this.getTranslation('write-thoughts') || 'Please write down your thoughts! 🤔';
|
const message = this.getTranslation('write-thoughts') || (this.currentLanguage === 'de' ? 'Bitte schreibe deine Gedanken auf! 🤔' : 'Please write down your thoughts! 🤔');
|
||||||
this.showMessage(message, 'warning');
|
this.showMessage(message, 'warning');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -778,7 +783,7 @@ class KidsAIExplorer {
|
|||||||
userBubble.innerHTML = `
|
userBubble.innerHTML = `
|
||||||
<div class="message-header">
|
<div class="message-header">
|
||||||
<span class="user-avatar">👤</span>
|
<span class="user-avatar">👤</span>
|
||||||
<span class="user-label">${this.getTranslation('you') || 'You'}</span>
|
<span class="user-label">${this.getTranslation('you') || (this.currentLanguage === 'de' ? 'Du' : 'You')}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="message-content">
|
<div class="message-content">
|
||||||
<p>${answer}</p>
|
<p>${answer}</p>
|
||||||
@@ -958,13 +963,13 @@ class KidsAIExplorer {
|
|||||||
inputContainer.className = 'user-input-container';
|
inputContainer.className = 'user-input-container';
|
||||||
inputContainer.innerHTML = `
|
inputContainer.innerHTML = `
|
||||||
<div class="input-prompt">
|
<div class="input-prompt">
|
||||||
<p>💭 ${this.getTranslation('share-thoughts') || 'Share your thoughts:'}</p>
|
<p>💭 ${this.getTranslation('share-thoughts') || (this.currentLanguage === 'de' ? 'Teile deine Gedanken mit:' : 'Share your thoughts:')}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-area">
|
<div class="input-area">
|
||||||
<textarea id="chat-input" placeholder="${this.getTranslation('type-thoughts') || 'Type your thoughts here...'}"
|
<textarea id="chat-input" placeholder="${this.getTranslation('type-thoughts') || (this.currentLanguage === 'de' ? 'Schreibe hier deine Gedanken...' : 'Type your thoughts here...')}"
|
||||||
rows="3" style="width: 100%; padding: 10px; border-radius: 8px; border: 2px solid #e2e8f0; font-size: 14px;"></textarea>
|
rows="3" style="width: 100%; padding: 10px; border-radius: 8px; border: 2px solid #e2e8f0; font-size: 14px;"></textarea>
|
||||||
<button onclick="kidsAI.submitChatAnswer()" class="submit-btn" style="margin-top: 10px; padding: 10px 20px; background: #4ade80; color: white; border: none; border-radius: 8px; cursor: pointer;">
|
<button onclick="kidsAI.submitChatAnswer()" class="submit-btn" style="margin-top: 10px; padding: 10px 20px; background: #4ade80; color: white; border: none; border-radius: 8px; cursor: pointer;">
|
||||||
${this.getTranslation('submit') || 'Submit'} 🚀
|
${this.getTranslation('submit') || (this.currentLanguage === 'de' ? 'Abschicken' : 'Submit')} 🚀
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
@@ -994,7 +999,7 @@ class KidsAIExplorer {
|
|||||||
|
|
||||||
const answer = textarea.value.trim();
|
const answer = textarea.value.trim();
|
||||||
if (!answer) {
|
if (!answer) {
|
||||||
const message = this.getTranslation('write-thoughts') || 'Please write down your thoughts! 🤔';
|
const message = this.getTranslation('write-thoughts') || (this.currentLanguage === 'de' ? 'Bitte schreibe deine Gedanken auf! 🤔' : 'Please write down your thoughts! 🤔');
|
||||||
this.showMessage(message, 'warning');
|
this.showMessage(message, 'warning');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1005,7 +1010,7 @@ class KidsAIExplorer {
|
|||||||
userBubble.innerHTML = `
|
userBubble.innerHTML = `
|
||||||
<div class="message-header">
|
<div class="message-header">
|
||||||
<span class="user-avatar">👤</span>
|
<span class="user-avatar">👤</span>
|
||||||
<span class="user-label">${this.getTranslation('you') || 'You'}</span>
|
<span class="user-label">${this.getTranslation('you') || (this.currentLanguage === 'de' ? 'Du' : 'You')}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="message-content">
|
<div class="message-content">
|
||||||
<p>${answer}</p>
|
<p>${answer}</p>
|
||||||
|
|||||||
Reference in New Issue
Block a user