diff --git a/apps/mana/apps/web/src/lib/modules/comic/components/CharacterPicker.svelte b/apps/mana/apps/web/src/lib/modules/comic/components/CharacterPicker.svelte index e128b9462..9049db14f 100644 --- a/apps/mana/apps/web/src/lib/modules/comic/components/CharacterPicker.svelte +++ b/apps/mana/apps/web/src/lib/modules/comic/components/CharacterPicker.svelte @@ -18,6 +18,7 @@ import { useAllGarments } from '$lib/modules/wardrobe/queries'; import { garmentPhotoUrl } from '$lib/modules/wardrobe/api/media-url'; import type { Garment } from '$lib/modules/wardrobe/types'; + import { _ } from 'svelte-i18n'; interface Props { value: string[]; @@ -108,33 +109,30 @@

- Protagonist + {$_('comic.picker.section_title')}

- Dein Gesicht ist Pflicht. Body-Ref und bis zu {MAX_GARMENTS} Kostüm-Fotos sind optional — klicke - ein Bild oder das ✕, um es wieder zu entfernen. + {$_('comic.picker.section_hint', { values: { max: MAX_GARMENTS } })}

- +
{#if face?.publicUrl}
Face-Ref - Pflicht + {$_('comic.picker.face_required_badge')}
{:else} @@ -142,10 +140,12 @@ class="flex h-20 w-20 flex-col items-center justify-center gap-1 rounded-md border border-dashed border-border bg-muted/50 text-[10px] text-muted-foreground" > - Face fehlt + {$_('comic.picker.face_missing')}
{/if} - Face + {$_('comic.picker.face_label')}
+ {@html $_('comic.picker.garment_picker_empty_html')}

{:else}
@@ -307,14 +309,13 @@ {#if !hasFace} {:else if !hasBody}

- Tipp: Ein Body-Ref hilft, wenn der Comic Ganzkörper-Panels zeigen - soll. + + {$_('comic.picker.body_tip')}

{/if}
diff --git a/apps/mana/apps/web/src/lib/modules/comic/views/DetailCharacterView.svelte b/apps/mana/apps/web/src/lib/modules/comic/views/DetailCharacterView.svelte index ae7744b33..805e85ae8 100644 --- a/apps/mana/apps/web/src/lib/modules/comic/views/DetailCharacterView.svelte +++ b/apps/mana/apps/web/src/lib/modules/comic/views/DetailCharacterView.svelte @@ -8,9 +8,9 @@ import { ArrowLeft, Archive, Heart, Plus, Sparkle, Trash } from '@mana/shared-icons'; import { comicCharactersStore } from '../stores/characters.svelte'; import { useCharacter } from '../queries'; - import { STYLE_LABELS } from '../constants'; import VariantTile from '../components/VariantTile.svelte'; import CharacterBuilder from '../components/CharacterBuilder.svelte'; + import { _ } from 'svelte-i18n'; interface Props { id: string; @@ -36,7 +36,14 @@ async function handleDelete() { if (!character) return; - if (!confirm(`Character "${character.name}" wirklich löschen?`)) return; + if ( + !confirm( + $_('comic.character_detail.confirm_delete_character', { + values: { name: character.name }, + }) + ) + ) + return; await comicCharactersStore.deleteCharacter(character.id); await goto('/comic/character'); } @@ -48,12 +55,7 @@ async function handleRemove(variantId: string) { if (!character) return; - if ( - !confirm( - 'Variante aus dem Character entfernen? Das Bild bleibt in deiner Picture-Galerie und kann dort gelöscht werden.' - ) - ) - return; + if (!confirm($_('comic.character_detail.confirm_remove_variant'))) return; await comicCharactersStore.removeVariant(character.id, variantId); } @@ -63,20 +65,24 @@ - Comic · Characters + {$_('comic.character_detail.breadcrumb')} {#if !character} {#if character$.loading} -

Lädt…

+

{$_('comic.character_detail.loading')}

{:else}
-

Character nicht gefunden.

-

Gelöscht oder in einem anderen Space.

+

+ {$_('comic.character_detail.not_found')} +

+

+ {$_('comic.character_detail.not_found_hint')} +

{/if} {:else} @@ -87,15 +93,20 @@

{character.name}

- {STYLE_LABELS[character.style].de} + {$_('comic.styles.' + character.style)} - {character.variantMediaIds.length} - {character.variantMediaIds.length === 1 ? 'Variante' : 'Varianten'} + {character.variantMediaIds.length === 1 + ? $_('comic.character_detail.variant_one', { + values: { n: character.variantMediaIds.length }, + }) + : $_('comic.character_detail.variant_other', { + values: { n: character.variantMediaIds.length }, + })} {#if !character.pinnedVariantId && character.variantMediaIds.length > 0} Pin offen{$_('comic.character_detail.pin_open')} {/if}
@@ -103,8 +114,12 @@
{/if} @@ -129,7 +144,7 @@

- Varianten + {$_('comic.character_detail.section_variants')}

{#if !showBuilder && !character.isArchived} {/if}
@@ -147,10 +162,12 @@
-

Noch keine Varianten.

+

+ {$_('comic.character_detail.empty_variants_title')} +

- Klick oben rechts auf + Mehr Varianten, um die - ersten 4 zu generieren. + + {@html $_('comic.character_detail.empty_variants_hint_html')}

{:else} @@ -190,7 +207,9 @@ class="flex flex-1 items-center justify-center gap-2 rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground transition-colors hover:bg-muted" > - {character.isArchived ? 'Wieder aktiv' : 'Archivieren'} + {character.isArchived + ? $_('comic.character_detail.unarchive') + : $_('comic.character_detail.archive')}
@@ -206,8 +225,8 @@

- Archivierter Character — keine Variant-Generierung möglich, - bis wieder aktiviert. + + {$_('comic.character_detail.archived_hint')}

{/if} {/if} diff --git a/apps/mana/apps/web/src/lib/modules/quiz/PlayView.svelte b/apps/mana/apps/web/src/lib/modules/quiz/PlayView.svelte index add3aee9e..959736793 100644 --- a/apps/mana/apps/web/src/lib/modules/quiz/PlayView.svelte +++ b/apps/mana/apps/web/src/lib/modules/quiz/PlayView.svelte @@ -8,6 +8,7 @@ import { attemptsStore } from './stores/attempts.svelte'; import type { AttemptAnswer } from './types'; import { ArrowLeft, Check, X } from '@mana/shared-icons'; + import { _ } from 'svelte-i18n'; interface Props { quizId: string; @@ -108,8 +109,9 @@
- {#if quiz} {quiz.title} @@ -120,14 +122,18 @@
{#if !quiz} -

Quiz nicht gefunden.

+

{$_('quiz.play_view.empty_quiz')}

{:else if total === 0} -

Dieses Quiz hat noch keine Fragen.

+

{$_('quiz.play_view.empty_no_questions')}

{:else if finished}
{scorePct}% - {correctCount} von {total} richtig + {$_('quiz.play_view.score_summary', { + values: { correct: correctCount, total }, + })}
    {#each questions as q, i (q.id)} @@ -142,15 +148,18 @@
{#if q.type === 'text'}

- Deine Antwort: {ans?.textAnswer || '—'} + {$_('quiz.play_view.review_your_answer')}{ans?.textAnswer || $_('quiz.play_view.placeholder_review_dash')}

{#if !ans?.correct} -

Richtig: {q.options[0]?.text}

+

+ {$_('quiz.play_view.review_correct')}{q.options[0]?.text} +

{/if} {:else}

- Richtig: - + {$_('quiz.play_view.review_correct')} {q.options .filter((o) => o.isCorrect) .map((o) => o.text) @@ -162,8 +171,10 @@ {/each}

- - + +
{:else if current} @@ -176,14 +187,16 @@ type="text" bind:value={textInput} disabled={revealed} - placeholder="Deine Antwort" + placeholder={$_('quiz.play_view.placeholder_text_answer')} /> {#if revealed} @@ -221,11 +234,13 @@
{#if !revealed} {:else} {/if}
diff --git a/scripts/i18n-hardcoded-baseline.json b/scripts/i18n-hardcoded-baseline.json index cb7491e35..10667e865 100644 --- a/scripts/i18n-hardcoded-baseline.json +++ b/scripts/i18n-hardcoded-baseline.json @@ -74,7 +74,6 @@ "apps/mana/apps/web/src/lib/modules/comic/components/BatchPanelEditor.svelte": 2, "apps/mana/apps/web/src/lib/modules/comic/components/CharacterBuilder.svelte": 4, "apps/mana/apps/web/src/lib/modules/comic/components/CharacterCard.svelte": 1, - "apps/mana/apps/web/src/lib/modules/comic/components/CharacterPicker.svelte": 6, "apps/mana/apps/web/src/lib/modules/comic/components/CharacterRefPicker.svelte": 2, "apps/mana/apps/web/src/lib/modules/comic/components/PanelEditor.svelte": 3, "apps/mana/apps/web/src/lib/modules/comic/components/PanelModelPicker.svelte": 1, @@ -86,7 +85,6 @@ "apps/mana/apps/web/src/lib/modules/comic/components/VariantTile.svelte": 1, "apps/mana/apps/web/src/lib/modules/comic/ListView.svelte": 1, "apps/mana/apps/web/src/lib/modules/comic/views/CharactersView.svelte": 1, - "apps/mana/apps/web/src/lib/modules/comic/views/DetailCharacterView.svelte": 6, "apps/mana/apps/web/src/lib/modules/comic/views/ListView.svelte": 2, "apps/mana/apps/web/src/lib/modules/community/components/ItemCard.svelte": 1, "apps/mana/apps/web/src/lib/modules/community/views/DetailView.svelte": 1, @@ -150,7 +148,6 @@ "apps/mana/apps/web/src/lib/modules/questions/ListView.svelte": 1, "apps/mana/apps/web/src/lib/modules/questions/views/DetailView.svelte": 6, "apps/mana/apps/web/src/lib/modules/quiz/ListView.svelte": 5, - "apps/mana/apps/web/src/lib/modules/quiz/PlayView.svelte": 6, "apps/mana/apps/web/src/lib/modules/quotes/views/DetailView.svelte": 2, "apps/mana/apps/web/src/lib/modules/research-lab/components/CompareColumn.svelte": 2, "apps/mana/apps/web/src/lib/modules/research-lab/ListView.svelte": 4, diff --git a/scripts/i18n-missing-baseline.json b/scripts/i18n-missing-baseline.json index 218f64be2..630752d2c 100644 --- a/scripts/i18n-missing-baseline.json +++ b/scripts/i18n-missing-baseline.json @@ -8,6 +8,7 @@ "apps/mana/apps/web/src/lib/modules/ai-workbench/ListView.svelte": 1, "apps/mana/apps/web/src/lib/modules/broadcast/ListView.svelte": 1, "apps/mana/apps/web/src/lib/modules/broadcast/views/DetailView.svelte": 1, + "apps/mana/apps/web/src/lib/modules/comic/views/DetailCharacterView.svelte": 1, "apps/mana/apps/web/src/lib/modules/comic/views/DetailView.svelte": 1, "apps/mana/apps/web/src/lib/modules/credits/ListView.svelte": 1, "apps/mana/apps/web/src/lib/modules/dreams/ListView.svelte": 1,