Skip to main content
Adding a new language to the Node.js website requires coordination with the Crowdin project manager and a configuration change in the repository.
Do not add a new language to the repository without first going through the Crowdin process. The Crowdin project manager must set up the language on the Crowdin side before it can be enabled in the codebase.

Process Overview

1

Open a discussion on Crowdin

Go to the Node.js Web Crowdin project and open a new discussion requesting the addition of your language. Choose New Topic and select the target language from the dropdown.
2

Wait for the Crowdin manager

A Crowdin project manager will review the request and add the language to the Crowdin project. This step must happen first — translation infrastructure needs to exist before the language is enabled in the codebase.
3

Add the language to i18n/config.json

Once the language is available in Crowdin, a Node.js Website team member adds it to packages/i18n/src/config.json.

Configuring the Language

Open packages/i18n/src/config.json and append a new object to the array:
{
  "code": "fr",
  "localName": "Français",
  "name": "French",
  "langDir": "ltr",
  "dateFormat": "DD.MM.YYYY",
  "hrefLang": "fr",
  "enabled": true,
  "default": false
}

Field Reference

FieldDescriptionExample
codeLanguage code. Must match the folder name in apps/site/pages/fr
localNameLanguage name in its own language. Used in the language selector UIFrançais
nameLanguage name in EnglishFrench
langDirText direction: ltr (left-to-right) or rtl (right-to-left)ltr
dateFormatDate format string (moment.js format)DD.MM.YYYY
hrefLangISO 639-1 language code used in <link hreflang> tagsfr
enabledWhether this locale is active. Set to false to disable without removingtrue
defaultWhether this is the default locale. Only en should be truefalse

Real Examples from config.json

{
  "code": "en",
  "localName": "English",
  "name": "English",
  "langDir": "ltr",
  "dateFormat": "MM.DD.YYYY",
  "hrefLang": "en-GB",
  "enabled": true,
  "default": true
}

After Adding the Language

Once the configuration is merged:
  1. The language will appear in the site’s language selector UI
  2. The build system will look for translated content in apps/site/pages/{code}/
  3. Pages without translations will automatically fall back to English content with the new locale’s UI strings
  4. The Crowdin sync GitHub Actions workflow will start uploading source strings for the new locale
Setting enabled: false disables a language without removing its configuration. This is useful for languages that are in progress or temporarily unavailable.

Build docs developers (and LLMs) love