Skip to content

Translation tool

The translation tool shows every translatable field in a course on one page, side by side in two languages. It lives in the editor under Course contentTranslation tool.

INFO

The tool is currently in Beta.

Layout

When you open the tool, the full course content is loaded and grouped into collapsible sections — sections with no content are hidden:

  • Course Title — the course's main title.
  • Achievements — translated achievement titles.
  • Start Screen — the introduction text shown before the course starts.
  • Table of Contents — every TOC entry, including nested ones.
  • Modules — one block per module, then per slide / per question, with rows for every translatable field.

Pick a reference language at the top-left (the language you're translating from) and a target language at the top-right (the language you're translating to). Every row shows one field in both languages; click into either cell to edit. Changes save automatically as you type.

A small badge in each cell's top-right shows what the field expects:

BadgeMeaning
(none)Plain text
labelPlain text label (e.g. icon component label)
mdMarkdown
htmlRaw HTML
subtitleA .vtt subtitle file

For Markdown and HTML cells, mirror the formatting from the reference column in the target column. Inside slides, components are listed in their on-slide order with a small type icon next to each row.

Progress bars

Below each language picker, a percentage bar shows how much of the course is filled in explicitly for that language. Fields served via the INTERNATIONAL fallback don't count — the bars measure translation work to do, not what learners ultimately see.

INTERNATIONAL fallback

Some courses store content under the special INTERNATIONAL language entry — a single value used for every learner regardless of language. At runtime, the course player falls back to that value when a viewer's language has no explicit entry.

When the reference column shows a fallback value, you'll see italic + muted text and an amber intl badge in the top-right corner.

What this means in practice:

  • The displayed value is what learners actually hear/see for the reference language right now.
  • Translating the row into the target language adds a normal target-language entry; the INTERNATIONAL value stays untouched. (Overwriting it would silently change every other fallback-relying language.)
  • To create a real reference-language entry, type into the reference cell — it pre-fills with the fallback value, so editing turns it explicit.
  • The intl badge stays even after a successful target translation, since the reference itself is still served via fallback.

Automated translation with DeepL

Click Translate with DeepL at the top of the page to translate everything that's empty in the target language. A modal opens with three settings:

  • Target language variant — pick the regional variant (e.g. EN-US vs EN-GB) when one applies.
  • Formality — formal or informal. Defaults to formal where supported.
  • Also translate video subtitles — checked by default; uncheck to translate text only.

Existing target-language translations are never overwritten — only empty target fields get filled. Strings are batched smartly so DeepL gets soft context (e.g. a quiz question is sent together with its answers). Subtitles run after all text translations, sequentially.

Per-row translation

Each text row has its own Translate with DeepL button for translating just that row — useful when you've changed a single source string and want to redo only its translation.

Language-pair support

DeepL doesn't support every language pair. Below each language dropdown, the tool shows one of:

  • DeepL: <variant name> — supported, optionally with the variant DeepL will use.
  • DeepL: not supported (red, bold) — unsupported.
  • DeepL: loading… — fetching the language list.

If the pair is unsupported, DeepL action buttons stay visible but disabled with an explanatory tooltip. You can still translate manually.

TIP

If you previously picked a specific target variant (e.g. EN-US), it's preserved when you switch back. Switching to a target with no DeepL variant clears the variant selection so it doesn't carry over silently.

Video subtitles

Subtitles appear inline within each slide block, alongside the slide's text components. A subtitle row shows up only when:

  • Reference and target languages both resolve to the same video element for that occurrence.
  • That element has a subtitle file in its own audio language.

Each subtitle row carries a reference filename (read-only), a target filename (or Not translated), a Translate with DeepL button, and — if a target subtitle exists — a Remove translation trash icon.

Subtitle translation is asynchronous: the reference file is sent to DeepL, and a progress modal walks through Uploading → Translating → Saving → done.

WARNING

Don't close the modal mid-job — you'll lose the result.

Audio language as source

The DeepL request uses the video element's audio language as its source, not the tool's reference language, so the translated cues stay aligned with the audio that learners actually hear in the target language. When the audio language differs from the reference language, the subtitle cell shows italic + amber intl badge with an explanatory tooltip.

When a row doesn't show up

A video that should have a subtitle row but doesn't usually has one of these:

  • No subtitle file uploaded yet for the video element's audio language — upload one through the regular video element UI.
  • Different video elements per language, with reference and target on different elements (different cuts mean cues wouldn't line up — translate per element).
  • The video's audio language is INTERNATIONAL rather than a real language. Fix the audio language on the element first.

Export & import

DeepL only sees one string at a time, so it can't check consistency across the whole course. To get a holistic review, the tool can export the full translation set as a single JSON file you can hand to a proofreader or paste into an LLM.

Export

Click Export at the top of the page. Two optional flags in the modal:

  • Formality setting — include the formality info per entry.
  • Context — include surrounding-course context per entry.

The exported JSON has a meta block (course id and name, source/target languages, timestamp) and a translations array, one entry per field with:

  • id — stable identifier.
  • location — human-readable path (e.g. Module 2 > Slide 3 > Markdown).
  • originalText — the source-language text. INTERNATIONAL fallback values are included so the export reflects what learners actually see.
  • translatedText — current target-language text (empty if not yet translated).
  • formattext, markdown, html, or subtitle.
  • context — only present if Context was enabled at export.
  • formality — only present if Formality setting was enabled at export.

Import

Click Import to select the reviewed file. The modal shows a diff of every changed row before applying. Confirm with Apply or cancel to discard.

INFO

Only changed rows are written. Rows that match what's already in the course are skipped.

Tips & limitations

  • Auto-save: every cell saves as you type. There's no undo — if you overwrite a translation accidentally, you'll need to retype.
  • No glossaries in DeepL calls (yet). Use the export/import flow for terminology consistency.
  • No inline subtitle editing. To fine-tune translated cues, edit the VTT externally and re-upload through the regular video element UI. See Subtitles for the formatting that survives.
  • Localized assets (videos, audio, images) are out of scope here — only their labels and subtitles are translatable.

See also

  • Course localization — how multilingual content works in the editor.
  • Languages — managing which languages your course is published in.
  • Asset manager — per-language assets, especially for video.
  • Subtitles — how subtitle cues display and the formatting they support.