Expert assistant for managing Finnish/English content translations in the KR92 Bible Voice project. Use when syncing topic translations, managing translation cache, validating translation completeness, or importing/exporting CSV translations.
Expert assistant for managing Finnish/English content translations in the KR92 Bible Voice project. Use when syncing topic translations, managing translation cache, validating translation completeness, or importing/exporting CSV translations.
Translation Sync
Capabilities
Sync topic translations between Finnish and English
Manage term translation cache
Validate translation completeness
Export/import CSV for bulk updates
Identify missing translations
Translation Tables
term_translations (bible_schema)
Caches Finnish ↔ English term translations for search:
term_fi TEXT
main_term_en TEXT
synonyms_en TEXT[]
ai_main_term_en TEXT
ai_synonyms_en TEXT[]
source TEXT -- 'topic', 'ai', 'manual'
topical_topics (bible_schema)
Topic names in both languages:
slug TEXT -- English slug
name_en TEXT -- English name
name_fi TEXT -- Finnish name (can be null)
slug_fi TEXT -- Finnish slug (can be null)
is_core BOOLEAN
Usage Examples
Example 1: Find Missing Topic Translations
User: "Find all topics that don't have Finnish translations"
-- Create temporary table for importCREATE TEMP TABLE topic_translations_import (
slug TEXT,
name_fi TEXT,
slug_fi TEXT
);
-- Import CSV (via Supabase Dashboard or psql)
\copy topic_translations_import FROM'translations.csv' CSV HEADER;
-- Update topics with translationsUPDATE bible_schema.topical_topics t
SET
name_fi = i.name_fi,
slug_fi = i.slug_fi
FROM topic_translations_import i
WHERE t.slug = i.slug;
-- Report on updatesSELECTCOUNT(*) as updated_count
FROM bible_schema.topical_topics t
JOIN topic_translations_import i ON t.slug = i.slug;
-- Clean upDROPTABLE topic_translations_import;
User: "Check translation quality and completeness"
Assistant:
-- Translation Quality ReportWITH stats AS (
SELECTCOUNT(*) as total,
COUNT(name_fi) as has_fi_name,
COUNT(slug_fi) as has_fi_slug,
COUNT(CASEWHEN name_fi ISNOT NULLAND slug_fi ISNOT NULLTHEN1END) as fully_translated,
COUNT(CASEWHEN is_core =trueTHEN1END) as total_core,
COUNT(CASEWHEN is_core =trueAND name_fi ISNOT NULLTHEN1END) as core_translated
FROM bible_schema.topical_topics
)
SELECT
total as "Total Topics",
fully_translated as "Fully Translated",
has_fi_name as "Has Finnish Name",
has_fi_slug as "Has Finnish Slug",
total_core as "Core Topics",
core_translated as "Core Translated",
ROUND(100.0* fully_translated / total, 2) ||'%'as "Completion %",
ROUND(100.0* core_translated / total_core, 2) ||'%'as "Core Completion %"
FROM stats;
-- Find problematic translationsSELECT
slug,
name_en,
name_fi,
slug_fi,
is_core,
CASEWHEN name_fi ISNULLTHEN'Missing Finnish name'WHEN slug_fi ISNULLTHEN'Missing Finnish slug'WHEN LENGTH(name_fi) <2THEN'Finnish name too short'WHEN name_fi = name_en THEN'Not translated (same as English)'ELSE'OK'ENDas issue
FROM bible_schema.topical_topics
WHERE
name_fi ISNULLOR slug_fi ISNULLOR LENGTH(name_fi) <2OR name_fi = name_en
ORDERBY is_core DESC, name_en;
Translation Workflow
1. Export Current State
# Export topics for translation
SELECT slug, name_en, name_fi, slug_fi
FROM bible_schema.topical_topics
WHERE name_fi IS NULL
ORDER BY is_core DESC, name_en;
2. Translate Content
Use Google Sheets or Excel
Finnish column for name_fi
Create URL-safe slug_fi (lowercase, no spaces)
3. Import Translations
-- Via CSV import (see Example 2)
4. Validate Import
-- Check for issues after importSELECTCOUNT(*) FROM bible_schema.topical_topics WHERE name_fi ISNULL;
SELECTCOUNT(*) FROM bible_schema.topical_topics WHERE slug_fi ISNULL;