Content ManagementLocalization

Localization

Translate your work in the Localization Workshop — extract strings, edit translations, catch stale text, and add per-language voice audio and TTS.

PanelWave works are multilingual by design: every piece of reader-facing text is stored per locale (like en-US or de-DE), and readers fall back to your default language where a translation is missing. See Localization concepts for how this works in the format.

The CMS gives you two Backstage tools for it: the Localization Workshop (text) and Audio Localization (spoken audio and TTS).

Locales and fallbacks

Your work's languages are set when you create the work and managed afterwards via the Locales button in the workshop:

  • Add a locale by code (e.g. fr-FR) — a searchable catalogue helps you pick. Adding more languages than your plan allows is refused with a message naming the limit.
  • Set default marks the source language; every other locale falls back to it.
  • Remove locale hides it but keeps its translations — re-add it later to restore them.

The Locales button becomes active once the work's locales have loaded, so the dialog always starts from the work's real list and can't replace its default language by accident.

Translating text also adds its language. When speech bubbles or text layers get text in a language the work doesn't list yet, the CMS adds that language to the work's locales. This happens however the text arrives: typed in the editor, imported, written back from this workshop, or set through an AI assistant. That way the published work offers it in the reader's language switch. A language is added only within your plan's limit and never removed automatically. Bare codes such as de count as the work's locale of that language (otherwise de-DE).

The locale chips under the workshop header show each language's completion percentage; click one to switch the translation target. Your profile preference "Default editing language" preselects the target when you open the workshop.

Extracting translatable text

Click Extract Strings to scan the work and pull every translatable string into the table — speech bubble text, titles, panel descriptions, hotspot labels and other reader-facing content. Each entry gets a stable key, its default text (the source language), a category, and a "Used in" badge telling you where it appears.

Strings are listed in story order — the order a reader meets them: the work title, then for each chapter its title and its pages in order, with each page's panels in reading order (title, description, speech bubbles, hotspot labels), followed by panels not placed on any page, and character bios last. Translating top to bottom therefore follows the story.

Opening the workshop runs an extraction automatically, so the list reflects the current state of the work; run Extract Strings again whenever you've added content while the workshop is open. Existing translations are kept and new strings are appended. On a read-only work the automatic extraction is skipped — the workshop opens quietly with the strings as last extracted, and you can read them but not change them. You can also add free-form strings manually with Add Entry (key, default text, category).

Hotspot labels are listed as Hotspot label (category hotspot); they are what screen readers announce for a choice, so translate them with the bubbles. Hotspots that still carry the editor's default name (Rect Hotspot and the like) are skipped.

Which language is the source? Extraction takes your work's default locale as the source language. If the work has none set, it falls back to the language hinted in Work Properties (matching en to en-US and the like), and finally to the locale most of your strings actually carry — so a stray translated title can't flip the Default Text column into another language. Works extracted before story order existed list their strings last until you run Extract Strings once more.

The translation editor

The table has four columns: Key, Default Text, Translation (for the selected locale), and Actions. Click a translation cell to edit it inline; press Escape to stop editing. Untranslated rows are tinted red, and the stat cards at the top track Total Strings, Translated, Missing, and Completion.

Click the Key, Default Text, or Translation header to sort by that column; a second click flips the direction, and an arrow marks the active sort. Sorting by translation sinks untranslated rows to the bottom, so a completed batch floats up and the gaps collect at the end. The Story order button that appears in the header row returns to the default order. While a search or filter is active, a line above the table reads "Showing N of M strings".

Handy details:

  • Missing translations show what the reader actually gets: "No translation — falls back to en-US '…'".
  • Autosave (toggle in the toolbar) saves edits automatically; otherwise use Save.
  • Filters: search by key or text, filter by category, Show Only Missing, Needs review, and Glossary issues.
  • Per-row actions: Translation Memory, Copy from default, Machine-translate this string, Edit, Delete.

Stale translation detection

When you change the source text of a string that was already translated, its translations are flagged Stale ("The source text changed after this was translated — review the translation"). Use the Needs review filter to work through them.

Machine translation

  • Translate untranslated machine-translates every string missing a value for the selected locale. Strings are sent to the provider in batches of up to 50, and when the provider asks to slow down the workshop waits and retries, so a whole book (well over a thousand strings) goes through in one run.
  • Machine-translated strings carry an MT badge until you confirm them with the green check (or edit them, which marks them Modified).
  • Approve MT (N) in the toolbar confirms all machine translations currently shown for the selected locale at once — N is their count; narrow the list with search or filters to approve part of them. Other languages keep their review state.
  • A machine translation reaches your work's content — the editor, the preview and the published work — once it is approved (or edited). Until then it lives in the workshop only, so switching the editor to the new language still shows the source text.
  • The source text is always a human-entered value — your default language where it exists, otherwise another locale you translated by hand, and as a last resort the default text with the provider detecting the language. A machine draft is never used as the source, and a string is never "translated" from a language into itself. When you translate into your default language (say, to fill an English column from German originals), the workshop picks the best other locale as the source automatically.
  • If the translation provider fails mid-run, the workshop keeps what was translated so far and shows a warning — "Machine translation stopped after N string(s): … — try again in a moment" — instead of filling the remaining rows with placeholders.

Translation memory

The brain icon fetches Translation Memory Suggestions: exact and fuzzy matches from previously saved translations, with match scores, quality/verified indicators, and a Use This Translation button. Everything you translate feeds the memory automatically.

Glossary

Glossary manages preferred translations for key terms (e.g. Hero → Held), optionally case-sensitive, with notes for translators. Rows whose translation ignores a glossary term get a warning badge, and the Glossary issues filter collects them.

Working with external translators

Use the Export menu to hand strings to translators and Import to bring them back:

FormatUse
CSV (spreadsheet)key, source, target, note — for spreadsheet workflows
XLIFF 1.2 (CAT tools)the standard translator exchange format
JSONa simple key → value map

Import accepts JSON, CSV, and XLIFF files.

Localized assets

Some content is easier to localize as an asset than as text — a hand-lettered title card, for example. Assets carry a locale, and the Assets library can filter by it, so you can provide per-language versions of an image or audio file.

Audio Localization and text-to-speech

The Audio entry in the Backstage sidebar opens Audio Localization: voice audio for each speech bubble, per locale. Stat cards show Total Bubbles, With Audio, Missing Audio, and Completion for the selected locale.

For each bubble you can:

  • Upload an audio file (MP3, WAV, OGG, M4A) — e.g. from a voice actor.
  • Generate TTS — pick a voice from the catalogue (with gender, age, style, and a preview sample where available) and click Generate Audio. If a character has an assigned voice, that's the natural choice for their lines.

Generated jobs run in the background — the Job Queue panel tracks Processing (with progress and Cancel), Completed (with playback), and Failed (with Retry) jobs.

Existing tracks can be played, deleted, or trimmed: the Waveform & trim view lets you set a playback window non-destructively — the file is unchanged, only the played region is trimmed.

Run Preflight validation before publishing — it reports missing translations and bubbles without audio so nothing slips through.