+
+ ```js displayName="Create an HTTP Server"
+ // server.mjs
+ import { createServer } from 'node:http';
+
+ const server = createServer((req, res) => {
+ res.writeHead(200, { 'Content-Type': 'text/plain' });
+ res.end('Hello World!\n');
+ });
+
+ // starts a simple http server locally on port 3000
+ server.listen(3000, '127.0.0.1', () => {
+ console.log('Listening on 127.0.0.1:3000');
+ });
+
+ // run with `node server.mjs`
+ ```
+
+ ```js displayName="Write Tests"
+ // tests.mjs
+ import assert from 'node:assert';
+ import test from 'node:test';
+
+ test('that 1 is equal 1', () => {
+ assert.strictEqual(1, 1);
+ });
+
+ test('that throws as 1 is not equal 2', () => {
+ // throws an exception because 1 != 2
+ assert.strictEqual(1, 2);
+ });
+
+ // run with `node tests.mjs`
+ ```
+
+ ```js displayName="Read and Hash a File"
+ // crypto.mjs
+ import { createHash } from 'node:crypto';
+ import { readFile } from 'node:fs/promises';
+
+ const hasher = createHash('sha1');
+
+ hasher.setEncoding('hex');
+ // ensure you have a `package.json` file for this test!
+ hasher.write(await readFile('package.json'));
+ hasher.end();
+
+ const fileHash = hasher.read();
+
+ // run with `node crypto.mjs`
+ ```
+
+ ```js displayName="Streams Pipeline"
+ // streams.mjs
+ import { createReadStream, createWriteStream } from 'node:fs';
+ import { pipeline } from 'node:stream/promises';
+ import { createGzip } from 'node:zlib';
+
+ // ensure you have a `package.json` file for this test!
+ await pipeline(
+ createReadStream('package.json'),
+ createGzip(),
+ createWriteStream('package.json.gz')
+ );
+
+ // run with `node streams.mjs`
+ ```
+
+ ```js displayName="Work with Threads"
+ // threads.mjs
+ import { Worker, isMainThread,
+ workerData, parentPort } from 'node:worker_threads';
+
+ if (isMainThread) {
+ const data = 'some data';
+ const worker = new Worker(import.meta.filename, { workerData: data });
+ worker.on('message', msg => console.log('Reply from Thread:', msg));
+ } else {
+ const source = workerData;
+ parentPort.postMessage(btoa(source.toUpperCase()));
+ }
+
+ // run with `node threads.mjs`
+ ```
+
+
+
+Pelajari lebih lanjut tentang apa yang bisa ditawarkan Node.js melalui [Bahan Pembelajaran](/learn) kami.
+
+
diff --git a/apps/site/snippets/id/download/choco.bash b/apps/site/snippets/id/download/choco.bash
index a70e176a7f361..df2f87f75bc3f 100644
--- a/apps/site/snippets/id/download/choco.bash
+++ b/apps/site/snippets/id/download/choco.bash
@@ -2,7 +2,4 @@
powershell -c "irm https://community.chocolatey.org/install.ps1|iex"
# Unduh dan pasang Node.js:
-choco install nodejs-lts --version="${props.release.major}"
-
-# Verifikasi versi Node.js:
-node -v # Harus mencetak "${props.release.versionWithPrefix}".
+choco install nodejs --version="${props.release.version}"
diff --git a/apps/site/snippets/id/download/corepack.bash b/apps/site/snippets/id/download/corepack.bash
new file mode 100644
index 0000000000000..ae7dca63be089
--- /dev/null
+++ b/apps/site/snippets/id/download/corepack.bash
@@ -0,0 +1,2 @@
+# Pasang Corepack:
+npm install -g corepack
diff --git a/apps/site/snippets/id/download/node.bash b/apps/site/snippets/id/download/node.bash
new file mode 100644
index 0000000000000..4dda034f5c3b8
--- /dev/null
+++ b/apps/site/snippets/id/download/node.bash
@@ -0,0 +1,2 @@
+# Verifikasi versi Node.js:
+node -v # Harusnya mencetak "${props.release.versionWithPrefix}".
diff --git a/apps/site/styles/locales.css b/apps/site/styles/locales.css
index 2ce0fe2afecd9..a78674db1d9b8 100644
--- a/apps/site/styles/locales.css
+++ b/apps/site/styles/locales.css
@@ -4,7 +4,7 @@
* managed to avoid disrupting the layout.
*/
html[lang='ko'] {
- @apply break-words
- break-keep
- leading-7;
+ @apply leading-7
+ break-words
+ break-keep;
}
diff --git a/packages/i18n/package.json b/packages/i18n/package.json
index 2a0192460eaab..a122f8fc98f22 100644
--- a/packages/i18n/package.json
+++ b/packages/i18n/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-core/website-i18n",
- "version": "1.1.8",
+ "version": "1.1.9",
"type": "module",
"exports": {
"./*": [
diff --git a/packages/i18n/src/locales/fr.json b/packages/i18n/src/locales/fr.json
index 869b5e5877d25..da743b98a64a1 100644
--- a/packages/i18n/src/locales/fr.json
+++ b/packages/i18n/src/locales/fr.json
@@ -42,39 +42,30 @@
"theV8JavascriptEngine": "Le moteur JavaScript V8",
"anIntroductionToTheNpmPackageManager": "Une introduction au gestionnaire de paquets npm",
"ecmascript2015Es6AndBeyond": "ECMAScript 2015 (ES6) et au-delà",
- "nodejsTheDifferenceBetweenDevelopmentAndProduction": "Node.js, la différence entre le développement et la production",
- "nodejsWithWebassembly": "Node.js avec WebAssembly",
"debugging": "Débogage de Node.js",
- "profiling": "Profilage des applications Node.js",
"fetch": "Récupérer des données avec Node.js",
"websocket": "Client WebSocket avec Node.js",
+ "nodejsTheDifferenceBetweenDevelopmentAndProduction": "Node.js, la différence entre le développement et la production",
+ "profiling": "Profilage des applications Node.js",
+ "nodejsWithWebassembly": "Node.js avec WebAssembly",
"securityBestPractices": "Meilleures pratiques de sécurité",
"userlandMigrations": "Introduction à Userland Migrations"
}
},
- "typescript": {
+ "commandLine": {
"links": {
- "typescript": "TypeScript",
- "introduction": "Introduction à TypeScript",
- "transpile": "Exécution du code TypeScript à l'aide de la transpilation",
- "run": "Exécuter TypeScript avec un runner",
- "runNatively": "Exécuter TypeScript en mode natif",
- "publishingTSPackage": "Publier un package TypeScript"
+ "commandLine": "Ligne de commande",
+ "runNodejsScriptsFromTheCommandLine": "Exécuter les scripts Node.js en ligne de commande",
+ "howToUseTheNodejsRepl": "Comment utiliser le REPL Node.js",
+ "outputToTheCommandLineUsingNodejs": "Sortie vers la ligne de commande avec Node.js",
+ "acceptInputFromTheCommandLineInNodejs": "Accepter des données provenant de la ligne de commande dans Node.js",
+ "howToReadEnvironmentVariablesFromNodejs": "Comment lire les variables d'environnement de Node.js"
}
},
- "asynchronousWork": {
+ "http": {
"links": {
- "asynchronousWork": "Travail asynchrone",
- "asynchronousFlowControl": "Contrôle de l'exécution asynchrone",
- "discoverPromisesInNodejs": "Découvrir les promesses dans Node.js",
- "overviewOfBlockingVsNonBlocking": "Vue d'ensemble des opérations bloquantes vs non bloquantes",
- "javascriptAsynchronousProgrammingAndCallbacks": "Programmation asynchrone en JavaScript et Callbacks",
- "discoverJavascriptTimers": "Découvrez les minuteurs JavaScript",
- "eventLoopTimersAndNexttick": "La boucle d'évènement Node.js",
- "theNodejsEventEmitter": "L'émetteur d'événement Node.js",
- "understandingProcessnexttick": "Comprendre process.nextTick()",
- "understandingSetimmediate": "Comprendre setImmediate()",
- "dontBlockTheEventLoop": "Ne bloquez pas la boucle d'événement"
+ "http": "HTTP",
+ "anatomyOfAnHttpTransaction": "Anatomie d'une transaction HTTP"
}
},
"manipulatingFiles": {
@@ -82,40 +73,54 @@
"manipulatingFiles": "Manipuler des fichiers",
"nodejsFileStats": "Statistiques des fichiers Node.js",
"nodejsFilePaths": "Chemins d'accès aux fichiers Node.js",
- "workingWithFileDescriptorsInNodejs": "Travailler avec des descripteurs de fichiers dans Node.js",
"readingFilesWithNodejs": "Lire des fichiers avec Node.js",
"writingFilesWithNodejs": "Écrire des fichiers avec Node.js",
+ "workingWithFileDescriptorsInNodejs": "Travailler avec des descripteurs de fichiers dans Node.js",
"workingWithFoldersInNodejs": "Travailler avec des dossiers dans Node.js",
"workingWithDifferentFilesystems": "Comment travailler avec différents systèmes de fichiers"
}
},
- "commandLine": {
+ "asynchronousWork": {
"links": {
- "commandLine": "Ligne de commande",
- "runNodejsScriptsFromTheCommandLine": "Exécuter les scripts Node.js en ligne de commande",
- "howToReadEnvironmentVariablesFromNodejs": "Comment lire les variables d'environnement de Node.js",
- "howToUseTheNodejsRepl": "Comment utiliser le REPL Node.js",
- "outputToTheCommandLineUsingNodejs": "Sortie vers la ligne de commande avec Node.js",
- "acceptInputFromTheCommandLineInNodejs": "Accepter des données provenant de la ligne de commande dans Node.js"
+ "asynchronousWork": "Travail asynchrone",
+ "javascriptAsynchronousProgrammingAndCallbacks": "Programmation asynchrone en JavaScript et Callbacks",
+ "asynchronousFlowControl": "Contrôle de l'exécution asynchrone",
+ "discoverPromisesInNodejs": "Découvrir les promesses dans Node.js",
+ "discoverJavascriptTimers": "Découvrez les minuteurs JavaScript",
+ "overviewOfBlockingVsNonBlocking": "Vue d'ensemble des opérations bloquantes vs non bloquantes",
+ "eventLoopTimersAndNexttick": "La boucle d'évènement Node.js",
+ "theNodejsEventEmitter": "L'émetteur d'événement Node.js",
+ "understandingProcessnexttick": "Comprendre process.nextTick()",
+ "understandingSetimmediate": "Comprendre setImmediate()",
+ "dontBlockTheEventLoop": "Ne bloquez pas la boucle d'événement"
+ }
+ },
+ "typescript": {
+ "links": {
+ "typescript": "TypeScript",
+ "introduction": "Introduction à TypeScript",
+ "runNatively": "Exécuter TypeScript en mode natif",
+ "transpile": "Exécution du code TypeScript à l'aide de la transpilation",
+ "run": "Exécuter TypeScript avec un runner",
+ "publishingTSPackage": "Publier un package TypeScript"
}
},
"modules": {
"links": {
"modules": "Modules",
+ "howToUseStreams": "Comment utiliser les flux",
+ "backpressuringInStreams": "La contre-pression dans Streams",
"publishingAPackage": "Publication d'un paquet",
"publishingNodeApiModules": "Comment publier un paquet Node-API",
- "anatomyOfAnHttpTransaction": "Anatomie d'une transaction HTTP",
- "abiStability": "Stabilité de l'ABI",
- "howToUseStreams": "Comment utiliser les flux",
- "backpressuringInStreams": "La contre-pression dans Streams"
+ "abiStability": "Stabilité de l'ABI"
}
},
"diagnostics": {
"links": {
"diagnostics": "Diagnostique",
"userJourney": "Parcours de l'utilisateur",
- "understandingAndTuningMemory": "Comprendre et optimiser la mémoire",
"memory": "Mémoire",
+ "understandingAndTuningMemory": "Comprendre et optimiser la mémoire",
"liveDebugging": "Débogage en direct",
"poorPerformance": "Mauvaise performance",
"flameGraphs": "Graphiques de flamme"
diff --git a/packages/i18n/src/locales/id.json b/packages/i18n/src/locales/id.json
index 5482a004f42ba..978421f0f3697 100644
--- a/packages/i18n/src/locales/id.json
+++ b/packages/i18n/src/locales/id.json
@@ -3,11 +3,15 @@
"containers": {
"footer": {
"links": {
+ "openJSFoundation": "OpenJS Foundation",
"trademarkPolicy": "Kebijakan Merek Dagang",
"privacyPolicy": "Kebijakan Privasi",
- "versionSupport": "Dukungan Versi",
"codeOfConduct": "Pedoman Perilaku",
"security": "Kebijakan Keamanan"
+ },
+ "releasePills": {
+ "latestLTS": "LTS Terbaru",
+ "latestRelease": "Versi Terbaru"
}
},
"navBar": {
@@ -33,43 +37,35 @@
"links": {
"gettingStarted": "Memulai",
"introductionToNodejs": "Pengantar Node.js",
- "howMuchJavascriptDoYouNeedToKnowToUseNodejs": "Seberapa banyak JavaScript yang anda perlu tahu untuk menggunakan Node.js?",
+ "howMuchJavascriptDoYouNeedToKnowToUseNodejs": "Seberapa banyak JavaScript yang perlu kamu tahu untuk menggunakan Node.js?",
"differencesBetweenNodejsAndTheBrowser": "Perbedaan Node.js dengan Browser",
"theV8JavascriptEngine": "V8 JavaScript Engine",
"anIntroductionToTheNpmPackageManager": "Perkenalan package manager npm",
"ecmascript2015Es6AndBeyond": "ECMAScript 2015 (ES6) dan seterusnya",
- "nodejsTheDifferenceBetweenDevelopmentAndProduction": "Node.js, perbedaan antara development dan production",
- "nodejsWithWebassembly": "Node.js dengan WebAssembly",
"debugging": "Men-debug Node.js",
- "profiling": "Profilisasi Aplikasi Node.js",
"fetch": "Pengambilan data dengan Node.js",
"websocket": "Klien WebSocket dengan Node.js",
- "securityBestPractices": "Praktik Keamanan Terbaik"
+ "nodejsTheDifferenceBetweenDevelopmentAndProduction": "Node.js, perbedaan antara development dan production",
+ "profiling": "Profilisasi Aplikasi Node.js",
+ "nodejsWithWebassembly": "Node.js dengan WebAssembly",
+ "securityBestPractices": "Praktik Keamanan Terbaik",
+ "userlandMigrations": "Pengenalan Migrasi di Userland"
}
},
- "typescript": {
+ "commandLine": {
"links": {
- "typescript": "TypeScript",
- "introduction": "Pengantar TypeScript",
- "transpile": "Menjalankan kode TypeScript menggunakan transpilasi",
- "run": "Menjalankan TypeScript dengan runner",
- "runNatively": "Menjalankan TypeScript Secara Native",
- "publishingTSPackage": "Menerbitkan package TypeScript"
+ "commandLine": "Baris Perintah",
+ "runNodejsScriptsFromTheCommandLine": "Menjalankan skrip Node.js dari baris perintah",
+ "howToUseTheNodejsRepl": "Cara menggunakan Node.js REPL",
+ "outputToTheCommandLineUsingNodejs": "Output ke baris perintah menggunakan Node.js",
+ "acceptInputFromTheCommandLineInNodejs": "Menerima input dari baris perintah di Node.js",
+ "howToReadEnvironmentVariablesFromNodejs": "Membaca environment variable dari Node.js"
}
},
- "asynchronousWork": {
+ "http": {
"links": {
- "asynchronousWork": "Pekerjaan Asinkron",
- "asynchronousFlowControl": "Pengendalian alur asinkron",
- "discoverPromisesInNodejs": "Memahami Promise di Node.js",
- "overviewOfBlockingVsNonBlocking": "Ringkasan Pemblokiran vs Non-Pemblokiran",
- "javascriptAsynchronousProgrammingAndCallbacks": "Pemrograman dan Panggilan Balik Asinkron JavaScript",
- "discoverJavascriptTimers": "Jelajahi Pengatur Waktu JavaScript",
- "eventLoopTimersAndNexttick": "Node.js Event Loop",
- "theNodejsEventEmitter": "Node.js Event Emitter",
- "understandingProcessnexttick": "Memahami process.nextTick()",
- "understandingSetimmediate": "Memahami setImmediate()",
- "dontBlockTheEventLoop": "Jangan blokir Event Loop"
+ "http": "HTTP",
+ "anatomyOfAnHttpTransaction": "Anatomi Transaksi HTTP"
}
},
"manipulatingFiles": {
@@ -77,40 +73,54 @@
"manipulatingFiles": "Manipulasi File",
"nodejsFileStats": "Statistik berkas Node.js",
"nodejsFilePaths": "Path Berkas Node.js",
- "workingWithFileDescriptorsInNodejs": "Bekerja dengan file descriptors di Node.js",
"readingFilesWithNodejs": "Membaca file dengan Node.js",
"writingFilesWithNodejs": "Menulis file dengan Node.js",
+ "workingWithFileDescriptorsInNodejs": "Bekerja dengan file descriptors di Node.js",
"workingWithFoldersInNodejs": "Bekerja dengan folder di Node.js",
"workingWithDifferentFilesystems": "Bekerja dengan Sistem file yang berbeda"
}
},
- "commandLine": {
+ "asynchronousWork": {
"links": {
- "commandLine": "Baris Perintah",
- "runNodejsScriptsFromTheCommandLine": "Menjalankan skrip Node.js dari baris perintah",
- "howToReadEnvironmentVariablesFromNodejs": "Membaca environment variable dari Node.js",
- "howToUseTheNodejsRepl": "Cara menggunakan Node.js REPL",
- "outputToTheCommandLineUsingNodejs": "Output ke baris perintah menggunakan Node.js",
- "acceptInputFromTheCommandLineInNodejs": "Menerima input dari baris perintah di Node.js"
+ "asynchronousWork": "Pekerjaan Asinkron",
+ "javascriptAsynchronousProgrammingAndCallbacks": "Pemrograman dan Panggilan Balik Asinkron JavaScript",
+ "asynchronousFlowControl": "Pengendalian alur asinkron",
+ "discoverPromisesInNodejs": "Memahami Promise di Node.js",
+ "discoverJavascriptTimers": "Jelajahi Pengatur Waktu JavaScript",
+ "overviewOfBlockingVsNonBlocking": "Ringkasan Pemblokiran vs Non-Pemblokiran",
+ "eventLoopTimersAndNexttick": "Node.js Event Loop",
+ "theNodejsEventEmitter": "Node.js Event Emitter",
+ "understandingProcessnexttick": "Memahami process.nextTick()",
+ "understandingSetimmediate": "Memahami setImmediate()",
+ "dontBlockTheEventLoop": "Jangan blokir Event Loop"
+ }
+ },
+ "typescript": {
+ "links": {
+ "typescript": "TypeScript",
+ "introduction": "Pengantar TypeScript",
+ "runNatively": "Menjalankan TypeScript Secara Native",
+ "transpile": "Menjalankan kode TypeScript menggunakan transpilasi",
+ "run": "Menjalankan TypeScript dengan runner",
+ "publishingTSPackage": "Menerbitkan package TypeScript"
}
},
"modules": {
"links": {
"modules": "Module",
+ "howToUseStreams": "Cara menggunakan stream",
+ "backpressuringInStreams": "Backpressuring dalam aliran (streams)",
"publishingAPackage": "Menerbitkan Paket",
"publishingNodeApiModules": "Cara mempublikasikan paket Node-API",
- "anatomyOfAnHttpTransaction": "Anatomi Transaksi HTTP",
- "abiStability": "Stabilitas ABI",
- "howToUseStreams": "Cara menggunakan stream",
- "backpressuringInStreams": "Backpressuring dalam aliran (streams)"
+ "abiStability": "Stabilitas ABI"
}
},
"diagnostics": {
"links": {
"diagnostics": "Diagnostik",
"userJourney": "Jurnal Pengguna",
- "understandingAndTuningMemory": "Pemahaman dan Penyetelan Memori",
"memory": "Memori",
+ "understandingAndTuningMemory": "Pemahaman dan Penyetelan Memori",
"liveDebugging": "Pemecahan Masalah Langsung",
"poorPerformance": "Performa Buruk",
"flameGraphs": "Flame Graph"
@@ -133,7 +143,9 @@
"branding": "Pencitraan Node.js",
"governance": "Tata Kelola Proyek",
"releases": "Rilisan Node.js",
- "security": "Pelaporan Keamanan"
+ "security": "Pelaporan Keamanan",
+ "partners": "Mitra & Pendukung",
+ "eol": "Akhir Masa Dukungan (EOL)"
}
},
"getInvolved": {
@@ -156,17 +168,60 @@
"status": "Status",
"details": "Rincian"
},
+ "downloadsTable": {
+ "fileName": "Nama Berkas",
+ "operatingSystem": "OS",
+ "architecture": "Arsitektur"
+ },
"releaseModal": {
- "title": "Node.js {version} ({codename})",
- "titleWithoutCodename": "Node.js {version}",
+ "title": "Node.js v{version} ({codename})",
+ "titleWithoutCodename": "Node.js v{version}",
"overview": "Ringkasan",
"minorVersions": "Versi minor",
"releaseAnnouncement": "Pengumuman Perilisan",
- "unsupportedVersionWarning": "Versi ini sudah tidak dalam tahap pemeliharaan. Harap gunakan versi yang saat ini didukung."
+ "unsupportedVersionWarning": "Versi ini sudah tidak dalam tahap pemeliharaan. Harap gunakan versi yang didukung.