---
title: Multi-Language Workflows
url: https://docs.kaltura.com/docs/rich-media-cms-apis/content-management/captions-multi-language-workflows
---

## Multi-Language Workflows


### Multiple Caption Tracks

Each entry supports multiple caption tracks — one asset per language per entry. The player displays a language selector when multiple tracks exist:


```bash
# Add English caption
curl -X POST "$KALTURA_SERVICE_URL/service/caption_captionAsset/action/add" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "entryId=$KALTURA_ENTRY_ID" \
  -d "captionAsset[objectType]=KalturaCaptionAsset" \
  -d "captionAsset[label]=English" \
  -d "captionAsset[language]=English" \
  -d "captionAsset[format]=1" \
  -d "captionAsset[isDefault]=1"

# Add Spanish caption
curl -X POST "$KALTURA_SERVICE_URL/service/caption_captionAsset/action/add" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "entryId=$KALTURA_ENTRY_ID" \
  -d "captionAsset[objectType]=KalturaCaptionAsset" \
  -d "captionAsset[label]=Spanish" \
  -d "captionAsset[language]=Spanish" \
  -d "captionAsset[format]=1"
```


### Translation via REACH

Three translation modes:

1. **From audio:** REACH transcribes audio directly in the target language
2. **From existing captions:** REACH translates an existing caption track to a new language
3. **Caption-then-translate:** Order captioning first, then chain a translation task. When the caption task completes, REACH auto-triggers the translation task.

Translation tasks reference the source caption via the task's `sourceLanguage` and target via `catalogItemId`.

### Managing Language Variants

List all caption tracks for an entry and switch defaults:


```bash
# List all tracks
curl -X POST "$KALTURA_SERVICE_URL/service/caption_captionAsset/action/list" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "filter[objectType]=KalturaAssetFilter" \
  -d "filter[entryIdEqual]=$KALTURA_ENTRY_ID" \
  -d "filter[statusEqual]=2"

# Switch default to Spanish
curl -X POST "$KALTURA_SERVICE_URL/service/caption_captionAsset/action/setAsDefault" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "captionAssetId=$SPANISH_CAPTION_ID"
```


### Multi-Language File Parsing

Upload a single DFXP file containing multiple language tracks with `language="Multilingual"`:


```bash
curl -X POST "$KALTURA_SERVICE_URL/service/caption_captionAsset/action/add" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "entryId=$KALTURA_ENTRY_ID" \
  -d "captionAsset[objectType]=KalturaCaptionAsset" \
  -d "captionAsset[language]=Multilingual" \
  -d "captionAsset[format]=2"
```


The server auto-splits the DFXP into per-language caption assets. Each language track becomes a separate `KalturaCaptionAsset`.

### Live Translation

Real-time translated subtitles during live streams via REACH:

- **serviceFeature:** `11` (LIVE_CAPTION)
- Provides real-time ASR with optional simultaneous translation
- Caption data delivered via the live stream's caption track
