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;
}