diff --git a/src/App.vue b/src/App.vue index 37441c1..d2c17f2 100644 --- a/src/App.vue +++ b/src/App.vue @@ -24,7 +24,8 @@ import PropertiesPanel from './components/PropertiesPanel.vue' import Timeline from './components/Timeline.vue' import WelcomeDialog from './components/WelcomeDialog.vue' import TestOverlay from './devtools/TestOverlay.vue' -import { IconButton, Toast } from './components/ui' +import { confirmDialog, DialogsHost, IconButton, promptDialog, Toast } from './components/ui' +import { t } from './i18n' import { useHistory } from './composables/useHistory' import { usePlaybackLoop } from './composables/usePlaybackLoop' import { @@ -140,8 +141,13 @@ async function saveProject() { const scene = JSON.parse(JSON.stringify(store.scene)) let name = currentProjectName.value if (!name) { - const suggested = `Projekt ${new Date().toLocaleDateString()}` - const entered = prompt('Projektname?', suggested) + const suggested = t('app.saveDialog.defaultName', { date: new Date().toLocaleDateString() }) + const entered = await promptDialog({ + title: t('app.saveDialog.title'), + message: t('app.saveDialog.message'), + defaultValue: suggested, + confirmLabel: t('app.saveDialog.confirm'), + }) if (entered === null) return name = entered.trim() || suggested } @@ -152,7 +158,7 @@ async function saveProject() { currentProjectId.value = rec.id currentProjectName.value = rec.name setLastOpenedId(rec.id) - showSavedToast(`"${rec.name}" gespeichert`) + showSavedToast(t('app.savedToast', { name: rec.name })) } function exportProjectFile() { @@ -167,9 +173,12 @@ async function importFromFile() { if (!file) return const hasContent = store.scene.layers.length > 0 || store.scene.assets.length > 0 if (hasContent) { - const ok = confirm( - 'Aktuelles Projekt wird durch die geladene Datei ersetzt. Ungespeicherte Änderungen gehen verloren. Fortfahren?', - ) + const ok = await confirmDialog({ + title: t('app.replaceDialog.title'), + message: t('app.replaceDialog.message'), + confirmLabel: t('app.replaceDialog.confirm'), + variant: 'danger', + }) if (!ok) return } try { @@ -285,7 +294,7 @@ onBeforeUnmount(() => { icon-weight="bold" size="md" :disabled="!history.canUndo.value" - title="Rückgängig (Ctrl+Z)" + :title="t('app.undo')" @click="history.undo" /> { icon-weight="bold" size="md" :disabled="!history.canRedo.value" - title="Wiederholen (Ctrl+Shift+Z)" + :title="t('app.redo')" @click="history.redo" />
@@ -301,7 +310,7 @@ onBeforeUnmount(() => { :icon="PhSkipBack" icon-weight="fill" size="md" - title="Zum Anfang" + :title="t('app.jumpToStart')" @click="rewind" /> { icon-weight="fill" size="md" variant="primary" - :title="store.playing ? 'Pause (Space)' : 'Play (Space)'" + :title="store.playing ? t('app.pause') : t('app.play')" @click="store.togglePlay()" /> {{ store.playhead.toFixed(2) }}s / {{ store.scene.duration }}s @@ -325,18 +334,18 @@ onBeforeUnmount(() => { {{ currentProjectName }} - - - - @@ -345,7 +354,7 @@ onBeforeUnmount(() => {