# Setting the UI language

You can change the language of the editor’s UI. On top of 41 fully translated languages (including [38 professional translations](#list-of-available-professional-translations)), there are many other languages covered by community translators.

<a id="demo">

## Demo

See the demo of the editor in Spanish:

<!-- AI-AGENT-NOTE: An interactive demo is embedded here but is not represented in this Markdown file. If you need to see it in action, open this page in a browser (e.g. via a browser-automation MCP like Chrome DevTools or Playwright), or let the user know a live demo is available on this page. -->

All demos in this guide only present a limited set of features for clarity. Visit the [feature-rich editor example](../../examples/builds-custom/full-featured-editor.md) to see more in action.

> **Note**
>
> If you are interested in creating features that can be localized, check out the [localization guide](../../framework/deep-dive/ui/localization.md).

<a id="righttoleft-rtl-languages-support">

## Right–to–left (RTL) languages support

CKEditor 5 supports right–to–left languages out–of–the–box. When one of RTL languages is used, the WYSIWYG editor adapts its UI for the best editing experience, for instance, mirroring various elements like toolbars, dropdowns, buttons, etc.

<a id="demo-2">

### Demo

See the demo of the editor in Arabic:

<!-- AI-AGENT-NOTE: An interactive demo is embedded here but is not represented in this Markdown file. If you need to see it in action, open this page in a browser (e.g. via a browser-automation MCP like Chrome DevTools or Playwright), or let the user know a live demo is available on this page. -->

> **Note**
>
> If you want to change the language of the content only (different languages for the UI and the content), check out the [Setting the language of the content](#setting-the-language-of-the-content) section to learn more.

We are doing our best to deliver the best RTL support to our users and we constantly improve the editor. Check out the [RTL support](https://github.com/ckeditor/ckeditor5/issues/1151) issue on GitHub to learn more and stay up–to–date. Your feedback is much appreciated!

<a id="loading-additional-languages-from-npm-or-cdn">

## Loading additional languages from npm or CDN

By default, the editor will display in American English. This is the language built into the `ckeditor.js` files. To change the language of the editor UI, you need to load additional language file(s). Check out the following sections to see how to do that:

* [npm](#npm)
* [CDN](#cdn)

<a id="npm">

### npm

After installing the editor from npm, translations can be imported from `ckeditor5/translations/[lang].js` and must be passed to the editor configuration.

For example, to use Polish, import `'ckeditor5/translations/pl.js'` and pass the translation object to the editor configuration. Please note that if you use premium features, you need to separately import their translations from the proper package.

```js
import { ClassicEditor, Essentials, Paragraph, Bold, Italic } from 'ckeditor5';
import { TableOfContents } from 'ckeditor5-premium-features';

import coreTranslations from 'ckeditor5/translations/pl.js';
import premiumFeaturesTranslations from 'ckeditor5-premium-features/translations/pl.js';

ClassicEditor
	.create( {
		attachTo: document.querySelector( '#editor' ),
		licenseKey: '<YOUR_LICENSE_KEY>', // Or 'GPL'.
		plugins: [
			Essentials,
			Paragraph,
			Bold,
			Italic,
			TableOfContents
		],
		toolbar: {
			items: [ 'undo', 'redo', 'bold', 'italic', 'tableOfContents' ]
		},
		translations: [
			coreTranslations,
			premiumFeaturesTranslations
		]
	} )
	.then( /* ... */ )
	.catch( /* ... */ );
```

See the [npm installation guide](../installation/self-hosted/quick-start.md#installing-ckeditor-5-using-npm) for more information.

<a id="cdn">

### CDN

Load translation scripts alongside editor scripts to use the editor with a language different than English. Note that you do not need to pass the translations to the configuration. The editor from CDN will automatically load translations from the attached scripts.

```html
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>CKEditor 5 - Quick start CDN</title>

		<link rel="stylesheet" href="https://cdn.ckeditor.com/ckeditor5/49.0.0/ckeditor5.css">
		<link rel="stylesheet" href="https://cdn.ckeditor.com/ckeditor5-premium-features/49.0.0/ckeditor5-premium-features.css">
		<!-- Scripts with translations -->
		<script src="https://cdn.ckeditor.com/ckeditor5/49.0.0/translations/es.umd.js"></script>
		<script src="https://cdn.ckeditor.com/ckeditor5-premium-features/49.0.0/translations/es.umd.js"></script>

		<script src="https://cdn.ckeditor.com/ckeditor5/49.0.0/ckeditor5.umd.js"></script>
		<script src="https://cdn.ckeditor.com/ckeditor5-premium-features/49.0.0/ckeditor5-premium-features.umd.js"></script>
	</head>
	<body>
		<div id="editor"></div>

		<script>
			const { ClassicEditor, Essentials, Paragraph, Bold, Italic } = CKEDITOR;
			const { TableOfContents } = CKEDITOR_PREMIUM_FEATURES;

			ClassicEditor
				.create( {
					attachTo: document.querySelector( '#editor' ),
					licenseKey: '<YOUR_LICENSE_KEY>',
					plugins: [
						Essentials,
						Paragraph,
						Bold,
						Italic
					],
					toolbar: {
						items: [ 'undo', 'redo', 'bold', 'italic', 'tableOfContents' ]
					}
				} )
				.then( /* ... */ )
				.catch( /* ... */ );
		</script>
	</body>
</html>
```

See the [CDN installation guide](../installation/cloud/quick-start.md#installing-ckeditor-5-from-cdn) for more information.

<a id="setting-the-language-of-the-content">

## Setting the language of the content

In CKEditor 5 you can separately configure the language of the UI and the language of the content. This means you can use the English UI of the editor but type your content in Arabic or Hebrew. The language of the content has an impact on the editing experience, for instance it affects screen readers and spell checkers. It is also particularly useful for typing in certain languages (like [right–to–left](#righttoleft-rtl-languages-support) ones) because it changes the default alignment of the text.

Configure [`config.language`](../../api/module_core_editor_editorconfig-EditorConfig.md#member-language) to change the language of the content. In this example, the UI of the editor will be in English but the content will be in Arabic:

```js
ClassicEditor
	.create( {
		// ... Other configuration options ...
		language: {
			// The UI will be English.
			ui: 'en',

			// But the content will be edited in Arabic.
			content: 'ar'
		}
	} )
	.then( editor => {
		window.editor = editor;
	} )
	.catch( err => {
		console.error( err.stack );
	} );
```

<a id="demo-3">

### Demo

<!-- AI-AGENT-NOTE: An interactive demo is embedded here but is not represented in this Markdown file. If you need to see it in action, open this page in a browser (e.g. via a browser-automation MCP like Chrome DevTools or Playwright), or let the user know a live demo is available on this page. -->

> **Note**
>
> If you are unsure about the language that the content will be typed in, do not set it. The language of the content will then be inherited from the [language of the UI](../../api/module_core_editor_editorconfig-EditorConfig.md#member-language).
>
> You can also employ the [text part language](../../features/language.md) feature to produce multi-language content.

<a id="list-of-available-professional-translations">

## List of available professional translations

Below you will find list of available official translations. Each language is accompanied by a code that can be used to set language with the `language:*` setting ([see configuration](../../api/module_core_editor_editorconfig-LanguageConfig.md)).

|                        |                            |                   |                                  |
| ---------------------- | -------------------------- | ----------------- | -------------------------------- |
| Arabic `(ar)`          | Bengali `(bn)`             | Bulgarian `(bg)`  | Catalan `(ca)`                   |
| Chinese (China) `(zh)` | Chinese (Taiwan) `(zh-tw)` | Czech `(cs)`      | Danish `(da)`                    |
| Dutch `(nl)`           | English(American) default  | Estonian `(et)`   | Finnish `(fi)`                   |
| French `(fr)`          | German `(de)`              | Greek `(el)`      | Hebrew `(he)`                    |
| Hindi `(hi)`           | Hungarian `(hu)`           | Indonesian `(id)` | Italian `(it)`                   |
| Japanese `(ja)`        | Korean `(ko)`              | Latvian `(lv)`    | Lithuanian `(lt)`                |
| Malay `(ms)`           | Norwegian `(no)`           | Polish `(pl)`     | Portuguese (Brazilian) `(pt-br)` |
| Portuguese `(pt)`      | Romanian `(ro)`            | Russian `(ru)`    | Serbian `(sr)`                   |
| Slovak `(sk)`          | Spanish `(es)`             | Swedish `(sv)`    | Thai `(th)`                      |
| Turkish `(tr)`         | Ukrainian `(uk)`           | Vietnamese `(vi)` |                                  |

There are community translations available for Australian and British variations of English, too, as well as various others. Language codes for these can be found in the translation files.

> **Note**
>
> You can help [translating](../../framework/contributing/contributing.md#translating) CKEditor 5 into your native language. You do not need to be a programmer to contribute to the project. Your help will be much appreciated!

<a id="related-features">

## Related features

Other features that will help you control the content language:

* [Text part Language](../../features/language.md) – Set the language of the selected content part to support multilingual texts.

---

Full index of the CKEditor 5 documentation: [llms.txt](../../../llms.txt)
