From a4d7907bd439b06b24e334bdf2ab597bcae658b5 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Fri, 29 Aug 2025 20:19:26 +0200 Subject: [PATCH] Implements language selection (#4969) --- website/src/monaco-loader.ts | 20 +++++- .../src/website/pages/playground/Preview.tsx | 2 +- .../pages/playground/SettingsDialog.tsx | 66 +++++++++++++++++++ .../website/pages/playground/SettingsModel.ts | 13 +++- 4 files changed, 95 insertions(+), 6 deletions(-) diff --git a/website/src/monaco-loader.ts b/website/src/monaco-loader.ts index 1c3184fc..a86e4d07 100644 --- a/website/src/monaco-loader.ts +++ b/website/src/monaco-loader.ts @@ -19,6 +19,7 @@ export interface IMonacoSetup { loaderConfigPaths: Record; codiconUrl: string; monacoTypesUrl: string | undefined; + language?: string; } let loading = false; @@ -57,7 +58,18 @@ async function _loadMonaco(setup: IMonacoSetup): Promise { /** @type {any} */ const req = global.require as any; - req.config({ paths: setup.loaderConfigPaths }); + + // Configure language if specified + const config: any = { paths: setup.loaderConfigPaths }; + if (setup.language) { + config["vs/nls"] = { + availableLanguages: { + "*": setup.language, + }, + }; + } + + req.config(config); return new Promise((res) => { // First load editor.main. If it inlines the plugins, we don't want to try to load them from the server. @@ -97,7 +109,10 @@ export const prodMonacoSetup = getMonacoSetup( "node_modules/monaco-editor/min/vs" ); -export function getMonacoSetup(corePath: string): IMonacoSetup { +export function getMonacoSetup( + corePath: string, + language?: string +): IMonacoSetup { const loaderConfigPaths = { vs: `${corePath}`, }; @@ -107,5 +122,6 @@ export function getMonacoSetup(corePath: string): IMonacoSetup { loaderConfigPaths, codiconUrl: `${corePath}/base/browser/ui/codicons/codicon/codicon.ttf`, monacoTypesUrl: undefined, + language, }; } diff --git a/website/src/website/pages/playground/Preview.tsx b/website/src/website/pages/playground/Preview.tsx index 538b8d80..a2128bea 100644 --- a/website/src/website/pages/playground/Preview.tsx +++ b/website/src/website/pages/playground/Preview.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { PlaygroundModel } from "./PlaygroundModel"; import { observer } from "mobx-react"; -import { autorun, observable, reaction } from "mobx"; +import { observable, reaction } from "mobx"; import { IMessageFromRunner, IMessageToRunner, diff --git a/website/src/website/pages/playground/SettingsDialog.tsx b/website/src/website/pages/playground/SettingsDialog.tsx index 989ee5db..98283fbe 100644 --- a/website/src/website/pages/playground/SettingsDialog.tsx +++ b/website/src/website/pages/playground/SettingsDialog.tsx @@ -390,6 +390,72 @@ export class SettingsDialog extends React.Component<{ + + +
+ +