UI language
The editor draws a few words of its own: the find panel, property controls, button tooltips. Pick their language (English, Chinese, Japanese or Korean) with configureEditorEnvironment({ language }); the document text is yours and never translated.
import { configureEditorEnvironment, createEditorState, mountEditor, type EditorEnvironment, type MarkdownEditor } from "@openmarkdown-dev/editor";
type Language = NonNullable<EditorEnvironment["language"]>;
const parent = document.getElementById("editor")!;
const select = document.getElementById("language") as HTMLSelectElement;
let editor: MarkdownEditor | null = null;
let doc = "---\ntitle: Language\ntags: [demo]\n---\n\n# UI language\n\nThe editor's own words, like the property controls above and the find panel (Cmd/Ctrl+F), follow the language you pick.\n\n```js\nconsole.log(\"the copy button's tooltip too\");\n```\n";
/** The language is read when a word is drawn, so remount to redraw what is already on screen. */
function mount(language: Language) {
if (editor) {
doc = editor.getDoc();
editor.destroy();
}
configureEditorEnvironment({ language });
editor = mountEditor(parent, createEditorState({ doc }));
}
select.addEventListener("change", () => mount(select.value as Language));
mount(select.value as Language);<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>OpenMarkdown editor: UI language</title>
<style>
#lang { margin-bottom: 10px; font: 14px system-ui, sans-serif; }
#editor { height: 340px; border: 1px solid #d9d6cf; border-radius: 8px; overflow: hidden; }
#editor .cm-editor { height: 100%; }
</style>
</head>
<body>
<label id="lang">
Editor language
<select id="language">
<option value="en">English</option>
<option value="zh">中文</option>
<option value="ja">日本語</option>
<option value="ko">한국어</option>
</select>
</label>
<div id="editor"></div>
<script type="module" src="./main.ts"></script>
</body>
</html>{
"name": "openmarkdown-editor-example-language",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview"
},
"dependencies": {
"@openmarkdown-dev/editor": "0.1.0"
},
"devDependencies": {
"typescript": "~5.8.3",
"vite": "^7.0.4"
}
}