diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 2e8ac23f5b9dc..dffd5748c8015 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -33,7 +33,6 @@ apps/site/redirects.json @nodejs/web-infra
# Critical Documents
LICENSE @nodejs/tsc
-GOVERNANCE.md @nodejs/tsc
CONTRIBUTING.md @nodejs/nodejs-website @nodejs/web-infra
docs @nodejs/nodejs-website @nodejs/web-infra
SECURITY.md @nodejs/security-wg
diff --git a/GOVERNANCE.md b/GOVERNANCE.md
deleted file mode 100644
index 555217dc82a23..0000000000000
--- a/GOVERNANCE.md
+++ /dev/null
@@ -1,90 +0,0 @@
-# Node.js Web Team Governance
-
-The Node.js Web Team (@nodejs/web) is a team in the Node.js Project that is composed by a set of subteams. Each containing specific responsibilities and goals.
-
-### TSC Oversight
-
-Any website change that expresses a position about a global event or group of people requires explicit
-[TSC](https://github.com/nodejs/TSC/blob/main/TSC-Charter.md#section-4-responsibilities-of-the-tsc)
-approval. This can be obtained by pinging `@nodejs/tsc` and receive no objections after seven days,
-or by sending an email to `tsc@iojs.org` and receive at least one approval and no objections after seven days.
-
-### Node.js Website Team (`@nodejs/nodejs-website`)
-
-The Node.js Website Team is responsible for the day-to-day technical development of the Node.js Website. This is primarily the development of the website itself, adding new features, pages and components, but also fixing any security issues in the website code, handling operational maintenance, and so on.
-
-The maintainers on the Node.js Website Team are responsible for steering the technical direction of the Node.js Website, and reserve the right to make final decisions on any issues or pull requests, in line with the Contribution Guidelines, Collaborator Guidelines, the Code of Conduct and the overall Governance premises of the Node.js project.
-
-Members of this team are nominated through the guidelines provided in the [Contributing Guidelines](https://github.com/nodejs/nodejs.org/blob/main/CONTRIBUTING.md#becoming-a-collaborator) within this repository. After a passed nomination, members should submit a PR to add themselves to the list of current members, shown below.
-
-#### Current Members
-
-- [araujogui](https://github.com/araujogui) - **Guilherme Araújo** (he/him)
-
-- [AugustinMauroy](https://github.com/AugustinMauroy) - **Augustin Mauroy** (he/him)
-
-- [avivkeller](https://github.com/avivkeller) - **Aviv Keller** (he/him)
-
-- [aymen94](https://github.com/aymen94) - **Aymen Naghmouchi**
-
-- [benhalverson](https://github.com/benhalverson) - **Ben Halverson** (he/him)
-
-- [bjohansebas](https://github.com/bjohansebas) - **Sebastian Beltran**
-
-- [bmuenzenmeyer](https://github.com/bmuenzenmeyer) - **Brian Muenzenmeyer** (he/him)
-
-- [bnb](https://github.com/bnb) - **Tierney Cyren** (they/them)
-
-- [canerakdas](https://github.com/canerakdas) - **Caner Akdas**
-
-- [dario-piotrowicz](https://github.com/dario-piotrowicz) - **Dario Piotrowicz**
-
-- [Harkunwar](https://github.com/Harkunwar) - **Harkunwar Kochar** (he/him)
-
-- [HinataKah0](https://github.com/HinataKah0) - **HinataKah0** (he/him)
-
-- [manishprivet](https://github.com/manishprivet) - **Manish Kumar** (he/him)
-
-- [mikeesto](https://github.com/mikeesto) - **Michael Esteban** (he/him)
-
-- [ovflowd](https://github.com/ovflowd) - **Claudio Wunder** (they/them)
-
-- [SEWeiTung](https://github.com/SEWeiTung) - **Wei Tung**
-
-- [shanpriyan](https://github.com/shanpriyan) - **Shanmughapriyan S**
-
-### Node.js Web Infra Team (`@nodejs/web-infra`)
-
-The Node.js Web Infra Team is responsible for maintaining the Infrastructure relating to Node.js's Web Presence. The Node.js Web Infra team has the responsibilities of:
-
-- Maintaining CI/CD pipelines related to Web Infrastructure
-- Maintaining our Infrastructure Providers\*
-- Have technical ownership on best-standards and best-practices for our Web Infrastructure (such as Web Frameworks that we use)
-
-Web Infra Team members should have access to be able to maintain the services mentioned above.
-
-Members of this team are nominated either by the Node.js Technical Steering Committee (TSC) or the Node.js Build WG and follow the guidelines provided in the Collaborator Guidelines of the Node.js Build WG. Note that members of the Node.js Web Team might also recommend people for nomination.
-
-\* This team has access to infrastructure providers directly related to the Website only, such as Vercel. Other providers that are shared beyond the Website may be controlled by other teams (for example, the Node.js Build WG owns Cloudflare).
-
-### Node.js Web Standards Team (`@nodejs/web-standards`)
-
-The Node.js Web Standards Team is composed of Node.js Collaborators and External Collaborators that have extensive experience or expertisè on Web Standards, such as Ecma262. The Standards Team is responsible for guiding and serving as points of contact when either Node.js Collaborators, the Node.js Technical Steering Committee (TSC), or the Web Team, requires assistance or guidance regarding Web Standards.
-
-Members of this team are nominated by the Node.js Technical Steering Committee (TSC). Note that members of the Node.js Web Team might also recommend people for nomination.
-
-### Node.js UX & Design Team (`@nodejs/ux-and-design`)
-
-The Node.js UX & Design Team is composed of Node.js Collaborators and External Collaborators that have experience or expertisè with UX & Design. The UX & Design Team is responsible for guiding and serving as points of contact when members of the Node.js Web Team require assistance or guidance regarding UX & Design.
-
-Often members of this team will collaborate on providing best practices and guidelines for the Node.js Website, on matters of UX & Design. Members of this team are also responsible for providing feedback on the Node.js Website, and providing feedback on the Node.js Website's design. (For example, when a discussion arises regarding best practices on topics such as CSS, accessibility, UX flows and intent, or component design, the UX & Design Team has a say on the matter).
-
-Members of this team are nominated by the Node.js Technical Steering Committee (TSC). Note that members of the Node.js Web Team might also recommend people for nomination.
-
-## The Interoperability of the Node.js Web Team
-
-As seen above, the different teams under the Node.js Web Team umbrella are responsible for having the oversight on different aspects of Node.js's Web-related projects. However, it is important to note that the Node.js Web Team is not a set of siloed teams, but rather a set of teams that work together to achieve the same goal: Providing the best Web Experience for Node.js.
-
-Following this line of thought, the Web Infra Team is responsible for the technical aspects of the Node.js Website (Infrastructure, Framework, CI/CD, etc); The Website Team is responsible for the day-to-day development of the Node.js Website; The UX and Design Team advise on Design Matters and the Web Standards Team advise on best-practices for Web APIs and Web Technologies/Standards.
-
-But above all, the Web Team should work together to better the Web Experience for Node.js, aiming to provide the best experience for Node.js users.
diff --git a/README.md b/README.md
index aa076088a5427..da65bb0d0e836 100644
--- a/README.md
+++ b/README.md
@@ -94,6 +94,8 @@ These are maintained in different repositories and we urge users to open **issue
[Collaborator Guide][]
+[Governance Document][]
+
[Figma Design][]
[Content vs Code][]
@@ -121,5 +123,6 @@ These are maintained in different repositories and we urge users to open **issue
[content vs code]: https://github.com/nodejs/nodejs.org/blob/main/docs/content-vs-code.md
[dependency pinning]: https://github.com/nodejs/nodejs.org/blob/main/docs/dependency-pinning.md
[collaborator guide]: https://github.com/nodejs/nodejs.org/blob/main/docs/collaborator-guide.md
+[governance document]: https://github.com/nodejs/web-team/blob/main/GOVERNANCE.md
[figma design]: https://www.figma.com/file/a10cjjw3MzvRQMPT9FP3xz
[translation guidelines]: https://github.com/nodejs/nodejs.org/blob/main/docs/translation.md
diff --git a/apps/site/components/Blog/BlogPostCard/index.module.css b/apps/site/components/Blog/BlogPostCard/index.module.css
index 166f694e85505..53ec2686369f0 100644
--- a/apps/site/components/Blog/BlogPostCard/index.module.css
+++ b/apps/site/components/Blog/BlogPostCard/index.module.css
@@ -6,8 +6,8 @@
}
.subtitle {
- @apply mb-2
- mt-6
+ @apply mt-6
+ mb-2
inline-block
text-xs
font-semibold
diff --git a/apps/site/components/Common/Turtle/index.module.css b/apps/site/components/Common/Turtle/index.module.css
index 6bbeefdbd9bb2..82bacb8ee7d5e 100644
--- a/apps/site/components/Common/Turtle/index.module.css
+++ b/apps/site/components/Common/Turtle/index.module.css
@@ -8,20 +8,20 @@
translate-x-0
translate-y-0
after:absolute
- after:-left-full
after:top-[20%]
+ after:-left-full
after:-z-10
after:block
after:h-36
after:w-36
after:-rotate-90
- after:select-none
after:bg-[url('/static/images/smoke.gif')]
after:opacity-[0.15]
after:content-['']
+ after:select-none
motion-reduce:animate-none
- after:md:-left-1/2
- after:md:top-1/2;
+ after:md:top-1/2
+ after:md:-left-1/2;
}
.image {
diff --git a/apps/site/components/Downloads/Release/ReleaseCodeBox.tsx b/apps/site/components/Downloads/Release/ReleaseCodeBox.tsx
index 63b9f57256d61..a3792cd7c0135 100644
--- a/apps/site/components/Downloads/Release/ReleaseCodeBox.tsx
+++ b/apps/site/components/Downloads/Release/ReleaseCodeBox.tsx
@@ -128,7 +128,7 @@ const ReleaseCodeBox: FC = () => {
const isLoading = context.os === 'LOADING' || context.installMethod === '';
return (
-
+
{/* NoScript warning */}
@@ -118,7 +118,7 @@ Credit to [Angela Angelini](https://www.linkedin.com/in/angeliningl/) for design
diff --git a/apps/site/pages/id/about/branding.mdx b/apps/site/pages/id/about/branding.mdx
index 494a3e1c404e6..30a17e43ad855 100644
--- a/apps/site/pages/id/about/branding.mdx
+++ b/apps/site/pages/id/about/branding.mdx
@@ -21,6 +21,16 @@ Penghargaan kepada [Angela Angelini](https://www.linkedin.com/in/angeliningl/) a
## Logo Node.js®
+### Logo Hex Node.js®
+
+
+
### Logo Horizontal Node.js®
diff --git a/apps/site/pages/id/about/eol.mdx b/apps/site/pages/id/about/eol.mdx
new file mode 100644
index 0000000000000..fcc172e05ef85
--- /dev/null
+++ b/apps/site/pages/id/about/eol.mdx
@@ -0,0 +1,46 @@
+---
+title: End-Of-Life
+layout: about
+description: Memahami End-of-Life Node.js, apa dampaknya pada keamanan, toolchain, dan kepatuhan, serta detail versi EOL dan opsi dukungan komersial.
+---
+
+# End-Of-Life (EOL)
+
+## Mengapa dan bagaimana rilis Node.js mencapai End-Of-Life
+
+Versi mayor Node.js dirilis, diperbaiki, dan ditetapkan sebagai End-Of-Life mengikuti jadwal yang dapat diprediksi. Karena tidak memungkinkan untuk memelihara semua lini rilis selamanya, setelah periode pemeliharaan yang direncanakan, lini rilis mayor Node.js akan berhenti dipelihara oleh proyek.
+
+
+
+ Tingkatkan ke Node.js® LTS terbaru
+
+
+atau
+
+
+ Dapatkan dukungan keamanan untuk versi EOL
+
+
+
+[Lihat jadwal rilis Node.js](/about/releases/).
+
+## Apa yang Terjadi Ketika Suatu Lini Rilis Mencapai EOL
+
+Saat suatu versi mencapai End-Of-Life, artinya versi tersebut tidak lagi menerima pembaruan, termasuk tambalan keamanan. Ini dapat membuat aplikasi yang berjalan pada versi tersebut rentan terhadap masalah keamanan dan bug yang tidak akan pernah diperbaiki.
+
+- **Tidak ada lagi perbaikan kerentanan**: Ketika rilis keamanan baru mengungkap masalah dan tambalan pada lini mayor yang lebih baru, meskipun kerentanan yang sama memengaruhi versi EOL, tidak akan ada rilis baru untuk mereka. Pengguna yang tetap bertahan di versi EOL dan menggunakan jalur kode yang terdampak akan langsung rentan terhadap serangan yang memanfaatkan kerentanan tersebut.
+- **Kerusakan pada toolchain**: Versi EOL mungkin tidak lagi dapat melakukan dynamic linking dengan versi pustaka bersama yang lebih baru yang menjadi dependensinya, yang dapat menghambat atau merusak pembaruan sistem.
+- **Perubahan ekosistem**: Banyak paket user-land populer menghentikan dukungan untuk versi Node.js yang sudah EOL dari waktu ke waktu. Ketika suatu aplikasi tetap menggunakan paket yang sudah kedaluwarsa, aplikasi tersebut dapat mengalami lebih banyak kerentanan dan bug yang tidak diperbaiki, semakin menjauhi standar ekosistem.
+- **Masalah kepatuhan**: Banyak audit industri melarang penggunaan runtime yang tidak dipelihara.
+
+## Versi EOL
+
+
+
+## Dukungan Komersial
+
+Meskipun penggunaan versi EOL memiliki banyak kelemahan, dalam praktiknya banyak organisasi menghadapi batasan yang mencegah peningkatan versi secara langsung, seperti kode warisan (legacy), kebutuhan kepatuhan, atau rantai dependensi yang kompleks. Melalui [OpenJS Foundation Ecosystem Sustainability Program](https://openjsf.org/blog/ecosystem-sustainability-program), Node.js mendapatkan dukungan dari HeroDevs dan NodeSource untuk menyediakan layanan komersial dalam bentuk perbaikan keamanan.
+
+HeroDevs menyediakan [Never-Ending Support (NES)](https://nodejs.org/esp/herodevs) untuk versi Node.js yang telah melewati fase pemeliharaan resmi. Ini mencakup tambalan keamanan, bantuan kepatuhan, dan dukungan teknis untuk menjembatani kebutuhanmu sambil kamu merencanakan strategi peningkatan.
+
+Menggunakan versi EOL melalui dukungan komersial harus dianggap sebagai solusi sementara — tujuan utama tetap untuk meningkatkan ke versi yang masih didukung secara aktif.
diff --git a/apps/site/pages/id/about/get-involved/index.md b/apps/site/pages/id/about/get-involved/index.md
index a47c9c443fb56..644bfde64b19d 100644
--- a/apps/site/pages/id/about/get-involved/index.md
+++ b/apps/site/pages/id/about/get-involved/index.md
@@ -31,4 +31,5 @@ Perlu diperhatikan bahwa proyek Node.js tidak secara resmi mendukung forum-forum
- [Node Slackers](https://www.nodeslackers.com/) adalah komunitas Slack yang berfokus pada Node.js.
- [OpenJSF Slack](https://slack-invite.openjsf.org/) adalah ruang kerja Slack untuk OpenJS Foundation. Ada beberapa saluran yang terkait dengan Node.js. _(saluran yang diawali dengan `#nodejs-` terkait dengan proyek)_
+- [r/node](https://www.reddit.com/r/node/) adalah subreddit yang berfokus pada Node.js.
- Untuk IRC, buka `irc.libera.chat` di saluran `#node.js` dengan [klien IRC](https://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients) atau sambungkan di browser web Anda ke saluran menggunakan [klien web](https://kiwiirc.com/nextclient/).
diff --git a/apps/site/pages/id/about/partners.mdx b/apps/site/pages/id/about/partners.mdx
new file mode 100644
index 0000000000000..4b3ab21af203e
--- /dev/null
+++ b/apps/site/pages/id/about/partners.mdx
@@ -0,0 +1,50 @@
+---
+title: Mitra & Pendukung
+layout: about
+---
+
+# Mitra & Pendukung
+
+Komunitas Node.js diperkaya oleh jaringan mitra yang beragam yang berkontribusi
+dalam berbagai cara. Melalui kolaborasi ini, kami menjaga infrastruktur yang tangguh,
+memperkuat keamanan, mendorong rilis baru, dan menumbuhkan ekosistem kami secara berkelanjutan.
+
+Kami berterima kasih atas dukungan para mitra, yang memainkan peran penting dalam keberhasilan
+dan pengembangan berkelanjutan dari Node.js.
+
+## Infrastruktur
+
+...
+
+
+
+## Pendukung
+
+Pendukung adalah individu dan organisasi yang memberikan dukungan finansial melalui
+[OpenCollective](https://opencollective.com/nodejs) untuk proyek Node.js.
+
+
+
+## ## Ecosystem Sustainability Program (ESP)
+
+Apakah kamu menjalankan versi Node.js yang sudah End-of-Life (EOL)?
+Program **OpenJS Ecosystem Sustainability Program (ESP)** membantu organisasi dalam
+memelihara aplikasi Node.js mereka yang berjalan pada versi EOL.
+Program ini menyediakan akses ke tambalan keamanan, bantuan kepatuhan, dan dukungan teknis
+untuk menjembatani kebutuhan sementara kamu merencanakan strategi peningkatan versi.Untuk informasi lebih lanjut mengenai versi End-of-Life, silakan kunjungi
+[End-Of-Life Node.js Releases](/about/eol)
+
+> Menggunakan rilis EOL melalui dukungan komersial harus dianggap sebagai solusi sementara. Tujuan utama tetap harus meningkatkan ke versi yang masih didukung secara aktif.
+
+
+
+## Menjadi Mitra
+
+Jadilah mitra proyek Node.js dan bantu kami terus mengembangkan dan memelihara proyek ini.
+Dukunganmu sangat penting untuk memastikan bahwa Node.js tetap menjadi platform yang andal dan aman
+bagi para pengembang dan organisasi di seluruh dunia. Jika kamu tertarik untuk menjadi mitra,
+silakan hubungi kami melalui OpenJS Foundation.
+
+
+ Menjadi Mitra OpenJS
+
diff --git a/apps/site/pages/id/about/previous-releases.mdx b/apps/site/pages/id/about/previous-releases.mdx
new file mode 100644
index 0000000000000..a108957f78888
--- /dev/null
+++ b/apps/site/pages/id/about/previous-releases.mdx
@@ -0,0 +1,48 @@
+---
+title: Rilisan Node.js
+layout: about
+---
+
+# Rilisan Node.js
+
+
+
+Versi Node.js utama memasuki status rilis saat ini selama enam bulan, yang memberikan waktu bagi penulis perpustakaan untuk menambahkan dukungan untuk versi tersebut. Setelah enam bulan, rilis bernomor ganjil (9, 11, dst.) menjadi tidak didukung, dan rilis bernomor genap (10, 12, dst.) berpindah ke status LTS Aktif dan siap untuk penggunaan umum. Status rilis LTS adalah "dukungan jangka panjang", yang biasanya menjamin bahwa bug kritis akan diperbaiki selama total 30 bulan. Aplikasi produksi hanya boleh menggunakan rilis LTS Aktif atau LTS Pemeliharaan.
+
+## Release Schedule
+
+
+
+Detail lengkap mengenai jadwal rilis Node.js tersedia [di GitHub](https://github.com/nodejs/release#release-schedule).
+
+## Mencari rilis terbaru dari cabang versi?
+
+
+
+## Metode Instalasi Resmi vs. Komunitas
+
+Situs web Node.js menyediakan beberapa metode instalasi non-interaktif, termasuk antarmuka baris perintah (CLI), manajer paket sistem operasi (OS) (misalnya, `brew`), dan manajer versi Node.js (misalnya, `nvm`).
+
+Untuk menyoroti dan mempromosikan kontribusi komunitas, proyek Node.js memperkenalkan halaman Unduhan yang telah direvisi yang mengkategorikan metode instalasi sebagai "Resmi" atau "Komunitas." Hal ini memberikan fleksibilitas dan pilihan yang lebih besar kepada pengguna. Untuk memastikan kejelasan, kami telah menetapkan kriteria untuk setiap kategori.
+
+### Metode Instalasi Resmi
+
+Metode instalasi yang ditetapkan sebagai “Resmi” harus memenuhi persyaratan berikut:
+
+| Persyaratan (Metode Instalasi Resmi) |
+| :----------------------------------------------------------------------------------------------------------------------------------- |
+| Rilis Node.js baru harus tersedia bersamaan dengan rilis resmi. |
+| Pengelola proyek harus memiliki hubungan dekat dengan proyek Node.js, termasuk saluran komunikasi langsung. |
+| Metode instalasi harus unduhan biner resmi yang dibundel oleh proyek Node.js. |
+| Metode instalasi tidak boleh dibuild dari sumber, jika biner yang telah dibuild tersedia, dan tidak boleh pula mengubah biner resmi. |
+
+### Metode Instalasi Komunitas
+
+Metode instalasi komunitas yang disertakan pada halaman unduhan swalayan (/download) juga harus mematuhi serangkaian kriteria minimum:
+
+- **Dukungan Versi:** Harus mendukung semua versi Node.js yang saat ini didukung, bukan versi End-of-Life (EOL).
+- **Kompatibilitas OS:** Harus berfungsi pada setidaknya satu Sistem Operasi (OS) yang didukung secara resmi.
+- **Dukungan OS yang Luas:** Tidak dapat dibatasi pada sebagian distribusi atau versi OS.
+ - Misalnya, metode instalasi yang mengklaim kompatibilitas dengan “Windows” harus berfungsi pada “Windows 10”, “Windows 11”, dan semua edisinya (termasuk versi server).
+ - Demikian pula, metode instalasi yang mengklaim kompatibilitas dengan "Linux" harus dapat diinstal pada semua distribusi Linux utama, bukan hanya sebagian kecil saja. Metode ini tidak dapat bergantung pada pengelola paket khusus distribusi seperti `apt` atau `dnf`.
+- **Gratis dan Sumber Terbuka:** Harus gratis digunakan dan bersumber terbuka, tidak boleh dijual sebagai produk komersial, dan tidak boleh menjadi layanan berbayar.
diff --git a/apps/site/pages/id/about/security-reporting.mdx b/apps/site/pages/id/about/security-reporting.mdx
index 307463d9aeb0a..6aa2300bb863d 100644
--- a/apps/site/pages/id/about/security-reporting.mdx
+++ b/apps/site/pages/id/about/security-reporting.mdx
@@ -11,9 +11,9 @@ For more details on active Security Policies, checkout [this page](https://githu
Laporkan bug keamanan di Node.js melalui [HackerOne](https://hackerone.com/nodejs).
-Laporan Anda akan diterima dalam waktu 5 hari, dan Anda akan menerima tanggapan yang lebih rinci terhadap laporan Anda dalam waktu 10 hari yang menunjukkan langkah selanjutnya dalam menangani kiriman Anda.
+Biasanya, laporan mu akan diakui dalam waktu 5 hari, dan Anda akan menerima tanggapan yang lebih detail dalam waktu 10 hari yang menjelaskan langkah selanjutnya dalam penanganan laporan tersebut. Waktu ini dapat lebih lama jika para relawan triase sedang berlibur, terutama di akhir tahun.
-Setelah balasan awal atas laporan Anda, tim keamanan akan berusaha memberi Anda informasi tentang kemajuan yang dicapai menuju pengumuman perbaikan dan lengkap, dan mungkin meminta informasi atau panduan tambahan seputar masalah yang dilaporkan.
+Setelah balasan awal atas laporan mu, tim keamanan akan berusaha memberi mu informasi tentang kemajuan yang dicapai menuju pengumuman perbaikan dan lengkap, dan mungkin meminta informasi atau panduan tambahan seputar masalah yang dilaporkan.
### Program hadiah bug Node.js
@@ -27,15 +27,24 @@ Bug keamanan di modul pihak ketiga harus dilaporkan ke pengelola masing-masing.
Berikut adalah kebijakan pengungkapan keamanan untuk Node.js
-- Laporan keamanan diterima dan ditetapkan sebagai penangan utama. Orang ini akan mengoordinasikan proses perbaikan dan pelepasan. Masalahnya telah dikonfirmasi dan daftar semua versi yang terpengaruh telah ditentukan. Kode diaudit untuk menemukan potensi masalah serupa. Perbaikan disiapkan untuk semua rilis yang masih dalam pemeliharaan. Perbaikan ini tidak dilakukan pada repositori publik melainkan disimpan secara lokal sambil menunggu pengumuman.
+- Laporan keamanan diterima dan ditugaskan ke penanggung jawab utama.
+ Orang ini akan mengoordinasikan proses perbaikan dan rilis.
+ Masalah tersebut divalidasi pada semua versi Node.js yang masih didukung.
+ Setelah dikonfirmasi, ditentukan daftar semua versi yang terdampak.
+ Kode kemudian diaudit untuk menemukan potensi masalah serupa.
+ Perbaikan disiapkan untuk semua rilis yang masih didukung.Perbaikan ini tidak langsung dikomit ke repositori publik, tetapi disimpan secara lokal sampai pengumuman dilakukan.
- Tanggal embargo yang disarankan untuk kerentanan ini dipilih dan CVE (Common Vulnerabilities and Exposures (CVE®)) diminta untuk kerentanan tersebut.
-- Pada tanggal embargo, salinan pengumuman dikirim ke milis keamanan Node.js. Perubahan tersebut dikirim ke repositori publik dan versi baru disebarkan ke nodejs.org. Dalam waktu 6 jam setelah milis diberitahukan, salinan nasihat akan dipublikasikan di blog Node.js.
+- Pada tanggal embargo, salinan pengumuman dikirim ke daftar surel keamanan Node.js.
+ Perubahan kemudian dipush ke repositori publik dan build baru dirilis di nodejs.org.
+ Dalam waktu maksimal 6 jam setelah daftar surel menerima pemberitahuan, salinan advis tersebut akan dipublikasikan di blog Node.js.
-- Biasanya tanggal embargo akan ditetapkan 72 jam sejak CVE diterbitkan. Namun, hal ini dapat bervariasi tergantung pada tingkat keparahan bug atau kesulitan dalam menerapkan perbaikan.
+- Biasanya, tanggal embargo akan ditetapkan 72 jam sejak CVE diterbitkan.
+ Namun, hal ini bisa berubah tergantung tingkat keparahan bug atau kesulitan dalam menerapkan perbaikan.
-- Proses ini dapat memakan waktu, terutama bila diperlukan koordinasi dengan pengelola proyek lain. Segala upaya akan dilakukan untuk menangani bug tersebut secepat mungkin; namun, penting bagi kami untuk mengikuti proses rilis di atas untuk memastikan bahwa pengungkapan ditangani secara konsisten.
+- Proses ini bisa memakan waktu, terutama jika perlu koordinasi dengan para maintainer proyek lain.
+ Kami akan berusaha menangani bug secepat mungkin; namun, kami tetap harus mengikuti proses rilis di atas untuk memastikan penanganan pengungkapan dilakukan secara konsisten.
## Menerima pembaruan keamanan
@@ -46,7 +55,7 @@ Pemberitahuan keamanan akan didistribusikan melalui metode berikut.
## Komentar tentang kebijakan ini
-Jika Anda memiliki saran tentang bagaimana proses ini dapat ditingkatkan, silakan kirimkan [permintaan penarikan](https://github.com/nodejs/nodejs.org) atau [ajukan masalah](https://github.com/nodejs/security-wg/issues/new) untuk didiskusikan.
+Kalau kamu punya saran tentang bagaimana proses ini dapat ditingkatkan, silakan kunjungi repositori [nodejs/security-wg](https://github.com/nodejs/security-wg).
## Praktik Terbaik OpenSSF
diff --git a/apps/site/pages/id/download/archive/index.mdx b/apps/site/pages/id/download/archive/index.mdx
new file mode 100644
index 0000000000000..60740dc767d89
--- /dev/null
+++ b/apps/site/pages/id/download/archive/index.mdx
@@ -0,0 +1,59 @@
+---
+title: Unduh Node.js®
+layout: download-archive
+---
+
+
+ {({ binaries, installers, version, release, sources }) => (
+ <>
+ Arsip Unduhan Node.js®
+
+
+
+ {version}
+ {release.codename && ` (${release.codename})`}
+
+
+
+
+
+
+
+
+ Baca catatan perubahan (changelog) atau artikel blog untuk versi ini.
+
+
+ Pelajari lebih lanjut tentang rilis Node.js, termasuk jadwal rilis dan status LTS.
+
+
+
+ SHASUMS bertanda tangan untuk berkas rilis. Cara memverifikasi SHASUMS bertanda tangan.
+
+
+
+ Unduh berkas tarball sumber Node.js {version} yang telah ditandatangani.
+
+
+
+
+ Rilis lainnya
+
+
+ Unduhan Biner
+
+
+ Paket Installer
+
+
+ Versi Minor
+
+ >
+
+)}
+
+
diff --git a/apps/site/pages/id/download/current.mdx b/apps/site/pages/id/download/current.mdx
index ef3c3a90b4e36..8f94265639400 100644
--- a/apps/site/pages/id/download/current.mdx
+++ b/apps/site/pages/id/download/current.mdx
@@ -26,7 +26,23 @@ Pelajari cara sumber Node.js yang telah ditandatangani.
Lihat biner nightly kami atau
-semua rilis sebelumnya
+semua rilis sebelumnya
atau biner tidak resmi untuk platform lain.
+
+---
+
+
+ Dengan bangga didukung oleh mitra-mitra berikut:
+
+
+ Kami dapat menyediakan unduhan Node.js dan memelihara infrastruktur kami
+ dengan bangga berkat dukungan dari para mitra ini,{' '}
+ dan lainnya.
+
+
+
+
diff --git a/apps/site/pages/id/download/index.mdx b/apps/site/pages/id/download/index.mdx
index ef3c3a90b4e36..f086615bd4254 100644
--- a/apps/site/pages/id/download/index.mdx
+++ b/apps/site/pages/id/download/index.mdx
@@ -16,7 +16,7 @@ title: Unduh Node.js®
-
+
Baca Log Perubahan atau postingan blog untuk versi ini.
Pelajari selengkapnya tentang [rilis Node.js](/tentang/rilis-sebelumnya), termasuk jadwal rilis dan status LTS.
@@ -26,7 +26,23 @@ Pelajari cara sumber Node.js yang telah ditandatangani.
Lihat biner nightly kami atau
-semua rilis sebelumnya
+semua rilis sebelumnya
atau biner tidak resmi untuk platform lain.
+
+---
+
+
+ Dengan bangga didukung oleh mitra-mitra berikut:
+
+
+ Kami dapat menyediakan unduhan Node.js dan memelihara infrastruktur kami
+ dengan bangga berkat dukungan dari para mitra ini,{' '}
+ dan lainnya.
+
+
+
+
diff --git a/apps/site/pages/id/index.mdx b/apps/site/pages/id/index.mdx
new file mode 100644
index 0000000000000..03bbd5303ac1e
--- /dev/null
+++ b/apps/site/pages/id/index.mdx
@@ -0,0 +1,132 @@
+---
+title: Jalankan JavaScript Di Mana Saja
+layout: home
+---
+
+
+
+
+
+
Jalankan JavaScript Di Mana Saja
+
+ Node.js® adalah lingkungan runtime JavaScript gratis dan sumber terbuka yang
+ lintas platform, yang memungkinkan pengembang membuat server, aplikasi web,
+ alat baris perintah, dan skrip.
+
+
+
+
+
+
Dapatkan Node.js®
+
+
Dapatkan Node.js®
+
+
+ Dapatkan dukungan keamanan
+
+
+
+ untuk versi Node.js yang telah mencapai EOL
+
+
+
+
+
Node.js dengan bangga didukung oleh para mitra di atas dan lainnya.
+
+
+
+
+
+
+
+ ```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. Pahami dukungan EOL.",
+ "ltsVersionFeaturesNotice": "Ingin mencoba fitur baru lebih cepat? Dapatkan versi Node.js terbaru dan coba peningkatan terbarunya!"
+ },
+ "eolAlert": {
+ "message": "Dukungan komersial untuk versi yang telah melewati fase Maintenance LTS tersedia melalui para mitra dalam Program Keberlanjutan Ekosistem OpenJS"
+ },
+ "eolChip": {
+ "severity": {
+ "unknown": "Tak diketahui",
+ "low": "Rendah",
+ "medium": "Sedang",
+ "high": "Tinggi",
+ "critical": "Kritis"
+ }
+ },
+ "eolModal": {
+ "title": "Dukungan resmi untuk Node.js v{version} ({codename}) telah berakhir",
+ "titleWithoutCodename": "Dukungan resmi untuk Node.js v{version} telah berakhir",
+ "vulnerabilitiesMessage": "Terdapat lebih dari {count} masalah keamanan (CVE) yang diketahui terkait dengan rilis Node.js ini.\nCVE (Common Vulnerabilities and Exposures) adalah pengidentifikasi untuk kerentanan keamanan yang dilaporkan secara publik.\nMengklik tautan CVE akan membawa mu ke detail teknis yang lebih lengkap, seperti bagaimana kerentanan tersebut bekerja.",
+ "noVulnerabilitiesMessage": "Saat ini tidak ada CVE (Common Vulnerabilities and Exposures) yang diketahui terkait dengan rilis Node.js ini.\nNamun, hal tersebut tidak berarti rilis ini sepenuhnya aman—beberapa kerentanan mungkin belum ditemukan atau belum dipublikasikan secara terbuka.\nJika rilis ini sudah usang atau tidak lagi didukung, tetap disarankan untuk mempertimbangkan pembaruan agar Anda mendapatkan perbaikan dan peningkatan keamanan terbaru.",
+ "blogLinkText": "Artikel",
+ "showUnknownSeverities": "Tampilkan kerentanan dengan tingkat keparahan tidak diketahui",
+ "table": {
+ "cves": "CVE",
+ "severity": "Tingkat keparahan",
+ "overview": "Ringkasan",
+ "details": "Rincian"
+ }
+ },
+ "eolTable": {
+ "version": "Versi",
+ "codename": "Kode nama",
+ "releaseDate": "Dirilis pada",
+ "lastUpdated": "Pembaruan Terakhir",
+ "vulnerabilities": "Kerentanan",
+ "details": "Rincian"
},
"minorReleasesTable": {
"version": "Versi",
"links": "Tautan",
+ "nApiVersion": "Versi N-API",
+ "npmVersion": "versi npm",
+ "v8Version": "V8 versi",
"actions": {
"release": "Rilis",
"changelog": "Log Perubahan",
@@ -217,7 +272,8 @@
"label": "Pilih Bahasa"
},
"themeToggle": {
- "label": "Aktifkan Mode Gelap"
+ "light": "Beralih ke Mode Terang",
+ "dark": "Beralih ke Mode Gelap"
}
},
"metabar": {
@@ -232,13 +288,24 @@
"tableOfContents": "Daftar isi"
},
"search": {
- "searchBox": {
- "placeholder": "Mulai mengetik..."
- }
+ "searchPlaceholder": "Mulai mengetik...",
+ "chatPlaceholder": "Tanya saya apa saja",
+ "noResultsFoundFor": "Tidak ada hasil ditemukan untuk",
+ "suggestions": "Saran",
+ "seeAll": "Lihat semua",
+ "addMore": "Tambahkan lebih banyak",
+ "clearChat": "Bersihkan obrolan",
+ "errorMessage": "Terjadi kesalahan saat melakukan pencarian. Silakan coba lagi.",
+ "disclaimer": "Ringkasan berbasis AI dapat mengandung kesalahan. Harap verifikasi informasi tersebut.",
+ "startYourSearch": "Mulai pencarian anda",
+ "initErrorSearch": "Tidak dapat memulai layanan pencarian",
+ "initErrorChat": "Tidak dapat memulai layanan obrolan",
+ "chatButtonLabel": "Dapatkan ringkasan AI",
+ "searchButtonLabel": "Pencarian"
},
"blog": {
"blogHeader": {
- "subtitle": "Berita terbaru Node.js, studi kasus, tutorial, dan sumber.",
+ "subtitle": "Berita terbaru seputar Node.js, panduan migrasi, dan ringkasan acara",
"rssLink": "RSS feed"
}
}
@@ -269,13 +336,14 @@
"video": "Video",
"weekly": "Pembaruan mingguan",
"wg": "Kelompok Kerja",
+ "migrations": "Panduan Migrasi",
"events": "Event"
}
},
"error": {
"notFound": {
"title": "Halaman tidak dapat ditemukan",
- "description": "Maaf, kami tidak dapat menemukan halaman yang anda cari! Coba memulai kembali dari halaman beranda."
+ "description": "Maaf, kami tidak dapat menemukan halaman yang kamu cari! Coba memulai kembali dari halaman beranda."
},
"internalServerError": {
"title": "Kesalahan Server Internal",
@@ -293,7 +361,7 @@
"os": "Sistem Operasi",
"version": "Versi",
"installMethod": "Cara pasang",
- "packageManager": "Package manager",
+ "packageManager": "Manajer paket",
"unknown": "Tak diketahui",
"platformGroups": {
"official": "Direkomendasikan (Resmi)",
@@ -302,9 +370,10 @@
},
"codeBox": {
"unsupportedVersionWarning": "Versi ini sudah tidak dalam tahap pemeliharaan. Harap gunakan versi yang saat ini didukung. Pahami dukungan EOL.",
+ "ltsVersionFeaturesNotice": "Ingin mencoba fitur baru lebih cepat? Dapatkan versi Node.js terbaru dan coba peningkatan terbarunya!",
"communityPlatformInfo": "Metode instalasi yang melibatkan perangkat lunak komunitas didukung oleh tim yang memelihara perangkat lunak tersebut.",
- "externalSupportInfo": "Jika Anda mengalami masalah, silakan kunjungi situs web {platform}",
- "noScriptDetected": "Halaman ini memerlukan JavaScript. Anda dapat mengunduh Node.js tanpa JavaScript dengan mengunjungi halaman rilis secara langsung.",
+ "externalSupportInfo": "Jika kamu mengalami masalah, silakan kunjungi situs web {platform}",
+ "noScriptDetected": "Halaman ini memerlukan JavaScript.\nKamu tetap dapat mengunduh Node.js tanpa mengaktifkan JavaScript dengan langsung mengunjungi halaman arsip unduhan.",
"platformInfo": {
"default": "{platform} dan skrip instalasinya tidak dikelola oleh proyek Node.js.",
"nvm": "\"nvm\" adalah manajer versi Node.js lintas-platform.",
diff --git a/packages/i18n/src/locales/ja.json b/packages/i18n/src/locales/ja.json
index 685fb6ad506ad..f88cb8a8c1c0e 100644
--- a/packages/i18n/src/locales/ja.json
+++ b/packages/i18n/src/locales/ja.json
@@ -42,38 +42,30 @@
"theV8JavascriptEngine": "V8 JavaScriptエンジン",
"anIntroductionToTheNpmPackageManager": "npmパッケージマネージャーの紹介",
"ecmascript2015Es6AndBeyond": "ECMAScript 2015(ES6)とそれ以降のバージョン",
- "nodejsTheDifferenceBetweenDevelopmentAndProduction": "Node.jsにおける開発環境と本番環境の違い",
- "nodejsWithWebassembly": "Node.jsとWebAssembly",
"debugging": "Node.jsのデバッグ",
- "profiling": "Node.jsアプリケーションのプロファイリング",
"fetch": "Node.jsでデータを取得する",
"websocket": "Node.jsでのWebSocketクライアント",
- "securityBestPractices": "セキュリティーベストプラクティス"
+ "nodejsTheDifferenceBetweenDevelopmentAndProduction": "Node.jsにおける開発環境と本番環境の違い",
+ "profiling": "Node.jsアプリケーションのプロファイリング",
+ "nodejsWithWebassembly": "Node.jsとWebAssembly",
+ "securityBestPractices": "セキュリティーベストプラクティス",
+ "userlandMigrations": "ユーザーランドコード移行の概要"
}
},
- "typescript": {
+ "commandLine": {
"links": {
- "typescript": "TypeScript",
- "introduction": "TypeScriptの導入",
- "transpile": "トランスパイルを用いたTypeScriptの実行",
- "run": "実行ツールを用いたTypeScriptの実行",
- "runNatively": "TypeScriptをネイティブに実行する",
- "publishingTSPackage": "TypeScriptパッケージを公開する"
+ "commandLine": "コマンドライン",
+ "runNodejsScriptsFromTheCommandLine": "コマンドラインからNode.jsスクリプトを実行する",
+ "howToUseTheNodejsRepl": "Node.js REPLの使用方法",
+ "outputToTheCommandLineUsingNodejs": "Node.jsを使用してコマンドラインに出力する",
+ "acceptInputFromTheCommandLineInNodejs": "Node.jsでコマンドラインからの入力を受け取る",
+ "howToReadEnvironmentVariablesFromNodejs": "Node.jsから環境変数を読み込む方法"
}
},
- "asynchronousWork": {
+ "http": {
"links": {
- "asynchronousWork": "非同期処理",
- "asynchronousFlowControl": "非同期のフロー制御",
- "discoverPromisesInNodejs": "Node.jsでプロミスを知る",
- "overviewOfBlockingVsNonBlocking": "ブロッキングとノンブロッキングの概要",
- "javascriptAsynchronousProgrammingAndCallbacks": "JavaScriptの非同期プログラミングとコールバック",
- "discoverJavascriptTimers": "JavaScriptのタイマー処理について",
- "eventLoopTimersAndNexttick": "Node.jsのイベントループ",
- "theNodejsEventEmitter": "Node.jsのイベントエミッター",
- "understandingProcessnexttick": "process.nextTick()について",
- "understandingSetimmediate": "setImmediate()について",
- "dontBlockTheEventLoop": "イベントループをブロックしない"
+ "http": "HTTP",
+ "anatomyOfAnHttpTransaction": "HTTPトランザクションの構成"
}
},
"manipulatingFiles": {
@@ -81,46 +73,54 @@
"manipulatingFiles": "ファイルの操作",
"nodejsFileStats": "Node.jsでのファイル情報",
"nodejsFilePaths": "Node.jsでのファイルパス",
- "workingWithFileDescriptorsInNodejs": "Node.jsでのファイルディスクリプターの操作",
"readingFilesWithNodejs": "Node.jsを使用したファイルの読み込み",
"writingFilesWithNodejs": "Node.jsを使用したファイルの書き込み",
+ "workingWithFileDescriptorsInNodejs": "Node.jsでのファイルディスクリプターの操作",
"workingWithFoldersInNodejs": "Node.jsでのフォルダーの操作",
"workingWithDifferentFilesystems": "異なるファイルシステムを扱う方法"
}
},
- "commandLine": {
+ "asynchronousWork": {
"links": {
- "commandLine": "コマンドライン",
- "runNodejsScriptsFromTheCommandLine": "コマンドラインからNode.jsスクリプトを実行する",
- "howToReadEnvironmentVariablesFromNodejs": "Node.jsから環境変数を読み込む方法",
- "howToUseTheNodejsRepl": "Node.js REPLの使用方法",
- "outputToTheCommandLineUsingNodejs": "Node.jsを使用してコマンドラインに出力する",
- "acceptInputFromTheCommandLineInNodejs": "Node.jsでコマンドラインからの入力を受け取る"
+ "asynchronousWork": "非同期処理",
+ "javascriptAsynchronousProgrammingAndCallbacks": "JavaScriptの非同期プログラミングとコールバック",
+ "asynchronousFlowControl": "非同期のフロー制御",
+ "discoverPromisesInNodejs": "Node.jsでプロミスを知る",
+ "discoverJavascriptTimers": "JavaScriptのタイマー処理について",
+ "overviewOfBlockingVsNonBlocking": "ブロッキングとノンブロッキングの概要",
+ "eventLoopTimersAndNexttick": "Node.jsのイベントループ",
+ "theNodejsEventEmitter": "Node.jsのイベントエミッター",
+ "understandingProcessnexttick": "process.nextTick()について",
+ "understandingSetimmediate": "setImmediate()について",
+ "dontBlockTheEventLoop": "イベントループをブロックしない"
}
},
- "migrations": {
+ "typescript": {
"links": {
- "migrations": "ユーザーランドの移行",
- "introduction": "ユーザーランドの移行入門"
+ "typescript": "TypeScript",
+ "introduction": "TypeScriptの導入",
+ "runNatively": "TypeScriptをネイティブに実行する",
+ "transpile": "トランスパイルを用いたTypeScriptの実行",
+ "run": "実行ツールを用いたTypeScriptの実行",
+ "publishingTSPackage": "TypeScriptパッケージを公開する"
}
},
"modules": {
"links": {
"modules": "モジュール",
+ "howToUseStreams": "ストリームの使い方",
+ "backpressuringInStreams": "ストリーム内のバックプレッシャー",
"publishingAPackage": "パッケージの公開",
"publishingNodeApiModules": "Node-APIパッケージを公開する方法",
- "anatomyOfAnHttpTransaction": "HTTPトランザクションの構成",
- "abiStability": "ABIの安定性",
- "howToUseStreams": "ストリームの使い方",
- "backpressuringInStreams": "ストリーム内のバックプレッシャー"
+ "abiStability": "ABIの安定性"
}
},
"diagnostics": {
"links": {
"diagnostics": "診断",
"userJourney": "ユーザージャーニー",
- "understandingAndTuningMemory": "メモリーのチューニングの理解",
"memory": "メモリー",
+ "understandingAndTuningMemory": "メモリーのチューニングの理解",
"liveDebugging": "ライブデバッグ",
"poorPerformance": "パフォーマンスの低下",
"flameGraphs": "フレームグラフ"
@@ -183,7 +183,7 @@
"ltsVersionFeaturesNotice": "すぐに最新の機能を試したいですか? 最新バージョンのNode.jsを代わりにインストールして最新の機能を試してください!"
},
"eolAlert": {
- "message": "Maintenance LTS期間を終了したバージョンの商用サポートは、私たちの OpenJSエコシステム持続可能性プログラムパートナーであるHeroDevsを通して利用可能です。"
+ "message": "Maintenance LTS期間を過ぎたバージョンの商用サポートは OpenJSエコシステム持続可能性プログラムパートナーを通して利用できます。"
},
"eolChip": {
"severity": {
@@ -305,7 +305,7 @@
},
"blog": {
"blogHeader": {
- "subtitle": "最新のNode.jsのニュース、ケーススタディ、チュートリアル、リソース。",
+ "subtitle": "最新のNode.jsニュース、移行ガイド、イベント概要",
"rssLink": "RSSフィード"
}
}
@@ -336,6 +336,7 @@
"video": "ビデオ",
"weekly": "週間更新",
"wg": "作業グループ",
+ "migrations": "移行ガイド",
"events": "イベント"
}
},
diff --git a/packages/i18n/src/locales/uk.json b/packages/i18n/src/locales/uk.json
index bf7bc0cbcea35..ebb924e7ce370 100644
--- a/packages/i18n/src/locales/uk.json
+++ b/packages/i18n/src/locales/uk.json
@@ -42,38 +42,30 @@
"theV8JavascriptEngine": "Рушій JavaScript V8",
"anIntroductionToTheNpmPackageManager": "Вступ до менеджера пакетів npm",
"ecmascript2015Es6AndBeyond": "ECMAScript 2015 (ES6) і новіші версії",
- "nodejsTheDifferenceBetweenDevelopmentAndProduction": "Різниця між клієнтським та розробницьким середовищем у Node.js",
- "nodejsWithWebassembly": "Node.js із WebAssembly",
"debugging": "Налагодження Node.js",
- "profiling": "Профілювання застосунків Node.js",
"fetch": "Отримання даних із Node.js",
"websocket": "Клієнт WebSocket із Node.js",
- "securityBestPractices": "Найкращі практики безпеки"
+ "nodejsTheDifferenceBetweenDevelopmentAndProduction": "Різниця між клієнтським та розробницьким середовищем у Node.js",
+ "profiling": "Профілювання застосунків Node.js",
+ "nodejsWithWebassembly": "Node.js із WebAssembly",
+ "securityBestPractices": "Найкращі практики безпеки",
+ "userlandMigrations": "Вступ до користувацьких міграцій"
}
},
- "typescript": {
+ "commandLine": {
"links": {
- "typescript": "TypeScript",
- "introduction": "Вступ до TypeScript",
- "transpile": "Запуск коду на TypeScript за допомогою транспіляції",
- "run": "Запуск коду на TypeScript із виконавцем",
- "runNatively": "Запуск коду на TypeScript нативно",
- "publishingTSPackage": "Публікація пакета TypeScript"
+ "commandLine": "Командний рядок",
+ "runNodejsScriptsFromTheCommandLine": "Запуск скриптів Node.js із командного рядка",
+ "howToUseTheNodejsRepl": "Як використовувати REPL у Node.js",
+ "outputToTheCommandLineUsingNodejs": "Вивід у командний рядок із Node.js",
+ "acceptInputFromTheCommandLineInNodejs": "Зчитування вводу з командного рядка з Node.js",
+ "howToReadEnvironmentVariablesFromNodejs": "Отримання доступу до змінних середовища в Node.js"
}
},
- "asynchronousWork": {
+ "http": {
"links": {
- "asynchronousWork": "Асинхронна робота",
- "asynchronousFlowControl": "Асинхронне управління потоком",
- "discoverPromisesInNodejs": "Проміси в Node.js",
- "overviewOfBlockingVsNonBlocking": "Огляд блокувальних і неблокувальних викликів",
- "javascriptAsynchronousProgrammingAndCallbacks": "Асинхронне програмування і функції зворотного виклику в JavaScript",
- "discoverJavascriptTimers": "Таймери JavaScript",
- "eventLoopTimersAndNexttick": "Цикл подій у Node.js",
- "theNodejsEventEmitter": "Емітер подій у Node.js",
- "understandingProcessnexttick": "Розуміння process.nextTick()",
- "understandingSetimmediate": "Розуміння setImmediate()",
- "dontBlockTheEventLoop": "Уникайте блокування циклу подій"
+ "http": "HTTP",
+ "anatomyOfAnHttpTransaction": "Анатомія HTTP-транзакції"
}
},
"manipulatingFiles": {
@@ -81,46 +73,54 @@
"manipulatingFiles": "Робота з файлами",
"nodejsFileStats": "Властивості файлу в Node.js",
"nodejsFilePaths": "Шляхи файлу в Node.js",
- "workingWithFileDescriptorsInNodejs": "Робота з файловими дескрипторами в Node.js",
"readingFilesWithNodejs": "Читання файлів із Node.js",
"writingFilesWithNodejs": "Запис у файл із Node.js",
+ "workingWithFileDescriptorsInNodejs": "Робота з файловими дескрипторами в Node.js",
"workingWithFoldersInNodejs": "Робота з директоріями з Node.js",
"workingWithDifferentFilesystems": "Робота з різними файловими системами"
}
},
- "commandLine": {
+ "asynchronousWork": {
"links": {
- "commandLine": "Командний рядок",
- "runNodejsScriptsFromTheCommandLine": "Запуск скриптів Node.js із командного рядка",
- "howToReadEnvironmentVariablesFromNodejs": "Отримання доступу до змінних середовища в Node.js",
- "howToUseTheNodejsRepl": "Як використовувати REPL у Node.js",
- "outputToTheCommandLineUsingNodejs": "Вивід у командний рядок із Node.js",
- "acceptInputFromTheCommandLineInNodejs": "Зчитування вводу з командного рядка з Node.js"
+ "asynchronousWork": "Асинхронна робота",
+ "javascriptAsynchronousProgrammingAndCallbacks": "Асинхронне програмування і функції зворотного виклику в JavaScript",
+ "asynchronousFlowControl": "Асинхронне управління потоком",
+ "discoverPromisesInNodejs": "Проміси в Node.js",
+ "discoverJavascriptTimers": "Таймери JavaScript",
+ "overviewOfBlockingVsNonBlocking": "Огляд блокувальних і неблокувальних викликів",
+ "eventLoopTimersAndNexttick": "Цикл подій у Node.js",
+ "theNodejsEventEmitter": "Емітер подій у Node.js",
+ "understandingProcessnexttick": "Розуміння process.nextTick()",
+ "understandingSetimmediate": "Розуміння setImmediate()",
+ "dontBlockTheEventLoop": "Уникайте блокування циклу подій"
}
},
- "migrations": {
+ "typescript": {
"links": {
- "migrations": "Користувацькі міграції",
- "introduction": "Вступ до користувацьких міграцій"
+ "typescript": "TypeScript",
+ "introduction": "Вступ до TypeScript",
+ "runNatively": "Запуск коду на TypeScript нативно",
+ "transpile": "Запуск коду на TypeScript за допомогою транспіляції",
+ "run": "Запуск коду на TypeScript із виконавцем",
+ "publishingTSPackage": "Публікація пакета TypeScript"
}
},
"modules": {
"links": {
"modules": "Модулі",
+ "howToUseStreams": "Використання потоків",
+ "backpressuringInStreams": "Зворотний тиск у потоках",
"publishingAPackage": "Публікація пакета",
"publishingNodeApiModules": "Як опублікувати пакет Node-API",
- "anatomyOfAnHttpTransaction": "Анатомія HTTP-транзакції",
- "abiStability": "Стабільність ABI",
- "howToUseStreams": "Використання потоків",
- "backpressuringInStreams": "Зворотний тиск у потоках"
+ "abiStability": "Стабільність ABI"
}
},
"diagnostics": {
"links": {
"diagnostics": "Діагностика",
"userJourney": "Шлях користувача",
- "understandingAndTuningMemory": "Розуміння та налаштування пам'яті",
"memory": "Пам’ять",
+ "understandingAndTuningMemory": "Розуміння та налаштування пам'яті",
"liveDebugging": "Налагодження в реальному часі",
"poorPerformance": "Низька продуктивність",
"flameGraphs": "Flame-графіки"
@@ -144,6 +144,7 @@
"governance": "Управління проєктом",
"releases": "Релізи Node.js",
"security": "Звітність про безпеку",
+ "partners": "Партнери й підтримувачі",
"eol": "Кінець підтримки (EOL)"
}
},
@@ -182,7 +183,7 @@
"ltsVersionFeaturesNotice": "Бажаєте отримати нові функції швидше? Установіть останню версію Node.js та випробуйте останні покращення!"
},
"eolAlert": {
- "message": "Комерційна підтримка для версій після фази Maintenance LTS доступна з нашим партнером програми OpenJS Ecosystem Sustainability HeroDevs"
+ "message": "Комерційна підтримка для версій після фази Maintenance LTS доступна з нашими партнерами програми OpenJS Ecosystem Sustainability HeroDevs"
},
"eolChip": {
"severity": {
@@ -304,7 +305,7 @@
},
"blog": {
"blogHeader": {
- "subtitle": "Останні новини Node.js, тематичні дослідження, практичні заняття та ресурси.",
+ "subtitle": "Останні новини Node.js, посібники з міграцій та підсумки подій",
"rssLink": "RSS-канал"
}
}
@@ -335,6 +336,7 @@
"video": "Відео",
"weekly": "Щотижневі оновлення",
"wg": "Робочі групи",
+ "migrations": "Посібники з міграцій",
"events": "Події"
}
},
diff --git a/packages/ui-components/src/Common/Badge/index.module.css b/packages/ui-components/src/Common/Badge/index.module.css
index e66c7ef94f282..eb5d8a97ff116 100644
--- a/packages/ui-components/src/Common/Badge/index.module.css
+++ b/packages/ui-components/src/Common/Badge/index.module.css
@@ -1,9 +1,9 @@
@reference "../../styles/index.css";
.badge {
- @apply whitespace-nowrap
- rounded-full
+ @apply rounded-full
text-center
+ whitespace-nowrap
text-white;
&.small {
diff --git a/packages/ui-components/src/Common/BadgeGroup/index.module.css b/packages/ui-components/src/Common/BadgeGroup/index.module.css
index e29c6c9cb9aab..2304c408078a0 100644
--- a/packages/ui-components/src/Common/BadgeGroup/index.module.css
+++ b/packages/ui-components/src/Common/BadgeGroup/index.module.css
@@ -7,8 +7,8 @@
rounded-full
border
py-1
- pl-1
pr-2.5
+ pl-1
text-sm
font-medium;
diff --git a/packages/ui-components/src/Common/BaseButton/index.module.css b/packages/ui-components/src/Common/BaseButton/index.module.css
index 55e850ca06100..c45b71abfca60 100644
--- a/packages/ui-components/src/Common/BaseButton/index.module.css
+++ b/packages/ui-components/src/Common/BaseButton/index.module.css
@@ -1,12 +1,12 @@
@reference "../../styles/index.css";
.button {
- @apply px-4.5
- relative
+ @apply relative
inline-flex
items-center
justify-center
gap-2
+ px-4.5
py-2.5
text-center
font-semibold
@@ -47,12 +47,12 @@
}
&.primary {
- @apply shadow-xs
- rounded-sm
+ @apply rounded-sm
border
border-green-600
bg-green-600
- text-white;
+ text-white
+ shadow-xs;
&:hover:not([aria-disabled='true']) {
@apply border-green-700
@@ -101,16 +101,16 @@
&.special {
@apply before:bg-gradient-glow-backdrop
- shadow-xs
rounded-lg
border
border-green-600/30
bg-green-600/10
text-white
+ shadow-xs
before:absolute
- before:left-0
- before:right-0
before:top-0
+ before:right-0
+ before:left-0
before:-z-10
before:mx-auto
before:h-full
@@ -119,8 +119,8 @@
before:content-['']
after:absolute
after:-top-px
- after:left-0
after:right-0
+ after:left-0
after:mx-auto
after:h-px
after:w-2/5
@@ -144,12 +144,12 @@
}
&.warning {
- @apply shadow-xs
- border-warning-600
+ @apply border-warning-600
bg-warning-600
rounded-sm
border
- text-white;
+ text-white
+ shadow-xs;
&:hover:not([aria-disabled='true']) {
@apply border-warning-700
@@ -169,12 +169,12 @@
}
&.info {
- @apply shadow-xs
- border-info-600
+ @apply border-info-600
bg-info-600
rounded-sm
border
- text-white;
+ text-white
+ shadow-xs;
&:hover:not([aria-disabled='true']) {
@apply border-info-700
diff --git a/packages/ui-components/src/Common/BaseCodeBox/index.module.css b/packages/ui-components/src/Common/BaseCodeBox/index.module.css
index 81be3797f71de..6b0c781557865 100644
--- a/packages/ui-components/src/Common/BaseCodeBox/index.module.css
+++ b/packages/ui-components/src/Common/BaseCodeBox/index.module.css
@@ -36,11 +36,11 @@
&:not(:empty:last-child)::after {
@apply font-ibm-plex-mono
- w-4.5
absolute
- left-0
top-0
+ left-0
mr-4
+ w-4.5
text-right
text-neutral-600
[content:counter(line)]
diff --git a/packages/ui-components/src/Common/BasePagination/PaginationListItem/index.module.css b/packages/ui-components/src/Common/BasePagination/PaginationListItem/index.module.css
index 0c6f09479add1..6304b2a03580f 100644
--- a/packages/ui-components/src/Common/BasePagination/PaginationListItem/index.module.css
+++ b/packages/ui-components/src/Common/BasePagination/PaginationListItem/index.module.css
@@ -3,10 +3,7 @@
.listItem,
.listItem:link,
.listItem:active {
- @apply aria-current:bg-green-600
- aria-current:text-white
- aria-current:cursor-default
- flex
+ @apply flex
size-10
cursor-pointer
items-center
@@ -15,6 +12,9 @@
px-3
py-2.5
text-neutral-800
+ aria-current:cursor-default
+ aria-current:bg-green-600
+ aria-current:text-white
motion-safe:transition-colors
dark:text-neutral-200;
diff --git a/packages/ui-components/src/Common/ChangeHistory/index.module.css b/packages/ui-components/src/Common/ChangeHistory/index.module.css
index c69d0e91896fa..3f6225b555c48 100644
--- a/packages/ui-components/src/Common/ChangeHistory/index.module.css
+++ b/packages/ui-components/src/Common/ChangeHistory/index.module.css
@@ -1,11 +1,9 @@
@reference "../../styles/index.css";
.summary {
- @apply outline-hidden
- flex
+ @apply flex
h-9
cursor-pointer
- select-none
items-center
gap-2
rounded-md
@@ -14,6 +12,8 @@
p-2
text-sm
text-neutral-700
+ outline-hidden
+ select-none
motion-safe:transition-colors
dark:border-neutral-900
dark:text-neutral-300;
@@ -27,8 +27,8 @@
.dropdownContentWrapper {
@apply absolute
- right-0
top-full
+ right-0
z-50
mt-1
max-h-80
@@ -50,14 +50,14 @@
}
.dropdownItem {
- @apply outline-hidden
- block
+ @apply block
px-2.5
py-1.5
text-sm
font-medium
text-neutral-800
no-underline
+ outline-hidden
motion-safe:transition-colors
dark:text-white;
@@ -71,8 +71,8 @@
.dropdownLabel {
@apply block
text-sm
- font-medium
- leading-tight;
+ leading-tight
+ font-medium;
}
.dropdownVersions {
diff --git a/packages/ui-components/src/Common/GlowingBackdrop/index.module.css b/packages/ui-components/src/Common/GlowingBackdrop/index.module.css
index af072146f6a9a..75f47615984c0 100644
--- a/packages/ui-components/src/Common/GlowingBackdrop/index.module.css
+++ b/packages/ui-components/src/Common/GlowingBackdrop/index.module.css
@@ -2,8 +2,8 @@
.glowingBackdrop {
@apply absolute
- left-0
top-0
+ left-0
-z-10
size-full
opacity-50
diff --git a/packages/ui-components/src/Common/LanguageDropDown/index.module.css b/packages/ui-components/src/Common/LanguageDropDown/index.module.css
index 1d96a9417b943..8cbcf1b574796 100644
--- a/packages/ui-components/src/Common/LanguageDropDown/index.module.css
+++ b/packages/ui-components/src/Common/LanguageDropDown/index.module.css
@@ -35,13 +35,13 @@
}
.dropDownItem {
- @apply outline-hidden
- cursor-pointer
+ @apply cursor-pointer
px-2.5
py-1.5
text-sm
font-medium
text-neutral-800
+ outline-hidden
data-[highlighted]:bg-green-600
data-[highlighted]:text-white
dark:text-white;
diff --git a/packages/ui-components/src/Common/Modal/index.module.css b/packages/ui-components/src/Common/Modal/index.module.css
index 0ab884d4f99f7..577ad45a1fe3c 100644
--- a/packages/ui-components/src/Common/Modal/index.module.css
+++ b/packages/ui-components/src/Common/Modal/index.module.css
@@ -35,17 +35,17 @@
.close {
@apply absolute
- right-3
top-3
+ right-3
block
size-7
cursor-pointer
rounded-sm
p-1
hover:bg-neutral-100
- focus:outline-none
focus:ring-2
focus:ring-neutral-200
+ focus:outline-none
dark:hover:bg-neutral-900
dark:focus:ring-neutral-900;
}
diff --git a/packages/ui-components/src/Common/Preview/index.module.css b/packages/ui-components/src/Common/Preview/index.module.css
index 9674a3c9580e0..e70cfb4ca3bb5 100644
--- a/packages/ui-components/src/Common/Preview/index.module.css
+++ b/packages/ui-components/src/Common/Preview/index.module.css
@@ -33,15 +33,7 @@
}
.container {
- @apply @sm/preview:text-base
- @md/preview:gap-6
- @md/preview:text-lg
- @lg/preview:gap-8
- @lg/preview:text-xl
- @xl/preview:gap-12
- @xl/preview:text-2xl
- @2xl/preview:text-3xl
- z-10
+ @apply z-10
mx-auto
flex
w-2/3
@@ -51,29 +43,37 @@
text-center
text-xs
font-semibold
- text-white;
+ text-white
+ @sm/preview:text-base
+ @md/preview:gap-6
+ @md/preview:text-lg
+ @lg/preview:gap-8
+ @lg/preview:text-xl
+ @xl/preview:gap-12
+ @xl/preview:text-2xl
+ @2xl/preview:text-3xl;
.hexagon {
- @apply @md/preview:h-3/5
+ @apply absolute
+ inset-0
+ m-auto
+ size-full
+ @md/preview:h-3/5
@md/preview:w-3/5
@lg/preview:h-2/3
@lg/preview:w-2/3
@xl/preview:h-3/5
@xl/preview:w-3/5
@2xl/preview:h-2/3
- @2xl/preview:w-2/3
- absolute
- inset-0
- m-auto
- size-full;
+ @2xl/preview:w-2/3;
}
.logo {
- @apply @md/preview:size-14
+ @apply mx-auto
+ size-6
+ @md/preview:size-14
@lg/preview:size-16
- @xl/preview:size-20
- mx-auto
- size-6;
+ @xl/preview:size-20;
}
}
}
diff --git a/packages/ui-components/src/Common/Skeleton/index.module.css b/packages/ui-components/src/Common/Skeleton/index.module.css
index 53ff68b53af9a..6eaac97a33d51 100644
--- a/packages/ui-components/src/Common/Skeleton/index.module.css
+++ b/packages/ui-components/src/Common/Skeleton/index.module.css
@@ -1,19 +1,19 @@
@reference "../../styles/index.css";
.skeleton {
- @apply outline-hidden
- dark:animate-pulse-dark
+ @apply dark:animate-pulse-dark
pointer-events-none
inline-flex
animate-pulse
cursor-default
- select-none
rounded-md
border-none
bg-clip-border
align-middle
text-transparent
- shadow-none;
+ shadow-none
+ outline-hidden
+ select-none;
}
.skeleton[data-inline-skeleton] {
diff --git a/packages/ui-components/src/Common/Tabs/index.module.css b/packages/ui-components/src/Common/Tabs/index.module.css
index 8ca9744bca766..f49c61cd7cc9f 100644
--- a/packages/ui-components/src/Common/Tabs/index.module.css
+++ b/packages/ui-components/src/Common/Tabs/index.module.css
@@ -12,13 +12,13 @@
overflow-x-auto;
.tabsTrigger {
- @apply whitespace-nowrap
- border-b-2
+ @apply border-b-2
border-b-transparent
px-1
pb-[11px]
text-sm
font-semibold
+ whitespace-nowrap
text-neutral-800
dark:text-neutral-200;
diff --git a/packages/ui-components/src/Containers/Article/index.module.css b/packages/ui-components/src/Containers/Article/index.module.css
index 3073bf8f91e7c..21c58515f0aa3 100644
--- a/packages/ui-components/src/Containers/Article/index.module.css
+++ b/packages/ui-components/src/Containers/Article/index.module.css
@@ -30,12 +30,12 @@
> *:first-child {
@apply sm:bg-gradient-subtle
sm:dark:bg-gradient-subtle-dark
- xl:px-18
p-4
[grid-area:main]
motion-safe:scroll-smooth
sm:bg-fixed
- sm:p-12;
+ sm:p-12
+ xl:px-18;
}
> *:last-child {
@@ -46,8 +46,8 @@
lg:sticky
lg:top-0
lg:max-w-xs
- lg:border-l
- lg:border-t-0;
+ lg:border-t-0
+ lg:border-l;
}
}
diff --git a/packages/ui-components/src/Containers/Sidebar/SidebarGroup/index.module.css b/packages/ui-components/src/Containers/Sidebar/SidebarGroup/index.module.css
index ef254be7796fb..30fb5aba48436 100644
--- a/packages/ui-components/src/Containers/Sidebar/SidebarGroup/index.module.css
+++ b/packages/ui-components/src/Containers/Sidebar/SidebarGroup/index.module.css
@@ -40,8 +40,8 @@
flex-col
gap-px
after:absolute
- after:left-[0.45rem]
after:top-0
+ after:left-[0.45rem]
after:z-10
after:h-full
after:w-px
@@ -58,8 +58,8 @@
first:before:bg-white
first:before:content-['']
last:after:absolute
- last:after:left-0
last:after:top-[calc(50%+0.25rem)]
+ last:after:left-0
last:after:h-20
last:after:w-4
last:after:bg-white
diff --git a/packages/ui-components/src/Providers/NotificationProvider/index.module.css b/packages/ui-components/src/Providers/NotificationProvider/index.module.css
index 9a3e6fa8c950c..d0f47443f906c 100644
--- a/packages/ui-components/src/Providers/NotificationProvider/index.module.css
+++ b/packages/ui-components/src/Providers/NotificationProvider/index.module.css
@@ -2,7 +2,7 @@
.viewport {
@apply fixed
- bottom-0
right-0
+ bottom-0
list-none;
}
diff --git a/packages/ui-components/src/styles/markdown.css b/packages/ui-components/src/styles/markdown.css
index 53176317a4007..3313facc29f1c 100644
--- a/packages/ui-components/src/styles/markdown.css
+++ b/packages/ui-components/src/styles/markdown.css
@@ -99,8 +99,8 @@ main {
ul {
@apply list-disc
- pl-9
pr-5
+ pl-9
leading-6
text-neutral-900
dark:text-white;
@@ -123,11 +123,11 @@ main {
}
table {
- @apply rounded-xs
- mb-1
+ @apply mb-1
w-full
border-separate
border-spacing-0
+ rounded-xs
border
border-neutral-200
text-left
@@ -137,13 +137,13 @@ main {
/* Common border and text styles */
th,
td {
- @apply break-words
- border
- border-r-0
+ @apply border
border-t-0
+ border-r-0
border-neutral-200
px-4
py-2
+ break-words
text-neutral-900
dark:border-neutral-800
dark:text-white;
@@ -187,8 +187,8 @@ main {
}
tr {
- @apply rounded-xs
- block
+ @apply block
+ rounded-xs
border
border-neutral-200
p-4
@@ -212,13 +212,13 @@ main {
text-right
text-neutral-600
before:absolute
- before:left-0
before:top-1/2
+ before:left-0
before:w-1/3
before:-translate-y-1/2
- before:break-words
before:text-left
before:font-medium
+ before:break-words
before:text-neutral-700
before:content-[attr(data-label)]
last:border-0