Skip to main content
Version: 2.0.0-beta.13

i18n - Introduction

It is easy to translate a Docusaurus website with its internationalization (i18n) support.

Goals​

It is important to understand the design decisions behind the Docusaurus i18n support.

For more context, you can read the initial RFC and PR.

i18n goals​

The goals of the Docusaurus i18n system are:

  • Simple: just put the translated files in the correct filesystem location
  • Flexible translation workflows: use Git (monorepo, forks, or submodules), SaaS software, FTP
  • Flexible deployment options: single, multiple domains, or hybrid
  • Modular: allow plugin authors to provide i18n support
  • Low-overhead runtime: documentation is mostly static and does not require a heavy JS library or polyfills
  • Scalable build-times: allow building and deploying localized sites independently
  • Localize assets: an image of your site might contain text that should be translated
  • No coupling: not forced to use any SaaS, yet integrations are possible
  • Easy to use with Crowdin: multiple Docusaurus v1 sites use Crowdin, and should be able to migrate to v2
  • Good SEO defaults: we set useful SEO headers like hreflang for you
  • RTL support: locales reading right-to-left (Arabic, Hebrew, etc.) are supported and easy to implement
  • Default translations: classic theme labels are translated for you in many languages

i18n non-goals​

We don't provide support for:

  • Automatic locale detection: opinionated, and best done on the server
  • Translation SaaS software: you are responsible to understand the external tools of your choice
  • Translation of slugs: technically complicated, little SEO value

Translation workflow​

Overview​

Overview of the workflow to create a translated Docusaurus website:

  1. Configure: declare the default locale and alternative locales in docusaurus.config.js
  2. Translate: put the translation files at the correct filesystem location
  3. Deploy: build and deploy your site using a single or multi-domain strategy

Translation files​

You will have to work with 2 kind of translation files.

Markdown files​

This is the main content of your Docusaurus website.

Markdown and MDX documents are translated as a whole, to fully preserve the translation context, instead of splitting each sentence as a separate string.

JSON files​

JSON is used to translate:

  • your React code: using the <Translate> component
  • your theme: the navbar, footer
  • your plugins: the docs sidebar category labels

The JSON format used is called Chrome i18n:

{
"myTranslationKey1": {
"message": "Translated message 1",
"description": "myTranslationKey1 is used on the homepage"
},
"myTranslationKey2": {
"message": "Translated message 2",
"description": "myTranslationKey2 is used on the FAQ page"
}
}

The choice was made for 2 reasons:

Translation files location​

The translation files should be created at the correct filesystem location.

Each locale and plugin has its own i18n subfolder:

website/i18n/<locale>/<pluginName>/...
note

For multi-instance plugins, the path is website/i18n/<locale>/<pluginName>-<pluginId>/....

Translating a very simple Docusaurus site in French would lead to the following tree:

website/i18n
└── fr
β”œβ”€β”€ code.json
β”‚
β”œβ”€β”€ docusaurus-plugin-content-blog
β”‚Β Β  └── 2020-01-01-hello.md
β”‚
β”œβ”€β”€ docusaurus-plugin-content-docs
β”‚Β Β  β”œβ”€β”€ current #
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ doc1.md
β”‚Β Β  β”‚Β Β  └── doc2.mdx
β”‚Β Β  └── current.json
β”‚
└── docusaurus-theme-classic
β”œβ”€β”€ footer.json
└── navbar.json

The JSON files are initialized with the docusaurus write-translations CLI command.

The code.json file is extracted from React components using the <Translate> API.

info

Notice that the docusaurus-plugin-content-docs plugin has a current subfolder and a current.json file, useful for the docs versioning feature.

Each content plugin or theme is different, and define its own translation files location: