Multilingualism works via separate translation per page:
- User triggers
POST /api/projects/:id/pages/:pageId/translate { targetLanguages: ['en', 'fr'] }
- Service iterates over languages
- Per language:
chatComplete(MODEL_TRANSLATOR, systemPrompt, mdContent) — Default google/gemini-2.5-flash
- Result is written to
pageTranslations with Hash + translatedAt
- On re-translate: if
mdHash unchanged → Skip
- Manual-Edit-Flag prevents overwrite
In Static Export: