The dictionary layer shipped with en/zh only, so the five other translations were stranded outside the release while the notes described a bilingual UI. Register them: seven languages, 1001 keys each, all typed against `Dict` so a missing key fails the build instead of rendering the raw key. Also align `__version__`, which had stayed at 1.4.1 through the 1.5.0 and 1.5.1 releases, leaving /api/health and the OpenAPI schema reporting a stale version. The bat scripts now emit English so non-Chinese locales render them correctly. Docs: docs/changelogs/2026-09-16-multilingual-ui.md
2.1 KiB
2.1 KiB
Calliope 1.5.2 — seven-language UI (en/zh/es/fr/de/ja/ko) and local start scripts
Every user-facing string used to be hardcoded English, spread across dozens of components — so a non-English user saw an English UI no matter how the app was configured, and there was no single place to change a label. The interface now resolves through a dictionary layer, with a language switcher in the header.
What changed
- Seven languages — English, 中文, Español, Français, Deutsch, 日本語,
한국어. Each dictionary carries the full 1001 keys and is typed against
Dict(typeof en), so a translation that is missing a key fails the build rather than silently rendering the key. - Language switcher in the header — the choice is stored in
localStorage(calliope-lang) and applied on reload; a missing or unrecognized stored value falls back to English instead of blanking the UI. - Every component wired through
t()— nav rail, canvas, projects, story, assets, script, queue, the video workspace, Build Scene, settings, agent chat, toasts, and the error paths. No hardcoded English copy remains in the UI. - Placeholder interpolation —
t('key', { name: … })substitutes{name}, with acountshorthand that also fills{n}, the convention most count-bearing strings use. - Genre / tone / duration options moved into
formOptions.ts, mapping the English values the backend stores onto dictionary keys — so stored project data keeps working regardless of the display language. - Backend version reports correctly —
/api/healthand the OpenAPI schema read__version__, which had been stuck at1.4.1while 1.5.0 and 1.5.1 shipped. It now matches the frontend at1.5.2. - Local start/stop scripts —
setup.bat(idempotent first-time install),start.bat(two visible windows),start-bg.bat(background, output tologs/), andstop.bat, all with English output so non-Chinese locales render them without mojibake.
Upgrade
No migration and no new dependencies. git pull, then reload the frontend. The
UI defaults to English; pick another language from the dropdown in the header.