Files
aigc-home/docs/changelogs/2026-09-16-multilingual-ui.md
Benjiyaya a3588a2024 feat: complete the 1.5.2 language set (es/fr/de/ja/ko) and fix the reported version
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
2026-09-16 04:00:14 +08:00

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 a count shorthand 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/health and the OpenAPI schema read __version__, which had been stuck at 1.4.1 while 1.5.0 and 1.5.1 shipped. It now matches the frontend at 1.5.2.
  • Local start/stop scripts — setup.bat (idempotent first-time install), start.bat (two visible windows), start-bg.bat (background, output to logs/), and stop.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.