feat: übersetze gesamte UI auf Deutsch
- Alle Seiten (AirScale, LinkedIn, SERP, Ergebnisse, Einstellungen) auf Deutsch - Gemeinsame Komponenten übersetzt: StatusBadge, ResultsTable-Spalten, FileDropZone, ExportButtons - Sidebar API-Status-Label und TopBar-Breadcrumbs auf Deutsch - Alle Toast-Nachrichten und Fehlermeldungen auf Deutsch Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -104,7 +104,7 @@ export default function SettingsPage() {
|
||||
body: JSON.stringify(body),
|
||||
});
|
||||
if (!res.ok) throw new Error("Save failed");
|
||||
toast.success("Credentials saved successfully");
|
||||
toast.success("Zugangsdaten erfolgreich gespeichert");
|
||||
setCreds(prev => {
|
||||
const next = { ...prev };
|
||||
for (const service of Object.keys(body)) {
|
||||
@@ -113,7 +113,7 @@ export default function SettingsPage() {
|
||||
return next;
|
||||
});
|
||||
} catch {
|
||||
toast.error("Failed to save credentials");
|
||||
toast.error("Zugangsdaten konnten nicht gespeichert werden");
|
||||
} finally {
|
||||
setSaving(false);
|
||||
}
|
||||
@@ -126,11 +126,11 @@ export default function SettingsPage() {
|
||||
const res = await fetch(`/api/credentials/test?service=${service}`);
|
||||
const data = await res.json() as { ok: boolean };
|
||||
update(service, "testResult", data.ok ? "ok" : "fail");
|
||||
if (data.ok) toast.success(`${service} connection verified`);
|
||||
else toast.error(`${service} connection failed — check your key`);
|
||||
if (data.ok) toast.success(`${service}-Verbindung erfolgreich`);
|
||||
else toast.error(`${service}-Verbindung fehlgeschlagen — API-Key prüfen`);
|
||||
} catch {
|
||||
update(service, "testResult", "fail");
|
||||
toast.error("Connection test failed");
|
||||
toast.error("Verbindungstest fehlgeschlagen");
|
||||
} finally {
|
||||
update(service, "testing", false);
|
||||
}
|
||||
@@ -140,9 +140,9 @@ export default function SettingsPage() {
|
||||
<div className="max-w-2xl space-y-6">
|
||||
{/* Header */}
|
||||
<div>
|
||||
<h1 className="text-2xl font-bold text-white">Settings</h1>
|
||||
<h1 className="text-2xl font-bold text-white">Einstellungen</h1>
|
||||
<p className="text-gray-400 mt-1 text-sm">
|
||||
API credentials are encrypted with AES-256 and stored locally in SQLite.
|
||||
API-Zugangsdaten werden mit AES-256 verschlüsselt und lokal in SQLite gespeichert.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -158,11 +158,11 @@ export default function SettingsPage() {
|
||||
<div className="flex items-center gap-2 mt-1">
|
||||
{state.saved ? (
|
||||
<span className="flex items-center gap-1 text-xs text-green-400">
|
||||
<CheckCircle2 className="w-3.5 h-3.5" /> Configured
|
||||
<CheckCircle2 className="w-3.5 h-3.5" /> Konfiguriert
|
||||
</span>
|
||||
) : (
|
||||
<span className="flex items-center gap-1 text-xs text-red-400">
|
||||
<XCircle className="w-3.5 h-3.5" /> Not configured
|
||||
<XCircle className="w-3.5 h-3.5" /> Nicht konfiguriert
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
@@ -221,17 +221,17 @@ export default function SettingsPage() {
|
||||
className="border-[#2e2e3e] hover:border-blue-500/50 text-gray-300"
|
||||
>
|
||||
{state.testing ? (
|
||||
<><Loader2 className="w-3.5 h-3.5 mr-1.5 animate-spin" /> Testing...</>
|
||||
) : "Test Connection"}
|
||||
<><Loader2 className="w-3.5 h-3.5 mr-1.5 animate-spin" /> Teste...</>
|
||||
) : "Verbindung testen"}
|
||||
</Button>
|
||||
{state.testResult === "ok" && (
|
||||
<span className="flex items-center gap-1 text-xs text-green-400">
|
||||
<CheckCircle2 className="w-3.5 h-3.5" /> Connected
|
||||
<CheckCircle2 className="w-3.5 h-3.5" /> Verbunden
|
||||
</span>
|
||||
)}
|
||||
{state.testResult === "fail" && (
|
||||
<span className="flex items-center gap-1 text-xs text-red-400">
|
||||
<XCircle className="w-3.5 h-3.5" /> Failed
|
||||
<XCircle className="w-3.5 h-3.5" /> Fehlgeschlagen
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
@@ -245,7 +245,7 @@ export default function SettingsPage() {
|
||||
onClick={saveAll}
|
||||
className="bg-gradient-to-r from-blue-500 to-purple-600 hover:from-blue-600 hover:to-purple-700 text-white font-medium px-8 shadow-lg hover:shadow-blue-500/25 transition-all"
|
||||
>
|
||||
{saving ? <><Loader2 className="w-4 h-4 mr-2 animate-spin" /> Saving...</> : "Save All Credentials"}
|
||||
{saving ? <><Loader2 className="w-4 h-4 mr-2 animate-spin" /> Speichern...</> : "Alle Zugangsdaten speichern"}
|
||||
</Button>
|
||||
</div>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user