diff --git a/src/pages/Publish.jsx b/src/pages/Publish.jsx index af4eecf..7efcee9 100644 --- a/src/pages/Publish.jsx +++ b/src/pages/Publish.jsx @@ -167,6 +167,7 @@ function ReadyCard({ bundle, onPublished, onRefresh }) { const [done, setDone] = useState(null); const [assigning, setAssigning] = useState(null); const [audioFilling, setAudioFilling] = useState(false); + const [translateFilling, setTranslateFilling] = useState(false); if (!bundle) { return ( @@ -209,6 +210,16 @@ function ReadyCard({ bundle, onPublished, onRefresh }) { finally { setAssigning(null); } } + async function fillTranslations() { + setTranslateFilling(true); setError(null); + try { + const res = await apiPost(`/pipeline/picture/${bundle.picture.id}/translate-fill`, {}); + if (res.failed) setError(`${res.translated} Pairs übersetzt, ${res.failed} fehlgeschlagen: ${res.errors?.[0]?.error || ''}`); + await onRefresh?.(); + } catch (e) { setError(e.payload?.error || e.message); } + finally { setTranslateFilling(false); } + } + async function fillAudio() { setAudioFilling(true); setError(null); try { @@ -261,16 +272,21 @@ function ReadyCard({ bundle, onPublished, onRefresh }) { {bundle.objects.length} Objekt{bundle.objects.length !== 1 ? 'e' : ''} · {allPairs.length} Pairs · {wordCount} Wörter {incompletePairs.length > 0 && ( -
- - ⚠ {incompletePairs.length} Pair{incompletePairs.length !== 1 ? 's' : ''} unvollständig (Text/Audio) - - +
+ ⚠ {incompletePairs.length} Pair{incompletePairs.length !== 1 ? 's' : ''} unvollständig (Text/Audio) — erst Übersetzungen, dann Audios nachholen
)} + {/* Nachhol-Aktionen immer verfügbar: Reihenfolge Übersetzen → Audio (Audio braucht alle Sprachen) */} +
+ + +
bereit