diff --git a/.agents/skills/livecodes/language-support/references/languages.md b/.agents/skills/livecodes/language-support/references/languages.md
index 2c216c778..676a6a032 100644
--- a/.agents/skills/livecodes/language-support/references/languages.md
+++ b/.agents/skills/livecodes/language-support/references/languages.md
@@ -151,6 +151,7 @@ Enabled via `processors` config:
| Haskell | `haskell`, `hs`, `lhs` | MicroHs (not GHC) |
| Haskell (Wasm) | `haskell-wasm`, `hs-wasm`, `wasm.hs`, `hswasm` | GHC WASM |
| Rust (Wasm) | `rust-wasm`, `rs-wasm`, `wasm.rs` | Rust WASM |
+| Scala (Wasm) | `scala-wasm`, `scala`, `wasm.scala` | Scala 3 compiler + Scala.js linker (WASM) |
| Swift (Wasm) | `swift-wasm`, `swift`, `wasm.swift` | Swift WASM |
| Zig (Wasm) | `zig-wasm`, `zig` | Zig WASM |
| V (Wasm) | `v-wasm`, `v`, `vlang`, `wasm.v`, `vsh` | V compiler in WASM |
diff --git a/README.md b/README.md
index d1e9a9b46..5d5d13153 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ A [feature-rich](https://livecodes.io/docs/features/), open-source, **client-sid
[](https://www.npmjs.com/package/livecodes)
[](https://www.npmjs.com/package/livecodes)
[](https://www.jsdelivr.com/package/npm/livecodes)
-[](https://livecodes.io/docs/languages/)
+[](https://livecodes.io/docs/languages/)
[](https://livecodes.io/docs/)
[](https://livecodes.io/docs/llms.txt)
[](https://livecodes.io/docs/llms-full.txt)
diff --git a/docs/docs/languages/scala-wasm.mdx b/docs/docs/languages/scala-wasm.mdx
new file mode 100644
index 000000000..934a1bb3f
--- /dev/null
+++ b/docs/docs/languages/scala-wasm.mdx
@@ -0,0 +1,145 @@
+# Scala (Wasm)
+
+[Scala](https://www.scala-lang.org/) is a statically typed language that combines functional and
+object-oriented programming. Scala 3 programs can target the JVM, JavaScript (via
+[Scala.js](https://www.scala-js.org/)) and native platforms.
+
+In LiveCodes, Scala source is compiled and linked **in the browser** by the Scala 3 compiler and the
+Scala.js linker, both compiled to WebAssembly. The program then runs in the
+[result page](../features/result.mdx). Nothing is sent to a server.
+
+:::info Note
+
+The toolchain is about 46 MB and is downloaded on the first run, which can take some time. Macros
+work but download a second compiler and about 23 MB of additional compiler IR the first time they
+are used.
+
+:::
+
+## Usage
+
+Demo:
+
+import LiveCodes from '../../src/components/LiveCodes.tsx';
+
+export const scalaConfig = {
+ activeEditor: 'script',
+ script: {
+ language: 'scala-wasm',
+ content: `@main def hello(): Unit =
+ val squares = (1 to 5).map(n => n * n)
+ println("squares: " + squares.mkString(", "))
+ println("sum: " + squares.sum)
+`,
+ },
+ mode: 'simple',
+ editor: 'auto',
+ tools: {
+ status: 'full',
+ },
+};
+
+
+
+### Standard I/O
+
+Scala code runs in the context of the result page. Standard output (e.g. `println`) is captured and
+displayed in the [console](../features/console.mdx). Standard input is passed by setting the
+`livecodes.scala.input` property in JavaScript.
+
+The input is a one-shot buffer: once it is exhausted, `readLine()` returns `null` and the typed
+`StdIn` readers throw `EOFException`. It is not an interactive terminal. The following read from the
+supplied buffer:
+
+- `scala.io.StdIn.readLine()` and the typed readers (`readInt`, `readDouble`, ...)
+- `scala.Console.in`
+- `System.in.read()` and `BufferedReader(new InputStreamReader(System.in))`
+
+`java.util.Scanner` and `scala.io.Source.stdin` have no working Scala.js implementation, and a
+parameterized `@main` method cannot be wrapped (use an object main or a parameterless `@main`).
+
+### Communication with JavaScript
+
+A few helper properties and methods are available in the browser global `livecodes.scala` object:
+
+- `livecodes.scala.input`: The standard input passed to the Scala program. It can be set before the
+ initial run, or passed to `run` for subsequent runs.
+- `livecodes.scala.loaded`: A promise that resolves when the Scala environment is ready (and rejects
+ if it fails to load). Other helpers should be used after this promise resolves.
+- `livecodes.scala.ready`: A boolean that is `true` once the environment is loaded and a run has
+ completed.
+- `livecodes.scala.output`: The standard output of the last run.
+- `livecodes.scala.error`: The compiler diagnostics or runtime error of the last run, if any.
+- `livecodes.scala.exitCode`: The exit code of the last run.
+- `livecodes.scala.run(input)`: Runs the code in the editor, optionally passing standard input, and
+ returns a promise that resolves to `{ output, error, exitCode }`.
+
+```js
+await livecodes.scala.loaded;
+const { output, error, exitCode } = await livecodes.scala.run(livecodes.scala.input);
+console.log(output);
+```
+
+## Language Info
+
+### Name
+
+`scala-wasm`
+
+### Aliases / Extensions
+
+`scala`, `scala-wasm`, `wasm.scala`
+
+### Editor
+
+`script`
+
+## Compiler
+
+The [Scala 3 compiler](https://www.scala-lang.org/) and the [Scala.js](https://www.scala-js.org/) linker compiled to WebAssembly,
+provided by [`scala-toolchain-wasm`](https://github.com/tothambrus11/scala-toolchain-wasm) and
+packaged for LiveCodes by
+[`@live-codes/scala-wasm`](https://github.com/live-codes/scala-wasm).
+
+### Version
+
+Scala 3.8.3, Scala.js 1.20.2
+
+## Code Formatting
+
+Not supported.
+
+## Limitations
+
+- `java.util.Scanner` and `scala.io.Source.stdin` are not available.
+- A parameterized `@main` method cannot read the supplied standard input.
+
+## Example Usage
+
+This example passes standard input and runs the code again on each click, using the browser global
+`livecodes.scala` (also check the code in the HTML editor):
+
+
+
+## Live Reload
+
+By default, new code changes are sent to the result page for re-evaluation without a full page
+reload, avoiding the need to reinitialize the Scala WebAssembly environment. This behavior can be
+disabled by adding the code comment `// __livecodes_reload__` to the Scala code, which forces a full
+page reload.
+
+This comment can be added in the
+[`hiddenContent` property of the editor](../configuration/configuration-object.mdx#markup) for
+embedded playgrounds.
+
+## Starter Template
+
+https://livecodes.io/?template=scala
+
+## Links
+
+- [Scala](https://www.scala-lang.org/)
+- [Scala 3 documentation](https://docs.scala-lang.org/)
+- [Scala.js](https://www.scala-js.org/)
+- [scala-toolchain-wasm](https://github.com/tothambrus11/scala-toolchain-wasm)
+- [@live-codes/scala-wasm](https://github.com/live-codes/scala-wasm)
diff --git a/docs/src/components/LanguageSliders.tsx b/docs/src/components/LanguageSliders.tsx
index 7b18df793..de8d9efd1 100644
--- a/docs/src/components/LanguageSliders.tsx
+++ b/docs/src/components/LanguageSliders.tsx
@@ -105,6 +105,7 @@ export default function Sliders() {
{ name: 'flutter', title: 'Flutter' },
{ name: 'v-wasm', title: 'V (Wasm)' },
{ name: 'rust-wasm', title: 'Rust (Wasm)' },
+ { name: 'scala-wasm', title: 'Scala (Wasm)' },
{ name: 'swift-wasm', title: 'Swift (Wasm)' },
{ name: 'haskell', title: 'Haskell' },
{ name: 'haskell-wasm', title: 'Haskell (Wasm)' },
diff --git a/docs/src/components/TemplateList.tsx b/docs/src/components/TemplateList.tsx
index c25520e27..7a7e90b67 100644
--- a/docs/src/components/TemplateList.tsx
+++ b/docs/src/components/TemplateList.tsx
@@ -61,6 +61,7 @@ const templates = [
{ name: 'cpp-wasm', title: 'C++ (Wasm) Starter', thumbnail: 'cpp.svg' },
{ name: 'objc-wasm', title: 'Objective-C (Wasm) Starter', thumbnail: 'objective-c.svg' },
{ name: 'rust-wasm', title: 'Rust (Wasm) Starter', thumbnail: 'rust.svg' },
+ { name: 'scala', title: 'Scala Starter', thumbnail: 'scala.svg' },
{ name: 'swift-wasm', title: 'Swift (Wasm) Starter', thumbnail: 'swift.svg' },
{ name: 'haskell', title: 'Haskell Starter', thumbnail: 'haskell.svg' },
{ name: 'haskell-wasm', title: 'Haskell (Wasm) Starter', thumbnail: 'haskell.svg' },
diff --git a/e2e/specs/compilers.spec.ts b/e2e/specs/compilers.spec.ts
index da0b9adc6..5003df01f 100644
--- a/e2e/specs/compilers.spec.ts
+++ b/e2e/specs/compilers.spec.ts
@@ -1677,6 +1677,30 @@ document.getElementById('header').innerHTML = f"Hello, {title}"`);
);
});
+ test('Scala (Wasm)', async ({ page, getTestUrl, editor }) => {
+ test.skip(editor === 'codejar', 'please fix');
+ test.slow(); // the engine downloads the toolchain and compiles WebAssembly
+
+ const code = `@main def hello(): Unit =
+ println("Hello from Scala")
+`;
+
+ // Code is passed in the URL (rather than typed) so the first run cannot race the editor.
+ await page.goto(getTestUrl({ tools: 'console|open', active: 'script', 'scala-wasm': code }));
+
+ const { app, waitForResultUpdate } = await getLoadedApp(page);
+ await waitForResultUpdate();
+
+ await app.waitForFunction(
+ () =>
+ [...document.querySelectorAll('#console-container .luna-console-log-item')].some((item) =>
+ (item.textContent ?? '').includes('Hello from Scala'),
+ ),
+ undefined,
+ { timeout: 180_000 },
+ );
+ });
+
test('Ruby', async ({ page, getTestUrl, editor }) => {
test.skip(editor === 'codejar', 'please fix');
diff --git a/e2e/specs/starter.spec.ts b/e2e/specs/starter.spec.ts
index 14069d51f..26f917cd7 100644
--- a/e2e/specs/starter.spec.ts
+++ b/e2e/specs/starter.spec.ts
@@ -351,6 +351,34 @@ test.describe('Starter Templates from UI', () => {
await expect(getResult().locator('text=You clicked')).toHaveText('You clicked 3 times.');
});
+ test('scala Starter', async ({ page, getTestUrl }) => {
+ // the compiler and the standard library are downloaded on the first run
+ test.slow();
+
+ await page.goto(getTestUrl());
+
+ const { app, getResult, waitForResultUpdate } = await getLoadedApp(page);
+
+ await app.click('[aria-label="Project"]');
+ await app.click('text=New');
+ await app.click('text=Scala Starter');
+
+ await waitForEditorFocus(app);
+ await waitForResultUpdate();
+
+ // the counter stays disabled until the runtime has loaded and run once
+ await expect(getResult().locator('#counter-button')).toBeEnabled({ timeout: 280_000 });
+
+ await getResult().click('text=Click me');
+ await getResult().click('text=Click me');
+ await getResult().click('text=Click me');
+
+ await expect(getResult().locator('h1')).toHaveText('Hello, Scala!');
+ // Each click triggers an asynchronous run, so the counter is asserted with
+ // retries rather than read once.
+ await expect(getResult().locator('text=You clicked')).toHaveText('You clicked 3 times.');
+ });
+
test('swift-wasm Starter', async ({ page, getTestUrl }) => {
// the Swift compiler, the linker and the stdlib sysroot (~70 MB) are downloaded on
// the first run
diff --git a/functions/vendors/templates.js b/functions/vendors/templates.js
index 0a621d42b..35f0fa5e9 100644
--- a/functions/vendors/templates.js
+++ b/functions/vendors/templates.js
@@ -61,6 +61,7 @@ export const starterTemplates = {
"d-wasm": "D Starter",
"v-wasm": "V Starter",
"rust-wasm": "Rust (Wasm) Starter",
+ "scala": "Scala Starter",
"swift-wasm": "Swift (Wasm) Starter",
"zig-wasm": "Zig (Wasm) Starter",
"java": "Java Starter",
diff --git a/scripts/build.js b/scripts/build.js
index b5046cb57..d4a65d8bb 100644
--- a/scripts/build.js
+++ b/scripts/build.js
@@ -229,6 +229,7 @@ const iifeBuild = () =>
'languages/commonlisp/lang-commonlisp-script.ts',
'languages/java-8/lang-java-8-script.ts',
'languages/java-wasm/lang-java-wasm-script.ts',
+ 'languages/scala-wasm/lang-scala-wasm-script.ts',
'languages/cpp/lang-cpp-script.ts',
'languages/clang-wasm/lang-clang-wasm-script.ts',
'languages/nim/lang-nim-wasm-script.ts',
diff --git a/server/php/inc/starter-templates.json b/server/php/inc/starter-templates.json
index d1f223fbc..b728d44dc 100644
--- a/server/php/inc/starter-templates.json
+++ b/server/php/inc/starter-templates.json
@@ -61,6 +61,7 @@
"d-wasm": "D Starter",
"v-wasm": "V Starter",
"rust-wasm": "Rust (Wasm) Starter",
+ "scala": "Scala Starter",
"swift-wasm": "Swift (Wasm) Starter",
"zig-wasm": "Zig (Wasm) Starter",
"java": "Java Starter",
diff --git a/src/livecodes/UI/command-menu-actions.ts b/src/livecodes/UI/command-menu-actions.ts
index b4b99e5a4..7550d34f5 100644
--- a/src/livecodes/UI/command-menu-actions.ts
+++ b/src/livecodes/UI/command-menu-actions.ts
@@ -317,6 +317,7 @@ export const getCommandMenuActions = ({
'odin-wasm',
'v-wasm',
'rust-wasm',
+ 'scala',
'swift-wasm',
'zig-wasm',
'java',
diff --git a/src/livecodes/assets/templates/scala.svg b/src/livecodes/assets/templates/scala.svg
new file mode 100644
index 000000000..418c49065
--- /dev/null
+++ b/src/livecodes/assets/templates/scala.svg
@@ -0,0 +1 @@
+
diff --git a/src/livecodes/html/language-info.html b/src/livecodes/html/language-info.html
index 8de4cf829..66ffcdf04 100644
--- a/src/livecodes/html/language-info.html
+++ b/src/livecodes/html/language-info.html
@@ -2647,6 +2647,38 @@
Sass
+
+ Scala (Wasm)
+
+ Scala 3 is compiled and linked in the browser by the Scala 3 compiler and the Scala.js linker,
+ both running on WebAssembly. Nothing is sent to a server.
+
+
+
Scheme
Scheme running in the browser using biwascheme.
diff --git a/src/livecodes/i18n/locales/ar/language-info.lokalise.json b/src/livecodes/i18n/locales/ar/language-info.lokalise.json
index bf5cc9ade..473773e91 100644
--- a/src/livecodes/i18n/locales/ar/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/ar/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "يتم تجميع Scala 3 وربطه في المتصفح بواسطة مُترجم Scala 3 ورابط Scala.js، وكلاهما يعمل على WebAssembly. لا يُرسَل أي شيء إلى خادم."
+ },
+ "scalaWasm.link": {
+ "translation": " الموقع الرسمي لـ Scala وثائق Scala الموقع الرسمي لـ Scala.js وثائق LiveCodes تحميل قالب البدء "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "Scheme تعمل في المتصفح باستخدام biwascheme."
},
diff --git a/src/livecodes/i18n/locales/ar/language-info.ts b/src/livecodes/i18n/locales/ar/language-info.ts
index 361125290..b5d6df9d7 100644
--- a/src/livecodes/i18n/locales/ar/language-info.ts
+++ b/src/livecodes/i18n/locales/ar/language-info.ts
@@ -488,6 +488,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>الموقع الرسمي لـ Sass2> 1> <3> <4>وثائق Sass4> 3> <5> <6>بناء جملة Sass (المسافة البادئة)6> 5> <7> <8>تعلم X في Y دقيقة، حيث X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'يتم تجميع Scala 3 وربطه في المتصفح بواسطة مُترجم Scala 3 ورابط Scala.js، وكلاهما يعمل على WebAssembly. لا يُرسَل أي شيء إلى خادم.',
+ link: '<1> <2>الموقع الرسمي لـ Scala2> 1> <3> <4>وثائق Scala4> 3> <5> <6>الموقع الرسمي لـ Scala.js6> 5> <7> <8>وثائق LiveCodes8> 7> <9> <10>تحميل قالب البدء10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'Scheme تعمل في المتصفح باستخدام biwascheme.',
link: '<1> <2>لغة البرمجة Scheme2> 1> <3> <4>الموقع الرسمي لـ BiwaScheme4> 3> <5> <6>مرجع BiwaScheme6> 5> <7> <8>تحميل قالب البداية8> 7>',
diff --git a/src/livecodes/i18n/locales/ar/translation.lokalise.json b/src/livecodes/i18n/locales/ar/translation.lokalise.json
index f18218349..cebdf92f2 100644
--- a/src/livecodes/i18n/locales/ar/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/ar/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "قالب Rust (Wasm)"
},
+ "templates.starter.scala": {
+ "translation": "قالب Scala"
+ },
"templates.starter.scheme": {
"translation": "قالب Scheme"
},
diff --git a/src/livecodes/i18n/locales/ar/translation.ts b/src/livecodes/i18n/locales/ar/translation.ts
index 7ff51c18b..51e88ad44 100644
--- a/src/livecodes/i18n/locales/ar/translation.ts
+++ b/src/livecodes/i18n/locales/ar/translation.ts
@@ -1059,6 +1059,7 @@ const translation: I18nTranslation = {
ruby: 'قالب Ruby',
'ruby-wasm': 'قالب Ruby-Wasm',
'rust-wasm': 'قالب Rust (Wasm)',
+ scala: 'قالب Scala',
scheme: 'قالب Scheme',
shadcnui: 'قالب shadcn/ui',
solid: 'قالب Solid',
diff --git a/src/livecodes/i18n/locales/bn/language-info.lokalise.json b/src/livecodes/i18n/locales/bn/language-info.lokalise.json
index 4a4bdfcf1..dd346eb35 100644
--- a/src/livecodes/i18n/locales/bn/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/bn/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "Scala 3 ব্রাউজারে Scala 3 কম্পাইলার এবং Scala.js লিঙ্কার দ্বারা কম্পাইল ও লিঙ্ক করা হয়, উভয়ই WebAssembly-তে চলে। কোনো সার্ভারে কিছু পাঠানো হয় না।"
+ },
+ "scalaWasm.link": {
+ "translation": " Scala অফিসিয়াল ওয়েবসাইট Scala ডকুমেন্টেশন Scala.js অফিসিয়াল ওয়েবসাইট লাইভকোড ডকুমেন্টেশন স্টার্টার টেমপ্লেট লোড করুন "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "biwascheme ব্যবহার করে ব্রাউজারে চলমান Scheme।"
},
diff --git a/src/livecodes/i18n/locales/bn/language-info.ts b/src/livecodes/i18n/locales/bn/language-info.ts
index becbc8a4b..80c8a2cef 100644
--- a/src/livecodes/i18n/locales/bn/language-info.ts
+++ b/src/livecodes/i18n/locales/bn/language-info.ts
@@ -492,6 +492,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Sass অফিসিয়াল ওয়েবসাইট2> 1> <3> <4>Sass ডকুমেন্টেশন4> 3> <5> <6>Sass (ইন্ডেন্টেড) সিনট্যাক্স6> 5> <7> <8>Y মিনিটে X শিখুন, যেখানে X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'Scala 3 ব্রাউজারে Scala 3 কম্পাইলার এবং Scala.js লিঙ্কার দ্বারা কম্পাইল ও লিঙ্ক করা হয়, উভয়ই WebAssembly-তে চলে। কোনো সার্ভারে কিছু পাঠানো হয় না।',
+ link: '<1> <2>Scala অফিসিয়াল ওয়েবসাইট2> 1> <3> <4>Scala ডকুমেন্টেশন4> 3> <5> <6>Scala.js অফিসিয়াল ওয়েবসাইট6> 5> <7> <8>লাইভকোড ডকুমেন্টেশন8> 7> <9> <10>স্টার্টার টেমপ্লেট লোড করুন10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'biwascheme ব্যবহার করে ব্রাউজারে চলমান Scheme।',
link: '<1> <2>Scheme প্রোগ্রামিং ভাষা2> 1> <3> <4>BiwaScheme অফিসিয়াল ওয়েবসাইট4> 3> <5> <6>BiwaScheme রেফারেন্স6> 5> <7> <8>স্টার্টার টেমপ্লেট লোড করুন8> 7>',
diff --git a/src/livecodes/i18n/locales/bn/translation.lokalise.json b/src/livecodes/i18n/locales/bn/translation.lokalise.json
index 304fe216c..89e60aa0b 100644
--- a/src/livecodes/i18n/locales/bn/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/bn/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "Rust (Wasm) স্টার্টার"
},
+ "templates.starter.scala": {
+ "translation": "Scala স্টার্টার"
+ },
"templates.starter.scheme": {
"translation": "Scheme স্টার্টার"
},
diff --git a/src/livecodes/i18n/locales/bn/translation.ts b/src/livecodes/i18n/locales/bn/translation.ts
index 330bd4dd8..8bdb306f9 100644
--- a/src/livecodes/i18n/locales/bn/translation.ts
+++ b/src/livecodes/i18n/locales/bn/translation.ts
@@ -1059,6 +1059,7 @@ const translation: I18nTranslation = {
ruby: 'Ruby স্টার্টার',
'ruby-wasm': 'Ruby (Wasm) স্টার্টার',
'rust-wasm': 'Rust (Wasm) স্টার্টার',
+ scala: 'Scala স্টার্টার',
scheme: 'Scheme স্টার্টার',
shadcnui: 'shadcn/ui স্টার্টার',
solid: 'Solid স্টার্টার',
diff --git a/src/livecodes/i18n/locales/de/language-info.lokalise.json b/src/livecodes/i18n/locales/de/language-info.lokalise.json
index 837d01ecb..2a9e4436e 100644
--- a/src/livecodes/i18n/locales/de/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/de/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "Scala 3 wird im Browser vom Scala 3-Compiler und dem Scala.js-Linker kompiliert und verlinkt, die beide auf WebAssembly laufen. Es wird nichts an einen Server gesendet."
+ },
+ "scalaWasm.link": {
+ "translation": " Offizielle Website von Scala Scala-Dokumentation Offizielle Website von Scala.js LiveCodes-Dokumentation Startervorlage laden "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "Scheme läuft im Browser mit biwascheme."
},
diff --git a/src/livecodes/i18n/locales/de/language-info.ts b/src/livecodes/i18n/locales/de/language-info.ts
index ef00285b3..a97383fb5 100644
--- a/src/livecodes/i18n/locales/de/language-info.ts
+++ b/src/livecodes/i18n/locales/de/language-info.ts
@@ -494,6 +494,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Sass offizielle Website2> 1> <3> <4>Sass Dokumentation4> 3> <5> <6>Sass (die eingerückte) Syntax6> 5> <7> <8>Lerne X in Y Minuten, wobei X=Sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'Scala 3 wird im Browser vom Scala 3-Compiler und dem Scala.js-Linker kompiliert und verlinkt, die beide auf WebAssembly laufen. Es wird nichts an einen Server gesendet.',
+ link: '<1> <2>Offizielle Website von Scala2> 1> <3> <4>Scala-Dokumentation4> 3> <5> <6>Offizielle Website von Scala.js6> 5> <7> <8>LiveCodes-Dokumentation8> 7> <9> <10>Startervorlage laden10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'Scheme läuft im Browser mit biwascheme.',
link: '<1> <2>Die Scheme Programmiersprache2> 1> <3> <4>BiwaScheme offizielle Website4> 3> <5> <6>BiwaScheme Referenz6> 5> <7> <8>Starter-Vorlage laden8> 7>',
diff --git a/src/livecodes/i18n/locales/de/translation.lokalise.json b/src/livecodes/i18n/locales/de/translation.lokalise.json
index f8162ebd1..8bfbf0f9b 100644
--- a/src/livecodes/i18n/locales/de/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/de/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "Rust (Wasm)-Starter"
},
+ "templates.starter.scala": {
+ "translation": "Scala-Starter"
+ },
"templates.starter.scheme": {
"translation": "Scheme-Starter"
},
diff --git a/src/livecodes/i18n/locales/de/translation.ts b/src/livecodes/i18n/locales/de/translation.ts
index c1543f390..12bdfaafb 100644
--- a/src/livecodes/i18n/locales/de/translation.ts
+++ b/src/livecodes/i18n/locales/de/translation.ts
@@ -1061,6 +1061,7 @@ const translation: I18nTranslation = {
ruby: 'Ruby-Starter',
'ruby-wasm': 'Ruby (Wasm)-Starter',
'rust-wasm': 'Rust (Wasm)-Starter',
+ scala: 'Scala-Starter',
scheme: 'Scheme-Starter',
shadcnui: 'shadcn/ui-Starter',
solid: 'Solid-Starter',
diff --git a/src/livecodes/i18n/locales/en/language-info.lokalise.json b/src/livecodes/i18n/locales/en/language-info.lokalise.json
index 312917710..19e518dab 100644
--- a/src/livecodes/i18n/locales/en/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/en/language-info.lokalise.json
@@ -1164,6 +1164,18 @@
"notes": "",
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "notes": "",
+ "translation": "Scala 3 is compiled and linked in the browser by the Scala 3 compiler and the Scala.js linker, both running on WebAssembly. Nothing is sent to a server."
+ },
+ "scalaWasm.link": {
+ "notes": "### ###\n \n\n### ###\n \n\n### ###\n \n\n### ###\n \n\n### ###\n \n\n### ###\n \n\n### ###\n \n\n### ###\n \n\n### ###\n \n\n### ###\n \n\n",
+ "translation": " Scala official website Scala documentation Scala.js official website LiveCodes Documentation Load starter template "
+ },
+ "scalaWasm.name": {
+ "notes": "",
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"notes": "",
"translation": "Scheme running in the browser using biwascheme."
diff --git a/src/livecodes/i18n/locales/en/language-info.ts b/src/livecodes/i18n/locales/en/language-info.ts
index dd3fbb84a..95f5bca6c 100644
--- a/src/livecodes/i18n/locales/en/language-info.ts
+++ b/src/livecodes/i18n/locales/en/language-info.ts
@@ -500,6 +500,11 @@ const languageInfo = {
link: '<1> <2>Sass official website2> 1> <3> <4>Sass documentation4> 3> <5> <6>Sass (the indented) syntax6> 5> <7> <8>Learn X in Y minutes, where X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'Scala 3 is compiled and linked in the browser by the Scala 3 compiler and the Scala.js linker, both running on WebAssembly. Nothing is sent to a server.',
+ link: '<1> <2>Scala official website2> 1> <3> <4>Scala documentation4> 3> <5> <6>Scala.js official website6> 5> <7> <8>LiveCodes Documentation8> 7> <9> <10>Load starter template10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'Scheme running in the browser using biwascheme.',
link: '<1> <2>The Scheme Programming Language2> 1> <3> <4>BiwaScheme official website4> 3> <5> <6>BiwaScheme reference6> 5> <7> <8>Load starter template8> 7>',
diff --git a/src/livecodes/i18n/locales/en/translation.lokalise.json b/src/livecodes/i18n/locales/en/translation.lokalise.json
index 6ea7baf23..e0beaf8f2 100644
--- a/src/livecodes/i18n/locales/en/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/en/translation.lokalise.json
@@ -2880,6 +2880,10 @@
"notes": "",
"translation": "Rust (Wasm) Starter"
},
+ "templates.starter.scala": {
+ "notes": "",
+ "translation": "Scala Starter"
+ },
"templates.starter.scheme": {
"notes": "",
"translation": "Scheme Starter"
diff --git a/src/livecodes/i18n/locales/en/translation.ts b/src/livecodes/i18n/locales/en/translation.ts
index adc249477..83e37810f 100644
--- a/src/livecodes/i18n/locales/en/translation.ts
+++ b/src/livecodes/i18n/locales/en/translation.ts
@@ -1066,6 +1066,7 @@ const translation = {
ruby: 'Ruby Starter',
'ruby-wasm': 'Ruby (Wasm) Starter',
'rust-wasm': 'Rust (Wasm) Starter',
+ scala: 'Scala Starter',
scheme: 'Scheme Starter',
shadcnui: 'shadcn/ui Starter',
solid: 'Solid Starter',
diff --git a/src/livecodes/i18n/locales/es/language-info.lokalise.json b/src/livecodes/i18n/locales/es/language-info.lokalise.json
index 02b798b43..a335af022 100644
--- a/src/livecodes/i18n/locales/es/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/es/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "Scala 3 se compila y enlaza en el navegador mediante el compilador de Scala 3 y el enlazador de Scala.js, ambos ejecutándose en WebAssembly. No se envía nada a un servidor."
+ },
+ "scalaWasm.link": {
+ "translation": " Página web oficial de Scala Documentación de Scala Página web oficial de Scala.js Documentación de LiveCodes Cargar plantilla de inicio "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "Scheme ejecutándose en el navegador usando biwascheme."
},
diff --git a/src/livecodes/i18n/locales/es/language-info.ts b/src/livecodes/i18n/locales/es/language-info.ts
index ce206e1c6..da4d39fb3 100644
--- a/src/livecodes/i18n/locales/es/language-info.ts
+++ b/src/livecodes/i18n/locales/es/language-info.ts
@@ -494,6 +494,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Sitio web oficial de Sass2> 1> <3> <4>Documentación de Sass4> 3> <5> <6>Sintaxis de Sass (con indentación)6> 5> <7> <8>Aprende X en Y minutos, donde X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'Scala 3 se compila y enlaza en el navegador mediante el compilador de Scala 3 y el enlazador de Scala.js, ambos ejecutándose en WebAssembly. No se envía nada a un servidor.',
+ link: '<1> <2>Página web oficial de Scala2> 1> <3> <4>Documentación de Scala4> 3> <5> <6>Página web oficial de Scala.js6> 5> <7> <8>Documentación de LiveCodes8> 7> <9> <10>Cargar plantilla de inicio10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'Scheme ejecutándose en el navegador usando biwascheme.',
link: '<1> <2>El Lenguaje de Programación Scheme2> 1> <3> <4>Sitio web oficial de BiwaScheme4> 3> <5> <6>Referencia de BiwaScheme6> 5> <7> <8>Cargar plantilla inicial8> 7>',
diff --git a/src/livecodes/i18n/locales/es/translation.lokalise.json b/src/livecodes/i18n/locales/es/translation.lokalise.json
index 33bf4cf86..bea02ee7c 100644
--- a/src/livecodes/i18n/locales/es/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/es/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "Inicio Rust (Wasm)"
},
+ "templates.starter.scala": {
+ "translation": "Inicio Scala"
+ },
"templates.starter.scheme": {
"translation": "Inicio Scheme"
},
diff --git a/src/livecodes/i18n/locales/es/translation.ts b/src/livecodes/i18n/locales/es/translation.ts
index a53f3e6c0..31fe2c642 100644
--- a/src/livecodes/i18n/locales/es/translation.ts
+++ b/src/livecodes/i18n/locales/es/translation.ts
@@ -1059,6 +1059,7 @@ const translation: I18nTranslation = {
ruby: 'Inicio Ruby',
'ruby-wasm': 'Inicio Ruby (Wasm)',
'rust-wasm': 'Inicio Rust (Wasm)',
+ scala: 'Inicio Scala',
scheme: 'Inicio Scheme',
shadcnui: 'Inicio shadcn/ui',
solid: 'Inicio Solid',
diff --git a/src/livecodes/i18n/locales/fa/language-info.lokalise.json b/src/livecodes/i18n/locales/fa/language-info.lokalise.json
index 5220dcaf9..438f25970 100644
--- a/src/livecodes/i18n/locales/fa/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/fa/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "Scala 3 توسط کامپایلر Scala 3 و لینکر Scala.js، که هر دو روی WebAssembly اجرا میشوند، در مرورگر کامپایل و لینک میشود. هیچ چیزی به سرور فرستاده نمیشود."
+ },
+ "scalaWasm.link": {
+ "translation": " وبسایت رسمی Scala اسناد Scala وبسایت رسمی Scala.js مستندات LiveCodes بارگیری قالب شروع "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "Scheme که با استفاده از biwascheme در مرورگر اجرا میشود."
},
diff --git a/src/livecodes/i18n/locales/fa/language-info.ts b/src/livecodes/i18n/locales/fa/language-info.ts
index bde80959d..87d5b755b 100644
--- a/src/livecodes/i18n/locales/fa/language-info.ts
+++ b/src/livecodes/i18n/locales/fa/language-info.ts
@@ -493,6 +493,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>وبسایت رسمی Sass2> 1> <3> <4>مستندات Sass4> 3> <5> <6>نحو Sass (نحو تو رفته)6> 5> <7> <8>یادگیری X در Y دقیقه، جایی که X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'Scala 3 توسط کامپایلر Scala 3 و لینکر Scala.js، که هر دو روی WebAssembly اجرا میشوند، در مرورگر کامپایل و لینک میشود. هیچ چیزی به سرور فرستاده نمیشود.',
+ link: '<1> <2>وبسایت رسمی Scala2> 1> <3> <4>اسناد Scala4> 3> <5> <6>وبسایت رسمی Scala.js6> 5> <7> <8>مستندات LiveCodes8> 7> <9> <10>بارگیری قالب شروع10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'Scheme که با استفاده از biwascheme در مرورگر اجرا میشود.',
link: '<1> <2>زبان برنامهنویسی Scheme2> 1> <3> <4>وبسایت رسمی BiwaScheme4> 3> <5> <6>مرجع BiwaScheme6> 5> <7> <8>بارگذاری قالب شروع کننده8> 7>',
diff --git a/src/livecodes/i18n/locales/fa/translation.lokalise.json b/src/livecodes/i18n/locales/fa/translation.lokalise.json
index d526a7428..1235af113 100644
--- a/src/livecodes/i18n/locales/fa/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/fa/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "شروع کننده Rust (Wasm)"
},
+ "templates.starter.scala": {
+ "translation": "شروع کننده Scala"
+ },
"templates.starter.scheme": {
"translation": "شروع کننده Scheme"
},
diff --git a/src/livecodes/i18n/locales/fa/translation.ts b/src/livecodes/i18n/locales/fa/translation.ts
index 08c0d6fc4..a6e426f02 100644
--- a/src/livecodes/i18n/locales/fa/translation.ts
+++ b/src/livecodes/i18n/locales/fa/translation.ts
@@ -1060,6 +1060,7 @@ const translation: I18nTranslation = {
ruby: 'شروع کننده Ruby',
'ruby-wasm': 'شروع کننده Ruby (Wasm)',
'rust-wasm': 'شروع کننده Rust (Wasm)',
+ scala: 'شروع کننده Scala',
scheme: 'شروع کننده Scheme',
shadcnui: 'شروع کننده shadcn/ui',
solid: 'شروع کننده Solid',
diff --git a/src/livecodes/i18n/locales/fr/language-info.lokalise.json b/src/livecodes/i18n/locales/fr/language-info.lokalise.json
index 43864694a..9f4d2e8bb 100644
--- a/src/livecodes/i18n/locales/fr/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/fr/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "Scala 3 est compilé et lié dans le navigateur par le compilateur Scala 3 et l'éditeur de liens Scala.js, tous deux exécutés sur WebAssembly. Rien n'est envoyé à un serveur."
+ },
+ "scalaWasm.link": {
+ "translation": " Site officiel de Scala Documentation Scala Site officiel de Scala.js Documentation LiveCodes Charger un modèle de démarrage "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "Scheme s'exécutant dans le navigateur en utilisant biwascheme."
},
diff --git a/src/livecodes/i18n/locales/fr/language-info.ts b/src/livecodes/i18n/locales/fr/language-info.ts
index cb2604aaa..efe967ae4 100644
--- a/src/livecodes/i18n/locales/fr/language-info.ts
+++ b/src/livecodes/i18n/locales/fr/language-info.ts
@@ -494,6 +494,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Site officiel de Sass2> 1> <3> <4>Documentation Sass4> 3> <5> <6>Syntaxe Sass (indentée)6> 5> <7> <8>Apprenez X en Y minutes, où X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: "Scala 3 est compilé et lié dans le navigateur par le compilateur Scala 3 et l'éditeur de liens Scala.js, tous deux exécutés sur WebAssembly. Rien n'est envoyé à un serveur.",
+ link: '<1> <2>Site officiel de Scala2> 1> <3> <4>Documentation Scala4> 3> <5> <6>Site officiel de Scala.js6> 5> <7> <8>Documentation LiveCodes8> 7> <9> <10>Charger un modèle de démarrage10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: "Scheme s'exécutant dans le navigateur en utilisant biwascheme.",
link: '<1> <2>Le langage de programmation Scheme2> 1> <3> <4>Site officiel de BiwaScheme4> 3> <5> <6>Référence BiwaScheme6> 5> <7> <8>Charger le modèle de démarrage8> 7>',
diff --git a/src/livecodes/i18n/locales/fr/translation.lokalise.json b/src/livecodes/i18n/locales/fr/translation.lokalise.json
index 0de06d0a4..cbd869241 100644
--- a/src/livecodes/i18n/locales/fr/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/fr/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "Démarrage Rust (Wasm)"
},
+ "templates.starter.scala": {
+ "translation": "Démarrage Scala"
+ },
"templates.starter.scheme": {
"translation": "Démarrage Scheme"
},
diff --git a/src/livecodes/i18n/locales/fr/translation.ts b/src/livecodes/i18n/locales/fr/translation.ts
index 8bdb62ac8..68bc9e254 100644
--- a/src/livecodes/i18n/locales/fr/translation.ts
+++ b/src/livecodes/i18n/locales/fr/translation.ts
@@ -1061,6 +1061,7 @@ const translation: I18nTranslation = {
ruby: 'Démarrage Ruby',
'ruby-wasm': 'Démarrage Ruby (Wasm)',
'rust-wasm': 'Démarrage Rust (Wasm)',
+ scala: 'Démarrage Scala',
scheme: 'Démarrage Scheme',
shadcnui: 'Démarrage shadcn/ui',
solid: 'Démarrage Solid',
diff --git a/src/livecodes/i18n/locales/hi/language-info.lokalise.json b/src/livecodes/i18n/locales/hi/language-info.lokalise.json
index ef4460469..38b80310f 100644
--- a/src/livecodes/i18n/locales/hi/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/hi/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "Scala 3 को ब्राउज़र में Scala 3 कंपाइलर और Scala.js लिंकर द्वारा संकलित और लिंक किया जाता है, दोनों WebAssembly पर चलते हैं। किसी सर्वर पर कुछ नहीं भेजा जाता है।"
+ },
+ "scalaWasm.link": {
+ "translation": " Scala आधिकारिक वेबसाइट Scala दस्तावेज Scala.js आधिकारिक वेबसाइट लाइवकोड दस्तावेजीकरण स्टार्टर टेम्पलेट लोड करें "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "biwascheme का उपयोग करके ब्राउज़र में चलने वाला Scheme।"
},
diff --git a/src/livecodes/i18n/locales/hi/language-info.ts b/src/livecodes/i18n/locales/hi/language-info.ts
index c6890ac9e..a1ba86c44 100644
--- a/src/livecodes/i18n/locales/hi/language-info.ts
+++ b/src/livecodes/i18n/locales/hi/language-info.ts
@@ -495,6 +495,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Sass की आधिकारिक वेबसाइट2> 1> <3> <4>Sass दस्तावेज़ीकरण4> 3> <5> <6>Sass (इंडेंटेड) वाक्यरचना6> 5> <7> <8>X को Y मिनट में सीखें, जहां X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'Scala 3 को ब्राउज़र में Scala 3 कंपाइलर और Scala.js लिंकर द्वारा संकलित और लिंक किया जाता है, दोनों WebAssembly पर चलते हैं। किसी सर्वर पर कुछ नहीं भेजा जाता है।',
+ link: '<1> <2>Scala आधिकारिक वेबसाइट2> 1> <3> <4>Scala दस्तावेज4> 3> <5> <6>Scala.js आधिकारिक वेबसाइट6> 5> <7> <8>लाइवकोड दस्तावेजीकरण8> 7> <9> <10>स्टार्टर टेम्पलेट लोड करें10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'biwascheme का उपयोग करके ब्राउज़र में चलने वाला Scheme।',
link: '<1> <2>Scheme प्रोग्रामिंग भाषा2> 1> <3> <4>BiwaScheme की आधिकारिक वेबसाइट4> 3> <5> <6>BiwaScheme संदर्भ6> 5> <7> <8>स्टार्टर टेम्पलेट लोड करें8> 7>',
diff --git a/src/livecodes/i18n/locales/hi/translation.lokalise.json b/src/livecodes/i18n/locales/hi/translation.lokalise.json
index 42dcf5ecf..a92a6f646 100644
--- a/src/livecodes/i18n/locales/hi/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/hi/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "Rust (Wasm) स्टार्टर"
},
+ "templates.starter.scala": {
+ "translation": "Scala स्टार्टर"
+ },
"templates.starter.scheme": {
"translation": "Scheme स्टार्टर"
},
diff --git a/src/livecodes/i18n/locales/hi/translation.ts b/src/livecodes/i18n/locales/hi/translation.ts
index 187c47afb..cb7bccbd4 100644
--- a/src/livecodes/i18n/locales/hi/translation.ts
+++ b/src/livecodes/i18n/locales/hi/translation.ts
@@ -1059,6 +1059,7 @@ const translation: I18nTranslation = {
ruby: 'Ruby स्टार्टर',
'ruby-wasm': 'Ruby (Wasm) स्टार्टर',
'rust-wasm': 'Rust (Wasm) स्टार्टर',
+ scala: 'Scala स्टार्टर',
scheme: 'Scheme स्टार्टर',
shadcnui: 'shadcn/ui स्टार्टर',
solid: 'Solid स्टार्टर',
diff --git a/src/livecodes/i18n/locales/hu/language-info.lokalise.json b/src/livecodes/i18n/locales/hu/language-info.lokalise.json
index a31cf830b..f529f99b2 100644
--- a/src/livecodes/i18n/locales/hu/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/hu/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "A Scala 3-at a böngészőben a Scala 3 fordító és a Scala.js linker fordítja le és fűzi össze, mindkettő WebAssembly-n fut. Semmit sem küld szerverre."
+ },
+ "scalaWasm.link": {
+ "translation": " A Scala hivatalos weboldala Scala dokumentáció A Scala.js hivatalos weboldala LiveCodes dokumentáció Kezdő sablon betöltése "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "Scheme fut a böngészőben a biwascheme használatával."
},
diff --git a/src/livecodes/i18n/locales/hu/language-info.ts b/src/livecodes/i18n/locales/hu/language-info.ts
index 8b36a1e51..d4ecc7148 100644
--- a/src/livecodes/i18n/locales/hu/language-info.ts
+++ b/src/livecodes/i18n/locales/hu/language-info.ts
@@ -493,6 +493,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Sass hivatalos weboldal2> 1> <3> <4>Sass dokumentáció4> 3> <5> <6>Sass (a behúzott) szintaxis6> 5> <7> <8>Tanulj X-et Y perc alatt, ahol X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'A Scala 3-at a böngészőben a Scala 3 fordító és a Scala.js linker fordítja le és fűzi össze, mindkettő WebAssembly-n fut. Semmit sem küld szerverre.',
+ link: '<1> <2>A Scala hivatalos weboldala2> 1> <3> <4>Scala dokumentáció4> 3> <5> <6>A Scala.js hivatalos weboldala6> 5> <7> <8>LiveCodes dokumentáció8> 7> <9> <10>Kezdő sablon betöltése10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'Scheme fut a böngészőben a biwascheme használatával.',
link: '<1> <2>A Scheme programozási nyelv2> 1> <3> <4>BiwaScheme hivatalos weboldal4> 3> <5> <6>BiwaScheme referencia6> 5> <7> <8>Kezdő sablon betöltése8> 7>',
diff --git a/src/livecodes/i18n/locales/hu/translation.lokalise.json b/src/livecodes/i18n/locales/hu/translation.lokalise.json
index ef317333c..2a9352303 100644
--- a/src/livecodes/i18n/locales/hu/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/hu/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "Rust (Wasm) kezdő"
},
+ "templates.starter.scala": {
+ "translation": "Scala kezdő"
+ },
"templates.starter.scheme": {
"translation": "Scheme kezdő"
},
diff --git a/src/livecodes/i18n/locales/hu/translation.ts b/src/livecodes/i18n/locales/hu/translation.ts
index 7a4fe5e11..5aa168ffe 100644
--- a/src/livecodes/i18n/locales/hu/translation.ts
+++ b/src/livecodes/i18n/locales/hu/translation.ts
@@ -1060,6 +1060,7 @@ const translation: I18nTranslation = {
ruby: 'Ruby kezdő',
'ruby-wasm': 'Ruby (Wasm) kezdő',
'rust-wasm': 'Rust (Wasm) kezdő',
+ scala: 'Scala kezdő',
scheme: 'Scheme kezdő',
shadcnui: 'shadcn/ui kezdő',
solid: 'Solid kezdő',
diff --git a/src/livecodes/i18n/locales/id/language-info.lokalise.json b/src/livecodes/i18n/locales/id/language-info.lokalise.json
index 05159a478..b468e6269 100644
--- a/src/livecodes/i18n/locales/id/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/id/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "Scala 3 dikompilasi dan ditautkan di browser oleh kompiler Scala 3 dan penaut Scala.js, keduanya berjalan di WebAssembly. Tidak ada yang dikirim ke server."
+ },
+ "scalaWasm.link": {
+ "translation": " Situs web resmi Scala Dokumentasi Scala Situs web resmi Scala.js Dokumentasi LiveCodes Muat templat awal "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "Scheme berjalan di browser menggunakan biwascheme."
},
diff --git a/src/livecodes/i18n/locales/id/language-info.ts b/src/livecodes/i18n/locales/id/language-info.ts
index efda991d8..0c4c488a2 100644
--- a/src/livecodes/i18n/locales/id/language-info.ts
+++ b/src/livecodes/i18n/locales/id/language-info.ts
@@ -494,6 +494,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Situs web resmi Sass2> 1> <3> <4>Dokumentasi Sass4> 3> <5> <6>Sintaks Sass (yang berindentasi)6> 5> <7> <8>Pelajari X dalam Y menit, dengan X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'Scala 3 dikompilasi dan ditautkan di browser oleh kompiler Scala 3 dan penaut Scala.js, keduanya berjalan di WebAssembly. Tidak ada yang dikirim ke server.',
+ link: '<1> <2>Situs web resmi Scala2> 1> <3> <4>Dokumentasi Scala4> 3> <5> <6>Situs web resmi Scala.js6> 5> <7> <8>Dokumentasi LiveCodes8> 7> <9> <10>Muat templat awal10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'Scheme berjalan di browser menggunakan biwascheme.',
link: '<1> <2>Bahasa Pemrograman Scheme2> 1> <3> <4>Situs web resmi BiwaScheme4> 3> <5> <6>Referensi BiwaScheme6> 5> <7> <8>Muat template pemula8> 7>',
diff --git a/src/livecodes/i18n/locales/id/translation.lokalise.json b/src/livecodes/i18n/locales/id/translation.lokalise.json
index e9b4412f5..657a650ea 100644
--- a/src/livecodes/i18n/locales/id/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/id/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "Pemula Rust (Wasm)"
},
+ "templates.starter.scala": {
+ "translation": "Pemula Scala"
+ },
"templates.starter.scheme": {
"translation": "Pemula Scheme"
},
diff --git a/src/livecodes/i18n/locales/id/translation.ts b/src/livecodes/i18n/locales/id/translation.ts
index 389c4a34b..1318ce53e 100644
--- a/src/livecodes/i18n/locales/id/translation.ts
+++ b/src/livecodes/i18n/locales/id/translation.ts
@@ -1059,6 +1059,7 @@ const translation: I18nTranslation = {
ruby: 'Pemula Ruby',
'ruby-wasm': 'Pemula Ruby (Wasm)',
'rust-wasm': 'Pemula Rust (Wasm)',
+ scala: 'Pemula Scala',
scheme: 'Pemula Scheme',
shadcnui: 'Pemula shadcn/ui',
solid: 'Pemula Solid',
diff --git a/src/livecodes/i18n/locales/it/language-info.lokalise.json b/src/livecodes/i18n/locales/it/language-info.lokalise.json
index a23b29c1c..c9b4ef01e 100644
--- a/src/livecodes/i18n/locales/it/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/it/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "Scala 3 viene compilato e collegato nel browser dal compilatore Scala 3 e dal linker Scala.js, entrambi in esecuzione su WebAssembly. Niente viene inviato a un server."
+ },
+ "scalaWasm.link": {
+ "translation": " Sito web ufficiale di Scala Documentazione di Scala Sito web ufficiale di Scala.js Documentazione di LiveCodes Carica il modello di avvio "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "Scheme in esecuzione nel browser utilizzando biwascheme."
},
diff --git a/src/livecodes/i18n/locales/it/language-info.ts b/src/livecodes/i18n/locales/it/language-info.ts
index 4a06f731d..181e580f2 100644
--- a/src/livecodes/i18n/locales/it/language-info.ts
+++ b/src/livecodes/i18n/locales/it/language-info.ts
@@ -493,6 +493,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Sito ufficiale di Sass2> 1> <3> <4>Documentazione di Sass4> 3> <5> <6>Sintassi Sass (indentata)6> 5> <7> <8>Impara X in Y minuti, dove X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'Scala 3 viene compilato e collegato nel browser dal compilatore Scala 3 e dal linker Scala.js, entrambi in esecuzione su WebAssembly. Niente viene inviato a un server.',
+ link: '<1> <2>Sito web ufficiale di Scala2> 1> <3> <4>Documentazione di Scala4> 3> <5> <6>Sito web ufficiale di Scala.js6> 5> <7> <8>Documentazione di LiveCodes8> 7> <9> <10>Carica il modello di avvio10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'Scheme in esecuzione nel browser utilizzando biwascheme.',
link: '<1> <2>Il linguaggio di programmazione Scheme2> 1> <3> <4>Sito ufficiale di BiwaScheme4> 3> <5> <6>Riferimento di BiwaScheme6> 5> <7> <8>Carica modello di partenza8> 7>',
diff --git a/src/livecodes/i18n/locales/it/translation.lokalise.json b/src/livecodes/i18n/locales/it/translation.lokalise.json
index 55c046d46..b2730128e 100644
--- a/src/livecodes/i18n/locales/it/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/it/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "Starter Rust (Wasm)"
},
+ "templates.starter.scala": {
+ "translation": "Starter Scala"
+ },
"templates.starter.scheme": {
"translation": "Starter Scheme"
},
diff --git a/src/livecodes/i18n/locales/it/translation.ts b/src/livecodes/i18n/locales/it/translation.ts
index ab3ff2108..da7c091f4 100644
--- a/src/livecodes/i18n/locales/it/translation.ts
+++ b/src/livecodes/i18n/locales/it/translation.ts
@@ -1060,6 +1060,7 @@ const translation: I18nTranslation = {
ruby: 'Starter Ruby',
'ruby-wasm': 'Starter Ruby (Wasm)',
'rust-wasm': 'Starter Rust (Wasm)',
+ scala: 'Starter Scala',
scheme: 'Starter Scheme',
shadcnui: 'Starter shadcn/ui',
solid: 'Starter Solid',
diff --git a/src/livecodes/i18n/locales/ja/language-info.lokalise.json b/src/livecodes/i18n/locales/ja/language-info.lokalise.json
index b268b17ae..3018f9b0b 100644
--- a/src/livecodes/i18n/locales/ja/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/ja/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "Scala 3 は Scala 3 コンパイラと Scala.js リンカーによってブラウザ内でコンパイルおよびリンクされ、どちらも WebAssembly 上で実行されます。サーバーには何も送信されません。"
+ },
+ "scalaWasm.link": {
+ "translation": " Scala 公式サイト Scala ドキュメント Scala.js 公式サイト LiveCodes ドキュメント スターターテンプレートの読み込み "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "biwaschemeを使用してブラウザで実行されるScheme。"
},
diff --git a/src/livecodes/i18n/locales/ja/language-info.ts b/src/livecodes/i18n/locales/ja/language-info.ts
index a5c5e6776..3cd5030c2 100644
--- a/src/livecodes/i18n/locales/ja/language-info.ts
+++ b/src/livecodes/i18n/locales/ja/language-info.ts
@@ -494,6 +494,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Sass公式ウェブサイト2> 1> <3> <4>Sassドキュメント4> 3> <5> <6>Sass(インデント)構文6> 5> <7> <8>X分でわかるSass(X in Y minutes)8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'Scala 3 は Scala 3 コンパイラと Scala.js リンカーによってブラウザ内でコンパイルおよびリンクされ、どちらも WebAssembly 上で実行されます。サーバーには何も送信されません。',
+ link: '<1> <2>Scala 公式サイト2> 1> <3> <4>Scala ドキュメント4> 3> <5> <6>Scala.js 公式サイト6> 5> <7> <8>LiveCodes ドキュメント8> 7> <9> <10>スターターテンプレートの読み込み10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'biwaschemeを使用してブラウザで実行されるScheme。',
link: '<1> <2>Schemeプログラミング言語2> 1> <3> <4>BiwaScheme公式ウェブサイト4> 3> <5> <6>BiwaSchemeリファレンス6> 5> <7> <8>スターターテンプレートを読み込む8> 7>',
diff --git a/src/livecodes/i18n/locales/ja/translation.lokalise.json b/src/livecodes/i18n/locales/ja/translation.lokalise.json
index 43d30d259..2a3830c8b 100644
--- a/src/livecodes/i18n/locales/ja/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/ja/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "Rust(Wasm)スターター"
},
+ "templates.starter.scala": {
+ "translation": "Scalaスターター"
+ },
"templates.starter.scheme": {
"translation": "Schemeスターター"
},
diff --git a/src/livecodes/i18n/locales/ja/translation.ts b/src/livecodes/i18n/locales/ja/translation.ts
index d0c93956f..7db0a2128 100644
--- a/src/livecodes/i18n/locales/ja/translation.ts
+++ b/src/livecodes/i18n/locales/ja/translation.ts
@@ -1060,6 +1060,7 @@ const translation: I18nTranslation = {
ruby: 'Rubyスターター',
'ruby-wasm': 'Ruby(Wasm)スターター',
'rust-wasm': 'Rust(Wasm)スターター',
+ scala: 'Scalaスターター',
scheme: 'Schemeスターター',
shadcnui: 'shadcn/uiスターター',
solid: 'Solidスターター',
diff --git a/src/livecodes/i18n/locales/nl/language-info.lokalise.json b/src/livecodes/i18n/locales/nl/language-info.lokalise.json
index 03742756e..2ddda79bf 100644
--- a/src/livecodes/i18n/locales/nl/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/nl/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "Scala 3 wordt in de browser gecompileerd en gelinkt door de Scala 3-compiler en de Scala.js-linker, die beide op WebAssembly draaien. Er wordt niets naar een server verzonden."
+ },
+ "scalaWasm.link": {
+ "translation": " Officiële website van Scala Scala-documentatie Officiële website van Scala.js LiveCodes-documentatie Startersjabloon laden "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "Scheme draaiend in de browser met biwascheme."
},
diff --git a/src/livecodes/i18n/locales/nl/language-info.ts b/src/livecodes/i18n/locales/nl/language-info.ts
index b160782f8..896f93fcb 100644
--- a/src/livecodes/i18n/locales/nl/language-info.ts
+++ b/src/livecodes/i18n/locales/nl/language-info.ts
@@ -493,6 +493,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Sass officiële website2> 1> <3> <4>Sass documentatie4> 3> <5> <6>Sass (de ingesprongen) syntaxis6> 5> <7> <8>Leer X in Y minuten, waarbij X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'Scala 3 wordt in de browser gecompileerd en gelinkt door de Scala 3-compiler en de Scala.js-linker, die beide op WebAssembly draaien. Er wordt niets naar een server verzonden.',
+ link: '<1> <2>Officiële website van Scala2> 1> <3> <4>Scala-documentatie4> 3> <5> <6>Officiële website van Scala.js6> 5> <7> <8>LiveCodes-documentatie8> 7> <9> <10>Startersjabloon laden10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'Scheme draaiend in de browser met biwascheme.',
link: '<1> <2>The Scheme Programming Language2> 1> <3> <4>BiwaScheme officiële website4> 3> <5> <6>BiwaScheme referentie6> 5> <7> <8>Startsjabloon laden8> 7>',
diff --git a/src/livecodes/i18n/locales/nl/translation.lokalise.json b/src/livecodes/i18n/locales/nl/translation.lokalise.json
index 6fd6c46be..92d014187 100644
--- a/src/livecodes/i18n/locales/nl/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/nl/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "Rust (Wasm)-starter"
},
+ "templates.starter.scala": {
+ "translation": "Scala-starter"
+ },
"templates.starter.scheme": {
"translation": "Scheme-starter"
},
diff --git a/src/livecodes/i18n/locales/nl/translation.ts b/src/livecodes/i18n/locales/nl/translation.ts
index 63c5ec581..b74213f83 100644
--- a/src/livecodes/i18n/locales/nl/translation.ts
+++ b/src/livecodes/i18n/locales/nl/translation.ts
@@ -1060,6 +1060,7 @@ const translation: I18nTranslation = {
ruby: 'Ruby-starter',
'ruby-wasm': 'Ruby (Wasm)-starter',
'rust-wasm': 'Rust (Wasm)-starter',
+ scala: 'Scala-starter',
scheme: 'Scheme-starter',
shadcnui: 'shadcn/ui-starter',
solid: 'Solid-starter',
diff --git a/src/livecodes/i18n/locales/pt/language-info.lokalise.json b/src/livecodes/i18n/locales/pt/language-info.lokalise.json
index 82c09b5f3..9e24a65d8 100644
--- a/src/livecodes/i18n/locales/pt/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/pt/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "O Scala 3 é compilado e vinculado no navegador pelo compilador Scala 3 e pelo vinculador Scala.js, ambos executados no WebAssembly. Nada é enviado a um servidor."
+ },
+ "scalaWasm.link": {
+ "translation": " Site oficial do Scala Documentação do Scala Site oficial do Scala.js Documentação do LiveCodes Carregar modelo inicial "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "Scheme rodando no navegador usando biwascheme."
},
diff --git a/src/livecodes/i18n/locales/pt/language-info.ts b/src/livecodes/i18n/locales/pt/language-info.ts
index 79663cf18..0f6c71dee 100644
--- a/src/livecodes/i18n/locales/pt/language-info.ts
+++ b/src/livecodes/i18n/locales/pt/language-info.ts
@@ -493,6 +493,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Site oficial do Sass2> 1> <3> <4>Documentação do Sass4> 3> <5> <6>Sintaxe indentada do Sass6> 5> <7> <8>Aprenda X em Y minutos, onde X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'O Scala 3 é compilado e vinculado no navegador pelo compilador Scala 3 e pelo vinculador Scala.js, ambos executados no WebAssembly. Nada é enviado a um servidor.',
+ link: '<1> <2>Site oficial do Scala2> 1> <3> <4>Documentação do Scala4> 3> <5> <6>Site oficial do Scala.js6> 5> <7> <8>Documentação do LiveCodes8> 7> <9> <10>Carregar modelo inicial10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'Scheme rodando no navegador usando biwascheme.',
link: '<1> <2>A Linguagem de Programação Scheme2> 1> <3> <4>Site oficial do BiwaScheme4> 3> <5> <6>Referência do BiwaScheme6> 5> <7> <8>Carregar modelo inicial8> 7>',
diff --git a/src/livecodes/i18n/locales/pt/translation.lokalise.json b/src/livecodes/i18n/locales/pt/translation.lokalise.json
index 6fd016435..ec59ffe9a 100644
--- a/src/livecodes/i18n/locales/pt/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/pt/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "Iniciante Rust (Wasm)"
},
+ "templates.starter.scala": {
+ "translation": "Iniciante Scala"
+ },
"templates.starter.scheme": {
"translation": "Iniciante Scheme"
},
diff --git a/src/livecodes/i18n/locales/pt/translation.ts b/src/livecodes/i18n/locales/pt/translation.ts
index 4af81696f..5b73c638f 100644
--- a/src/livecodes/i18n/locales/pt/translation.ts
+++ b/src/livecodes/i18n/locales/pt/translation.ts
@@ -1060,6 +1060,7 @@ const translation: I18nTranslation = {
ruby: 'Iniciante Ruby',
'ruby-wasm': 'Iniciante Ruby (Wasm)',
'rust-wasm': 'Iniciante Rust (Wasm)',
+ scala: 'Iniciante Scala',
scheme: 'Iniciante Scheme',
shadcnui: 'Modelo inicial shadcn/ui',
solid: 'Iniciante Solid',
diff --git a/src/livecodes/i18n/locales/ru/language-info.lokalise.json b/src/livecodes/i18n/locales/ru/language-info.lokalise.json
index 31d7fc0cd..dae9af844 100644
--- a/src/livecodes/i18n/locales/ru/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/ru/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "Scala 3 компилируется и компонуется в браузере компилятором Scala 3 и компоновщиком Scala.js, оба работают на WebAssembly. Ничего не отправляется на сервер."
+ },
+ "scalaWasm.link": {
+ "translation": " Официальный сайт Scala Документация по Scala Официальный сайт Scala.js Документация LiveCodes Загрузить стартовый шаблон "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "Scheme, работающий в браузере с использованием biwascheme."
},
diff --git a/src/livecodes/i18n/locales/ru/language-info.ts b/src/livecodes/i18n/locales/ru/language-info.ts
index 58294d9c8..c2dc74f98 100644
--- a/src/livecodes/i18n/locales/ru/language-info.ts
+++ b/src/livecodes/i18n/locales/ru/language-info.ts
@@ -495,6 +495,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Официальный сайт Sass2> 1> <3> <4>Документация Sass4> 3> <5> <6>Синтаксис Sass (с отступами)6> 5> <7> <8>Изучите X за Y минут, где X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'Scala 3 компилируется и компонуется в браузере компилятором Scala 3 и компоновщиком Scala.js, оба работают на WebAssembly. Ничего не отправляется на сервер.',
+ link: '<1> <2>Официальный сайт Scala2> 1> <3> <4>Документация по Scala4> 3> <5> <6>Официальный сайт Scala.js6> 5> <7> <8>Документация LiveCodes8> 7> <9> <10>Загрузить стартовый шаблон10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'Scheme, работающий в браузере с использованием biwascheme.',
link: '<1> <2>Язык программирования Scheme2> 1> <3> <4>Официальный сайт BiwaScheme4> 3> <5> <6>Справочник BiwaScheme6> 5> <7> <8>Загрузить стартовый шаблон8> 7>',
diff --git a/src/livecodes/i18n/locales/ru/translation.lokalise.json b/src/livecodes/i18n/locales/ru/translation.lokalise.json
index b10f0e896..b2269e3cf 100644
--- a/src/livecodes/i18n/locales/ru/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/ru/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "Стартер Rust (Wasm)"
},
+ "templates.starter.scala": {
+ "translation": "Стартер Scala"
+ },
"templates.starter.scheme": {
"translation": "Стартер Scheme"
},
diff --git a/src/livecodes/i18n/locales/ru/translation.ts b/src/livecodes/i18n/locales/ru/translation.ts
index d9e2fa957..b5db663b5 100644
--- a/src/livecodes/i18n/locales/ru/translation.ts
+++ b/src/livecodes/i18n/locales/ru/translation.ts
@@ -1059,6 +1059,7 @@ const translation: I18nTranslation = {
ruby: 'Стартер Ruby',
'ruby-wasm': 'Стартер Ruby (Wasm)',
'rust-wasm': 'Стартер Rust (Wasm)',
+ scala: 'Стартер Scala',
scheme: 'Стартер Scheme',
shadcnui: 'Стартер shadcn/ui',
solid: 'Стартер Solid',
diff --git a/src/livecodes/i18n/locales/tr/language-info.lokalise.json b/src/livecodes/i18n/locales/tr/language-info.lokalise.json
index 0b65ea0c4..79c4b1c82 100644
--- a/src/livecodes/i18n/locales/tr/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/tr/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "Scala 3, tarayıcıda Scala 3 derleyicisi ve Scala.js bağlayıcısı tarafından derlenip bağlanır; her ikisi de WebAssembly üzerinde çalışır. Sunucuya hiçbir şey gönderilmez."
+ },
+ "scalaWasm.link": {
+ "translation": " Scala resmi web sitesi Scala belgeleri Scala.js resmi web sitesi LiveCodes Belgeleri Başlangıç şablonunu yükle "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "biwascheme kullanılarak tarayıcıda çalışan Scheme."
},
diff --git a/src/livecodes/i18n/locales/tr/language-info.ts b/src/livecodes/i18n/locales/tr/language-info.ts
index f30c7e796..7f9d05116 100644
--- a/src/livecodes/i18n/locales/tr/language-info.ts
+++ b/src/livecodes/i18n/locales/tr/language-info.ts
@@ -494,6 +494,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Sass resmi web sitesi2> 1> <3> <4>Sass dokümantasyonu4> 3> <5> <6>Sass (girintili) sözdizimi6> 5> <7> <8>Y Dakikada X Öğrenin, X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'Scala 3, tarayıcıda Scala 3 derleyicisi ve Scala.js bağlayıcısı tarafından derlenip bağlanır; her ikisi de WebAssembly üzerinde çalışır. Sunucuya hiçbir şey gönderilmez.',
+ link: '<1> <2>Scala resmi web sitesi2> 1> <3> <4>Scala belgeleri4> 3> <5> <6>Scala.js resmi web sitesi6> 5> <7> <8>LiveCodes Belgeleri8> 7> <9> <10>Başlangıç şablonunu yükle10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'biwascheme kullanılarak tarayıcıda çalışan Scheme.',
link: '<1> <2>Scheme Programlama Dili2> 1> <3> <4>BiwaScheme resmi web sitesi4> 3> <5> <6>BiwaScheme referansı6> 5> <7> <8>Başlangıç şablonunu yükle8> 7>',
diff --git a/src/livecodes/i18n/locales/tr/translation.lokalise.json b/src/livecodes/i18n/locales/tr/translation.lokalise.json
index 936ddad18..f7879cba0 100644
--- a/src/livecodes/i18n/locales/tr/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/tr/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "Rust (Wasm) Başlangıç"
},
+ "templates.starter.scala": {
+ "translation": "Scala Başlangıç"
+ },
"templates.starter.scheme": {
"translation": "Scheme Başlangıç"
},
diff --git a/src/livecodes/i18n/locales/tr/translation.ts b/src/livecodes/i18n/locales/tr/translation.ts
index 59f318593..78d45c04b 100644
--- a/src/livecodes/i18n/locales/tr/translation.ts
+++ b/src/livecodes/i18n/locales/tr/translation.ts
@@ -1060,6 +1060,7 @@ const translation: I18nTranslation = {
ruby: 'Ruby Başlangıç',
'ruby-wasm': 'Ruby (Wasm) Başlangıç',
'rust-wasm': 'Rust (Wasm) Başlangıç',
+ scala: 'Scala Başlangıç',
scheme: 'Scheme Başlangıç',
shadcnui: 'shadcn/ui Başlangıç',
solid: 'Solid Başlangıç',
diff --git a/src/livecodes/i18n/locales/ur/language-info.lokalise.json b/src/livecodes/i18n/locales/ur/language-info.lokalise.json
index 8486c0063..03b8c931a 100644
--- a/src/livecodes/i18n/locales/ur/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/ur/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "ساس"
},
+ "scalaWasm.desc": {
+ "translation": "Scala 3 کو براؤزر میں Scala 3 کمپائلر اور Scala.js لنکر کے ذریعے مرتب اور لنک کیا جاتا ہے، دونوں WebAssembly پر چلتے ہیں۔ سرور پر کچھ نہیں بھیجا جاتا۔"
+ },
+ "scalaWasm.link": {
+ "translation": " Scala آفیشل ویب سائٹ Scala دستاویزات Scala.js آفیشل ویب سائٹ LiveCodes دستاویزی لوڈ اسٹارٹر ٹیمپلیٹ "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "بیوا اسکیم کا استعمال کرتے ہوئے براؤزر میں چلنے والا اسکیم۔"
},
diff --git a/src/livecodes/i18n/locales/ur/language-info.ts b/src/livecodes/i18n/locales/ur/language-info.ts
index f962ae66d..5037e9f81 100644
--- a/src/livecodes/i18n/locales/ur/language-info.ts
+++ b/src/livecodes/i18n/locales/ur/language-info.ts
@@ -496,6 +496,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>ساس کی سرکاری ویب سائٹ2> 1> <3> <4>ساس دستاویزات4> 3> <5> <6>ساس (انڈینٹڈ) نحو6> 5> <7> <8>X کو Y منٹ میں سیکھیں، جہاں X=ساس8> 7>',
name: 'ساس',
},
+ scalaWasm: {
+ desc: 'Scala 3 کو براؤزر میں Scala 3 کمپائلر اور Scala.js لنکر کے ذریعے مرتب اور لنک کیا جاتا ہے، دونوں WebAssembly پر چلتے ہیں۔ سرور پر کچھ نہیں بھیجا جاتا۔',
+ link: '<1> <2>Scala آفیشل ویب سائٹ2> 1> <3> <4>Scala دستاویزات4> 3> <5> <6>Scala.js آفیشل ویب سائٹ6> 5> <7> <8>LiveCodes دستاویزی8> 7> <9> <10>لوڈ اسٹارٹر ٹیمپلیٹ10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: 'بیوا اسکیم کا استعمال کرتے ہوئے براؤزر میں چلنے والا اسکیم۔',
link: '<1> <2>اسکیم پروگرامنگ زبان2> 1> <3> <4>بیوا اسکیم کی سرکاری ویب سائٹ4> 3> <5> <6>بیوا اسکیم حوالہ6> 5> <7> <8>ابتدائی سانچہ لوڈ کریں8> 7>',
diff --git a/src/livecodes/i18n/locales/ur/translation.lokalise.json b/src/livecodes/i18n/locales/ur/translation.lokalise.json
index cb54f11c3..c211847c4 100644
--- a/src/livecodes/i18n/locales/ur/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/ur/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "راست (واسم) شروعاتی"
},
+ "templates.starter.scala": {
+ "translation": "اسکالا شروعاتی"
+ },
"templates.starter.scheme": {
"translation": "اسکیم شروعاتی"
},
diff --git a/src/livecodes/i18n/locales/ur/translation.ts b/src/livecodes/i18n/locales/ur/translation.ts
index 024962bf3..c100013f9 100644
--- a/src/livecodes/i18n/locales/ur/translation.ts
+++ b/src/livecodes/i18n/locales/ur/translation.ts
@@ -1059,6 +1059,7 @@ const translation: I18nTranslation = {
ruby: 'روبی شروعاتی',
'ruby-wasm': 'روبی (واسم) شروعاتی',
'rust-wasm': 'راست (واسم) شروعاتی',
+ scala: 'اسکالا شروعاتی',
scheme: 'اسکیم شروعاتی',
shadcnui: 'shadcn/ui شروعاتی',
solid: 'سالڈ شروعاتی',
diff --git a/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json b/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json
index 8f6e408c5..ffb1e76ff 100644
--- a/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json
+++ b/src/livecodes/i18n/locales/zh-CN/language-info.lokalise.json
@@ -873,6 +873,15 @@
"sass.name": {
"translation": "Sass"
},
+ "scalaWasm.desc": {
+ "translation": "Scala 3 由 Scala 3 编译器和 Scala.js 链接器在浏览器中编译和链接,两者均运行在 WebAssembly 上。不会向服务器发送任何内容。"
+ },
+ "scalaWasm.link": {
+ "translation": " Scala 官方网站 Scala 文档 Scala.js 官方网站 LiveCodes 文档 加载入门模板 "
+ },
+ "scalaWasm.name": {
+ "translation": "Scala (Wasm)"
+ },
"scheme.desc": {
"translation": "使用 biwascheme 在浏览器中运行的 Scheme。"
},
diff --git a/src/livecodes/i18n/locales/zh-CN/language-info.ts b/src/livecodes/i18n/locales/zh-CN/language-info.ts
index 674df79f2..6b88d8b46 100644
--- a/src/livecodes/i18n/locales/zh-CN/language-info.ts
+++ b/src/livecodes/i18n/locales/zh-CN/language-info.ts
@@ -485,6 +485,11 @@ const languageInfo: I18nLangInfoTranslation = {
link: '<1> <2>Sass 官方网站2> 1> <3> <4>Sass 文档4> 3> <5> <6>Sass(缩进)语法6> 5> <7> <8>在 Y 分钟内学习 X,其中 X=sass8> 7>',
name: 'Sass',
},
+ scalaWasm: {
+ desc: 'Scala 3 由 Scala 3 编译器和 Scala.js 链接器在浏览器中编译和链接,两者均运行在 WebAssembly 上。不会向服务器发送任何内容。',
+ link: '<1> <2>Scala 官方网站2> 1> <3> <4>Scala 文档4> 3> <5> <6>Scala.js 官方网站6> 5> <7> <8>LiveCodes 文档8> 7> <9> <10>加载入门模板10> 9>',
+ name: 'Scala (Wasm)',
+ },
scheme: {
desc: '使用 biwascheme 在浏览器中运行的 Scheme。',
link: '<1> <2>Scheme 编程语言2> 1> <3> <4>BiwaScheme 官方网站4> 3> <5> <6>BiwaScheme 参考6> 5> <7> <8>加载启动模板8> 7>',
diff --git a/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json b/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json
index 9ded55011..7b8c965e1 100644
--- a/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json
+++ b/src/livecodes/i18n/locales/zh-CN/translation.lokalise.json
@@ -2160,6 +2160,9 @@
"templates.starter.rust-wasm": {
"translation": "Rust(Wasm)启动模板"
},
+ "templates.starter.scala": {
+ "translation": "Scala 启动模板"
+ },
"templates.starter.scheme": {
"translation": "Scheme 启动模板"
},
diff --git a/src/livecodes/i18n/locales/zh-CN/translation.ts b/src/livecodes/i18n/locales/zh-CN/translation.ts
index 1d141f848..d63f874ed 100644
--- a/src/livecodes/i18n/locales/zh-CN/translation.ts
+++ b/src/livecodes/i18n/locales/zh-CN/translation.ts
@@ -1057,6 +1057,7 @@ const translation: I18nTranslation = {
ruby: 'Ruby 启动模板',
'ruby-wasm': 'Ruby(Wasm)启动模板',
'rust-wasm': 'Rust(Wasm)启动模板',
+ scala: 'Scala 启动模板',
scheme: 'Scheme 启动模板',
shadcnui: 'shadcn/ui 启动模板',
solid: 'Solid 启动模板',
diff --git a/src/livecodes/languages/languages.ts b/src/livecodes/languages/languages.ts
index d1fa634a7..09cf7fdcf 100644
--- a/src/livecodes/languages/languages.ts
+++ b/src/livecodes/languages/languages.ts
@@ -87,6 +87,7 @@ import { riot } from './riot';
import { ruby } from './ruby';
import { rubyWasm } from './ruby-wasm';
import { rustWasm } from './rust-wasm';
+import { scalaWasm } from './scala-wasm';
import { scheme } from './scheme';
import { sass, scss } from './scss';
import { solid, solidTsx } from './solid';
@@ -194,6 +195,7 @@ export const languages: LanguageSpecs[] = [
flutter,
cobolWasm,
rustWasm,
+ scalaWasm,
swiftWasm,
zigWasm,
javaWasm,
diff --git a/src/livecodes/languages/scala-wasm/__tests__/lang-scala-wasm.spec.ts b/src/livecodes/languages/scala-wasm/__tests__/lang-scala-wasm.spec.ts
new file mode 100644
index 000000000..493f3ebbb
--- /dev/null
+++ b/src/livecodes/languages/scala-wasm/__tests__/lang-scala-wasm.spec.ts
@@ -0,0 +1,51 @@
+import { scalaWasm } from '../lang-scala-wasm';
+
+describe('Scala (Wasm) language spec', () => {
+ test('is registered as scala-wasm, with the wasm runner script', () => {
+ expect(scalaWasm.name).toBe('scala-wasm');
+ expect(scalaWasm.title).toBe('Scala (Wasm)');
+ expect(scalaWasm.compiler).toMatchObject({
+ scriptType: 'text/scala-wasm',
+ compiledCodeLanguage: 'scala',
+ liveReload: true,
+ });
+ });
+
+ test('accepts the scala extensions', () => {
+ expect(scalaWasm.extensions).toEqual(
+ expect.arrayContaining(['scala', 'scala-wasm', 'wasm.scala']),
+ );
+ });
+
+ test('passes the code through unchanged', async () => {
+ const compiler = scalaWasm.compiler as unknown as {
+ factory: () => (code: string) => Promise;
+ };
+ const compile = compiler.factory();
+ await expect(compile('@main def hello() = println("hi")')).resolves.toBe(
+ '@main def hello() = println("hi")',
+ );
+ });
+
+ test('loads the runtime and the build script', () => {
+ const compiler = scalaWasm.compiler as unknown as {
+ scripts: (options: { baseUrl: string }) => string[];
+ };
+ const scripts = compiler.scripts({ baseUrl: '/' });
+ expect(scripts).toHaveLength(2);
+ expect(scripts[1]).toBe('/{{hash:lang-scala-wasm-script.js}}');
+ });
+
+ test('warns that the first run is a large download', () => {
+ expect(scalaWasm.largeDownload).toBe(true);
+ });
+
+ test('highlights with the Scala grammars', () => {
+ expect(scalaWasm.editorLanguage).toBe('scala');
+ expect(scalaWasm.editorSupport?.monaco).toMatchObject({ language: 'scala' });
+ expect(scalaWasm.editorSupport?.codemirror).toMatchObject({
+ languageSupport: expect.any(Function),
+ });
+ expect(scalaWasm.editorSupport?.codejar).toEqual({ language: 'scala' });
+ });
+});
diff --git a/src/livecodes/languages/scala-wasm/index.ts b/src/livecodes/languages/scala-wasm/index.ts
new file mode 100644
index 000000000..78db7c999
--- /dev/null
+++ b/src/livecodes/languages/scala-wasm/index.ts
@@ -0,0 +1 @@
+export * from './lang-scala-wasm';
diff --git a/src/livecodes/languages/scala-wasm/lang-scala-wasm-script.ts b/src/livecodes/languages/scala-wasm/lang-scala-wasm-script.ts
new file mode 100644
index 000000000..0a8d81881
--- /dev/null
+++ b/src/livecodes/languages/scala-wasm/lang-scala-wasm-script.ts
@@ -0,0 +1,167 @@
+// @ts-nocheck
+/* eslint-disable no-console */
+
+import { scalaWasmBaseUrl } from '../../vendors';
+
+const scalaWasmDistUrl = scalaWasmBaseUrl + 'dist/';
+
+livecodes.scala = livecodes.scala || {};
+livecodes.scala.ready = false;
+livecodes.scala.failed = false;
+
+// The runner is a separate
+`.trimStart(),
+ },
+ style: {
+ language: 'css',
+ content: `
+.container,
+.container button {
+ text-align: center;
+ font: 1em sans-serif;
+}
+.logo {
+ width: 150px;
+}
+`.trimStart(),
+ },
+ script: {
+ language: 'scala-wasm',
+ content: `
+@main def counter(): Unit =
+ val title = "Scala"
+ println(title)
+ val line = scala.io.StdIn.readLine()
+ val count = line.trim.toInt + 1
+ println(count)
+`.trimStart(),
+ },
+};
diff --git a/src/livecodes/vendors.ts b/src/livecodes/vendors.ts
index 570aa1616..c9eb15877 100644
--- a/src/livecodes/vendors.ts
+++ b/src/livecodes/vendors.ts
@@ -502,6 +502,8 @@ export const rustWasmUrl = /* @__PURE__ */ getUrl(
);
export const wasmRustcBaseUrl = /* @__PURE__ */ getUrl('@live-codes/wasm-rustc@0.2.0/');
+export const scalaWasmBaseUrl = /* @__PURE__ */ getUrl('@live-codes/scala-wasm@0.1.2/');
+
export const snackbarUrl = /* @__PURE__ */ getUrl('@snackbar/core@1.7.0/dist/snackbar.css');
export const swiftWasmBaseUrl = /* @__PURE__ */ getUrl('@live-codes/swift-wasm@0.1.0/');
diff --git a/src/sdk/models.ts b/src/sdk/models.ts
index c41b9caef..3f581849f 100644
--- a/src/sdk/models.ts
+++ b/src/sdk/models.ts
@@ -258,6 +258,9 @@ export type Language =
| 'rust-wasm'
| 'rs-wasm'
| 'wasm.rs'
+ | 'scala'
+ | 'scala-wasm'
+ | 'wasm.scala'
| 'pascal'
| 'pas'
| 'pp'
@@ -546,6 +549,7 @@ export type TemplateName =
| 'fsharp-wasm'
| 'fanak'
| 'rust-wasm'
+ | 'scala'
| 'swift-wasm'
| 'ada-wasm'
| 'zig-wasm'
@@ -945,6 +949,7 @@ export type CustomSettings = Partial<
| 'text/python'
| 'text/r'
| 'text/ruby-wasm'
+ | 'text/scala-wasm'
| 'text/x-uniter-php'
| 'text/php-wasm'
| 'text/c-wasm'
diff --git a/storybook/_stories/EmbedOptions/template.ts b/storybook/_stories/EmbedOptions/template.ts
index 59fbed84e..bc044c84d 100644
--- a/storybook/_stories/EmbedOptions/template.ts
+++ b/storybook/_stories/EmbedOptions/template.ts
@@ -62,6 +62,7 @@ const storyDef: StoryDef = {
FortranWasm: { props: { template: 'fortran-wasm' }, storyName: 'Fortran (Wasm)' },
VWasm: { props: { template: 'v-wasm' } },
RustWasm: { props: { template: 'rust-wasm' } },
+ Scala: { props: { template: 'scala' } },
SwiftWasm: { props: { template: 'swift-wasm' } },
ZigWasm: { props: { template: 'zig-wasm' } },
Java: { props: { template: 'java' } },
diff --git a/storybook/preact/stories/EmbedOptions/template.stories.ts b/storybook/preact/stories/EmbedOptions/template.stories.ts
index 138f6369a..994740ac4 100644
--- a/storybook/preact/stories/EmbedOptions/template.stories.ts
+++ b/storybook/preact/stories/EmbedOptions/template.stories.ts
@@ -52,6 +52,7 @@ export const ReScript = livecodesStory({ template: 'rescript' });
ReScript.storyName = 'ReScript';
export const Reason = livecodesStory({ template: 'reason' });
export const Ocaml = livecodesStory({ template: 'ocaml' });
+export const OcamlJs = livecodesStory({ template: 'ocaml-js' });
export const Nim = livecodesStory({ template: 'nim' });
export const NimWasm = livecodesStory({ template: 'nim-wasm' });
export const JanetWasm = livecodesStory({ template: 'janet-wasm' });
@@ -79,6 +80,7 @@ export const FortranWasm = livecodesStory({ template: 'fortran-wasm' });
FortranWasm.storyName = 'Fortran (Wasm)';
export const VWasm = livecodesStory({ template: 'v-wasm' });
export const RustWasm = livecodesStory({ template: 'rust-wasm' });
+export const Scala = livecodesStory({ template: 'scala' });
export const SwiftWasm = livecodesStory({ template: 'swift-wasm' });
export const ZigWasm = livecodesStory({ template: 'zig-wasm' });
export const Java = livecodesStory({ template: 'java' });
diff --git a/storybook/react/stories/EmbedOptions/template.stories.ts b/storybook/react/stories/EmbedOptions/template.stories.ts
index 138f6369a..994740ac4 100644
--- a/storybook/react/stories/EmbedOptions/template.stories.ts
+++ b/storybook/react/stories/EmbedOptions/template.stories.ts
@@ -52,6 +52,7 @@ export const ReScript = livecodesStory({ template: 'rescript' });
ReScript.storyName = 'ReScript';
export const Reason = livecodesStory({ template: 'reason' });
export const Ocaml = livecodesStory({ template: 'ocaml' });
+export const OcamlJs = livecodesStory({ template: 'ocaml-js' });
export const Nim = livecodesStory({ template: 'nim' });
export const NimWasm = livecodesStory({ template: 'nim-wasm' });
export const JanetWasm = livecodesStory({ template: 'janet-wasm' });
@@ -79,6 +80,7 @@ export const FortranWasm = livecodesStory({ template: 'fortran-wasm' });
FortranWasm.storyName = 'Fortran (Wasm)';
export const VWasm = livecodesStory({ template: 'v-wasm' });
export const RustWasm = livecodesStory({ template: 'rust-wasm' });
+export const Scala = livecodesStory({ template: 'scala' });
export const SwiftWasm = livecodesStory({ template: 'swift-wasm' });
export const ZigWasm = livecodesStory({ template: 'zig-wasm' });
export const Java = livecodesStory({ template: 'java' });
diff --git a/storybook/solid/stories/EmbedOptions/template.stories.ts b/storybook/solid/stories/EmbedOptions/template.stories.ts
index 138f6369a..994740ac4 100644
--- a/storybook/solid/stories/EmbedOptions/template.stories.ts
+++ b/storybook/solid/stories/EmbedOptions/template.stories.ts
@@ -52,6 +52,7 @@ export const ReScript = livecodesStory({ template: 'rescript' });
ReScript.storyName = 'ReScript';
export const Reason = livecodesStory({ template: 'reason' });
export const Ocaml = livecodesStory({ template: 'ocaml' });
+export const OcamlJs = livecodesStory({ template: 'ocaml-js' });
export const Nim = livecodesStory({ template: 'nim' });
export const NimWasm = livecodesStory({ template: 'nim-wasm' });
export const JanetWasm = livecodesStory({ template: 'janet-wasm' });
@@ -79,6 +80,7 @@ export const FortranWasm = livecodesStory({ template: 'fortran-wasm' });
FortranWasm.storyName = 'Fortran (Wasm)';
export const VWasm = livecodesStory({ template: 'v-wasm' });
export const RustWasm = livecodesStory({ template: 'rust-wasm' });
+export const Scala = livecodesStory({ template: 'scala' });
export const SwiftWasm = livecodesStory({ template: 'swift-wasm' });
export const ZigWasm = livecodesStory({ template: 'zig-wasm' });
export const Java = livecodesStory({ template: 'java' });
diff --git a/storybook/svelte/stories/EmbedOptions/template.stories.ts b/storybook/svelte/stories/EmbedOptions/template.stories.ts
index 138f6369a..994740ac4 100644
--- a/storybook/svelte/stories/EmbedOptions/template.stories.ts
+++ b/storybook/svelte/stories/EmbedOptions/template.stories.ts
@@ -52,6 +52,7 @@ export const ReScript = livecodesStory({ template: 'rescript' });
ReScript.storyName = 'ReScript';
export const Reason = livecodesStory({ template: 'reason' });
export const Ocaml = livecodesStory({ template: 'ocaml' });
+export const OcamlJs = livecodesStory({ template: 'ocaml-js' });
export const Nim = livecodesStory({ template: 'nim' });
export const NimWasm = livecodesStory({ template: 'nim-wasm' });
export const JanetWasm = livecodesStory({ template: 'janet-wasm' });
@@ -79,6 +80,7 @@ export const FortranWasm = livecodesStory({ template: 'fortran-wasm' });
FortranWasm.storyName = 'Fortran (Wasm)';
export const VWasm = livecodesStory({ template: 'v-wasm' });
export const RustWasm = livecodesStory({ template: 'rust-wasm' });
+export const Scala = livecodesStory({ template: 'scala' });
export const SwiftWasm = livecodesStory({ template: 'swift-wasm' });
export const ZigWasm = livecodesStory({ template: 'zig-wasm' });
export const Java = livecodesStory({ template: 'java' });
diff --git a/storybook/vue/stories/EmbedOptions/template.stories.ts b/storybook/vue/stories/EmbedOptions/template.stories.ts
index 138f6369a..994740ac4 100644
--- a/storybook/vue/stories/EmbedOptions/template.stories.ts
+++ b/storybook/vue/stories/EmbedOptions/template.stories.ts
@@ -52,6 +52,7 @@ export const ReScript = livecodesStory({ template: 'rescript' });
ReScript.storyName = 'ReScript';
export const Reason = livecodesStory({ template: 'reason' });
export const Ocaml = livecodesStory({ template: 'ocaml' });
+export const OcamlJs = livecodesStory({ template: 'ocaml-js' });
export const Nim = livecodesStory({ template: 'nim' });
export const NimWasm = livecodesStory({ template: 'nim-wasm' });
export const JanetWasm = livecodesStory({ template: 'janet-wasm' });
@@ -79,6 +80,7 @@ export const FortranWasm = livecodesStory({ template: 'fortran-wasm' });
FortranWasm.storyName = 'Fortran (Wasm)';
export const VWasm = livecodesStory({ template: 'v-wasm' });
export const RustWasm = livecodesStory({ template: 'rust-wasm' });
+export const Scala = livecodesStory({ template: 'scala' });
export const SwiftWasm = livecodesStory({ template: 'swift-wasm' });
export const ZigWasm = livecodesStory({ template: 'zig-wasm' });
export const Java = livecodesStory({ template: 'java' });
diff --git a/storybook/web-components/stories/EmbedOptions/template.stories.ts b/storybook/web-components/stories/EmbedOptions/template.stories.ts
index 138f6369a..994740ac4 100644
--- a/storybook/web-components/stories/EmbedOptions/template.stories.ts
+++ b/storybook/web-components/stories/EmbedOptions/template.stories.ts
@@ -52,6 +52,7 @@ export const ReScript = livecodesStory({ template: 'rescript' });
ReScript.storyName = 'ReScript';
export const Reason = livecodesStory({ template: 'reason' });
export const Ocaml = livecodesStory({ template: 'ocaml' });
+export const OcamlJs = livecodesStory({ template: 'ocaml-js' });
export const Nim = livecodesStory({ template: 'nim' });
export const NimWasm = livecodesStory({ template: 'nim-wasm' });
export const JanetWasm = livecodesStory({ template: 'janet-wasm' });
@@ -79,6 +80,7 @@ export const FortranWasm = livecodesStory({ template: 'fortran-wasm' });
FortranWasm.storyName = 'Fortran (Wasm)';
export const VWasm = livecodesStory({ template: 'v-wasm' });
export const RustWasm = livecodesStory({ template: 'rust-wasm' });
+export const Scala = livecodesStory({ template: 'scala' });
export const SwiftWasm = livecodesStory({ template: 'swift-wasm' });
export const ZigWasm = livecodesStory({ template: 'zig-wasm' });
export const Java = livecodesStory({ template: 'java' });
diff --git a/vendor-licenses.md b/vendor-licenses.md
index 1d2751a6d..9ebb167fe 100644
--- a/vendor-licenses.md
+++ b/vendor-licenses.md
@@ -284,6 +284,8 @@ ruby.wasm: [MIT License](https://github.com/ruby/ruby.wasm/blob/097b7ca8d2ed2a98
Rust (compiler and standard library): [MIT License](https://github.com/rust-lang/rust/blob/018018e881e2db0956f229dbb543e21f058d1ce7/LICENSE-MIT) OR [Apache License 2.0](https://github.com/rust-lang/rust/blob/018018e881e2db0956f229dbb543e21f058d1ce7/LICENSE-APACHE)
+Scala 3 compiler and Scala.js (provided by [scala-toolchain-wasm](https://github.com/tothambrus11/scala-toolchain-wasm)): [Apache License 2.0](https://github.com/scala/scala3/blob/main/LICENSE) and [Apache License 2.0](https://github.com/scala-js/scala-js/blob/main/LICENSE). The bundled Java class library (`rt.jar`) is [GPL-2.0 with the Classpath Exception](https://openjdk.org/legal/gplv2+ce.html).
+
Sass.js: [MIT License](https://github.com/medialize/sass.js/blob/71d9bed2cad10969efda9905aa1bddacc480f372/LICENSE)
SnackBar: [MIT License](https://github.com/egoist/snackbar/blob/4bc2fb7afd32d53a39661418fa5189dbb6e4aa86/LICENSE)