# Translation phrases

Semantic i18n keys, their English defaults, and the player UI that uses them

Video.js uses opaque semantic keys so English copy can change without breaking translation packs. English defaults are defined in `packages/core/src/core/i18n/locales/en.ts`. Both HTML and React controls use the same keys.

Locale packs and provider overrides use nested objects, so `buttons.play` is authored as `{ buttons: { play: '…' } }`. Translators and the `<media-text token>` attribute use the dotted form.

## Playback controls

| Key | English default | Used by |
| --- | --- | --- |
| `buttons.play` | Play | Play button and its tooltip |
| `buttons.pause` | Pause | Play button and its tooltip |
| `buttons.replay` | Replay | Play button and its tooltip |
| `buttons.mute` | Mute | Mute button and its tooltip |
| `buttons.unmute` | Unmute | Mute button and its tooltip |
| `seek.forward` | Seek forward `{seconds}` seconds | Seek-forward button and its tooltip |
| `seek.backward` | Seek backward `{seconds}` seconds | Seek-backward button and its tooltip |
| `fullscreen.enter` | Enter fullscreen | Fullscreen button |
| `fullscreen.exit` | Exit fullscreen | Fullscreen button |
| `captions.enable` | Enable captions | Captions button and captions selection control |
| `captions.disable` | Disable captions | Captions button and captions selection control |
| `pip.enter` | Enter picture-in-picture | Picture-in-picture button |
| `pip.exit` | Exit picture-in-picture | Picture-in-picture button |
| `live.playing` | Playing live | Live button |
| `live.seekToEdge` | Seek to live edge | Live button |
| `live.badge` | Live | Live button badge |
| `cast.start` | Start casting | Cast button |
| `cast.stop` | Stop casting | Cast button |
| `cast.connecting` | Connecting | Cast button |
| `airplay.start` | Start AirPlay | AirPlay button |
| `airplay.stop` | Stop AirPlay | AirPlay button |
| `container.label` | Media player | Player container aria label |

## Time and volume

| Key | English default | Used by |
| --- | --- | --- |
| `slider.seek` | Seek | Time slider aria label |
| `time.current` | Current time | Current-time display aria label |
| `time.duration` | Duration | Duration display aria label |
| `time.remaining` | Remaining | Remaining-time display aria label |
| `time.elapsedSuffix` | `{duration} elapsed` | Elapsed time in a toggleable display aria label |
| `time.durationSuffix` | `{duration} duration` | Duration in a toggleable display aria label |
| `time.remainingSuffix` | `{duration} remaining` | Remaining time display |
| `time.showElapsed` | `Show elapsed time, {duration}.` | Toggleable time display aria label |
| `time.showDuration` | `Show duration, {duration}.` | Toggleable time display aria label |
| `time.showRemaining` | `Show remaining time, {duration}.` | Toggleable time display aria label |
| `time.toggleElapsed` | `Toggle between elapsed and remaining time.` | Elapsed-time toggle aria description |
| `time.toggleDuration` | `Toggle between duration and remaining time.` | Duration toggle aria description |
| `time.position` | `{current} of {duration}` | Time slider value text |
| `time.unknown` | Media not loaded, unknown time. | Time display aria label and time slider value text before a duration is known |
| `playback.rate` | Playback rate `{rate}` | Playback-rate button and radio group |
| `volume.mutedValue` | `{percent}, muted` | Muted volume slider value text |
| `volume.muted` | Muted | Volume input feedback |
| `volume.label` | Volume | Volume slider aria label |
| `volume.value` | Volume `{value}` | Volume input feedback |

## Playback feedback

| Key | English default | Used by |
| --- | --- | --- |
| `status.captionsOn` | Captions on | Input feedback after enabling captions |
| `status.captionsOff` | Captions off | Input feedback after disabling captions |
| `status.paused` | Paused | Input feedback after pausing |
| `status.playing` | Playing | Input feedback after starting playback |
| `status.fullscreen` | Fullscreen | Input feedback after entering fullscreen |
| `status.pip` | Picture in picture | Input feedback after entering picture-in-picture |
| `status.exitPip` | Exit picture in picture | Input feedback after exiting picture-in-picture |
| `status.seekedTo` | Seeked to `{time}` | Status announcer after a seek |

## Errors

| Key | English default | Used by |
| --- | --- | --- |
| `errors.aborted` | You stopped media playback before it finished. | Media error dialog for `MEDIA_ERR_ABORTED` |
| `errors.network` | This media could not be loaded due to a network or server issue. | Media error dialog for `MEDIA_ERR_NETWORK` |
| `errors.decode` | This media could not be played. It may be corrupted, or your browser may not support its format. | Media error dialog for `MEDIA_ERR_DECODE` |
| `errors.source` | This media could not be loaded. It may be unavailable, or your browser may not support its format. | Media error dialog for `MEDIA_ERR_SRC_NOT_SUPPORTED` |
| `errors.encrypted` | This media could not be played because it could not be decrypted. | Media error dialog for `MEDIA_ERR_ENCRYPTED` |
| `errors.unplayable` | This media is unsupported by the player. | Media error dialog when the player cannot play a source the browser supports |
| `errors.title` | Something went wrong. | Generic media error dialog title |
| `errors.unexpected` | An unexpected error occurred. | Generic media error dialog fallback description |
| `common.empty` | `''` | Empty description for a custom media error |
| `common.ok` | OK | Error dialog confirmation button |

## Settings and track menus

| Key | English default | Used by |
| --- | --- | --- |
| `menu.settings` | Settings | Video settings menu trigger |
| `menu.quality` | Quality | Quality menu |
| `menu.audio` | Audio | Audio-track menu and fallback track label |
| `menu.default` | Default | Reserved default-option label; no stock control currently emits it |
| `menu.speed` | Speed | Playback-rate menu |
| `menu.captions` | Captions | Captions menu |
| `menu.playbackRate` | Playback rate | Playback-rate radio group |
| `menu.back` | Back | Nested settings-menu back button |
| `menu.off` | Off | Captions menu option |
| `menu.auto` | Auto | Automatic-quality option |
| `menu.autoWithLabel` | Auto (`{label}`) | Automatic-quality option with the active rendition |
| `menu.subtitles` | Subtitles | Subtitles track option |

## Related pages

- [Internationalize the player](../../guides/internationalization.md): Translate player labels and announcements: shipped locale packs, custom translations, runtime switching, and server rendering.