Bloques
DashboardGitHub
DashboardGitHub

Get started

QuickstartIntroduction

Writing content

MDX basicsMarkdown reference

Configuration

docs.json overviewNavigationThemeNavbarInternationalizationSchema reference

API reference

API reference overviewSet up an API reference

Publishing

Connect GitHubDeploymentsCustom domainLLM endpointsMCP server

Team

OrganizationsMembers and roles

Internationalization

Publish your docs in English and Spanish, with a language switcher and automatic fallback.

Serve your documentation in more than one language from a single repo. You write each translation as a parallel set of files, add one field to docs.json, and Bloques handles routing, the language switcher, and a fallback for pages you haven't translated yet.

This page is for site owners adding a second language to a published site.

Prerequisites

  • A Bloques site that's already deployed. See the Quickstart.
  • Familiarity with docs.json. See the docs.json overview.

Supported languages

Two languages are available:

CodeLanguage
enEnglish
esEspañol

English (en) is the default language and can't be changed. Default-language pages keep their existing URLs, so adding a translation never breaks links you've already shared.

Enable a language

Add a languages array to docs.json, listing the codes your site serves:

docs.json
{
  "name": "Acme docs",
  "languages": ["en", "es"],
  "navigation": [{ "group": "Get started", "pages": ["introduction"] }]
}

A language switcher appears in the header as soon as languages holds more than one code. A site without a languages field is unaffected.

Add translated content

Default-language content stays at the root of your repo. Each additional language gets a top-level folder named after its code, mirroring the same file paths.

Keep default content at the root

Your English pages stay where they are:

introduction.mdx
guide/setup.mdx

Add a folder for the language

Create an es/ folder and recreate each page you want to translate, using the same relative path:

introduction.mdx
guide/setup.mdx
es/introduction.mdx
es/guide/setup.mdx

Translate the content

Write the Spanish version in each file under es/. Translate as few or as many pages as you want — untranslated pages fall back to English.

How language URLs work

The default language is hidden from the URL. Other languages are served under a prefix matching their code.

PageEnglish (default)Spanish
introduction.mdx/introduction/es/introduction
guide/setup.mdx/guide/setup/es/guide/setup

An English page requested under /en redirects to its canonical, unprefixed URL — /en/guide/setup becomes /guide/setup.

Fallback for untranslated pages

Translations can be partial. When a reader opens a page that isn't translated for the current language, Bloques renders the English content at the same URL instead of a 404.

An untranslated page doesn't appear in that language's sidebar, but it stays reachable by URL. Links never break while a translation is in progress.

Language switcher

Once languages is set, the header shows a language switcher. Selecting a language keeps the reader on the same page — it swaps the language prefix in the URL rather than returning to the home page.

Interface language

Built-in interface text translates with the selected language — the search box, the on-this-page table of contents, the previous and next page links, and the theme and language pickers. Translate your own content; Bloques handles the rest of the interface.

Per-language navigation

All languages share the navigation in docs.json by default. To give one language a different sidebar, group labels, or ordering, add a docs.<lang>.json file next to docs.json:

docs.es.json
{
  "name": "Documentación de Acme",
  "languages": ["en", "es"],
  "navigation": [{ "group": "Primeros pasos", "pages": ["introduction"] }]
}

Bloques uses docs.es.json when a reader views the site in Spanish and falls back to docs.json when it's absent. Page paths stay repo-relative — Bloques resolves them inside the language folder.

Search and metadata

  • The canonical URL reflects the active language: unprefixed for English, /es/... for Spanish on a custom domain.
  • Social preview images, the llms.txt endpoint, and search results are generated from your default-language content.

Troubleshooting

A translated page shows English content

The file is missing from the language folder, or its path doesn't match the English page. Confirm es/<path>.mdx exists at the same relative path as the English file.

The language switcher doesn't appear

languages is missing or holds a single code. Add at least two supported codes — for example, ["en", "es"].

A translated page is missing from the sidebar

Expected when the page isn't translated yet. Add the file under the language folder, then push.

Next steps

docs.json overview

See how the config file drives your site.

Go to content

Schema reference

Every docs.json field, including languages.

Go to content

On this page

Prerequisites
Supported languages
Enable a language
Add translated content
How language URLs work
Fallback for untranslated pages
Language switcher
Interface language
Per-language navigation
Search and metadata
Troubleshooting
A translated page shows English content
The language switcher doesn't appear
A translated page is missing from the sidebar
Next steps