chore: Lokalisierung der UI-Texte ins Deutsche

- Übersetzung aller statischen Texte in der Benutzeroberfläche von Englisch nach Deutsch
- Inklusive Schaltflächen, Überschriften, Fehlermeldungen, Statusmeldungen und Tabellenüberschriften
This commit is contained in:
sebseb7
2026-04-05 00:53:27 +02:00
parent 5f26029cfe
commit e0a602135a

View File

@@ -538,7 +538,7 @@
<body> <body>
<div class="container"> <div class="container">
<div class="header"> <div class="header">
<h1>🔍 Search Agent</h1> <h1>🔍 Such-Agent</h1>
</div> </div>
<div class="search-section"> <div class="search-section">
@@ -558,45 +558,45 @@
id="questionInput" id="questionInput"
autocomplete="off" autocomplete="off"
> >
<button class="search-btn" id="searchBtn">Suche</button> <button class="search-btn" id="searchBtn">Suchen</button>
</div> </div>
<div class="loading" id="loading"> <div class="loading" id="loading">
<div class="spinner"></div> <div class="spinner"></div>
<p>Searching and analyzing results...</p> <p>Suche und analysiere Ergebnisse...</p>
</div> </div>
<div class="error" id="error"></div> <div class="error" id="error"></div>
<div class="results" id="results"> <div class="results" id="results">
<div class="result-section"> <div class="result-section">
<h2>📝 Answer</h2> <h2>📝 Antwort</h2>
<div class="answer" id="answer"></div> <div class="answer" id="answer"></div>
</div> </div>
<div class="result-section"> <div class="result-section">
<h2>🔗 Most Relevant Sources</h2> <h2>🔗 Relevanteste Quellen</h2>
<ul class="sources" id="sources"></ul> <ul class="sources" id="sources"></ul>
</div> </div>
<div class="result-section"> <div class="result-section">
<h2>💡 Suggested Follow-up Searches</h2> <h2>💡 Vorgeschlagene Folgesuchen</h2>
<div class="suggested-searches" id="suggestedSearches"></div> <div class="suggested-searches" id="suggestedSearches"></div>
</div> </div>
<!-- Cost Breakdown Section --> <!-- Cost Breakdown Section -->
<div class="result-section"> <div class="result-section">
<details class="cost-breakdown-details" id="costBreakdownDetails"> <details class="cost-breakdown-details" id="costBreakdownDetails">
<summary class="cost-breakdown-summary">💰 Cost Breakdown</summary> <summary class="cost-breakdown-summary">💰 Kostenaufschlüsselung</summary>
<div class="cost-breakdown-content"> <div class="cost-breakdown-content">
<table class="cost-table" id="costTable"> <table class="cost-table" id="costTable">
<thead> <thead>
<tr> <tr>
<th>#</th> <th>#</th>
<th>Type</th> <th>Typ</th>
<th>Input</th> <th>Eingabe</th>
<th>Output</th> <th>Ausgabe</th>
<th>Cost (USD)</th> <th>Kosten (USD)</th>
</tr> </tr>
</thead> </thead>
<tbody id="costTableBody"> <tbody id="costTableBody">
@@ -614,9 +614,9 @@
<div style="display: flex; align-items: center; gap: 15px;"> <div style="display: flex; align-items: center; gap: 15px;">
<div class="connection-status"> <div class="connection-status">
<span class="status-dot" id="statusDot"></span> <span class="status-dot" id="statusDot"></span>
<span id="statusText">Connecting...</span> <span id="statusText">Verbinde...</span>
</div> </div>
<button class="clear-logs-btn" id="clearLogsBtn">Clear</button> <button class="clear-logs-btn" id="clearLogsBtn">Löschen</button>
</div> </div>
</div> </div>
<div class="log-container" id="logContainer"> <div class="log-container" id="logContainer">
@@ -655,8 +655,8 @@
eventSource.onopen = function() { eventSource.onopen = function() {
statusDot.className = 'status-dot connected'; statusDot.className = 'status-dot connected';
statusText.textContent = 'Connected'; statusText.textContent = 'Verbunden';
addLogEntry('Connected to log stream', 'info'); addLogEntry('Mit Log-Stream verbunden', 'info');
}; };
eventSource.onmessage = function(event) { eventSource.onmessage = function(event) {
@@ -690,7 +690,7 @@
eventSource.onerror = function(err) { eventSource.onerror = function(err) {
statusDot.className = 'status-dot disconnected'; statusDot.className = 'status-dot disconnected';
statusText.textContent = 'Disconnected'; statusText.textContent = 'Getrennt';
console.error('SSE Error:', err); console.error('SSE Error:', err);
// Attempt to reconnect after 3 seconds // Attempt to reconnect after 3 seconds
@@ -764,7 +764,7 @@
async function performSearch() { async function performSearch() {
const question = questionInput.value.trim(); const question = questionInput.value.trim();
if (!question) { if (!question) {
showError('Please enter a question'); showError('Bitte geben Sie eine Frage ein');
return; return;
} }
@@ -800,7 +800,7 @@
async function performSearchWithClarification(clarificationText) { async function performSearchWithClarification(clarificationText) {
if (!clarificationData || !clarificationData.originalQuestion) { if (!clarificationData || !clarificationData.originalQuestion) {
showError('Clarification data not available'); showError('Klärungsdaten nicht verfügbar');
return; return;
} }
@@ -859,13 +859,13 @@
id="clarificationSubmitBtn" id="clarificationSubmitBtn"
style="padding: 10px 20px; font-size: 1rem;" style="padding: 10px 20px; font-size: 1rem;"
> >
Submit Clarification Klärung einreichen
</button> </button>
</div> </div>
`; `;
// Clear sources since we're waiting for clarification // Clear sources since we're waiting for clarification
sourcesEl.innerHTML = '<li>Waiting for clarification...</li>'; sourcesEl.innerHTML = '<li>Warte auf Klärung...</li>';
// Add event listener for clarification submission // Add event listener for clarification submission
setTimeout(() => { setTimeout(() => {
@@ -901,7 +901,7 @@
clarificationData = null; clarificationData = null;
// Display answer as HTML // Display answer as HTML
answerEl.innerHTML = data.fullAnswerHTMLSnippet || '<p>No answer generated</p>'; answerEl.innerHTML = data.fullAnswerHTMLSnippet || '<p>Keine Antwort generiert</p>';
// Display sources // Display sources
sourcesEl.innerHTML = ''; sourcesEl.innerHTML = '';
@@ -918,7 +918,7 @@
}); });
} else { } else {
const li = document.createElement('li'); const li = document.createElement('li');
li.textContent = 'No sources available'; li.textContent = 'Keine Quellen verfügbar';
sourcesEl.appendChild(li); sourcesEl.appendChild(li);
} }
@@ -936,7 +936,7 @@
suggestedSearchesEl.appendChild(btn); suggestedSearchesEl.appendChild(btn);
}); });
} else { } else {
suggestedSearchesEl.innerHTML = '<p style="color: #999;">No suggested searches available</p>'; suggestedSearchesEl.innerHTML = '<p style="color: #999;">Keine vorgeschlagenen Suchen verfügbar</p>';
} }
// Display cost breakdown // Display cost breakdown
@@ -956,7 +956,7 @@
}); });
} else { } else {
const tr = document.createElement('tr'); const tr = document.createElement('tr');
tr.innerHTML = '<td colspan="5">No cost data available</td>'; tr.innerHTML = '<td colspan="5">Keine Kostendaten verfügbar</td>';
costTableBody.appendChild(tr); costTableBody.appendChild(tr);
} }