diff --git a/src-tauri/migrations/021_translation.sql b/src-tauri/migrations/021_translation.sql index a2cca78..5c207d9 100644 --- a/src-tauri/migrations/021_translation.sql +++ b/src-tauri/migrations/021_translation.sql @@ -7,6 +7,7 @@ ALTER TABLE story_entries ADD COLUMN original_input TEXT; ALTER TABLE characters ADD COLUMN translated_name TEXT; ALTER TABLE characters ADD COLUMN translated_description TEXT; ALTER TABLE characters ADD COLUMN translated_relationship TEXT; +ALTER TABLE characters ADD COLUMN translated_traits TEXT; ALTER TABLE characters ADD COLUMN translation_language TEXT; -- Add translation columns to locations diff --git a/src/lib/components/wizard/SetupWizard.svelte b/src/lib/components/wizard/SetupWizard.svelte index c8a42d7..b833014 100644 --- a/src/lib/components/wizard/SetupWizard.svelte +++ b/src/lib/components/wizard/SetupWizard.svelte @@ -1236,9 +1236,9 @@ let translations: { language: string; openingScene?: string; - protagonist?: { name?: string; description?: string }; + protagonist?: { name?: string; description?: string; traits?: string[] }; startingLocation?: { name?: string; description?: string }; - characters?: { [originalName: string]: { name?: string; description?: string; relationship?: string } }; + characters?: { [originalName: string]: { name?: string; description?: string; relationship?: string; traits?: string[] } }; } | undefined; if (TranslationService.shouldTranslate(translationSettings)) { @@ -1255,6 +1255,7 @@ translations.protagonist = { name: protagonistTranslated.name, description: protagonistTranslated.description, + traits: protagonistTranslated.traits, }; } @@ -1278,6 +1279,7 @@ name: translated.name, description: translated.description, relationship: translated.relationship, + traits: translated.traits, }; } } diff --git a/src/lib/components/world/CharacterPanel.svelte b/src/lib/components/world/CharacterPanel.svelte index 0a63cd5..953c498 100644 --- a/src/lib/components/world/CharacterPanel.svelte +++ b/src/lib/components/world/CharacterPanel.svelte @@ -563,9 +563,9 @@ {#if showDetails}
- {#if character.traits.length > 0} + {#if character.traits.length > 0 || (character.translatedTraits && character.translatedTraits.length > 0)}
- {#each character.traits as trait} + {#each character.translatedTraits ?? character.traits as trait} {trait} { const db = await this.getDb(); await db.execute( - `INSERT INTO characters (id, story_id, name, description, relationship, traits, visual_descriptors, portrait, status, metadata, branch_id, translated_name, translated_description, translated_relationship, translation_language) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, + `INSERT INTO characters (id, story_id, name, description, relationship, traits, visual_descriptors, portrait, status, metadata, branch_id, translated_name, translated_description, translated_relationship, translated_traits, translation_language) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [ character.id, character.storyId, @@ -514,6 +514,7 @@ class DatabaseService { character.translatedName || null, character.translatedDescription || null, character.translatedRelationship || null, + character.translatedTraits ? JSON.stringify(character.translatedTraits) : null, character.translationLanguage || null, ] ); @@ -1536,6 +1537,7 @@ private mapEmbeddedImage(row: any): EmbeddedImage { translatedName: row.translated_name || null, translatedDescription: row.translated_description || null, translatedRelationship: row.translated_relationship || null, + translatedTraits: row.translated_traits ? JSON.parse(row.translated_traits) : null, translationLanguage: row.translation_language || null, }; } diff --git a/src/lib/stores/story.svelte.ts b/src/lib/stores/story.svelte.ts index b5962e9..4fe2ead 100644 --- a/src/lib/stores/story.svelte.ts +++ b/src/lib/stores/story.svelte.ts @@ -2622,9 +2622,9 @@ async createStoryFromWizard(data: { translations?: { language: string; openingScene?: string; - protagonist?: { name?: string; description?: string }; + protagonist?: { name?: string; description?: string; traits?: string[] }; startingLocation?: { name?: string; description?: string }; - characters?: { [originalName: string]: { name?: string; description?: string; relationship?: string } }; + characters?: { [originalName: string]: { name?: string; description?: string; relationship?: string; traits?: string[] } }; }; }): Promise { log('createStoryFromWizard called', { @@ -2681,6 +2681,7 @@ settings: { branchId: null, // New stories start on main branch translatedName: protagonistTranslation?.name ?? null, translatedDescription: protagonistTranslation?.description ?? null, + translatedTraits: protagonistTranslation?.traits ?? null, translationLanguage: protagonistTranslation ? data.translations?.language ?? null : null, }; await database.addCharacter(protagonist); @@ -2756,6 +2757,7 @@ settings: { translatedName: charTranslation?.name ?? null, translatedDescription: charTranslation?.description ?? null, translatedRelationship: charTranslation?.relationship ?? null, + translatedTraits: charTranslation?.traits ?? null, translationLanguage: charTranslation ? data.translations?.language ?? null : null, }; await database.addCharacter(character); diff --git a/src/lib/types/index.ts b/src/lib/types/index.ts index c86243e..5b270e4 100644 --- a/src/lib/types/index.ts +++ b/src/lib/types/index.ts @@ -148,6 +148,7 @@ export interface Character { translatedName?: string | null; translatedDescription?: string | null; translatedRelationship?: string | null; + translatedTraits?: string[] | null; translationLanguage?: string | null; }